@anmol-srv/sigil 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,17 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __sigilCreateRequire } from 'node:module'; const require = __sigilCreateRequire(import.meta.url);
3
- var ux=Object.create;var Ks=Object.defineProperty;var dx=Object.getOwnPropertyDescriptor;var px=Object.getOwnPropertyNames;var fx=Object.getPrototypeOf,mx=Object.prototype.hasOwnProperty;var hx=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var f=(e,t)=>()=>(e&&(t=e(e=0)),t);var he=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),T=(e,t)=>{for(var r in t)Ks(e,r,{get:t[r],enumerable:!0})},gx=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of px(t))!mx.call(e,i)&&i!==r&&Ks(e,i,{get:()=>t[i],enumerable:!(n=dx(t,i))||n.enumerable});return e};var Ys=(e,t,r)=>(r=e!=null?ux(fx(e)):{},gx(t||!e||!e.__esModule?Ks(r,"default",{value:e,enumerable:!0}):r,e));var Qs={};T(Qs,{CLAUDE_HOME:()=>Zs,CLAUDE_MD_PATH:()=>Ix,CLAUDE_SETTINGS_PATH:()=>vx,GUI_WEB_DIR:()=>Sx,GUI_WEB_DIR_BUILT:()=>Wn,GUI_WEB_DIR_DEV:()=>Ui,MIGRATIONS_DIR:()=>ir,PKG_ROOT:()=>ge,PROMPTS_DIR:()=>Ie,SIGIL_ACTIVE_SESSION_CURSOR:()=>Xs,SIGIL_DAEMON_LOG:()=>pe,SIGIL_DAEMON_PID:()=>It,SIGIL_DAEMON_SOCK:()=>we,SIGIL_DB_PATH:()=>Ex,SIGIL_ENV_PATH:()=>ye,SIGIL_GUI_TOKEN:()=>Mr,SIGIL_HOME:()=>ee,SIGIL_HOOK_DEDUP:()=>xx,SIGIL_HOOK_ERRORS_LOG:()=>Js,SIGIL_IDENTITY_KEY:()=>At,SIGIL_IROH_DIR:()=>Gi,SIGIL_LAST_CLEAN_DOCTOR:()=>zs,SIGIL_MD_PATH:()=>Bi,SIGIL_SCHEMAS_DIR:()=>qs,SIGIL_STOP_CURSOR:()=>bx});import{fileURLToPath as yx}from"node:url";import{dirname as Ru,join as K}from"node:path";import{existsSync as Nu}from"node:fs";import{homedir as wx}from"node:os";function _x(){let e=Ru(yx(import.meta.url));for(let t=0;t<10;t++){if(Nu(K(e,"package.json"))&&Nu(K(e,"prompts")))return e;let r=Ru(e);if(r===e)break;e=r}return process.cwd()}var ge,Ie,ir,Du,ee,ye,Ex,Bi,qs,Js,zs,Xs,bx,xx,we,It,pe,Mr,Wn,Ui,Sx,Gi,At,Zs,vx,Ix,B=f(()=>{ge=_x(),Ie=K(ge,"prompts"),ir=K(ge,"src","db","migrations"),Du=wx(),ee=K(Du,".sigil"),ye=K(ee,".env"),Ex=K(ee,"db"),Bi=K(ee,"CLAUDE.md"),qs=K(ee,"schemas"),Js=K(ee,".hook-errors.log"),zs=K(ee,".last-clean-doctor"),Xs=K(ee,".active-session.json"),bx=K(ee,".stop-cursor.json"),xx=K(ee,".hook-dedup.json"),we=K(ee,"sock"),It=K(ee,"sigild.pid"),pe=K(ee,"sigild.log"),Mr=K(ee,"gui.token"),Wn=K(ge,"dist","gui"),Ui=K(ge,"src","gui","web"),Sx=Wn,Gi=K(ee,"iroh"),At=K(ee,"identity.key"),Zs=K(Du,".claude"),vx=K(Zs,"settings.json"),Ix=K(Zs,"CLAUDE.md")});import{readFile as Ax,writeFile as Tx,unlink as Lu,mkdir as ku}from"node:fs/promises";import{existsSync as Pu}from"node:fs";function Fr(e){if(!e||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function ji(){if(!Pu(It))return null;try{let e=(await Ax(It,"utf8")).trim(),t=Number(e);return Number.isFinite(t)?t:null}catch{return null}}async function Mu(){await ku(ee,{recursive:!0}),await Tx(It,String(process.pid),"utf8")}async function ea(){try{await Lu(It)}catch{}}async function ta(){try{await Lu(we)}catch{}}async function Hr(){let e=await ji();return e&&Fr(e)?e:(e&&await ea(),Pu(we)&&await ta(),null)}function Fu(e){let t=!1,r=async n=>{if(!t){t=!0;try{await e(n)}catch(i){process.stderr.write(`[sigild] shutdown error: ${i.message}
4
- `)}finally{process.exit(0)}}};process.on("SIGTERM",()=>r("SIGTERM")),process.on("SIGINT",()=>r("SIGINT")),process.on("SIGHUP",()=>r("SIGHUP"))}async function Hu(){await ku(ee,{recursive:!0})}var Vn=f(()=>{B()});import{connect as Cx}from"node:net";import{randomUUID as $x}from"node:crypto";function Br({path:e=we,timeoutMs:t=3e4}={}){return new Promise((r,n)=>{let i=Cx(e),o=new Map,s="",a=!1;i.setEncoding("utf8"),i.once("connect",()=>{i.off("error",c),r(l())});function c(d){n(d)}i.once("error",c),i.on("data",d=>{s+=d;let p;for(;(p=s.indexOf(`
5
- `))!==-1;){let u=s.slice(0,p);if(s=s.slice(p+1),!u.trim())continue;let m;try{m=JSON.parse(u)}catch{continue}let g=o.get(m.id);g&&(o.delete(m.id),clearTimeout(g.timer),m.ok?g.resolve(m):g.reject(new ra(m.error||{})))}}),i.on("close",()=>{a=!0;for(let[,d]of o)clearTimeout(d.timer),d.reject(new Error("daemon connection closed"));o.clear()}),i.on("error",()=>{});function l(){return{call(d,p){if(a)return Promise.reject(new Error("client is closed"));let u=$x(),m=process.env.SIGIL_AGENT||null,g=JSON.stringify({id:u,method:d,params:p,agent:m})+`
6
- `;return new Promise((y,w)=>{let x=setTimeout(()=>{o.delete(u)&&w(new Error(`rpc timeout after ${t}ms: ${d}`))},t);o.set(u,{resolve:y,reject:w,timer:x}),i.write(g)})},close(){return new Promise(d=>{if(a)return d();i.end(()=>d())})}}}})}var ra,na=f(()=>{B();ra=class extends Error{constructor({code:t,message:r,stack:n}){super(r||t||"rpc error"),this.name="SigilRpcError",this.code=t||"handler_error",n&&(this.remoteStack=n)}}});var nt={};T(nt,{connectOrStartDaemon:()=>Tt});import{spawn as Ox}from"node:child_process";import{existsSync as ju,openSync as Bu,closeSync as Uu,mkdirSync as Rx}from"node:fs";import{setTimeout as Nx}from"node:timers/promises";import{dirname as Dx}from"node:path";import{fileURLToPath as Lx}from"node:url";import{join as ia}from"node:path";async function Tt({quiet:e=!1}={}){return await Wu()?Br():(e||process.stderr.write(`[sigil] daemon not running, starting it...
7
- `),await Mx(),await Hx(),Br())}async function Wu(){if(!ju(we))return!1;try{let e=await Br({timeoutMs:1e3});return await e.call("ping",{}),await e.close(),!0}catch{return!1}}async function Mx(){Rx(ee,{recursive:!0}),await Hr();let e=Fx(),t=Bu(pe,"a"),r=Bu(pe,"a");Ox(process.execPath,[e],{detached:!0,stdio:["ignore",t,r],env:{...process.env,SIGIL_DAEMON_AUTOSPAWN:"1"}}).unref();try{Uu(t)}catch{}try{Uu(r)}catch{}}function Fx(){let e=[ia(ge,"dist","daemon.js"),ia(ge,"src","daemon","index.js"),ia(Dx(Lx(import.meta.url)),"..","daemon","index.js")];for(let t of e)if(ju(t))return t;throw new Error("cannot locate daemon entry point (looked in dist/ and src/daemon/)")}async function Hx(){let e=Date.now()+Gu,t=kx;for(;Date.now()<e;){if(await Wu())return;await Nx(t),t=Math.min(t*2,Px)}throw new Error(`daemon did not become ready within ${Gu}ms \u2014 check ${pe}`)}var Gu,kx,Px,Ne=f(()=>{B();Vn();na();Gu=5e3,kx=25,Px=400});var oa={};T(oa,{getGuiToken:()=>Vi,isValidToken:()=>Ur});import{readFile as Bx,writeFile as Ux,chmod as Gx,mkdir as jx}from"node:fs/promises";import{randomBytes as Wx,timingSafeEqual as Vu}from"node:crypto";import{dirname as Vx}from"node:path";async function Vi(){if(Wi)return Wi;try{let t=(await Bx(Mr,"utf8")).trim();if(/^[0-9a-f]{64}$/.test(t))return Wi=t}catch{}await jx(Vx(Mr),{recursive:!0});let e=Wx(32).toString("hex");await Ux(Mr,e,"utf8");try{await Gx(Mr,384)}catch{}return Wi=e}async function Ur(e){if(!e||typeof e!="string")return!1;let t=await Vi();if(e.length!==t.length)return Vu(Buffer.from(t),Buffer.from(t)),!1;try{return Vu(Buffer.from(e),Buffer.from(t))}catch{return!1}}var Wi,Ki=f(()=>{B();Wi=null});var X={};T(X,{default:()=>E});var j,Ku,Kx,E,R=f(()=>{j=(e,t)=>process.env[e]??t,Ku=j("SIGIL_DB_TYPE","postgres");if(Ku!=="postgres")throw new Error(`SIGIL_DB_TYPE=${Ku} is no longer supported. Sigil 0.10.0+ is Postgres-only.
3
+ var eI=Object.create;var ja=Object.defineProperty;var tI=Object.getOwnPropertyDescriptor;var rI=Object.getOwnPropertyNames;var nI=Object.getPrototypeOf,iI=Object.prototype.hasOwnProperty;var oI=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var f=(e,t)=>()=>(e&&(t=e(e=0)),t);var we=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),v=(e,t)=>{for(var r in t)ja(e,r,{get:t[r],enumerable:!0})},sI=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of rI(t))!iI.call(e,i)&&i!==r&&ja(e,i,{get:()=>t[i],enumerable:!(n=tI(t,i))||n.enumerable});return e};var Wa=(e,t,r)=>(r=e!=null?eI(nI(e)):{},sI(t||!e||!e.__esModule?ja(r,"default",{value:e,enumerable:!0}):r,e));var Oo={};v(Oo,{CLAUDE_HOME:()=>Ja,CLAUDE_MD_PATH:()=>hI,CLAUDE_SETTINGS_PATH:()=>mI,GUI_WEB_DIR:()=>fI,GUI_WEB_DIR_BUILT:()=>yi,GUI_WEB_DIR_DEV:()=>To,MIGRATIONS_DIR:()=>St,PKG_ROOT:()=>Ee,PROMPTS_DIR:()=>Ce,SIGIL_ACTIVE_SESSION_CURSOR:()=>qa,SIGIL_DAEMON_LOG:()=>te,SIGIL_DAEMON_PID:()=>Pt,SIGIL_DAEMON_SOCK:()=>Se,SIGIL_DB_PATH:()=>uI,SIGIL_ENV_PATH:()=>_e,SIGIL_GUI_TOKEN:()=>sn,SIGIL_HEARTBEAT:()=>on,SIGIL_HOME:()=>Z,SIGIL_HOOK_DEDUP:()=>pI,SIGIL_HOOK_ERRORS_LOG:()=>Ka,SIGIL_IDENTITY_KEY:()=>Mt,SIGIL_IROH_DIR:()=>Co,SIGIL_LAST_CLEAN_DOCTOR:()=>Ya,SIGIL_MD_PATH:()=>vo,SIGIL_ONBOARDING_STATE:()=>Ao,SIGIL_SCHEMAS_DIR:()=>Va,SIGIL_STOP_CURSOR:()=>dI});import{fileURLToPath as aI}from"node:url";import{dirname as qd,join as W}from"node:path";import{existsSync as Jd}from"node:fs";import{homedir as cI}from"node:os";function lI(){let e=qd(aI(import.meta.url));for(let t=0;t<10;t++){if(Jd(W(e,"package.json"))&&Jd(W(e,"prompts")))return e;let r=qd(e);if(r===e)break;e=r}return process.cwd()}var Ee,Ce,St,zd,Z,_e,uI,vo,Va,Ka,Ya,qa,dI,pI,Se,Pt,te,on,Ao,sn,yi,To,fI,Co,Mt,Ja,mI,hI,M=f(()=>{Ee=lI(),Ce=W(Ee,"prompts"),St=W(Ee,"src","db","migrations"),zd=cI(),Z=W(zd,".sigil"),_e=W(Z,".env"),uI=W(Z,"db"),vo=W(Z,"CLAUDE.md"),Va=W(Z,"schemas"),Ka=W(Z,".hook-errors.log"),Ya=W(Z,".last-clean-doctor"),qa=W(Z,".active-session.json"),dI=W(Z,".stop-cursor.json"),pI=W(Z,".hook-dedup.json"),Se=W(Z,"sock"),Pt=W(Z,"sigild.pid"),te=W(Z,"sigild.log"),on=W(Z,"heartbeat.json"),Ao=W(Z,"onboarding-state.json"),sn=W(Z,"gui.token"),yi=W(Ee,"dist","gui"),To=W(Ee,"src","gui","web"),fI=yi,Co=W(Z,"iroh"),Mt=W(Z,"identity.key"),Ja=W(zd,".claude"),mI=W(Ja,"settings.json"),hI=W(Ja,"CLAUDE.md")});var ep={};v(ep,{detectRunningDaemon:()=>Er,dirname:()=>wI,ensureSigilHome:()=>Za,installShutdownHooks:()=>Xa,isPidAlive:()=>wr,readPidFile:()=>wi,removePidFile:()=>Ro,removeSocketFile:()=>$o,writePidFile:()=>za});import{readFile as gI,writeFile as yI,unlink as Xd,mkdir as Zd}from"node:fs/promises";import{existsSync as Qd}from"node:fs";import{dirname as wI}from"node:path";function wr(e){if(!e||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function wi(){if(!Qd(Pt))return null;try{let e=(await gI(Pt,"utf8")).trim(),t=Number(e);return Number.isFinite(t)?t:null}catch{return null}}async function za(){await Zd(Z,{recursive:!0}),await yI(Pt,String(process.pid),"utf8")}async function Ro(){try{await Xd(Pt)}catch{}}async function $o(){try{await Xd(Se)}catch{}}async function Er(){let e=await wi();return e&&wr(e)?e:(e&&await Ro(),Qd(Se)&&await $o(),null)}function Xa(e){let t=!1,r=async n=>{if(!t){t=!0;try{await e(n)}catch(i){process.stderr.write(`[sigild] shutdown error: ${i.message}
4
+ `)}finally{process.exit(0)}}};process.on("SIGTERM",()=>r("SIGTERM")),process.on("SIGINT",()=>r("SIGINT")),process.on("SIGHUP",()=>r("SIGHUP"))}async function Za(){await Zd(Z,{recursive:!0})}var an=f(()=>{M()});import{existsSync as EI}from"node:fs";import{dirname as _I,join as Qa}from"node:path";import{fileURLToPath as SI}from"node:url";function Ft(){let e=[Qa(Ee,"dist","daemon.js"),Qa(Ee,"src","daemon","index.js"),Qa(_I(SI(import.meta.url)),"..","daemon","index.js")];for(let t of e)if(EI(t))return t;throw new Error("cannot locate daemon entry point (looked in dist/ and src/daemon/)")}function cn(){return process.execPath}var Ei=f(()=>{M()});import{connect as bI}from"node:net";import{randomUUID as xI}from"node:crypto";function ln({path:e=Se,timeoutMs:t=3e4}={}){return new Promise((r,n)=>{let i=bI(e),o=new Map,s="",a=!1;i.setEncoding("utf8"),i.once("connect",()=>{i.off("error",c),r(l())});function c(d){n(d)}i.once("error",c),i.on("data",d=>{s+=d;let p;for(;(p=s.indexOf(`
5
+ `))!==-1;){let u=s.slice(0,p);if(s=s.slice(p+1),!u.trim())continue;let m;try{m=JSON.parse(u)}catch{continue}let h=o.get(m.id);h&&(o.delete(m.id),clearTimeout(h.timer),m.ok?h.resolve(m):h.reject(new ec(m.error||{})))}}),i.on("close",()=>{a=!0;for(let[,d]of o)clearTimeout(d.timer),d.reject(new Error("daemon connection closed"));o.clear()}),i.on("error",()=>{});function l(){return{call(d,p){if(a)return Promise.reject(new Error("client is closed"));let u=xI(),m=process.env.SIGIL_AGENT||null,h=JSON.stringify({id:u,method:d,params:p,agent:m})+`
6
+ `;return new Promise((y,w)=>{let b=setTimeout(()=>{o.delete(u)&&w(new Error(`rpc timeout after ${t}ms: ${d}`))},t);o.set(u,{resolve:y,reject:w,timer:b}),i.write(h)})},close(){return new Promise(d=>{if(a)return d();i.end(()=>d())})}}}})}var ec,tc=f(()=>{M();ec=class extends Error{constructor({code:t,message:r,stack:n}){super(r||t||"rpc error"),this.name="SigilRpcError",this.code=t||"handler_error",n&&(this.remoteStack=n)}}});var lt={};v(lt,{connectOrStartDaemon:()=>Bt});import{spawn as II}from"node:child_process";import{existsSync as vI,openSync as tp,closeSync as rp,mkdirSync as AI}from"node:fs";import{setTimeout as TI}from"node:timers/promises";async function Bt({quiet:e=!1}={}){return await ip()?ln():(e||process.stderr.write(`[sigil] daemon not running, starting it...
7
+ `),await RI(),await $I(),ln())}async function ip(){if(!vI(Se))return!1;try{let e=await ln({timeoutMs:1e3});return await e.call("ping",{}),await e.close(),!0}catch{return!1}}async function RI(){AI(Z,{recursive:!0}),await Er();let e=Ft(),t=tp(te,"a"),r=tp(te,"a");II(process.execPath,[e],{detached:!0,stdio:["ignore",t,r],env:{...process.env,SIGIL_DAEMON_AUTOSPAWN:"1"}}).unref();try{rp(t)}catch{}try{rp(r)}catch{}}async function $I(){let e=Date.now()+np,t=CI;for(;Date.now()<e;){if(await ip())return;await TI(t),t=Math.min(t*2,OI)}throw new Error(`daemon did not become ready within ${np}ms \u2014 check ${te}`)}var np,CI,OI,Pe=f(()=>{M();an();Ei();tc();np=5e3,CI=25,OI=400});var rc={};v(rc,{getGuiToken:()=>Do,isValidToken:()=>un});import{readFile as NI,writeFile as DI,chmod as LI,mkdir as kI}from"node:fs/promises";import{randomBytes as PI,timingSafeEqual as op}from"node:crypto";import{dirname as MI}from"node:path";async function Do(){if(No)return No;try{let t=(await NI(sn,"utf8")).trim();if(/^[0-9a-f]{64}$/.test(t))return No=t}catch{}await kI(MI(sn),{recursive:!0});let e=PI(32).toString("hex");await DI(sn,e,"utf8");try{await LI(sn,384)}catch{}return No=e}async function un(e){if(!e||typeof e!="string")return!1;let t=await Do();if(e.length!==t.length)return op(Buffer.from(t),Buffer.from(t)),!1;try{return op(Buffer.from(e),Buffer.from(t))}catch{return!1}}var No,Lo=f(()=>{M();No=null});var sp={};v(sp,{canOpenBrowser:()=>BI,openBrowser:()=>HI});import{spawn as FI}from"node:child_process";function BI(){return!(process.env.SIGIL_HEADLESS||process.platform==="linux"&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY)}function HI(e){let t=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";try{return FI(t,[e],{detached:!0,stdio:"ignore"}).unref(),!0}catch{return!1}}var ap=f(()=>{});var re={};v(re,{default:()=>_});var V,cp,UI,_,$=f(()=>{V=(e,t)=>process.env[e]??t,cp=V("SIGIL_DB_TYPE","postgres");if(cp!=="postgres")throw new Error(`SIGIL_DB_TYPE=${cp} is no longer supported. Sigil 0.10.0+ is Postgres-only.
8
8
  PGlite was deprecated; existing PGlite data at ~/.sigil/db is preserved but unreachable from this version.
9
9
  Set SIGIL_DB_TYPE=postgres in ~/.sigil/.env and configure SIGIL_DB_HOST / PORT / NAME / USER / PASSWORD.
10
- Run \`sigil init\` for an interactive setup.`);Kx={db:{type:"postgres",get url(){return j("SIGIL_DATABASE_URL",j("DATABASE_URL",""))||null},get host(){return j("SIGIL_DB_HOST","localhost")},get port(){return Number(j("SIGIL_DB_PORT",5432))},get database(){return j("SIGIL_DB_NAME","sigil")},get user(){return j("SIGIL_DB_USER","sigil_app")},get password(){return j("SIGIL_DB_PASSWORD","")}},embedding:{get provider(){return process.env.EMBEDDING_PROVIDER||""},get model(){return process.env.EMBEDDING_MODEL||"nomic-embed-text"},get dimensions(){return Number(process.env.EMBEDDING_DIMENSIONS)||768},get ollamaHost(){return process.env.OLLAMA_HOST||"http://localhost:11434"},get openaiApiKey(){return process.env.OPENAI_API_KEY||""},get voyageApiKey(){return process.env.VOYAGE_API_KEY||""},openrouterApiKey:process.env.OPENROUTER_API_KEY||"",openrouterBaseUrl:process.env.EMBEDDING_OPENROUTER_BASE_URL||process.env.LLM_OPENROUTER_BASE_URL||"",openrouterReferer:process.env.EMBEDDING_OPENROUTER_REFERER||process.env.LLM_OPENROUTER_REFERER||"https://github.com/Anmol-Srv/sigil",openrouterTitle:process.env.EMBEDDING_OPENROUTER_TITLE||process.env.LLM_OPENROUTER_TITLE||"Sigil"},llm:{provider:process.env.LLM_PROVIDER||"",openaiApiKey:process.env.OPENAI_API_KEY||"",openaiModel:process.env.LLM_OPENAI_MODEL||"gpt-4o-mini",ollamaHost:process.env.LLM_OLLAMA_HOST||process.env.OLLAMA_HOST||"http://localhost:11434",ollamaModel:process.env.LLM_OLLAMA_MODEL||"qwen2.5:7b",cliModel:process.env.LLM_CLI_MODEL||"haiku",apiKey:process.env.ANTHROPIC_API_KEY||"",openrouterApiKey:process.env.OPENROUTER_API_KEY||"",openrouterModel:process.env.LLM_OPENROUTER_MODEL||"google/gemini-flash-latest",openrouterBaseUrl:process.env.LLM_OPENROUTER_BASE_URL||"",openrouterReferer:process.env.LLM_OPENROUTER_REFERER||"https://github.com/Anmol-Srv/sigil",openrouterTitle:process.env.LLM_OPENROUTER_TITLE||"Sigil",extractionModel:process.env.LLM_EXTRACTION_MODEL||"",decisionModel:process.env.LLM_DECISION_MODEL||"",entityModel:process.env.LLM_ENTITY_MODEL||"",maxRetries:Number(process.env.LLM_MAX_RETRIES)||3,cliTimeout:Number(process.env.LLM_CLI_TIMEOUT)||12e4},output:{storage:process.env.OUTPUT_STORAGE||"local",dir:process.env.OUTPUT_DIR||"./output",s3:{endpoint:process.env.S3_ENDPOINT||"",bucket:process.env.S3_BUCKET||"",region:process.env.S3_REGION||"us-east-1",accessKey:process.env.S3_ACCESS_KEY||"",secretKey:process.env.S3_SECRET_KEY||"",publicUrl:process.env.S3_PUBLIC_URL||""}},server:{port:Number(process.env.PORT)||4e3,host:process.env.HOST||"0.0.0.0",logLevel:process.env.LOG_LEVEL||"info"},http:{enabled:j("SIGIL_HTTP_ENABLED","true")!=="false",host:j("SIGIL_HTTP_HOST","127.0.0.1"),port:Number(j("SIGIL_HTTP_PORT",7777))},network:{mode:j("SIGIL_MODE","solo"),enabled:j("SIGIL_NETWORK_ENABLED",null)===null?j("SIGIL_MODE","solo")!=="solo":j("SIGIL_NETWORK_ENABLED","false")!=="false",masterNodeId:j("SIGIL_MASTER_NODE_ID","")||null},defaults:{namespace:process.env.DEFAULT_NAMESPACE||"default"},memory:{skipThreshold:Number(process.env.MEMORY_SKIP_THRESHOLD)||.88,ambiguousThreshold:Number(process.env.MEMORY_AMBIGUOUS_THRESHOLD)||.78,minFactSimilarity:Number(process.env.MEMORY_MIN_FACT_SIMILARITY)||.45,injectionFloor:Number(process.env.MEMORY_INJECTION_FLOOR)||.6},search:{synthesize:j("SIGIL_SYNTHESIZE","true")!=="false",synthesizeModel:j("SIGIL_SYNTH_MODEL","")},ingest:{eagerExtract:j("SIGIL_EAGER_EXTRACT","true")!=="false"},hebbian:{entity:{enabled:j("SIGIL_HEBBIAN_ENTITY_ENABLED",null,"true")!=="false",eta:Number(j("SIGIL_HEBBIAN_ENTITY_ETA",null,1)),cap:Number(j("SIGIL_HEBBIAN_ENTITY_CAP",null,50)),halfLifeDays:Number(j("SIGIL_HEBBIAN_ENTITY_HALF_LIFE_DAYS",null,30)),minEffective:Number(j("SIGIL_HEBBIAN_ENTITY_MIN_EFFECTIVE",null,.5)),rrfWeight:Number(j("SIGIL_HEBBIAN_ENTITY_RRF_WEIGHT",null,.3)),maxWriteEntities:Number(j("SIGIL_HEBBIAN_ENTITY_MAX_WRITE",null,12)),expandPerSeed:Number(j("SIGIL_HEBBIAN_ENTITY_EXPAND_PER_SEED",null,3))}}},E=Kx});function Yu(e){let t=Math.floor(e/1e3),r=Math.floor(t/3600),n=Math.floor(t%3600/60),i=t%60;return r?`${r}h ${n}m ${i}s`:n?`${n}m ${i}s`:`${i}s`}var qu=f(()=>{});function Ju(e){let t=e.code||Yx,r=e.message||String(e);if(e instanceof AggregateError&&Array.isArray(e.errors)&&e.errors.length){let n=e.errors[0];t=n.code||t,r=n.message||r;let i=[...new Set(e.errors.map(o=>o.code).filter(Boolean))];i.length>1&&(r+=` (and ${e.errors.length-1} more: ${i.slice(1).join(", ")})`)}else e.cause&&(!r||r==="AggregateError")&&(t=e.cause.code||t,r=e.cause.message||r);return{code:t,message:r,stack:process.env.SIGIL_DEBUG?e.stack:void 0}}var Yx,zu=f(()=>{Yx="handler_error"});var aa={};T(aa,{currentAgent:()=>Xx,currentDeviceId:()=>zx,currentRequestContext:()=>sa,runWithRequestContext:()=>Jx});import{AsyncLocalStorage as qx}from"node:async_hooks";function Jx(e,t){return Yi.run(e,t)}function sa(){return Yi.getStore()||null}function zx(){return Yi.getStore()?.device?.id??null}function Xx(){return Yi.getStore()?.agent??process.env.SIGIL_AGENT??null}var Yi,qi=f(()=>{Yi=new qx});function Xu(){let e=new Map;function t(o,s){if(e.has(o))throw new Error(`rpc: duplicate handler for "${o}"`);e.set(o,s)}async function r(o,s,a={}){let c=e.get(o);if(!c)return{ok:!1,error:{code:Zx.UNKNOWN_METHOD,message:`unknown method: ${o}`}};let{runWithRequestContext:l}=await Promise.resolve().then(()=>(qi(),aa));try{return{ok:!0,data:await l({device:a.device||null,transport:a.transport||null,agent:a.agent||null},()=>c(s??{},a))}}catch(d){return{ok:!1,error:Ju(d)}}}function n(){return[...e.keys()].sort()}function i(o,s){return e.has(o)?(e.set(o,s),!0):!1}return{register:t,replace:i,dispatch:r,list:n}}var Zx,Zu=f(()=>{zu();Zx={UNKNOWN_METHOD:"unknown_method",INVALID_PARAMS:"invalid_params",HANDLER_ERROR:"handler_error"}});var da={};T(da,{clearRegistry:()=>ua,getDbHealth:()=>eS,getRegistry:()=>la,setDbHealth:()=>Qx,setRegistry:()=>ca});function ca(e){Ji=e}function la(){if(!Ji)throw new Error("rpc registry not initialised \u2014 is the daemon running?");return Ji}function ua(){Ji=null}function Qx(e){Qu={healthy:null,error:null,checkedAt:null,...e}}function eS(){return Qu}var Ji,Qu,Kn=f(()=>{Ji=null;Qu={healthy:null,error:null,checkedAt:null}});import{createServer as tS}from"node:net";import{chmod as rS}from"node:fs/promises";async function ed({registry:e,log:t}){await ta();let r=tS(n=>{let i="",o=!1,s=Promise.resolve();n.setEncoding("utf8"),n.on("data",a=>{if(o)return;i+=a;let c;for(;(c=i.indexOf(`
11
- `))!==-1;){let l=i.slice(0,c);i=i.slice(c+1),l.trim()&&(s=s.then(()=>{if(!o)return nS(l,n,e,t)}))}}),n.on("close",()=>{o=!0}),n.on("error",a=>{a.code!=="EPIPE"&&a.code!=="ECONNRESET"&&t(`socket error: ${a.message}`)})});await new Promise((n,i)=>{r.once("error",i),r.listen(we,()=>{r.off("error",i),n()})});try{await rS(we,384)}catch{}return t(`socket listening at ${we}`),{close:()=>new Promise(n=>r.close(()=>n()))}}async function nS(e,t,r,n){let i;try{i=JSON.parse(e)}catch(d){pa(t,{id:null,ok:!1,error:{code:"invalid_json",message:d.message}});return}let{id:o=null,method:s,params:a,agent:c=null}=i||{};if(typeof s!="string"){pa(t,{id:o,ok:!1,error:{code:"invalid_params",message:'request must include a string "method"'}});return}let l=await r.dispatch(s,a,{transport:"socket",agent:c});pa(t,{id:o,...l}),!l.ok&&process.env.SIGIL_DEBUG&&n(`dispatch ${s} -> ${l.error.code}: ${l.error.message}`)}function pa(e,t){try{e.write(JSON.stringify(t)+`
12
- `)}catch{}}var td=f(()=>{B();Vn()});var rd={};T(rd,{EventBus:()=>zi,default:()=>_e});var zi,iS,_e,Gr=f(()=>{zi=class{constructor(){this.buffer=[],this.subs=new Set}emit(t,r={}){let n={type:t,ts:new Date().toISOString(),...r};this.buffer.push(n),this.buffer.length>200&&this.buffer.shift();for(let i of this.subs)try{i(n)}catch{}return n}subscribe(t){return this.subs.add(t),()=>this.subs.delete(t)}recent(t=50){return t>=this.buffer.length?[...this.buffer]:this.buffer.slice(-t)}subscriberCount(){return this.subs.size}},iS=new zi,_e=iS});import{createServer as oS}from"node:http";import{existsSync as Xi,createReadStream as sS}from"node:fs";import{stat as aS}from"node:fs/promises";import{join as od,extname as cS,normalize as nd,sep as lS}from"node:path";import{WebSocketServer as uS}from"ws";function pS(){return Xi(Wn)?Wn:Xi(Ui)?Ui:null}async function sd({registry:e,log:t,config:r}){let n=pS(),i=await Vi(),o=oS(async(c,l)=>{try{await fS(c,l,{registry:e,webDir:n,log:t})}catch(d){t(`http route error: ${d.message}`),Ge(l,500,{ok:!1,error:{code:"internal",message:d.message}})}}),s=new uS({noServer:!0});o.on("upgrade",async(c,l,d)=>{let p=new URL(c.url,"http://localhost");if(p.pathname!=="/api/v1/events"){l.destroy();return}if(!(await cd(c)||p.searchParams.get("t")&&await Ur(p.searchParams.get("t")))){l.write(`HTTP/1.1 401 Unauthorized\r
10
+ Run \`sigil init\` for an interactive setup.`);UI={db:{type:"postgres",get url(){return V("SIGIL_DATABASE_URL",V("DATABASE_URL",""))||null},get host(){return V("SIGIL_DB_HOST","localhost")},get port(){return Number(V("SIGIL_DB_PORT",5432))},get database(){return V("SIGIL_DB_NAME","sigil")},get user(){return V("SIGIL_DB_USER","sigil_app")},get password(){return V("SIGIL_DB_PASSWORD","")}},embedding:{get provider(){return process.env.EMBEDDING_PROVIDER||""},get model(){return process.env.EMBEDDING_MODEL||"nomic-embed-text"},get dimensions(){return Number(process.env.EMBEDDING_DIMENSIONS)||768},get ollamaHost(){return process.env.OLLAMA_HOST||"http://localhost:11434"},get openaiApiKey(){return process.env.OPENAI_API_KEY||""},get voyageApiKey(){return process.env.VOYAGE_API_KEY||""},openrouterApiKey:process.env.OPENROUTER_API_KEY||"",openrouterBaseUrl:process.env.EMBEDDING_OPENROUTER_BASE_URL||process.env.LLM_OPENROUTER_BASE_URL||"",openrouterReferer:process.env.EMBEDDING_OPENROUTER_REFERER||process.env.LLM_OPENROUTER_REFERER||"https://github.com/Anmol-Srv/sigil",openrouterTitle:process.env.EMBEDDING_OPENROUTER_TITLE||process.env.LLM_OPENROUTER_TITLE||"Sigil"},llm:{get provider(){return process.env.LLM_PROVIDER||""},get openaiApiKey(){return process.env.OPENAI_API_KEY||""},get openaiModel(){return process.env.LLM_OPENAI_MODEL||"gpt-4o-mini"},get ollamaHost(){return process.env.LLM_OLLAMA_HOST||process.env.OLLAMA_HOST||"http://localhost:11434"},get ollamaModel(){return process.env.LLM_OLLAMA_MODEL||"qwen2.5:7b"},get cliModel(){return process.env.LLM_CLI_MODEL||"haiku"},get apiKey(){return process.env.ANTHROPIC_API_KEY||""},get openrouterApiKey(){return process.env.OPENROUTER_API_KEY||""},get openrouterModel(){return process.env.LLM_OPENROUTER_MODEL||"google/gemini-flash-latest"},get openrouterBaseUrl(){return process.env.LLM_OPENROUTER_BASE_URL||""},get openrouterReferer(){return process.env.LLM_OPENROUTER_REFERER||"https://github.com/Anmol-Srv/sigil"},get openrouterTitle(){return process.env.LLM_OPENROUTER_TITLE||"Sigil"},get extractionModel(){return process.env.LLM_EXTRACTION_MODEL||""},get decisionModel(){return process.env.LLM_DECISION_MODEL||""},get entityModel(){return process.env.LLM_ENTITY_MODEL||""},get maxRetries(){return Number(process.env.LLM_MAX_RETRIES)||3},get cliTimeout(){return Number(process.env.LLM_CLI_TIMEOUT)||12e4}},output:{storage:process.env.OUTPUT_STORAGE||"local",dir:process.env.OUTPUT_DIR||"./output",s3:{endpoint:process.env.S3_ENDPOINT||"",bucket:process.env.S3_BUCKET||"",region:process.env.S3_REGION||"us-east-1",accessKey:process.env.S3_ACCESS_KEY||"",secretKey:process.env.S3_SECRET_KEY||"",publicUrl:process.env.S3_PUBLIC_URL||""}},server:{port:Number(process.env.PORT)||4e3,host:process.env.HOST||"0.0.0.0",logLevel:process.env.LOG_LEVEL||"info"},http:{enabled:V("SIGIL_HTTP_ENABLED","true")!=="false",host:V("SIGIL_HTTP_HOST","127.0.0.1"),port:Number(V("SIGIL_HTTP_PORT",7777))},network:{mode:V("SIGIL_MODE","solo"),enabled:V("SIGIL_NETWORK_ENABLED",null)===null?V("SIGIL_MODE","solo")!=="solo":V("SIGIL_NETWORK_ENABLED","false")!=="false",masterNodeId:V("SIGIL_MASTER_NODE_ID","")||null},defaults:{namespace:process.env.DEFAULT_NAMESPACE||"default"},memory:{skipThreshold:Number(process.env.MEMORY_SKIP_THRESHOLD)||.88,ambiguousThreshold:Number(process.env.MEMORY_AMBIGUOUS_THRESHOLD)||.78,minFactSimilarity:Number(process.env.MEMORY_MIN_FACT_SIMILARITY)||.45,injectionFloor:Number(process.env.MEMORY_INJECTION_FLOOR)||.6},search:{synthesize:V("SIGIL_SYNTHESIZE","true")!=="false",synthesizeModel:V("SIGIL_SYNTH_MODEL","")},ingest:{eagerExtract:V("SIGIL_EAGER_EXTRACT","true")!=="false"},hebbian:{entity:{enabled:V("SIGIL_HEBBIAN_ENTITY_ENABLED",null,"true")!=="false",eta:Number(V("SIGIL_HEBBIAN_ENTITY_ETA",null,1)),cap:Number(V("SIGIL_HEBBIAN_ENTITY_CAP",null,50)),halfLifeDays:Number(V("SIGIL_HEBBIAN_ENTITY_HALF_LIFE_DAYS",null,30)),minEffective:Number(V("SIGIL_HEBBIAN_ENTITY_MIN_EFFECTIVE",null,.5)),rrfWeight:Number(V("SIGIL_HEBBIAN_ENTITY_RRF_WEIGHT",null,.3)),maxWriteEntities:Number(V("SIGIL_HEBBIAN_ENTITY_MAX_WRITE",null,12)),expandPerSeed:Number(V("SIGIL_HEBBIAN_ENTITY_EXPAND_PER_SEED",null,3))}}},_=UI});function ko(e){let t=Math.floor(e/1e3),r=Math.floor(t/3600),n=Math.floor(t%3600/60),i=t%60;return r?`${r}h ${n}m ${i}s`:n?`${n}m ${i}s`:`${i}s`}var nc=f(()=>{});var up={};v(up,{buildUrlConnection:()=>Me,classifyProvider:()=>Ht,directMigrationUrl:()=>ic,isPooledUrl:()=>Po});function Me(e){if(!e)throw new Error("url driver: SIGIL_DATABASE_URL is empty");let t;try{t=new URL(e)}catch(o){throw new Error(`url driver: invalid URL \u2014 ${o.message}`)}if(!/^postgres(ql)?:$/i.test(t.protocol))throw new Error(`url driver: expected postgres:// or postgresql:// scheme, got ${t.protocol}`);let r=t.searchParams.get("sslmode"),n=jI(t.hostname,r),i={host:t.hostname,port:t.port?Number(t.port):5432,database:t.pathname.replace(/^\//,"")||"postgres",user:decodeURIComponent(t.username),password:decodeURIComponent(t.password)};return n!==void 0&&(i.ssl=n),t.searchParams.get("application_name")||(i.application_name="sigil"),i}function jI(e,t){if(t==="disable")return!1;if(t==="require"||t==="verify-full"||t==="verify-ca")return{rejectUnauthorized:!0};if(t==="no-verify"||t==="prefer")return{rejectUnauthorized:!1};if(!lp.some(r=>r.test(e)))return GI.some(r=>r.test(e))?{rejectUnauthorized:!0}:{rejectUnauthorized:!1}}function Po(e){try{let t=new URL(e).hostname;return/-pooler\./i.test(t)||/\.pooler\.supabase\.com$/i.test(t)}catch{return!1}}function ic(e){let t;try{t=new URL(e)}catch{return null}let r=t.hostname;return/\.neon\.tech$/i.test(r)&&/-pooler\./i.test(r)?(t.hostname=r.replace("-pooler.","."),t.toString()):Po(e)?null:e}function Ht(e){try{let t=new URL(e).hostname;return/\.neon\.tech$/i.test(t)?"neon":/\.pooler\.supabase\.com$/i.test(t)?"supabase-pooler":/\.supabase\.co$/i.test(t)||/\.supabase\.com$/i.test(t)?"supabase":/\.rds\.amazonaws\.com$/i.test(t)?"aws-rds":/\.render\.com$/i.test(t)?"render":/\.railway\.app$/i.test(t)?"railway":/\.cockroachlabs\.cloud$/i.test(t)?"cockroachdb":lp.some(r=>r.test(t))?"local":"unknown"}catch{return"unknown"}}var GI,lp,_r=f(()=>{GI=[/\.neon\.tech$/i,/\.supabase\.co$/i,/\.supabase\.com$/i,/\.pooler\.supabase\.com$/i,/\.rds\.amazonaws\.com$/i,/\.render\.com$/i,/\.railway\.app$/i,/\.cockroachlabs\.cloud$/i],lp=[/^localhost$/i,/^127\.0\.0\.1$/,/^::1$/,/\.local$/i]});var ut={};v(ut,{diagnoseConnectionError:()=>KI,diagnoseError:()=>Fo,ensurePostgresDatabase:()=>VI,probeSigilConnection:()=>WI,probeUrlConnection:()=>Si});import Mo from"pg";async function WI({host:e,port:t,database:r,user:n,password:i}){let o=new Mo.Client({host:e,port:t,database:r,user:n,password:i});try{return await o.connect(),await o.query("SELECT 1"),{ok:!0}}catch(s){return{ok:!1,code:s.code,message:s.message}}finally{try{await o.end()}catch{}}}async function Si(e){let t,r="unknown";try{t=Me(e),r=Ht(e)}catch(o){return{ok:!1,stage:"parse",error:o.message}}let n=new Mo.Client(t),i=Date.now();try{await n.connect()}catch(o){return{ok:!1,stage:"connect",provider:r,error:o.message,code:o.code}}try{let o=await n.query("SELECT current_database() AS db, version() AS version"),s=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:r,connectMs:Date.now()-i,database:o.rows[0].db,serverVersion:o.rows[0].version,pgvector:s.rowCount>0}}catch(o){return{ok:!1,stage:"query",provider:r,error:o.message,code:o.code}}finally{try{await n.end()}catch{}}}async function VI({admin:{host:e,port:t,user:r,password:n},sigil:{database:i,user:o,password:s}}){let a=new Mo.Client({host:e,port:t,database:"postgres",user:r,password:n});await a.connect();let c=[];try{(await a.query("SELECT 1 FROM pg_database WHERE datname = $1",[i])).rowCount===0?(await a.query(`CREATE DATABASE ${Ut(i)}`),c.push(`created database "${i}"`)):c.push(`database "${i}" already exists \u2014 left as-is`),(await a.query("SELECT 1 FROM pg_roles WHERE rolname = $1",[o])).rowCount===0?(await a.query(`CREATE USER ${Ut(o)} WITH PASSWORD ${dp(s)}`),c.push(`created user "${o}"`)):(await a.query(`ALTER USER ${Ut(o)} WITH PASSWORD ${dp(s)}`),c.push(`user "${o}" exists \u2014 password reset to match .env`)),await a.query(`GRANT ALL PRIVILEGES ON DATABASE ${Ut(i)} TO ${Ut(o)}`)}finally{await a.end()}let l=new Mo.Client({host:e,port:t,database:i,user:r,password:n});await l.connect();try{await l.query(`GRANT ALL ON SCHEMA public TO ${Ut(o)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${Ut(o)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${Ut(o)}`);try{await l.query("CREATE EXTENSION IF NOT EXISTS vector"),c.push("pgvector extension ready")}catch(d){throw d.code===_i.EXTENSION_NOT_AVAILABLE?new Error("pgvector extension is not installed on this Postgres server.\n \u2022 Docker: use the `pgvector/pgvector:pg15` image instead of stock `postgres`\n \u2022 Homebrew: brew install pgvector (then restart postgres)\n \u2022 apt: apt install postgresql-15-pgvector (15 \u2192 your major version)\n \u2022 RDS: enable the `vector` extension in the parameter group\nRe-run `sigil init` once pgvector is installed."):d}}finally{await l.end()}return{actions:c}}function Fo(e){let t=e?.code,r=e?.message||String(e);return/expected \d+ dimensions, not \d+/i.test(r)||/different vector dimensions/i.test(r)?{kind:"dim-mismatch",humanMessage:"The embedding size does not match the database. Your existing data uses a different vector dimension than the embedder you picked.",fixHint:"Pick an embedding provider whose dimension matches the database, or wipe the embedding data and start fresh at the new dimension (Settings \u2192 Embedding)."}:/\b401\b|\b403\b|invalid[_ ]api[_ ]key|incorrect api key|unauthorized/i.test(r)&&/openai|voyage|openrouter|embed/i.test(r)?{kind:"bad-key",humanMessage:"The embedding provider rejected the API key.",fixHint:"Check the API key has embedding access and is pasted correctly (Settings \u2192 Embedding)."}:/model .* (not found|does not exist)|unknown model|no such model/i.test(r)?{kind:"model-not-found",humanMessage:"The embedding model name was not recognized by the provider.",fixHint:"Use a valid embedding model for the provider (e.g. text-embedding-3-large for OpenAI, nomic-embed-text for Ollama)."}:/11434|ollama/i.test(r)&&/ECONNREFUSED|fetch failed|connect|unreachable/i.test(r)?{kind:"ollama-down",humanMessage:"The local Ollama server is not reachable.",fixHint:"Start it with `ollama serve`, then `ollama pull nomic-embed-text`."}:/Unable to acquire a connection/i.test(r)||/pool is (destroyed|draining)/i.test(r)?{kind:"pool-dead",humanMessage:"The database connection pool was closed before this step ran.",fixHint:"This is an internal sequencing bug, not your configuration \u2014 restart the daemon (Settings \u2192 Apply)."}:/pooler|pgbouncer|prepared statement|advisory lock|endpoint could not be found/i.test(r)?{kind:"pooler-lock",humanMessage:"This looks like a connection-pooler URL. Pooled connections cannot run database migrations.",fixHint:'Use your direct (non-pooled) connection string for setup. For Neon, remove "-pooler" from the host.'}:t===_i.EXTENSION_NOT_AVAILABLE||/extension "?vector"?|type "?vector"? does not exist/i.test(r)?{kind:"no-pgvector",humanMessage:"The pgvector extension is not enabled on this database.",fixHint:'Click "Install pgvector" (most managed providers allow it), or use a pgvector-enabled Postgres image.'}:t===_i.CONNECTION_REFUSED||/ECONNREFUSED/.test(r)?{kind:"unreachable",humanMessage:"Postgres is not reachable at that host/port.",fixHint:"Confirm the server is running and the host/port are correct (`pg_isready -h <host> -p <port>`)."}:t===_i.AUTH_FAILED||/password authentication failed/i.test(r)?{kind:"auth",humanMessage:"Postgres rejected the username or password.",fixHint:"Fix the credentials in the connection settings."}:t===_i.DB_DOES_NOT_EXIST||/database .* does not exist/i.test(r)?{kind:"missing-db",humanMessage:"That database does not exist on the server yet.",fixHint:"Create the database, or point Sigil at one that exists."}:{kind:"other",humanMessage:r.split(`
11
+ `)[0],fixHint:null}}function KI(e){let t=Fo(e);return{kind:t.kind,hint:t.fixHint||t.humanMessage}}function Ut(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`Refusing to quote invalid SQL identifier: ${e}`);return`"${e}"`}function dp(e){return`'${String(e).replace(/'/g,"''")}'`}var _i,Oe=f(()=>{_r();_i={DB_DOES_NOT_EXIST:"3D000",CONNECTION_REFUSED:"ECONNREFUSED",AUTH_FAILED:"28P01",EXTENSION_NOT_AVAILABLE:"0A000",INTERNAL_ERROR:"XX000"}});function fp(e,{data:t}={}){let r=pp[e?.kind]||"DB_ERROR";return new le({errorCode:r,message:e?.humanMessage,hint:e?.fixHint,data:t})}function oc(e,t){process.env.SIGIL_DEBUG&&t?.stack&&(e.stack=t.stack);for(let r of Object.keys(e))e[r]===void 0&&delete e[r];return e}function mp(e){if(e instanceof le)return oc({code:e.errorCode,message:e.message,hint:e.hint??dn[e.errorCode]?.hint??void 0,data:e.data},e);let t=e,r=e?.message||String(e),n="";if(e instanceof AggregateError&&Array.isArray(e.errors)&&e.errors.length){t=e.errors[0]||e,r=t.message||r;let o=[...new Set(e.errors.map(s=>s.code).filter(Boolean))];o.length>1&&(n=` (and ${e.errors.length-1} more: ${o.slice(1).join(", ")})`)}else e?.cause&&(!r||r==="AggregateError")&&(t=e.cause,r=t.message||r);let i=Fo(t);if(i&&i.kind!=="other"){let o=pp[i.kind]||"DB_ERROR";return oc({code:o,message:i.humanMessage+n,hint:i.fixHint??dn[o]?.hint??void 0},e)}return oc({code:t?.code||e?.code||YI,message:r+n,hint:void 0},e)}var YI,dn,pp,le,pn=f(()=>{Oe();YI="handler_error",dn={VALIDATION_ERROR:{message:"Validation error",statusCode:400},INVALID_PARAMS:{message:"Invalid parameters",statusCode:400},BAD_REQUEST:{message:"Bad request",statusCode:400},NOT_FOUND:{message:"Resource not found",statusCode:404},UNKNOWN_METHOD:{message:"Unknown method",statusCode:404},CONFLICT:{message:"Resource conflict",statusCode:409},INTERNAL:{message:"Internal server error",statusCode:500},HANDLER_ERROR:{message:"Handler error",statusCode:500},SERVICE_UNAVAILABLE:{message:"Service unavailable",statusCode:503},LLM_ERROR:{message:"LLM provider error",statusCode:502},DB_ERROR:{message:"Database error",statusCode:500},DB_UNREACHABLE:{message:"Postgres is not reachable at that host/port.",statusCode:503,hint:"Confirm the server is running and the host/port are correct (`pg_isready -h <host> -p <port>`)."},DB_AUTH_FAILED:{message:"Postgres rejected the username or password.",statusCode:401,hint:"Fix the credentials in the connection settings."},DB_MISSING:{message:"That database does not exist on the server yet.",statusCode:404,hint:"Create the database, or point Sigil at one that exists."},DB_NO_PGVECTOR:{message:"The pgvector extension is not enabled on this database.",statusCode:400,hint:'Click "Install pgvector", or use a pgvector-enabled Postgres image.'},DB_POOLER_LOCK:{message:"This looks like a connection-pooler URL. Pooled connections cannot run migrations.",statusCode:400,hint:'Use the direct (non-pooled) connection string. For Neon, remove "-pooler" from the host.'},DB_POOL_DEAD:{message:"The database connection pool was closed before this step ran.",statusCode:503,hint:"Internal sequencing issue, not your config \u2014 restart the daemon (Settings \u2192 Apply)."},EMBED_DIM_MISMATCH:{message:"The embedding size does not match the database.",statusCode:409,hint:"Pick an embedder whose dimension matches the DB, or wipe embedding data and start fresh."},EMBED_BAD_KEY:{message:"The embedding provider rejected the API key.",statusCode:401,hint:"Check the API key has embedding access and is pasted correctly (Settings \u2192 Embedding)."},EMBED_MODEL_NOT_FOUND:{message:"The embedding model name was not recognized by the provider.",statusCode:400,hint:"Use a valid embedding model for the provider."},OLLAMA_DOWN:{message:"The local Ollama server is not reachable.",statusCode:503,hint:"Start it with `ollama serve`, then `ollama pull nomic-embed-text`."},ONBOARDING_INVALID_TRANSITION:{message:"Invalid onboarding step transition",statusCode:409},DOCKER_UNAVAILABLE:{message:"Docker is not available on this machine.",statusCode:503,hint:"Install/start Docker Desktop, or use the connection-URL flow instead."},DOCKER_PROVISION_FAILED:{message:"Failed to provision the local Postgres container.",statusCode:500,hint:"Check `docker ps`/`docker logs sigil-postgres`, or use the connection-URL flow."},SUPERVISOR_UNSUPPORTED_PLATFORM:{message:"No supervisor backend for this platform",statusCode:501},SUPERVISOR_INSTALL_FAILED:{message:"Failed to install the always-up service.",statusCode:500,hint:"Sigil still runs; you can retry with `sigil service install`."},CONNECTOR_INSTALL_FAILED:{message:"Failed to connect this client",statusCode:500},CONNECTOR_VERIFY_FAILED:{message:"The client did not verify after connecting.",statusCode:500,hint:"Re-run connect; if it persists, check the client config file permissions."}},pp={"dim-mismatch":"EMBED_DIM_MISMATCH","bad-key":"EMBED_BAD_KEY","model-not-found":"EMBED_MODEL_NOT_FOUND","ollama-down":"OLLAMA_DOWN","pool-dead":"DB_POOL_DEAD","pooler-lock":"DB_POOLER_LOCK","no-pgvector":"DB_NO_PGVECTOR",unreachable:"DB_UNREACHABLE",auth:"DB_AUTH_FAILED","missing-db":"DB_MISSING",other:"DB_ERROR"},le=class extends Error{constructor({errorCode:t,message:r,hint:n,data:i}={}){let o=dn[t]||dn.INTERNAL;super(r||o.message),this.name="AppError",this.errorCode=t&&dn[t]?t:"INTERNAL",this.statusCode=o.statusCode,this.hint=n??o.hint??null,this.data=i}static get codes(){return dn}}});var ac={};v(ac,{currentAgent:()=>XI,currentDeviceId:()=>zI,currentRequestContext:()=>sc,runWithRequestContext:()=>JI});import{AsyncLocalStorage as qI}from"node:async_hooks";function JI(e,t){return Bo.run(e,t)}function sc(){return Bo.getStore()||null}function zI(){return Bo.getStore()?.device?.id??null}function XI(){return Bo.getStore()?.agent??process.env.SIGIL_AGENT??null}var Bo,Ho=f(()=>{Bo=new qI});function hp(){let e=new Map;function t(o,s){if(e.has(o))throw new Error(`rpc: duplicate handler for "${o}"`);e.set(o,s)}async function r(o,s,a={}){let c=e.get(o);if(!c)return{ok:!1,error:{code:ZI.UNKNOWN_METHOD,message:`unknown method: ${o}`}};let{runWithRequestContext:l}=await Promise.resolve().then(()=>(Ho(),ac));try{return{ok:!0,data:await l({device:a.device||null,transport:a.transport||null,agent:a.agent||null},()=>c(s??{},a))}}catch(d){return{ok:!1,error:mp(d)}}}function n(){return[...e.keys()].sort()}function i(o,s){return e.has(o)?(e.set(o,s),!0):!1}return{register:t,replace:i,dispatch:r,list:n}}var ZI,gp=f(()=>{pn();ZI={UNKNOWN_METHOD:"unknown_method",INVALID_PARAMS:"invalid_params",HANDLER_ERROR:"handler_error"}});var pc={};v(pc,{clearRegistry:()=>uc,getDbHealth:()=>dc,getRegistry:()=>lc,setDbHealth:()=>QI,setRegistry:()=>cc});function cc(e){Uo=e}function lc(){if(!Uo)throw new Error("rpc registry not initialised \u2014 is the daemon running?");return Uo}function uc(){Uo=null}function QI(e){yp={healthy:null,error:null,checkedAt:null,...e}}function dc(){return yp}var Uo,yp,fn=f(()=>{Uo=null;yp={healthy:null,error:null,checkedAt:null}});import{createServer as ev}from"node:net";import{chmod as tv}from"node:fs/promises";async function wp({registry:e,log:t}){await $o();let r=ev(n=>{let i="",o=!1,s=Promise.resolve();n.setEncoding("utf8"),n.on("data",a=>{if(o)return;i+=a;let c;for(;(c=i.indexOf(`
12
+ `))!==-1;){let l=i.slice(0,c);i=i.slice(c+1),l.trim()&&(s=s.then(()=>{if(!o)return rv(l,n,e,t)}))}}),n.on("close",()=>{o=!0}),n.on("error",a=>{a.code!=="EPIPE"&&a.code!=="ECONNRESET"&&t(`socket error: ${a.message}`)})});await new Promise((n,i)=>{r.once("error",i),r.listen(Se,()=>{r.off("error",i),n()})});try{await tv(Se,384)}catch{}return t(`socket listening at ${Se}`),{close:()=>new Promise(n=>r.close(()=>n()))}}async function rv(e,t,r,n){let i;try{i=JSON.parse(e)}catch(d){fc(t,{id:null,ok:!1,error:{code:"invalid_json",message:d.message}});return}let{id:o=null,method:s,params:a,agent:c=null}=i||{};if(typeof s!="string"){fc(t,{id:o,ok:!1,error:{code:"invalid_params",message:'request must include a string "method"'}});return}let l=await r.dispatch(s,a,{transport:"socket",agent:c});fc(t,{id:o,...l}),!l.ok&&process.env.SIGIL_DEBUG&&n(`dispatch ${s} -> ${l.error.code}: ${l.error.message}`)}function fc(e,t){try{e.write(JSON.stringify(t)+`
13
+ `)}catch{}}var Ep=f(()=>{M();an()});var _p={};v(_p,{EventBus:()=>Go,default:()=>be});var Go,nv,be,mn=f(()=>{Go=class{constructor(){this.buffer=[],this.subs=new Set}emit(t,r={}){let n={type:t,ts:new Date().toISOString(),...r};this.buffer.push(n),this.buffer.length>200&&this.buffer.shift();for(let i of this.subs)try{i(n)}catch{}return n}subscribe(t){return this.subs.add(t),()=>this.subs.delete(t)}recent(t=50){return t>=this.buffer.length?[...this.buffer]:this.buffer.slice(-t)}subscriberCount(){return this.subs.size}},nv=new Go,be=nv});import{createServer as iv}from"node:http";import{existsSync as jo,createReadStream as ov}from"node:fs";import{stat as sv}from"node:fs/promises";import{join as xp,extname as av,normalize as Sp,sep as cv}from"node:path";import{WebSocketServer as lv}from"ws";function dv(){return jo(yi)?yi:jo(To)?To:null}async function Ip({registry:e,log:t,config:r}){let n=dv(),i=await Do(),o=iv(async(c,l)=>{try{await pv(c,l,{registry:e,webDir:n,log:t})}catch(d){t(`http route error: ${d.message}`),qe(l,500,{ok:!1,error:{code:"internal",message:d.message}})}}),s=new lv({noServer:!0});o.on("upgrade",async(c,l,d)=>{let p=new URL(c.url,"http://localhost");if(p.pathname!=="/api/v1/events"){l.destroy();return}if(!(await Ap(c)||p.searchParams.get("t")&&await un(p.searchParams.get("t")))){l.write(`HTTP/1.1 401 Unauthorized\r
13
14
  \r
14
- `),l.destroy();return}s.handleUpgrade(c,l,d,m=>{for(let x of _e.recent(50))try{m.send(JSON.stringify(x))}catch{}let g=256*1024,y=0,w=_e.subscribe(x=>{if(m.readyState===m.OPEN){if(m.bufferedAmount>g){y++;return}try{y>0&&(m.send(JSON.stringify({type:"meta.dropped",ts:new Date().toISOString(),count:y})),y=0),m.send(JSON.stringify(x))}catch{}}});m.on("close",w),m.on("error",()=>w())})}),await new Promise((c,l)=>{o.once("error",l),o.listen(r.http.port,r.http.host,()=>{o.off("error",l),c()})});let a=`http://${r.http.host}:${r.http.port}/?t=${i}`;return t(`http listening on ${r.http.host}:${r.http.port}`),t(`gui url (paste into browser): ${a}`),{url:a,close:()=>new Promise(c=>{s.close(),o.close(()=>c())})}}async function fS(e,t,{registry:r,webDir:n,log:i}){let o=new URL(e.url,"http://localhost"),s=o.pathname;if(e.method==="GET"&&s==="/healthz")return Ge(t,200,{ok:!0,ts:new Date().toISOString()});if(e.method==="GET"&&(s==="/"||s==="/index.html"))return mS(e,t,o,n,i);if(e.method==="GET"&&s.startsWith("/static/"))return hS(e,t,s.replace("/static/",""),n);if(!await cd(e))return Ge(t,401,{ok:!1,error:{code:"auth",message:"unauthorized"}});if(e.method==="GET"&&s==="/api/v1/methods")return Ge(t,200,{ok:!0,data:{methods:r.list()}});if(e.method==="POST"&&s==="/api/v1/rpc"){let c=await gS(e);if(!c||typeof c.method!="string")return Ge(t,400,{ok:!1,error:{code:"invalid_request",message:"expected {method, params}"}});let l=await r.dispatch(c.method,c.params,{transport:"http"});return Ge(t,200,l)}Ge(t,404,{ok:!1,error:{code:"not_found",message:`${e.method} ${s}`}})}async function mS(e,t,r,n,i){let o=r.searchParams.get("t");if(o)return await Ur(o)?(t.statusCode=302,t.setHeader("Location","/"),t.setHeader("Set-Cookie",`sigil_gui=${o}; Path=/; HttpOnly; SameSite=Strict; Max-Age=2592000`),t.end()):Ge(t,401,{ok:!1,error:{code:"auth",message:"invalid token"}});if(!n)return t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(id);let s=od(n,"index.html");return Xi(s)?ad(t,s):(i(`http: index.html missing under ${n}`),t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(id))}async function hS(e,t,r,n){if(!n)return Ge(t,404,{ok:!1,error:{code:"not_found",message:"no web dir"}});let i=nd(od(n,r)),o=nd(n)+lS;return i.startsWith(o)?Xi(i)?ad(t,i):Ge(t,404,{ok:!1,error:{code:"not_found",message:r}}):Ge(t,403,{ok:!1,error:{code:"forbidden",message:"path traversal blocked"}})}async function ad(e,t){let r=await aS(t);e.statusCode=200,e.setHeader("Content-Type",dS[cS(t).toLowerCase()]||"application/octet-stream"),e.setHeader("Content-Length",r.size),e.setHeader("Cache-Control","no-cache"),sS(t).pipe(e)}async function cd(e){let t=e.headers.authorization;if(t&&/^Bearer\s+/i.test(t)&&await Ur(t.replace(/^Bearer\s+/i,"").trim()))return!0;let n=(e.headers.cookie||"").match(/(?:^|;\s*)sigil_gui=([0-9a-f]+)/i);return!!(n&&await Ur(n[1]))}async function gS(e){let t=[],r=0;for await(let i of e)if(t.push(i),r+=i.length,r>1e6)throw new Error("request body too large (>1MB)");if(!t.length)return null;let n=Buffer.concat(t).toString("utf8");try{return JSON.parse(n)}catch(i){throw new Error(`invalid JSON: ${i.message}`)}}function Ge(e,t,r){e.statusCode=t,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(r))}var dS,id,ld=f(()=>{B();Ki();Gr();dS={".html":"text/html; charset=utf-8",".js":"application/javascript; charset=utf-8",".mjs":"application/javascript; charset=utf-8",".css":"text/css; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".ico":"image/x-icon",".json":"application/json; charset=utf-8",".txt":"text/plain; charset=utf-8"};id=`<!doctype html>
15
+ `),l.destroy();return}s.handleUpgrade(c,l,d,m=>{for(let b of be.recent(50))try{m.send(JSON.stringify(b))}catch{}let h=256*1024,y=0,w=be.subscribe(b=>{if(m.readyState===m.OPEN){if(m.bufferedAmount>h){y++;return}try{y>0&&(m.send(JSON.stringify({type:"meta.dropped",ts:new Date().toISOString(),count:y})),y=0),m.send(JSON.stringify(b))}catch{}}});m.on("close",w),m.on("error",()=>w())})}),await new Promise((c,l)=>{o.once("error",l),o.listen(r.http.port,r.http.host,()=>{o.off("error",l),c()})});let a=`http://${r.http.host}:${r.http.port}/?t=${i}`;return t(`http listening on ${r.http.host}:${r.http.port}`),t(`gui url (paste into browser): ${a}`),{url:a,close:()=>new Promise(c=>{s.close(),o.close(()=>c())})}}async function pv(e,t,{registry:r,webDir:n,log:i}){let o=new URL(e.url,"http://localhost"),s=o.pathname;if(e.method==="GET"&&s==="/healthz")return qe(t,200,{ok:!0,ts:new Date().toISOString()});if(e.method==="GET"&&(s==="/"||s==="/index.html"))return fv(e,t,o,n,i);if(e.method==="GET"&&s.startsWith("/static/"))return mv(e,t,s.replace("/static/",""),n);if(!await Ap(e))return qe(t,401,{ok:!1,error:{code:"auth",message:"unauthorized"}});if(e.method==="GET"&&s==="/api/v1/methods")return qe(t,200,{ok:!0,data:{methods:r.list()}});if(e.method==="POST"&&s==="/api/v1/rpc"){let c=await hv(e);if(!c||typeof c.method!="string")return qe(t,400,{ok:!1,error:{code:"invalid_request",message:"expected {method, params}"}});let l=await r.dispatch(c.method,c.params,{transport:"http"});return qe(t,200,l)}qe(t,404,{ok:!1,error:{code:"not_found",message:`${e.method} ${s}`}})}async function fv(e,t,r,n,i){let o=r.searchParams.get("t");if(o)return await un(o)?(t.statusCode=302,t.setHeader("Location","/"),t.setHeader("Set-Cookie",`sigil_gui=${o}; Path=/; HttpOnly; SameSite=Strict; Max-Age=2592000`),t.end()):qe(t,401,{ok:!1,error:{code:"auth",message:"invalid token"}});if(!n)return t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(bp);let s=xp(n,"index.html");return jo(s)?vp(t,s):(i(`http: index.html missing under ${n}`),t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(bp))}async function mv(e,t,r,n){if(!n)return qe(t,404,{ok:!1,error:{code:"not_found",message:"no web dir"}});let i=Sp(xp(n,r)),o=Sp(n)+cv;return i.startsWith(o)?jo(i)?vp(t,i):qe(t,404,{ok:!1,error:{code:"not_found",message:r}}):qe(t,403,{ok:!1,error:{code:"forbidden",message:"path traversal blocked"}})}async function vp(e,t){let r=await sv(t);e.statusCode=200,e.setHeader("Content-Type",uv[av(t).toLowerCase()]||"application/octet-stream"),e.setHeader("Content-Length",r.size),e.setHeader("Cache-Control","no-cache"),ov(t).pipe(e)}async function Ap(e){let t=e.headers.authorization;if(t&&/^Bearer\s+/i.test(t)&&await un(t.replace(/^Bearer\s+/i,"").trim()))return!0;let n=(e.headers.cookie||"").match(/(?:^|;\s*)sigil_gui=([0-9a-f]+)/i);return!!(n&&await un(n[1]))}async function hv(e){let t=[],r=0;for await(let i of e)if(t.push(i),r+=i.length,r>1e6)throw new Error("request body too large (>1MB)");if(!t.length)return null;let n=Buffer.concat(t).toString("utf8");try{return JSON.parse(n)}catch(i){throw new Error(`invalid JSON: ${i.message}`)}}function qe(e,t,r){e.statusCode=t,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(r))}var uv,bp,Tp=f(()=>{M();Lo();mn();uv={".html":"text/html; charset=utf-8",".js":"application/javascript; charset=utf-8",".mjs":"application/javascript; charset=utf-8",".css":"text/css; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".ico":"image/x-icon",".json":"application/json; charset=utf-8",".txt":"text/plain; charset=utf-8"};bp=`<!doctype html>
15
16
  <html><head><meta charset="utf-8"><title>Sigil</title>
16
17
  <style>body{font:14px/1.6 system-ui, sans-serif;max-width:720px;margin:48px auto;padding:0 16px;color:#1a1a1a}h1{font-size:18px;margin-bottom:8px}code{background:#f3f3f3;padding:2px 6px;border-radius:4px}</style>
17
18
  </head><body>
@@ -24,45 +25,45 @@ into your browser to set the auth cookie.</p>
24
25
  -X POST http://localhost:7777/api/v1/rpc \\
25
26
  -d '{"method":"ping"}' \\
26
27
  -H "Content-Type: application/json"</pre>
27
- </body></html>`});import{readFileSync as yS}from"node:fs";import{join as wS}from"node:path";function _S(){if(Yn)return Yn;try{Yn=JSON.parse(yS(wS(ge,"package.json"),"utf8")).version}catch{Yn="unknown"}return Yn}function ud(e,{startedAt:t}){e.register("ping",()=>({ok:!0,version:_S(),pid:process.pid,uptimeMs:Date.now()-t,node:process.version}))}var Yn,dd=f(()=>{B()});function pd(e){let t=e.split(`
28
+ </body></html>`});import{readFileSync as gv}from"node:fs";import{join as yv}from"node:path";function wv(){if(bi)return bi;try{bi=JSON.parse(gv(yv(Ee,"package.json"),"utf8")).version}catch{bi="unknown"}return bi}function Cp(e,{startedAt:t}){e.register("ping",()=>({ok:!0,version:wv(),pid:process.pid,uptimeMs:Date.now()-t,node:process.version}))}var bi,Op=f(()=>{M()});function Rp(e){let t=e.split(`
28
29
  `),r=[],n=null,i=[];for(let a of t){let c=a.match(/^(#{1,6})\s+(.+)/);c?(i.length&&r.push({heading:n||"Introduction",text:i.join(`
29
30
  `).trim()}),n=c[2].trim(),i=[]):i.push(a)}i.length&&r.push({heading:n||"Content",text:i.join(`
30
31
  `).trim()});let o=r.map(a=>a.text).join(`
31
32
 
32
- `),s=ES(t)||null;return{text:o,sections:r,metadata:{title:s}}}function ES(e){for(let t of e){let r=t.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var fd=f(()=>{});function fa(e){let t=e.split(/\n{2,}/).map(n=>n.trim()).filter(Boolean),r=t.length>1?t.map((n,i)=>({heading:`Section ${i+1}`,text:n})):[{heading:"Content",text:e.trim()}];return{text:e.trim(),sections:r,metadata:{}}}var md=f(()=>{});function hd(e){let t=bS(e),r=e.replace(/<script[\s\S]*?<\/script>/gi,"");return r=r.replace(/<style[\s\S]*?<\/style>/gi,""),r=r.replace(/<\/(p|div|h[1-6]|li|tr|br|hr)>/gi,`
33
+ `),s=Ev(t)||null;return{text:o,sections:r,metadata:{title:s}}}function Ev(e){for(let t of e){let r=t.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var $p=f(()=>{});function mc(e){let t=e.split(/\n{2,}/).map(n=>n.trim()).filter(Boolean),r=t.length>1?t.map((n,i)=>({heading:`Section ${i+1}`,text:n})):[{heading:"Content",text:e.trim()}];return{text:e.trim(),sections:r,metadata:{}}}var Np=f(()=>{});function Dp(e){let t=_v(e),r=e.replace(/<script[\s\S]*?<\/script>/gi,"");return r=r.replace(/<style[\s\S]*?<\/style>/gi,""),r=r.replace(/<\/(p|div|h[1-6]|li|tr|br|hr)>/gi,`
33
34
  `),r=r.replace(/<br\s*\/?>/gi,`
34
35
  `),r=r.replace(/<[^>]+>/g,""),r=r.replace(/&amp;/g,"&"),r=r.replace(/&lt;/g,"<"),r=r.replace(/&gt;/g,">"),r=r.replace(/&quot;/g,'"'),r=r.replace(/&#39;/g,"'"),r=r.replace(/&nbsp;/g," "),r=r.replace(/[ \t]+/g," "),r=r.replace(/\n{3,}/g,`
35
36
 
36
- `),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:t}}}function bS(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return t?t[1].trim():null}var gd=f(()=>{});function yd(e,{language:t}={}){let r=t||IS(e),n=xS(e,r);return{text:e.trim(),sections:n,metadata:{language:r}}}function xS(e,t){let r=e.split(`
37
- `),n=[],i="Header",o=[],s=!1,a=0;for(let c of r){let l=SS(c,t);l&&a===0?(o.length&&n.push({heading:i,text:o.join(`
37
+ `),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:t}}}function _v(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return t?t[1].trim():null}var Lp=f(()=>{});function kp(e,{language:t}={}){let r=t||Iv(e),n=Sv(e,r);return{text:e.trim(),sections:n,metadata:{language:r}}}function Sv(e,t){let r=e.split(`
38
+ `),n=[],i="Header",o=[],s=!1,a=0;for(let c of r){let l=bv(c,t);l&&a===0?(o.length&&n.push({heading:i,text:o.join(`
38
39
  `).trim()}),i=l,o=[c],s=!0):o.push(c);for(let d of c)d==="{"&&a++,d==="}"&&(a=Math.max(0,a-1))}return o.length&&n.push({heading:i,text:o.join(`
39
- `).trim()}),n.length<=1?vS(e):n.filter(c=>c.text)}function SS(e,t){let r=e.trim(),n=[/^(?:export\s+)?(?:async\s+)?function\s+(\w+)/,/^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\(/,/^(?:export\s+)?class\s+(\w+)/,/^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*\{/,/^(?:export\s+default\s+)/],i=[/^(?:async\s+)?def\s+(\w+)/,/^class\s+(\w+)/],o=[/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/,/^type\s+(\w+)/],s=[...n,...i,...o];for(let a of s){let c=r.match(a);if(c)return c[1]||c[0].slice(0,40)}return null}function vS(e){return e.split(/\n{2,}/).map((r,n)=>({heading:`Block ${n+1}`,text:r.trim()})).filter(r=>r.text)}function IS(e){return e.includes("import ")&&(e.includes("from ")||e.includes("require("))?"javascript":e.match(/^def\s/m)||e.match(/^class\s.*:/m)?"python":e.match(/^func\s/m)||e.includes("package ")?"go":e.match(/^fn\s/m)||e.includes("use ")?"rust":"unknown"}var wd=f(()=>{});function _d(e){let t;try{t=typeof e=="string"?JSON.parse(e):e}catch{return{text:e,sections:[{heading:"Content",text:e}],metadata:{}}}let r=ma(t);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function ma(e,t=0){if(e==null)return"";if(Array.isArray(e))return e.map((r,n)=>typeof r=="object"&&r!==null?`Item ${n+1}:
40
- ${ma(r,t+1)}`:`- ${r}`).join(`
40
+ `).trim()}),n.length<=1?xv(e):n.filter(c=>c.text)}function bv(e,t){let r=e.trim(),n=[/^(?:export\s+)?(?:async\s+)?function\s+(\w+)/,/^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\(/,/^(?:export\s+)?class\s+(\w+)/,/^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*\{/,/^(?:export\s+default\s+)/],i=[/^(?:async\s+)?def\s+(\w+)/,/^class\s+(\w+)/],o=[/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/,/^type\s+(\w+)/],s=[...n,...i,...o];for(let a of s){let c=r.match(a);if(c)return c[1]||c[0].slice(0,40)}return null}function xv(e){return e.split(/\n{2,}/).map((r,n)=>({heading:`Block ${n+1}`,text:r.trim()})).filter(r=>r.text)}function Iv(e){return e.includes("import ")&&(e.includes("from ")||e.includes("require("))?"javascript":e.match(/^def\s/m)||e.match(/^class\s.*:/m)?"python":e.match(/^func\s/m)||e.includes("package ")?"go":e.match(/^fn\s/m)||e.includes("use ")?"rust":"unknown"}var Pp=f(()=>{});function Mp(e){let t;try{t=typeof e=="string"?JSON.parse(e):e}catch{return{text:e,sections:[{heading:"Content",text:e}],metadata:{}}}let r=hc(t);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function hc(e,t=0){if(e==null)return"";if(Array.isArray(e))return e.map((r,n)=>typeof r=="object"&&r!==null?`Item ${n+1}:
41
+ ${hc(r,t+1)}`:`- ${r}`).join(`
41
42
  `);if(typeof e=="object"){let r=" ".repeat(t);return Object.entries(e).filter(([,n])=>n!=null).map(([n,i])=>typeof i=="object"?`${r}${n}:
42
- ${ma(i,t+1)}`:`${r}${n}: ${i}`).join(`
43
- `)}return String(e)}var Ed=f(()=>{});function bd(e,{format:t,filePath:r,contentType:n}={}){let i=t||$S(n)||OS(r)||RS(e);return(CS[i]||fa)(e)}function $S(e){if(!e)return null;let t=e.split(";")[0].trim();return TS[t]||null}function OS(e){if(!e)return null;let t=e.match(/\.[^.]+$/)?.[0]?.toLowerCase();return t&&AS[t]||null}function RS(e){if(!e)return"text";let t=e.trim();return t.startsWith("{")||t.startsWith("[")?"json":t.startsWith("<!DOCTYPE")||t.startsWith("<html")?"html":t.match(/^#{1,6}\s/m)?"markdown":t.match(/^(import|export|function|class|const|let|var|def|func|package)\s/m)?"code":"text"}var AS,TS,CS,xd=f(()=>{fd();md();gd();wd();Ed();AS={".md":"markdown",".mdx":"markdown",".txt":"text",".html":"html",".htm":"html",".json":"json",".js":"code",".ts":"code",".jsx":"code",".tsx":"code",".py":"code",".go":"code",".rs":"code",".java":"code",".rb":"code",".php":"code",".c":"code",".cpp":"code",".h":"code",".cs":"code",".swift":"code",".kt":"code",".yaml":"text",".yml":"text",".toml":"text",".ini":"text",".cfg":"text",".env":"text",".csv":"text",".sql":"code",".sh":"code",".bash":"code",".zsh":"code"},TS={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},CS={markdown:pd,text:fa,html:hd,code:yd,json:_d}});function NS(e,{maxTokens:t=512,overlapTokens:r=50}={}){if(!e?.trim())return[];let n=t*4,i=r*4;if(e.length<=n)return[{content:e.trim(),index:0}];let o=DS(e),s=[],a="",c="";for(let l of o){if(l.length>n){a.trim()&&(s.push({content:a.trim(),index:s.length}),c=ha(a,i),a="");let d=LS(l,n,i);for(let p of d)s.push({content:p.trim(),index:s.length});c=ha(s[s.length-1].content,i);continue}(a+l).length>n?(s.push({content:a.trim(),index:s.length}),c=ha(a,i),a=c+l):a+=l}return a.trim()&&s.push({content:a.trim(),index:s.length}),s}function vd(e,t={}){let r=[];for(let{heading:n,text:i}of e){if(!i?.trim())continue;let o=NS(i,t);for(let s of o)r.push({content:s.content,index:r.length,sectionHeading:n})}return r}function DS(e){return e.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function LS(e,t,r){let n=[],i=0;for(;i<e.length;){let o=Math.min(i+t,e.length);if(n.push(e.slice(i,o)),i=o-r,i>=e.length)break}return n}function ha(e,t){if(e.length<=t)return e;let r=e.slice(-t),n=r.search(/[.!?]\s+/);return n!==-1?r.slice(n+1).trimStart():r}var Sd,ga=f(()=>{Sd=Object.freeze({version:3,size:512,overlap:50,contextualPrefix:!0})});var Id={};T(Id,{chat:()=>kS,meta:()=>PS,setup:()=>MS});async function kS(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.openaiModel,i=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&i.unshift({role:"system",content:"Respond with valid JSON."});let o={model:n,messages:i};r&&(o.response_format={type:"json_object"});let s=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${E.llm.openaiApiKey}`},body:JSON.stringify(o)});if(!s.ok){let d=await s.text();throw new Error(`OpenAI error ${s.status}: ${d}`)}let a=await s.json(),c=a.choices[0].message.content.trim(),l=a.usage||{};return{text:c,inputTokens:l.prompt_tokens||0,outputTokens:l.completion_tokens||0,model:n}}async function MS({existing:e,clack:t}){let r=e.OPENAI_API_KEY||"",n=await t.text({message:"OpenAI API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-proj-...",validate:i=>{if(!i&&!r)return"API key is required";if(i&&!i.startsWith("sk-"))return'OpenAI keys start with "sk-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{OPENAI_API_KEY:n||r}}}var PS,Ad=f(()=>{R();PS={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});var Td={};T(Td,{buildLocalConnection:()=>it});function it(e){return{host:e.db.host,port:e.db.port,database:e.db.database,user:e.db.user,password:e.db.password}}var jr=f(()=>{});var $d={};T($d,{buildUrlConnection:()=>ot,classifyProvider:()=>Ct,directMigrationUrl:()=>ya,isPooledUrl:()=>Zi});function ot(e){if(!e)throw new Error("url driver: SIGIL_DATABASE_URL is empty");let t;try{t=new URL(e)}catch(o){throw new Error(`url driver: invalid URL \u2014 ${o.message}`)}if(!/^postgres(ql)?:$/i.test(t.protocol))throw new Error(`url driver: expected postgres:// or postgresql:// scheme, got ${t.protocol}`);let r=t.searchParams.get("sslmode"),n=HS(t.hostname,r),i={host:t.hostname,port:t.port?Number(t.port):5432,database:t.pathname.replace(/^\//,"")||"postgres",user:decodeURIComponent(t.username),password:decodeURIComponent(t.password)};return n!==void 0&&(i.ssl=n),t.searchParams.get("application_name")||(i.application_name="sigil"),i}function HS(e,t){if(t==="disable")return!1;if(t==="require"||t==="verify-full"||t==="verify-ca")return{rejectUnauthorized:!0};if(t==="no-verify"||t==="prefer")return{rejectUnauthorized:!1};if(!Cd.some(r=>r.test(e)))return FS.some(r=>r.test(e))?{rejectUnauthorized:!0}:{rejectUnauthorized:!1}}function Zi(e){try{let t=new URL(e).hostname;return/-pooler\./i.test(t)||/\.pooler\.supabase\.com$/i.test(t)}catch{return!1}}function ya(e){let t;try{t=new URL(e)}catch{return null}let r=t.hostname;return/\.neon\.tech$/i.test(r)&&/-pooler\./i.test(r)?(t.hostname=r.replace("-pooler.","."),t.toString()):Zi(e)?null:e}function Ct(e){try{let t=new URL(e).hostname;return/\.neon\.tech$/i.test(t)?"neon":/\.pooler\.supabase\.com$/i.test(t)?"supabase-pooler":/\.supabase\.co$/i.test(t)||/\.supabase\.com$/i.test(t)?"supabase":/\.rds\.amazonaws\.com$/i.test(t)?"aws-rds":/\.render\.com$/i.test(t)?"render":/\.railway\.app$/i.test(t)?"railway":/\.cockroachlabs\.cloud$/i.test(t)?"cockroachdb":Cd.some(r=>r.test(t))?"local":"unknown"}catch{return"unknown"}}var FS,Cd,Wr=f(()=>{FS=[/\.neon\.tech$/i,/\.supabase\.co$/i,/\.supabase\.com$/i,/\.pooler\.supabase\.com$/i,/\.rds\.amazonaws\.com$/i,/\.render\.com$/i,/\.railway\.app$/i,/\.cockroachlabs\.cloud$/i],Cd=[/^localhost$/i,/^127\.0\.0\.1$/,/^::1$/,/\.local$/i]});var Qi={};T(Qi,{buildLocalConnection:()=>it,buildUrlConnection:()=>ot,classifyProvider:()=>Ct,selectDriver:()=>wa});function wa(e){let t=e.db.url;return t?{kind:"url",provider:Ct(t),connection:ot(t)}:{kind:"local",provider:"local",connection:it(e)}}var qn=f(()=>{jr();Wr()});var G={};T(G,{default:()=>_});import BS from"knex";function US(e){return Array.isArray(e)?e.map(_a):e&&typeof e=="object"?_a(e):e}function GS(e,t){return t(jS(e))}function _a(e){if(!e||typeof e!="object"||e instanceof Date)return e;if(Array.isArray(e))return e.map(_a);let t={};for(let[r,n]of Object.entries(e))t[r.replace(/_([a-z])/g,(i,o)=>o.toUpperCase())]=n;return t}function jS(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}var Od,Rd,_,D=f(()=>{R();qn();Od=wa(E),Rd=BS({client:"pg",connection:Od.connection,pool:{min:2,max:10},postProcessResponse:US,wrapIdentifier:GS});Rd.__sigilDriver=Od;_=Rd});function je(e){return Math.ceil((e||"").length/4)}function Ea(e,t,r){let n=WS[e];return n?(t*n.input+r*n.output)/1e6:0}function Jn({provider:e,model:t,caller:r,input:n,response:i,inputTokens:o,outputTokens:s,cost:a,durationMs:c,status:l,error:d}){_("llm_log").insert({provider:e,model:t,caller:r,input:n?.slice(0,1e4),response:i?.slice(0,1e4),inputTokens:o,outputTokens:s,cost:a,durationMs:c,status:l,error:d?.slice(0,2e3)}).catch(p=>console.error("[llm-log] Write failed:",p.message))}async function ba(e,t=3){for(let r=1;r<=t;r++)try{return await e()}catch(n){if(r===t)throw n;let i=Math.min(1e3*2**(r-1),1e4);await new Promise(o=>setTimeout(o,i))}}var WS,zn=f(()=>{D();WS={"gpt-4o-mini":{input:.15,output:.6},"gpt-4o":{input:2.5,output:10},"gpt-4.1-nano":{input:.1,output:.4},"gpt-4.1-mini":{input:.4,output:1.6},"claude-haiku-4-5-20251001":{input:.8,output:4},"claude-sonnet-4-6":{input:3,output:15},"claude-opus-4-6":{input:15,output:75}}});var Nd={};T(Nd,{chat:()=>KS,meta:()=>YS,setup:()=>qS});async function VS(){if(!xa){let{default:e}=await import("@anthropic-ai/sdk");xa=new e({apiKey:E.llm.apiKey})}return xa}async function KS(e,{model:t,jsonMode:r=!1}={}){let n=t||"claude-haiku-4-5-20251001",i=await VS(),o=[{role:"user",content:e}],s=r?"Respond with valid JSON only. No explanation or wrapping.":void 0,a=await i.messages.create({model:n,max_tokens:4096,messages:o,...s&&{system:s}});return{text:a.content[0].text.trim(),inputTokens:a.usage?.input_tokens||je(e),outputTokens:a.usage?.output_tokens||je(a.content[0].text),model:n}}async function qS({existing:e,clack:t}){let r=e.ANTHROPIC_API_KEY||"",n=await t.text({message:"Anthropic API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-ant-...",validate:i=>{if(!i&&!r)return"API key is required";if(i&&!i.startsWith("sk-ant-"))return'Anthropic keys start with "sk-ant-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{ANTHROPIC_API_KEY:n||r}}}var xa,YS,Dd=f(()=>{R();zn();xa=null;YS={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var kd={};T(kd,{chat:()=>zS,meta:()=>XS,setup:()=>ZS});async function zS(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.openrouterModel;if(!E.llm.openrouterApiKey)throw new Error("OPENROUTER_API_KEY is not set");if(!n)throw new Error("No OpenRouter model resolved. Set LLM_OPENROUTER_MODEL or pass `model`.");let i=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&i.unshift({role:"system",content:"Respond with valid JSON."});let o={model:n,messages:i};r&&(o.response_format={type:"json_object"});let s=(E.llm.openrouterBaseUrl||JS).replace(/\/+$/,""),a={"Content-Type":"application/json",Authorization:`Bearer ${E.llm.openrouterApiKey}`};E.llm.openrouterReferer&&(a["HTTP-Referer"]=E.llm.openrouterReferer),E.llm.openrouterTitle&&(a["X-Title"]=E.llm.openrouterTitle);let c=await fetch(`${s}/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(o)});if(!c.ok){let m=await c.text();throw new Error(`OpenRouter error ${c.status}: ${m}`)}let l=await c.json(),p=(l.choices?.[0]?.message?.content||"").trim(),u=l.usage||{};return{text:p,inputTokens:u.prompt_tokens||0,outputTokens:u.completion_tokens||0,model:l.model||n}}async function ZS({existing:e,clack:t}){let r={},n=e.OPENROUTER_API_KEY||"",i=await t.text({message:"OpenRouter API key (paste, then Enter)",placeholder:n?"(keep existing \u2014 press Enter)":"sk-or-v1-...",validate:c=>{if(!c&&!n)return"API key is required";if(c&&!c.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});if(t.isCancel(i))return null;r.OPENROUTER_API_KEY=i||n;let o=e.LLM_OPENROUTER_MODEL||"",s=await t.text({message:"OpenRouter model (vendor/model)",placeholder:o||Ld,validate:c=>{if(c&&!c.includes("/"))return'OpenRouter models are "vendor/model" \u2014 e.g. google/gemini-flash-latest'}});if(t.isCancel(s))return null;r.LLM_OPENROUTER_MODEL=s||o||Ld;let a=await t.select({message:"Configure per-task model overrides? (advanced \u2014 better quality / cost)",options:[{value:"no",label:"No, use one model everywhere",hint:"simpler \u2014 debug one model"},{value:"yes",label:"Yes, configure smart split",hint:"~5\xD7 cheaper extraction + better AUDM/synthesis"}],initialValue:"no"});if(t.isCancel(a))return null;if(a==="yes"){let c=await t.text({message:"Extraction model (high-volume; cheap matters)",placeholder:e.LLM_EXTRACTION_MODEL||Vr.extraction});if(t.isCancel(c))return null;r.LLM_EXTRACTION_MODEL=c||e.LLM_EXTRACTION_MODEL||Vr.extraction;let l=await t.text({message:"Decision model (AUDM; smart matters)",placeholder:e.LLM_DECISION_MODEL||Vr.decision});if(t.isCancel(l))return null;r.LLM_DECISION_MODEL=l||e.LLM_DECISION_MODEL||Vr.decision;let d=await t.text({message:"Synthesis model (read-time answer composition)",placeholder:e.SIGIL_SYNTH_MODEL||Vr.synthesis});if(t.isCancel(d))return null;r.SIGIL_SYNTH_MODEL=d||e.SIGIL_SYNTH_MODEL||Vr.synthesis}return t.note(`OpenRouter can drive both LLM calls and embeddings.
43
+ ${hc(i,t+1)}`:`${r}${n}: ${i}`).join(`
44
+ `)}return String(e)}var Fp=f(()=>{});function Bp(e,{format:t,filePath:r,contentType:n}={}){let i=t||Cv(n)||Ov(r)||Rv(e);return(Tv[i]||mc)(e)}function Cv(e){if(!e)return null;let t=e.split(";")[0].trim();return Av[t]||null}function Ov(e){if(!e)return null;let t=e.match(/\.[^.]+$/)?.[0]?.toLowerCase();return t&&vv[t]||null}function Rv(e){if(!e)return"text";let t=e.trim();return t.startsWith("{")||t.startsWith("[")?"json":t.startsWith("<!DOCTYPE")||t.startsWith("<html")?"html":t.match(/^#{1,6}\s/m)?"markdown":t.match(/^(import|export|function|class|const|let|var|def|func|package)\s/m)?"code":"text"}var vv,Av,Tv,Hp=f(()=>{$p();Np();Lp();Pp();Fp();vv={".md":"markdown",".mdx":"markdown",".txt":"text",".html":"html",".htm":"html",".json":"json",".js":"code",".ts":"code",".jsx":"code",".tsx":"code",".py":"code",".go":"code",".rs":"code",".java":"code",".rb":"code",".php":"code",".c":"code",".cpp":"code",".h":"code",".cs":"code",".swift":"code",".kt":"code",".yaml":"text",".yml":"text",".toml":"text",".ini":"text",".cfg":"text",".env":"text",".csv":"text",".sql":"code",".sh":"code",".bash":"code",".zsh":"code"},Av={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},Tv={markdown:Rp,text:mc,html:Dp,code:kp,json:Mp}});function $v(e,{maxTokens:t=512,overlapTokens:r=50}={}){if(!e?.trim())return[];let n=t*4,i=r*4;if(e.length<=n)return[{content:e.trim(),index:0}];let o=Nv(e),s=[],a="",c="";for(let l of o){if(l.length>n){a.trim()&&(s.push({content:a.trim(),index:s.length}),c=gc(a,i),a="");let d=Dv(l,n,i);for(let p of d)s.push({content:p.trim(),index:s.length});c=gc(s[s.length-1].content,i);continue}(a+l).length>n?(s.push({content:a.trim(),index:s.length}),c=gc(a,i),a=c+l):a+=l}return a.trim()&&s.push({content:a.trim(),index:s.length}),s}function Gp(e,t={}){let r=[];for(let{heading:n,text:i}of e){if(!i?.trim())continue;let o=$v(i,t);for(let s of o)r.push({content:s.content,index:r.length,sectionHeading:n})}return r}function Nv(e){return e.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function Dv(e,t,r){let n=[],i=0;for(;i<e.length;){let o=Math.min(i+t,e.length);if(n.push(e.slice(i,o)),i=o-r,i>=e.length)break}return n}function gc(e,t){if(e.length<=t)return e;let r=e.slice(-t),n=r.search(/[.!?]\s+/);return n!==-1?r.slice(n+1).trimStart():r}var Up,yc=f(()=>{Up=Object.freeze({version:3,size:512,overlap:50,contextualPrefix:!0})});var jp={};v(jp,{chat:()=>Lv,meta:()=>kv,setup:()=>Pv});async function Lv(e,{model:t,jsonMode:r=!1}={}){let n=t||_.llm.openaiModel,i=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&i.unshift({role:"system",content:"Respond with valid JSON."});let o={model:n,messages:i};r&&(o.response_format={type:"json_object"});let s=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_.llm.openaiApiKey}`},body:JSON.stringify(o)});if(!s.ok){let d=await s.text();throw new Error(`OpenAI error ${s.status}: ${d}`)}let a=await s.json(),c=a.choices[0].message.content.trim(),l=a.usage||{};return{text:c,inputTokens:l.prompt_tokens||0,outputTokens:l.completion_tokens||0,model:n}}async function Pv({existing:e,clack:t}){let r=e.OPENAI_API_KEY||"",n=await t.text({message:"OpenAI API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-proj-...",validate:i=>{if(!i&&!r)return"API key is required";if(i&&!i.startsWith("sk-"))return'OpenAI keys start with "sk-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{OPENAI_API_KEY:n||r}}}var kv,Wp=f(()=>{$();kv={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});var Vp={};v(Vp,{buildLocalConnection:()=>dt});function dt(e){return{host:e.db.host,port:e.db.port,database:e.db.database,user:e.db.user,password:e.db.password}}var hn=f(()=>{});var Wo={};v(Wo,{buildLocalConnection:()=>dt,buildUrlConnection:()=>Me,classifyProvider:()=>Ht,selectDriver:()=>wc});function wc(e){let t=e.db.url;return t?{kind:"url",provider:Ht(t),connection:Me(t)}:{kind:"local",provider:"local",connection:dt(e)}}var xi=f(()=>{hn();_r()});var j={};v(j,{default:()=>E});import Mv from"knex";function Fv(e){return Array.isArray(e)?e.map(Ec):e&&typeof e=="object"?Ec(e):e}function Bv(e,t){return t(Hv(e))}function Ec(e){if(!e||typeof e!="object"||e instanceof Date)return e;if(Array.isArray(e))return e.map(Ec);let t={};for(let[r,n]of Object.entries(e))t[r.replace(/_([a-z])/g,(i,o)=>o.toUpperCase())]=n;return t}function Hv(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}var Kp,Yp,E,N=f(()=>{$();xi();Kp=wc(_),Yp=Mv({client:"pg",connection:Kp.connection,pool:{min:2,max:10},postProcessResponse:Fv,wrapIdentifier:Bv});Yp.__sigilDriver=Kp;E=Yp});function Je(e){return Math.ceil((e||"").length/4)}function _c(e,t,r){let n=Uv[e];return n?(t*n.input+r*n.output)/1e6:0}function Ii({provider:e,model:t,caller:r,input:n,response:i,inputTokens:o,outputTokens:s,cost:a,durationMs:c,status:l,error:d}){E("llm_log").insert({provider:e,model:t,caller:r,input:n?.slice(0,1e4),response:i?.slice(0,1e4),inputTokens:o,outputTokens:s,cost:a,durationMs:c,status:l,error:d?.slice(0,2e3)}).catch(p=>console.error("[llm-log] Write failed:",p.message))}async function Sc(e,t=3){for(let r=1;r<=t;r++)try{return await e()}catch(n){if(r===t)throw n;let i=Math.min(1e3*2**(r-1),1e4);await new Promise(o=>setTimeout(o,i))}}var Uv,vi=f(()=>{N();Uv={"gpt-4o-mini":{input:.15,output:.6},"gpt-4o":{input:2.5,output:10},"gpt-4.1-nano":{input:.1,output:.4},"gpt-4.1-mini":{input:.4,output:1.6},"claude-haiku-4-5-20251001":{input:.8,output:4},"claude-sonnet-4-6":{input:3,output:15},"claude-opus-4-6":{input:15,output:75}}});var qp={};v(qp,{chat:()=>jv,meta:()=>Wv,setup:()=>Vv});async function Gv(){if(!bc){let{default:e}=await import("@anthropic-ai/sdk");bc=new e({apiKey:_.llm.apiKey})}return bc}async function jv(e,{model:t,jsonMode:r=!1}={}){let n=t||"claude-haiku-4-5-20251001",i=await Gv(),o=[{role:"user",content:e}],s=r?"Respond with valid JSON only. No explanation or wrapping.":void 0,a=await i.messages.create({model:n,max_tokens:4096,messages:o,...s&&{system:s}});return{text:a.content[0].text.trim(),inputTokens:a.usage?.input_tokens||Je(e),outputTokens:a.usage?.output_tokens||Je(a.content[0].text),model:n}}async function Vv({existing:e,clack:t}){let r=e.ANTHROPIC_API_KEY||"",n=await t.text({message:"Anthropic API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-ant-...",validate:i=>{if(!i&&!r)return"API key is required";if(i&&!i.startsWith("sk-ant-"))return'Anthropic keys start with "sk-ant-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{ANTHROPIC_API_KEY:n||r}}}var bc,Wv,Jp=f(()=>{$();vi();bc=null;Wv={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var Xp={};v(Xp,{chat:()=>Yv,meta:()=>qv,setup:()=>Jv});async function Yv(e,{model:t,jsonMode:r=!1}={}){let n=t||_.llm.openrouterModel;if(!_.llm.openrouterApiKey)throw new Error("OPENROUTER_API_KEY is not set");if(!n)throw new Error("No OpenRouter model resolved. Set LLM_OPENROUTER_MODEL or pass `model`.");let i=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&i.unshift({role:"system",content:"Respond with valid JSON."});let o={model:n,messages:i};r&&(o.response_format={type:"json_object"});let s=(_.llm.openrouterBaseUrl||Kv).replace(/\/+$/,""),a={"Content-Type":"application/json",Authorization:`Bearer ${_.llm.openrouterApiKey}`};_.llm.openrouterReferer&&(a["HTTP-Referer"]=_.llm.openrouterReferer),_.llm.openrouterTitle&&(a["X-Title"]=_.llm.openrouterTitle);let c=await fetch(`${s}/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(o)});if(!c.ok){let m=await c.text();throw new Error(`OpenRouter error ${c.status}: ${m}`)}let l=await c.json(),p=(l.choices?.[0]?.message?.content||"").trim(),u=l.usage||{};return{text:p,inputTokens:u.prompt_tokens||0,outputTokens:u.completion_tokens||0,model:l.model||n}}async function Jv({existing:e,clack:t}){let r={},n=e.OPENROUTER_API_KEY||"",i=await t.text({message:"OpenRouter API key (paste, then Enter)",placeholder:n?"(keep existing \u2014 press Enter)":"sk-or-v1-...",validate:c=>{if(!c&&!n)return"API key is required";if(c&&!c.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});if(t.isCancel(i))return null;r.OPENROUTER_API_KEY=i||n;let o=e.LLM_OPENROUTER_MODEL||"",s=await t.text({message:"OpenRouter model (vendor/model)",placeholder:o||zp,validate:c=>{if(c&&!c.includes("/"))return'OpenRouter models are "vendor/model" \u2014 e.g. google/gemini-flash-latest'}});if(t.isCancel(s))return null;r.LLM_OPENROUTER_MODEL=s||o||zp;let a=await t.select({message:"Configure per-task model overrides? (advanced \u2014 better quality / cost)",options:[{value:"no",label:"No, use one model everywhere",hint:"simpler \u2014 debug one model"},{value:"yes",label:"Yes, configure smart split",hint:"~5\xD7 cheaper extraction + better AUDM/synthesis"}],initialValue:"no"});if(t.isCancel(a))return null;if(a==="yes"){let c=await t.text({message:"Extraction model (high-volume; cheap matters)",placeholder:e.LLM_EXTRACTION_MODEL||gn.extraction});if(t.isCancel(c))return null;r.LLM_EXTRACTION_MODEL=c||e.LLM_EXTRACTION_MODEL||gn.extraction;let l=await t.text({message:"Decision model (AUDM; smart matters)",placeholder:e.LLM_DECISION_MODEL||gn.decision});if(t.isCancel(l))return null;r.LLM_DECISION_MODEL=l||e.LLM_DECISION_MODEL||gn.decision;let d=await t.text({message:"Synthesis model (read-time answer composition)",placeholder:e.SIGIL_SYNTH_MODEL||gn.synthesis});if(t.isCancel(d))return null;r.SIGIL_SYNTH_MODEL=d||e.SIGIL_SYNTH_MODEL||gn.synthesis}return t.note(`OpenRouter can drive both LLM calls and embeddings.
44
45
  You will pick an embedding provider in the next step \u2014 "openrouter" is an option,
45
- or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var JS,XS,Ld,Vr,Pd=f(()=>{R();JS="https://openrouter.ai/api/v1";XS={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},Ld="google/gemini-flash-latest",Vr={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var Md={};T(Md,{chat:()=>nv,meta:()=>iv,setup:()=>ov});import{spawn as QS}from"node:child_process";function rv(e,t){let r=E.llm.cliTimeout||12e4;return new Promise((n,i)=>{let o=QS("claude",e,{stdio:["pipe","pipe","pipe"]}),s=setTimeout(()=>{o.kill("SIGTERM"),i(new Error(`claude CLI timed out after ${r}ms`))},r),a="",c="";o.stdout.on("data",l=>{a+=l}),o.stderr.on("data",l=>{c+=l}),o.on("error",l=>{clearTimeout(s),i(new Error(`Failed to spawn claude CLI: ${l.message}`))}),o.on("close",l=>{clearTimeout(s),n({stdout:a,stderr:c,code:l})}),o.stdin.write(t),o.stdin.end()})}async function nv(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.cliModel||"haiku",i=ev[n]||n,o=["-p","--model",i,"--output-format","json"];r&&o.push("--json-schema",tv);let{stdout:s,stderr:a,code:c}=await rv(o,e);if(c!==0)throw new Error(`claude CLI exited ${c}: ${(a||s).slice(0,500)}`);let l;try{l=JSON.parse(s)}catch{return{text:s.trim(),inputTokens:je(e),outputTokens:je(s),model:i}}if(l.is_error)throw new Error(`claude CLI error: ${l.result||"unknown error"}`);let d=r&&l.structured_output?JSON.stringify(l.structured_output):(l.result||"").trim(),p=l.usage||{};return{text:d,inputTokens:p.input_tokens||je(e),outputTokens:p.output_tokens||je(d),model:i,cost:l.total_cost_usd||0}}async function ov(){return{env:{}}}var ev,tv,iv,Fd=f(()=>{R();zn();ev={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},tv=JSON.stringify({type:"object",additionalProperties:!0});iv={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var Hd={};T(Hd,{chat:()=>sv,meta:()=>av,setup:()=>cv});async function sv(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.ollamaModel,i=`${E.llm.ollamaHost}/api/chat`,o={model:n,messages:[{role:"user",content:e}],stream:!1};r&&(o.format="json");let s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!s.ok){let c=await s.text();throw new Error(`Ollama error ${s.status}: ${c}`)}let a=await s.json();return{text:a.message.content.trim(),inputTokens:a.prompt_eval_count||je(e),outputTokens:a.eval_count||je(a.message.content),model:n}}async function cv({existing:e,clack:t}){let r=e.OLLAMA_HOST||"http://localhost:11434",n=await t.text({message:"Ollama host",placeholder:r,initialValue:r,validate:i=>{if(i&&!/^https?:\/\//.test(i))return"Must start with http:// or https://"}});return t.isCancel(n)?null:{env:{OLLAMA_HOST:n||r}}}var av,Bd=f(()=>{R();zn();av={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function Sa(e,t){let r={};for(let n of e)r[n[t]]=n;return r}function eo(e,t){if(t<1)return[];let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var to=f(()=>{});var Ud={};T(Ud,{embedBatch:()=>uv});async function uv(e,{model:t,ollamaHost:r}){let n=eo(e,lv),i=[];for(let o of n){let s=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:t,input:o})});if(!s.ok)throw new Error(`Ollama embed failed: ${s.status} ${await s.text()}`);let a=await s.json();i.push(...a.embeddings)}return i}var lv,Gd=f(()=>{to();lv=50});var jd={};T(jd,{embedBatch:()=>dv});async function dv(e,{model:t,openaiApiKey:r,dimensions:n}={}){let i={model:t,input:e};n&&/^text-embedding-3/.test(t)&&(i.dimensions=n);let o=await fetch("https://api.openai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(i)});if(!o.ok)throw new Error(`OpenAI embed failed: ${o.status} ${await o.text()}`);return(await o.json()).data.map(a=>a.embedding)}var Wd=f(()=>{});var Vd={};T(Vd,{embedBatch:()=>fv});async function fv(e,{model:t,voyageApiKey:r,inputType:n="document",dimensions:i}={}){if(!r)throw new Error("VOYAGE_API_KEY is not set. Get one at dashboard.voyageai.com.");let o=eo(e,pv),s=[];for(let a of o){let c={input:a,model:t||"voyage-3-large",input_type:n==="query"?"query":"document"};i&&(c.output_dimension=i);let l=await fetch("https://api.voyageai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(c)});if(!l.ok){let u=await l.text();throw new Error(`Voyage embed failed: ${l.status} ${u}`)}let p=[...(await l.json()).data].sort((u,m)=>u.index-m.index);s.push(...p.map(u=>u.embedding))}return s}var pv,Kd=f(()=>{to();pv=50});var Yd={};T(Yd,{embedBatch:()=>hv});async function hv(e,{model:t,openrouterApiKey:r,openrouterBaseUrl:n,openrouterReferer:i,openrouterTitle:o,dimensions:s}={}){if(!r)throw new Error("OPENROUTER_API_KEY is not set");if(!t)throw new Error('No OpenRouter embedding model resolved. Set EMBEDDING_MODEL (e.g. "openai/text-embedding-3-large").');let a={model:t,input:e};s&&/(^|\/)text-embedding-3/.test(t)&&(a.dimensions=s);let c=(n||mv).replace(/\/+$/,""),l={"Content-Type":"application/json",Authorization:`Bearer ${r}`};i&&(l["HTTP-Referer"]=i),o&&(l["X-Title"]=o);let d=await fetch(`${c}/embeddings`,{method:"POST",headers:l,body:JSON.stringify(a)});if(!d.ok)throw new Error(`OpenRouter embed failed: ${d.status} ${await d.text()}`);return[...(await d.json()).data].sort((m,g)=>m.index-g.index).map(m=>m.embedding)}var mv,qd=f(()=>{mv="https://openrouter.ai/api/v1"});var io={};T(io,{detectEmbeddingProvider:()=>Oa,detectProvider:()=>$a,getEmbedder:()=>Aa,getProvider:()=>no,isClaudeCliAvailable:()=>zd,isOllamaReachable:()=>Ca,listProvidersForSetup:()=>wv,resetDetection:()=>yv,resolveProviderAndModel:()=>Ta});import{spawn as gv}from"node:child_process";async function no(e){if(!va[e]){let t=ro[e];if(!t)throw new Error(`Unknown LLM provider: "${e}". Available: ${Object.keys(ro).join(", ")}`);let r=await t();va[e]=r.chat}return va[e]}async function Aa(e){if(!Ia[e]){let t=Jd[e];if(!t)throw new Error(`Unknown embedding provider: "${e}". Available: ${Object.keys(Jd).join(", ")}`);let r=await t();Ia[e]=r.embedBatch}return Ia[e]}function Ta(e,t){if(!e)return{provider:t,model:null};let r=e.indexOf(":");return r>0&&ro[e.slice(0,r)]?{provider:e.slice(0,r),model:e.slice(r+1)}:{provider:t,model:e}}async function Ca(){let e=E.llm.ollamaHost||E.embedding.ollamaHost||"http://localhost:11434";try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function zd(){return new Promise(e=>{let t=gv("claude",["--version"],{stdio:"pipe"});t.on("error",()=>e(!1)),t.on("close",r=>e(r===0)),setTimeout(()=>{t.kill(),e(!1)},3e3)})}async function $a(){if(Ee)return Ee;if(E.llm.provider)return Ee=E.llm.provider,Ee;if(E.llm.openrouterApiKey)return Ee="openrouter",Ee;if(E.llm.apiKey)return Ee="anthropic",Ee;if(E.llm.openaiApiKey)return Ee="openai",Ee;if(await Ca())return Ee="ollama",Ee;if(await zd())return Ee="claude-cli",Ee;throw new Error(`No LLM provider available. Either:
46
+ or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var Kv,qv,zp,gn,Zp=f(()=>{$();Kv="https://openrouter.ai/api/v1";qv={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},zp="google/gemini-flash-latest",gn={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var Qp={};v(Qp,{chat:()=>eA,meta:()=>tA,setup:()=>rA});import{spawn as zv}from"node:child_process";function Qv(e,t){let r=_.llm.cliTimeout||12e4;return new Promise((n,i)=>{let o=zv("claude",e,{stdio:["pipe","pipe","pipe"]}),s=setTimeout(()=>{o.kill("SIGTERM"),i(new Error(`claude CLI timed out after ${r}ms`))},r),a="",c="";o.stdout.on("data",l=>{a+=l}),o.stderr.on("data",l=>{c+=l}),o.on("error",l=>{clearTimeout(s),i(new Error(`Failed to spawn claude CLI: ${l.message}`))}),o.on("close",l=>{clearTimeout(s),n({stdout:a,stderr:c,code:l})}),o.stdin.write(t),o.stdin.end()})}async function eA(e,{model:t,jsonMode:r=!1}={}){let n=t||_.llm.cliModel||"haiku",i=Xv[n]||n,o=["-p","--model",i,"--output-format","json"];r&&o.push("--json-schema",Zv);let{stdout:s,stderr:a,code:c}=await Qv(o,e);if(c!==0)throw new Error(`claude CLI exited ${c}: ${(a||s).slice(0,500)}`);let l;try{l=JSON.parse(s)}catch{return{text:s.trim(),inputTokens:Je(e),outputTokens:Je(s),model:i}}if(l.is_error)throw new Error(`claude CLI error: ${l.result||"unknown error"}`);let d=r&&l.structured_output?JSON.stringify(l.structured_output):(l.result||"").trim(),p=l.usage||{};return{text:d,inputTokens:p.input_tokens||Je(e),outputTokens:p.output_tokens||Je(d),model:i,cost:l.total_cost_usd||0}}async function rA(){return{env:{}}}var Xv,Zv,tA,ef=f(()=>{$();vi();Xv={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},Zv=JSON.stringify({type:"object",additionalProperties:!0});tA={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var tf={};v(tf,{chat:()=>nA,meta:()=>iA,setup:()=>oA});async function nA(e,{model:t,jsonMode:r=!1}={}){let n=t||_.llm.ollamaModel,i=`${_.llm.ollamaHost}/api/chat`,o={model:n,messages:[{role:"user",content:e}],stream:!1};r&&(o.format="json");let s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!s.ok){let c=await s.text();throw new Error(`Ollama error ${s.status}: ${c}`)}let a=await s.json();return{text:a.message.content.trim(),inputTokens:a.prompt_eval_count||Je(e),outputTokens:a.eval_count||Je(a.message.content),model:n}}async function oA({existing:e,clack:t}){let r=e.OLLAMA_HOST||"http://localhost:11434",n=await t.text({message:"Ollama host",placeholder:r,initialValue:r,validate:i=>{if(i&&!/^https?:\/\//.test(i))return"Must start with http:// or https://"}});return t.isCancel(n)?null:{env:{OLLAMA_HOST:n||r}}}var iA,rf=f(()=>{$();vi();iA={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function xc(e,t){let r={};for(let n of e)r[n[t]]=n;return r}function Vo(e,t){if(t<1)return[];let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var Ko=f(()=>{});var nf={};v(nf,{embedBatch:()=>aA});async function aA(e,{model:t,ollamaHost:r}){let n=Vo(e,sA),i=[];for(let o of n){let s=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:t,input:o})});if(!s.ok)throw new Error(`Ollama embed failed: ${s.status} ${await s.text()}`);let a=await s.json();i.push(...a.embeddings)}return i}var sA,of=f(()=>{Ko();sA=50});var sf={};v(sf,{embedBatch:()=>cA});async function cA(e,{model:t,openaiApiKey:r,dimensions:n}={}){let i={model:t,input:e};n&&/^text-embedding-3/.test(t)&&(i.dimensions=n);let o=await fetch("https://api.openai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(i)});if(!o.ok)throw new Error(`OpenAI embed failed: ${o.status} ${await o.text()}`);return(await o.json()).data.map(a=>a.embedding)}var af=f(()=>{});var cf={};v(cf,{embedBatch:()=>uA});async function uA(e,{model:t,voyageApiKey:r,inputType:n="document",dimensions:i}={}){if(!r)throw new Error("VOYAGE_API_KEY is not set. Get one at dashboard.voyageai.com.");let o=Vo(e,lA),s=[];for(let a of o){let c={input:a,model:t||"voyage-3-large",input_type:n==="query"?"query":"document"};i&&(c.output_dimension=i);let l=await fetch("https://api.voyageai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(c)});if(!l.ok){let u=await l.text();throw new Error(`Voyage embed failed: ${l.status} ${u}`)}let p=[...(await l.json()).data].sort((u,m)=>u.index-m.index);s.push(...p.map(u=>u.embedding))}return s}var lA,lf=f(()=>{Ko();lA=50});var uf={};v(uf,{embedBatch:()=>pA});async function pA(e,{model:t,openrouterApiKey:r,openrouterBaseUrl:n,openrouterReferer:i,openrouterTitle:o,dimensions:s}={}){if(!r)throw new Error("OPENROUTER_API_KEY is not set");if(!t)throw new Error('No OpenRouter embedding model resolved. Set EMBEDDING_MODEL (e.g. "openai/text-embedding-3-large").');let a={model:t,input:e};s&&/(^|\/)text-embedding-3/.test(t)&&(a.dimensions=s);let c=(n||dA).replace(/\/+$/,""),l={"Content-Type":"application/json",Authorization:`Bearer ${r}`};i&&(l["HTTP-Referer"]=i),o&&(l["X-Title"]=o);let d=await fetch(`${c}/embeddings`,{method:"POST",headers:l,body:JSON.stringify(a)});if(!d.ok)throw new Error(`OpenRouter embed failed: ${d.status} ${await d.text()}`);return[...(await d.json()).data].sort((m,h)=>m.index-h.index).map(m=>m.embedding)}var dA,df=f(()=>{dA="https://openrouter.ai/api/v1"});var Ai={};v(Ai,{detectEmbeddingProvider:()=>Rc,detectProvider:()=>Oc,getEmbedder:()=>Ac,getProvider:()=>qo,isClaudeCliAvailable:()=>ff,isOllamaReachable:()=>Cc,listProvidersForSetup:()=>hA,resetDetection:()=>mA,resolveProviderAndModel:()=>Tc});import{spawn as fA}from"node:child_process";async function qo(e){if(!Ic[e]){let t=Yo[e];if(!t)throw new Error(`Unknown LLM provider: "${e}". Available: ${Object.keys(Yo).join(", ")}`);let r=await t();Ic[e]=r.chat}return Ic[e]}async function Ac(e){if(!vc[e]){let t=pf[e];if(!t)throw new Error(`Unknown embedding provider: "${e}". Available: ${Object.keys(pf).join(", ")}`);let r=await t();vc[e]=r.embedBatch}return vc[e]}function Tc(e,t){if(!e)return{provider:t,model:null};let r=e.indexOf(":");return r>0&&Yo[e.slice(0,r)]?{provider:e.slice(0,r),model:e.slice(r+1)}:{provider:t,model:e}}async function Cc(){let e=_.llm.ollamaHost||_.embedding.ollamaHost||"http://localhost:11434";try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function ff(){return new Promise(e=>{let t=fA("claude",["--version"],{stdio:"pipe"});t.on("error",()=>e(!1)),t.on("close",r=>e(r===0)),setTimeout(()=>{t.kill(),e(!1)},3e3)})}async function Oc(){if(xe)return xe;if(_.llm.provider)return xe=_.llm.provider,xe;if(_.llm.openrouterApiKey)return xe="openrouter",xe;if(_.llm.apiKey)return xe="anthropic",xe;if(_.llm.openaiApiKey)return xe="openai",xe;if(await Cc())return xe="ollama",xe;if(await ff())return xe="claude-cli",xe;throw new Error(`No LLM provider available. Either:
46
47
  - Set LLM_PROVIDER (openai, anthropic, openrouter, ollama, claude-cli)
47
48
  - Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY
48
49
  - Start Ollama locally
49
- - Install the Claude CLI (claude)`)}async function Oa(){if(Ae)return Ae;if(E.embedding.provider)return Ae=E.embedding.provider,Ae;if(E.embedding.voyageApiKey)return Ae="voyage",Ae;if(await Ca())return Ae="ollama",Ae;if(E.embedding.openaiApiKey)return Ae="openai",Ae;if(E.embedding.openrouterApiKey)return Ae="openrouter",Ae;throw new Error(`No embedding provider available. Either:
50
+ - Install the Claude CLI (claude)`)}async function Rc(){if(Re)return Re;if(_.embedding.provider)return Re=_.embedding.provider,Re;if(_.embedding.voyageApiKey)return Re="voyage",Re;if(await Cc())return Re="ollama",Re;if(_.embedding.openaiApiKey)return Re="openai",Re;if(_.embedding.openrouterApiKey)return Re="openrouter",Re;throw new Error(`No embedding provider available. Either:
50
51
  - Set EMBEDDING_PROVIDER (voyage, ollama, openai, openrouter)
51
52
  - Set VOYAGE_API_KEY (recommended \u2014 best quality)
52
53
  - Start Ollama locally
53
54
  - Set OPENAI_API_KEY
54
- - Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function yv(){Ee=null,Ae=null}async function wv(){return await Promise.all(Object.entries(ro).map(async([t,r])=>{let n=await r();if(!n.meta||typeof n.setup!="function")throw new Error(`Provider "${t}" is missing the init contract \u2014 expected exports: meta, setup`);return{...n.meta,setup:n.setup}}))}var ro,Jd,va,Ia,Ee,Ae,Kr=f(()=>{R();ro={openai:()=>Promise.resolve().then(()=>(Ad(),Id)),anthropic:()=>Promise.resolve().then(()=>(Dd(),Nd)),openrouter:()=>Promise.resolve().then(()=>(Pd(),kd)),"claude-cli":()=>Promise.resolve().then(()=>(Fd(),Md)),ollama:()=>Promise.resolve().then(()=>(Bd(),Hd))},Jd={ollama:()=>Promise.resolve().then(()=>(Gd(),Ud)),openai:()=>Promise.resolve().then(()=>(Wd(),jd)),voyage:()=>Promise.resolve().then(()=>(Kd(),Vd)),openrouter:()=>Promise.resolve().then(()=>(qd(),Yd))},va={},Ia={};Ee=null,Ae=null});function fe(e){return e?`[${e.join(",")}]`:null}function Xd(){let e=Number(E.embedding.dimensions)||768;if(!Number.isInteger(e)||e<=0)throw new Error(`Invalid EMBEDDING_DIMENSIONS: ${E.embedding.dimensions}`);return e}function st(e="embedding"){return`(${e}::halfvec(${Xd()}))`}function at(){return`?::halfvec(${Xd()})`}var $t=f(()=>{R()});import{createHash as _v}from"node:crypto";function bv(e,t,r,n="document"){let i=_v("sha256");return i.update(e),i.update("\0"),i.update(t),i.update("\0"),i.update(n),i.update("\0"),i.update(r),i.digest("hex")}async function xv(e){if(!e.length)return new Map;let t=await _("embedding_cache").whereIn("key",e).select("key","embedding");return new Map(t.map(r=>[r.key,Sv(r.embedding)]))}function Sv(e){return Array.isArray(e)||typeof e!="string"?e:(e.startsWith("[")?e.slice(1,-1):e).split(",").map(Number)}async function vv(e){e.length&&await _("embedding_cache").whereIn("key",e).update({hits:_.raw("hits + 1"),lastUsedAt:_.fn.now()})}async function Iv(e,t,r){if(e.length){for(let{key:n,embedding:i}of e)await _.raw(`
55
+ - Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function mA(){xe=null,Re=null}async function hA(){return await Promise.all(Object.entries(Yo).map(async([t,r])=>{let n=await r();if(!n.meta||typeof n.setup!="function")throw new Error(`Provider "${t}" is missing the init contract \u2014 expected exports: meta, setup`);return{...n.meta,setup:n.setup}}))}var Yo,pf,Ic,vc,xe,Re,Sr=f(()=>{$();Yo={openai:()=>Promise.resolve().then(()=>(Wp(),jp)),anthropic:()=>Promise.resolve().then(()=>(Jp(),qp)),openrouter:()=>Promise.resolve().then(()=>(Zp(),Xp)),"claude-cli":()=>Promise.resolve().then(()=>(ef(),Qp)),ollama:()=>Promise.resolve().then(()=>(rf(),tf))},pf={ollama:()=>Promise.resolve().then(()=>(of(),nf)),openai:()=>Promise.resolve().then(()=>(af(),sf)),voyage:()=>Promise.resolve().then(()=>(lf(),cf)),openrouter:()=>Promise.resolve().then(()=>(df(),uf))},Ic={},vc={};xe=null,Re=null});function he(e){return e?`[${e.join(",")}]`:null}function mf(){let e=Number(_.embedding.dimensions)||768;if(!Number.isInteger(e)||e<=0)throw new Error(`Invalid EMBEDDING_DIMENSIONS: ${_.embedding.dimensions}`);return e}function pt(e="embedding"){return`(${e}::halfvec(${mf()}))`}function ft(){return`?::halfvec(${mf()})`}var Gt=f(()=>{$()});import{createHash as gA}from"node:crypto";function wA(e,t,r,n="document"){let i=gA("sha256");return i.update(e),i.update("\0"),i.update(t),i.update("\0"),i.update(n),i.update("\0"),i.update(r),i.digest("hex")}async function EA(e){if(!e.length)return new Map;let t=await E("embedding_cache").whereIn("key",e).select("key","embedding");return new Map(t.map(r=>[r.key,_A(r.embedding)]))}function _A(e){return Array.isArray(e)||typeof e!="string"?e:(e.startsWith("[")?e.slice(1,-1):e).split(",").map(Number)}async function SA(e){e.length&&await E("embedding_cache").whereIn("key",e).update({hits:E.raw("hits + 1"),lastUsedAt:E.fn.now()})}async function bA(e,t,r){if(e.length){for(let{key:n,embedding:i}of e)await E.raw(`
55
56
  INSERT INTO embedding_cache (key, provider, model, embedding, hits, created_at, last_used_at)
56
57
  VALUES (?, ?, ?, ?, 0, NOW(), NOW())
57
58
  ON CONFLICT (key) DO UPDATE
58
59
  SET last_used_at = NOW(),
59
60
  hits = embedding_cache.hits + 1
60
- `,[n,t,r,fe(i)]);await Tv()}}async function Tv(){let e=Date.now();if(e-Qd<Av)return;Qd=e;let[{count:t}]=await _("embedding_cache").count("key as count"),r=Number(t);if(r<=Zd)return;let n=Math.min(r-Zd,Ev);await _.raw(`
61
+ `,[n,t,r,he(i)]);await IA()}}async function IA(){let e=Date.now();if(e-gf<xA)return;gf=e;let[{count:t}]=await E("embedding_cache").count("key as count"),r=Number(t);if(r<=hf)return;let n=Math.min(r-hf,yA);await E.raw(`
61
62
  DELETE FROM embedding_cache WHERE key IN (
62
63
  SELECT key FROM embedding_cache ORDER BY last_used_at ASC LIMIT ?
63
64
  )
64
- `,[n])}async function ep(e,t,r,n,i,o={}){if(!e.length)return[];let s=o.inputType||i?.inputType||"document",a=e.map(m=>bv(t,r,m,s)),c=await xv(a),l=[],d=[],p=new Array(e.length);for(let m=0;m<e.length;m++){let g=c.get(a[m]);g?p[m]=g:(l.push(e[m]),d.push(m))}if(l.length){let m=await n(l,i),g=[];for(let y=0;y<l.length;y++){let w=d[y];p[w]=m[y],g.push({key:a[w],embedding:m[y]})}Iv(g,t,r).catch(y=>{process.stderr.write(`[embedding-cache] store failed: ${y.message}
65
- `)})}let u=a.filter(m=>c.has(m));return u.length&&vv(u).catch(()=>{}),p}var Zd,Ev,Qd,Av,tp=f(()=>{$t();D();Zd=1e4,Ev=500;Qd=0,Av=6e4});var oo={};T(oo,{dimensions:()=>Cv,embed:()=>or,embedBatch:()=>ft});async function or(e,t={}){let[r]=await ft([e],t);return r}async function ft(e,{inputType:t="document"}={}){if(!e.length)return[];let r=await Oa(),n=await Aa(r),i=E.embedding.model,o={...E.embedding,inputType:t};return ep(e,r,i,n,o,{inputType:t})}var Cv,Ot=f(()=>{R();Kr();tp();({dimensions:Cv}=E.embedding)});var np={};T(np,{parseJson:()=>so,prompt:()=>mt,promptJson:()=>We});async function rp(e){let t=await $a();return Ta(e,t)}async function mt(e,{model:t,caller:r}={}){let{provider:n,model:i}=await rp(t),o=await no(n),s=Date.now();try{let a=await ba(()=>o(e,{model:i,jsonMode:!1}),E.llm.maxRetries),c=a.cost||Ea(a.model,a.inputTokens,a.outputTokens);return Jn({provider:n,model:a.model,caller:r,input:e,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-s,status:"success"}),a.text}catch(a){throw Jn({provider:n,model:i,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}async function We(e,{model:t,caller:r}={}){let{provider:n,model:i}=await rp(t),o=await no(n),s=Date.now();try{let a=await ba(()=>o(e,{model:i,jsonMode:!0}),E.llm.maxRetries),c=a.cost||Ea(a.model,a.inputTokens,a.outputTokens);return Jn({provider:n,model:a.model,caller:r,input:e,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-s,status:"success"}),so(a.text)}catch(a){throw Jn({provider:n,model:i,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}function so(e){try{return JSON.parse(e.trim())}catch{}let t=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(t)try{return JSON.parse(t[1].trim())}catch{}let r=e.match(/[\[{][\s\S]*[\]}]/);if(r)try{return JSON.parse(r[0])}catch{}return null}var Ve=f(()=>{R();Kr();zn()});import{readFile as $v}from"node:fs/promises";import{join as Ov}from"node:path";async function ip(e,t,{title:r}){if(!e.length)return e;let n=await $v(Rv,"utf8"),i=e.map((s,a)=>`Chunk ${a+1}: ${s.content.slice(0,200)}`),o=`${n}
65
+ `,[n])}async function yf(e,t,r,n,i,o={}){if(!e.length)return[];let s=o.inputType||i?.inputType||"document",a=e.map(m=>wA(t,r,m,s)),c=await EA(a),l=[],d=[],p=new Array(e.length);for(let m=0;m<e.length;m++){let h=c.get(a[m]);h?p[m]=h:(l.push(e[m]),d.push(m))}if(l.length){let m=await n(l,i),h=[];for(let y=0;y<l.length;y++){let w=d[y];p[w]=m[y],h.push({key:a[w],embedding:m[y]})}bA(h,t,r).catch(y=>{process.stderr.write(`[embedding-cache] store failed: ${y.message}
66
+ `)})}let u=a.filter(m=>c.has(m));return u.length&&SA(u).catch(()=>{}),p}var hf,yA,gf,xA,wf=f(()=>{Gt();N();hf=1e4,yA=500;gf=0,xA=6e4});var Jo={};v(Jo,{dimensions:()=>vA,embed:()=>br,embedBatch:()=>bt});async function br(e,t={}){let[r]=await bt([e],t);return r}async function bt(e,{inputType:t="document"}={}){if(!e.length)return[];let r=await Rc(),n=await Ac(r),i=_.embedding.model,o={..._.embedding,inputType:t};return yf(e,r,i,n,o,{inputType:t})}var vA,jt=f(()=>{$();Sr();wf();({dimensions:vA}=_.embedding)});var _f={};v(_f,{parseJson:()=>zo,prompt:()=>xt,promptJson:()=>ze});async function Ef(e){let t=await Oc();return Tc(e,t)}async function xt(e,{model:t,caller:r}={}){let{provider:n,model:i}=await Ef(t),o=await qo(n),s=Date.now();try{let a=await Sc(()=>o(e,{model:i,jsonMode:!1}),_.llm.maxRetries),c=a.cost||_c(a.model,a.inputTokens,a.outputTokens);return Ii({provider:n,model:a.model,caller:r,input:e,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-s,status:"success"}),a.text}catch(a){throw Ii({provider:n,model:i,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}async function ze(e,{model:t,caller:r}={}){let{provider:n,model:i}=await Ef(t),o=await qo(n),s=Date.now();try{let a=await Sc(()=>o(e,{model:i,jsonMode:!0}),_.llm.maxRetries),c=a.cost||_c(a.model,a.inputTokens,a.outputTokens);return Ii({provider:n,model:a.model,caller:r,input:e,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-s,status:"success"}),zo(a.text)}catch(a){throw Ii({provider:n,model:i,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}function zo(e){try{return JSON.parse(e.trim())}catch{}let t=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(t)try{return JSON.parse(t[1].trim())}catch{}let r=e.match(/[\[{][\s\S]*[\]}]/);if(r)try{return JSON.parse(r[0])}catch{}return null}var Xe=f(()=>{$();Sr();vi()});import{readFile as AA}from"node:fs/promises";import{join as TA}from"node:path";async function Sf(e,t,{title:r}){if(!e.length)return e;let n=await AA(CA,"utf8"),i=e.map((s,a)=>`Chunk ${a+1}: ${s.content.slice(0,200)}`),o=`${n}
66
67
 
67
68
  ---
68
69
 
@@ -77,7 +78,7 @@ ${i.join(`
77
78
 
78
79
  ---
79
80
 
80
- Respond with a JSON array of ${e.length} context prefix strings.`;try{let s=await We(o,{model:E.llm.extractionModel,caller:"contextualizer"}),a=Array.isArray(s)?s:s&&typeof s=="object"?Object.values(s).find(l=>Array.isArray(l))??null:null;if(!a)return console.warn("[contextualizer] LLM did not return an array \u2014 skipping"),e;let c=a;return c.length!==e.length&&console.warn(`[contextualizer] Got ${c.length} prefixes for ${e.length} chunks \u2014 using partial`),e.map((l,d)=>({...l,contextualPrefix:typeof c[d]=="string"?c[d]:null}))}catch(s){return console.error("[contextualizer] Failed:",s.message),e}}var Rv,op=f(()=>{Ve();R();B();Rv=Ov(Ie,"chunk-context.md")});var sp,ap=f(()=>{sp="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as cp}from"node:crypto";function Dv(e){if(e<0||e>1024)throw new RangeError("Wrong ID size");!sr||sr.length<e?(sr=Buffer.allocUnsafe(e*Nv),cp.getRandomValues(sr),Yr=0):Yr+e>sr.length&&(cp.getRandomValues(sr),Yr=0),Yr+=e}function Ke(e=21){Dv(e|=0);let t="";for(let r=Yr-e;r<Yr;r++)t+=sp[sr[r]&63];return t}var Nv,sr,Yr,qr=f(()=>{ap();Nv=128});var co={};T(co,{deleteDocument:()=>Fv,findBySourcePath:()=>Lv,findByUid:()=>kv,getStats:()=>Pv,listDocuments:()=>Mv,resetHash:()=>Na,updateCounts:()=>ao,updateSourceMetadata:()=>Da,upsert:()=>Ra});async function Lv(e){let[t]=await _("document").where({sourcePath:e});return t||null}async function kv(e){let[t]=await _("document").where({uid:e});return t||null}async function Ra({sourcePath:e,sourceType:t,title:r=null,contentHash:n,namespace:i}){let o=`doc-${Ke(16)}`,{rows:[s]}=await _.raw(`
81
+ Respond with a JSON array of ${e.length} context prefix strings.`;try{let s=await ze(o,{model:_.llm.extractionModel,caller:"contextualizer"}),a=Array.isArray(s)?s:s&&typeof s=="object"?Object.values(s).find(l=>Array.isArray(l))??null:null;if(!a)return console.warn("[contextualizer] LLM did not return an array \u2014 skipping"),e;let c=a;return c.length!==e.length&&console.warn(`[contextualizer] Got ${c.length} prefixes for ${e.length} chunks \u2014 using partial`),e.map((l,d)=>({...l,contextualPrefix:typeof c[d]=="string"?c[d]:null}))}catch(s){return console.error("[contextualizer] Failed:",s.message),e}}var CA,bf=f(()=>{Xe();$();M();CA=TA(Ce,"chunk-context.md")});var xf,If=f(()=>{xf="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as vf}from"node:crypto";function RA(e){if(e<0||e>1024)throw new RangeError("Wrong ID size");!xr||xr.length<e?(xr=Buffer.allocUnsafe(e*OA),vf.getRandomValues(xr),yn=0):yn+e>xr.length&&(vf.getRandomValues(xr),yn=0),yn+=e}function Ze(e=21){RA(e|=0);let t="";for(let r=yn-e;r<yn;r++)t+=xf[xr[r]&63];return t}var OA,xr,yn,wn=f(()=>{If();OA=128});var Zo={};v(Zo,{deleteDocument:()=>kA,findBySourcePath:()=>$A,findByUid:()=>NA,getStats:()=>DA,listDocuments:()=>LA,resetHash:()=>Nc,updateCounts:()=>Xo,updateSourceMetadata:()=>Dc,upsert:()=>$c});async function $A(e){let[t]=await E("document").where({sourcePath:e});return t||null}async function NA(e){let[t]=await E("document").where({uid:e});return t||null}async function $c({sourcePath:e,sourceType:t,title:r=null,contentHash:n,namespace:i}){let o=`doc-${Ze(16)}`,{rows:[s]}=await E.raw(`
81
82
  INSERT INTO document (uid, source_path, source_type, title, content_hash, namespace, last_ingested_at, created_at, updated_at)
82
83
  VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), NOW())
83
84
  ON CONFLICT (source_path, namespace) DO UPDATE SET
@@ -86,12 +87,12 @@ Respond with a JSON array of ${e.length} context prefix strings.`;try{let s=awai
86
87
  last_ingested_at = NOW(),
87
88
  updated_at = NOW()
88
89
  RETURNING *, (xmax = 0) AS "isNew", content_hash != ? AS "contentChanged"
89
- `,[o,e,t,r,n,i,n]),c=s.isNew||s.contentChanged;return{doc:s,changed:c}}async function ao(e,{chunkCount:t,factCount:r}){await _("document").where({id:e}).update({chunkCount:t,factCount:r})}async function Pv(e){let t=_("document");e&&t.where({namespace:e});let r=await t;return{documentCount:r.length,totalChunks:r.reduce((n,i)=>n+(i.chunkCount||0),0),totalFacts:r.reduce((n,i)=>n+(i.factCount||0),0)}}async function Mv({namespace:e,sourceType:t,limit:r=100}={}){let n=_("document").orderBy("createdAt","desc").limit(r);return e&&n.where({namespace:e}),t&&n.where({sourceType:t}),n}async function Fv(e){await _("chunk").where({documentId:e}).del(),await _("document").where({id:e}).del()}async function Na(e){await _("document").where({id:e}).update({contentHash:null})}async function Da(e,t,r=null){if(!t&&!r)return;let n={};t&&Object.keys(t).length&&(n.sourceMetadata=JSON.stringify(t)),r&&(n.connectionId=r),Object.keys(n).length&&await _("document").where({id:e}).update(n)}var lo=f(()=>{qr();D()});async function lp(e,t,r){if(await _("chunk").where({documentId:e}).del(),!t.length)return[];let n=t.map((o,s)=>({documentId:e,chunkIndex:s,content:o.content,contextualPrefix:o.contextualPrefix||null,sectionHeading:o.sectionHeading||null,namespace:r,embedding:fe(o.embedding)})),i=await _("chunk").insert(n).returning("*");return await _.raw(`
90
+ `,[o,e,t,r,n,i,n]),c=s.isNew||s.contentChanged;return{doc:s,changed:c}}async function Xo(e,{chunkCount:t,factCount:r}){await E("document").where({id:e}).update({chunkCount:t,factCount:r})}async function DA(e){let t=E("document");e&&t.where({namespace:e});let r=await t;return{documentCount:r.length,totalChunks:r.reduce((n,i)=>n+(i.chunkCount||0),0),totalFacts:r.reduce((n,i)=>n+(i.factCount||0),0)}}async function LA({namespace:e,sourceType:t,limit:r=100}={}){let n=E("document").orderBy("createdAt","desc").limit(r);return e&&n.where({namespace:e}),t&&n.where({sourceType:t}),n}async function kA(e){await E("chunk").where({documentId:e}).del(),await E("document").where({id:e}).del()}async function Nc(e){await E("document").where({id:e}).update({contentHash:null})}async function Dc(e,t,r=null){if(!t&&!r)return;let n={};t&&Object.keys(t).length&&(n.sourceMetadata=JSON.stringify(t)),r&&(n.connectionId=r),Object.keys(n).length&&await E("document").where({id:e}).update(n)}var Qo=f(()=>{wn();N()});async function Af(e,t,r){if(await E("chunk").where({documentId:e}).del(),!t.length)return[];let n=t.map((o,s)=>({documentId:e,chunkIndex:s,content:o.content,contextualPrefix:o.contextualPrefix||null,sectionHeading:o.sectionHeading||null,namespace:r,embedding:he(o.embedding)})),i=await E("chunk").insert(n).returning("*");return await E.raw(`
90
91
  UPDATE chunk
91
92
  SET search_vector = to_tsvector('english', COALESCE(contextual_prefix, '') || ' ' || content)
92
93
  WHERE document_id = ?
93
- `,[e]),i}var up=f(()=>{D();$t()});var Bv,uo,La=f(()=>{Bv=typeof global=="object"&&global&&global.Object===Object&&global,uo=Bv});var Uv,Gv,le,ct=f(()=>{La();Uv=typeof self=="object"&&self&&self.Object===Object&&self,Gv=uo||Uv||Function("return this")(),le=Gv});var jv,be,Jr=f(()=>{ct();jv=le.Symbol,be=jv});function Kv(e){var t=Wv.call(e,Xn),r=e[Xn];try{e[Xn]=void 0;var n=!0}catch{}var i=Vv.call(e);return n&&(t?e[Xn]=r:delete e[Xn]),i}var dp,Wv,Vv,Xn,pp,fp=f(()=>{Jr();dp=Object.prototype,Wv=dp.hasOwnProperty,Vv=dp.toString,Xn=be?be.toStringTag:void 0;pp=Kv});function Jv(e){return qv.call(e)}var Yv,qv,mp,hp=f(()=>{Yv=Object.prototype,qv=Yv.toString;mp=Jv});function Zv(e){return e==null?e===void 0?Xv:zv:gp&&gp in Object(e)?pp(e):mp(e)}var zv,Xv,gp,Ye,zr=f(()=>{Jr();fp();hp();zv="[object Null]",Xv="[object Undefined]",gp=be?be.toStringTag:void 0;Ye=Zv});function Qv(e){return e!=null&&typeof e=="object"}var qe,Xr=f(()=>{qe=Qv});function tI(e){return typeof e=="symbol"||qe(e)&&Ye(e)==eI}var eI,Je,Zr=f(()=>{zr();Xr();eI="[object Symbol]";Je=tI});function rI(e,t){for(var r=-1,n=e==null?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}var Qr,ka=f(()=>{Qr=rI});var nI,J,De=f(()=>{nI=Array.isArray,J=nI});function _p(e){if(typeof e=="string")return e;if(J(e))return Qr(e,_p)+"";if(Je(e))return wp?wp.call(e):"";var t=e+"";return t=="0"&&1/e==-iI?"-0":t}var iI,yp,wp,Ep,bp=f(()=>{Jr();ka();De();Zr();iI=1/0,yp=be?be.prototype:void 0,wp=yp?yp.toString:void 0;Ep=_p});function sI(e){for(var t=e.length;t--&&oI.test(e.charAt(t)););return t}var oI,xp,Sp=f(()=>{oI=/\s/;xp=sI});function cI(e){return e&&e.slice(0,xp(e)+1).replace(aI,"")}var aI,vp,Ip=f(()=>{Sp();aI=/^\s+/;vp=cI});function lI(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var ze,en=f(()=>{ze=lI});function mI(e){if(typeof e=="number")return e;if(Je(e))return Ap;if(ze(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ze(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=vp(e);var r=dI.test(e);return r||pI.test(e)?fI(e.slice(2),r?2:8):uI.test(e)?Ap:+e}var Ap,uI,dI,pI,fI,Tp,Cp=f(()=>{Ip();en();Zr();Ap=NaN,uI=/^[-+]0x[0-9a-f]+$/i,dI=/^0b[01]+$/i,pI=/^0o[0-7]+$/i,fI=parseInt;Tp=mI});function gI(e){if(!e)return e===0?e:0;if(e=Tp(e),e===$p||e===-$p){var t=e<0?-1:1;return t*hI}return e===e?e:0}var $p,hI,Op,Rp=f(()=>{Cp();$p=1/0,hI=17976931348623157e292;Op=gI});function yI(e){var t=Op(e),r=t%1;return t===t?r?t-r:t:0}var Np,Dp=f(()=>{Rp();Np=yI});function wI(e){return e}var Rt,Zn=f(()=>{Rt=wI});function SI(e){if(!ze(e))return!1;var t=Ye(e);return t==EI||t==bI||t==_I||t==xI}var _I,EI,bI,xI,po,Pa=f(()=>{zr();en();_I="[object AsyncFunction]",EI="[object Function]",bI="[object GeneratorFunction]",xI="[object Proxy]";po=SI});var vI,fo,Lp=f(()=>{ct();vI=le["__core-js_shared__"],fo=vI});function II(e){return!!kp&&kp in e}var kp,Pp,Mp=f(()=>{Lp();kp=(function(){var e=/[^.]+$/.exec(fo&&fo.keys&&fo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();Pp=II});function CI(e){if(e!=null){try{return TI.call(e)}catch{}try{return e+""}catch{}}return""}var AI,TI,ht,Ma=f(()=>{AI=Function.prototype,TI=AI.toString;ht=CI});function PI(e){if(!ze(e)||Pp(e))return!1;var t=po(e)?kI:OI;return t.test(ht(e))}var $I,OI,RI,NI,DI,LI,kI,Fp,Hp=f(()=>{Pa();Mp();en();Ma();$I=/[\\^$.*+?()[\]{}|]/g,OI=/^\[object .+?Constructor\]$/,RI=Function.prototype,NI=Object.prototype,DI=RI.toString,LI=NI.hasOwnProperty,kI=RegExp("^"+DI.call(LI).replace($I,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");Fp=PI});function MI(e,t){return e?.[t]}var Bp,Up=f(()=>{Bp=MI});function FI(e,t){var r=Bp(e,t);return Fp(r)?r:void 0}var xe,Nt=f(()=>{Hp();Up();xe=FI});var HI,mo,Gp=f(()=>{Nt();ct();HI=xe(le,"WeakMap"),mo=HI});function BI(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}var jp,Wp=f(()=>{jp=BI});function UI(){}var Vp,Kp=f(()=>{Vp=UI});function VI(e){var t=0,r=0;return function(){var n=WI(),i=jI-(n-r);if(r=n,i>0){if(++t>=GI)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var GI,jI,WI,Yp,qp=f(()=>{GI=800,jI=16,WI=Date.now;Yp=VI});function KI(e){return function(){return e}}var Jp,zp=f(()=>{Jp=KI});var YI,tn,Fa=f(()=>{Nt();YI=(function(){try{var e=xe(Object,"defineProperty");return e({},"",{}),e}catch{}})(),tn=YI});var qI,Xp,Zp=f(()=>{zp();Fa();Zn();qI=tn?function(e,t){return tn(e,"toString",{configurable:!0,enumerable:!1,value:Jp(t),writable:!0})}:Rt,Xp=qI});var JI,Qp,ef=f(()=>{Zp();qp();JI=Yp(Xp),Qp=JI});function zI(e,t,r,n){for(var i=e.length,o=r+(n?1:-1);n?o--:++o<i;)if(t(e[o],o,e))return o;return-1}var tf,rf=f(()=>{tf=zI});function XI(e){return e!==e}var nf,of=f(()=>{nf=XI});function ZI(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}var sf,af=f(()=>{sf=ZI});function QI(e,t,r){return t===t?sf(e,t,r):tf(e,nf,r)}var cf,lf=f(()=>{rf();of();af();cf=QI});function eA(e,t){var r=e==null?0:e.length;return!!r&&cf(e,t,0)>-1}var uf,df=f(()=>{lf();uf=eA});function nA(e,t){var r=typeof e;return t=t??tA,!!t&&(r=="number"||r!="symbol"&&rA.test(e))&&e>-1&&e%1==0&&e<t}var tA,rA,rn,ho=f(()=>{tA=9007199254740991,rA=/^(?:0|[1-9]\d*)$/;rn=nA});function iA(e,t,r){t=="__proto__"&&tn?tn(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var pf,ff=f(()=>{Fa();pf=iA});function oA(e,t){return e===t||e!==e&&t!==t}var nn,go=f(()=>{nn=oA});function sA(e,t,r){return t=mf(t===void 0?e.length-1:t,0),function(){for(var n=arguments,i=-1,o=mf(n.length-t,0),s=Array(o);++i<o;)s[i]=n[t+i];i=-1;for(var a=Array(t+1);++i<t;)a[i]=n[i];return a[t]=r(s),jp(e,this,a)}}var mf,hf,gf=f(()=>{Wp();mf=Math.max;hf=sA});function aA(e,t){return Qp(hf(e,t,Rt),e+"")}var yf,wf=f(()=>{Zn();gf();ef();yf=aA});function lA(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=cA}var cA,on,yo=f(()=>{cA=9007199254740991;on=lA});function uA(e){return e!=null&&on(e.length)&&!po(e)}var Dt,Qn=f(()=>{Pa();yo();Dt=uA});function dA(e,t,r){if(!ze(r))return!1;var n=typeof t;return(n=="number"?Dt(r)&&rn(t,r.length):n=="string"&&t in r)?nn(r[t],e):!1}var ei,Ha=f(()=>{go();Qn();ho();en();ei=dA});function fA(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||pA;return e===r}var pA,_f,Ef=f(()=>{pA=Object.prototype;_f=fA});function mA(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var bf,xf=f(()=>{bf=mA});function gA(e){return qe(e)&&Ye(e)==hA}var hA,Ba,Sf=f(()=>{zr();Xr();hA="[object Arguments]";Ba=gA});var vf,yA,wA,_A,sn,wo=f(()=>{Sf();Xr();vf=Object.prototype,yA=vf.hasOwnProperty,wA=vf.propertyIsEnumerable,_A=Ba((function(){return arguments})())?Ba:function(e){return qe(e)&&yA.call(e,"callee")&&!wA.call(e,"callee")},sn=_A});function EA(){return!1}var If,Af=f(()=>{If=EA});var $f,Tf,bA,Cf,xA,SA,ti,Ua=f(()=>{ct();Af();$f=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Tf=$f&&typeof module=="object"&&module&&!module.nodeType&&module,bA=Tf&&Tf.exports===$f,Cf=bA?le.Buffer:void 0,xA=Cf?Cf.isBuffer:void 0,SA=xA||If,ti=SA});function qA(e){return qe(e)&&on(e.length)&&!!Y[Ye(e)]}var vA,IA,AA,TA,CA,$A,OA,RA,NA,DA,LA,kA,PA,MA,FA,HA,BA,UA,GA,jA,WA,VA,KA,YA,Y,Of,Rf=f(()=>{zr();yo();Xr();vA="[object Arguments]",IA="[object Array]",AA="[object Boolean]",TA="[object Date]",CA="[object Error]",$A="[object Function]",OA="[object Map]",RA="[object Number]",NA="[object Object]",DA="[object RegExp]",LA="[object Set]",kA="[object String]",PA="[object WeakMap]",MA="[object ArrayBuffer]",FA="[object DataView]",HA="[object Float32Array]",BA="[object Float64Array]",UA="[object Int8Array]",GA="[object Int16Array]",jA="[object Int32Array]",WA="[object Uint8Array]",VA="[object Uint8ClampedArray]",KA="[object Uint16Array]",YA="[object Uint32Array]",Y={};Y[HA]=Y[BA]=Y[UA]=Y[GA]=Y[jA]=Y[WA]=Y[VA]=Y[KA]=Y[YA]=!0;Y[vA]=Y[IA]=Y[MA]=Y[AA]=Y[FA]=Y[TA]=Y[CA]=Y[$A]=Y[OA]=Y[RA]=Y[NA]=Y[DA]=Y[LA]=Y[kA]=Y[PA]=!1;Of=qA});function JA(e){return function(t){return e(t)}}var _o,Ga=f(()=>{_o=JA});var Nf,ri,zA,ja,XA,Wa,Df=f(()=>{La();Nf=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ri=Nf&&typeof module=="object"&&module&&!module.nodeType&&module,zA=ri&&ri.exports===Nf,ja=zA&&uo.process,XA=(function(){try{var e=ri&&ri.require&&ri.require("util").types;return e||ja&&ja.binding&&ja.binding("util")}catch{}})(),Wa=XA});var Lf,ZA,Eo,Va=f(()=>{Rf();Ga();Df();Lf=Wa&&Wa.isTypedArray,ZA=Lf?_o(Lf):Of,Eo=ZA});function t0(e,t){var r=J(e),n=!r&&sn(e),i=!r&&!n&&ti(e),o=!r&&!n&&!i&&Eo(e),s=r||n||i||o,a=s?bf(e.length,String):[],c=a.length;for(var l in e)(t||e0.call(e,l))&&!(s&&(l=="length"||i&&(l=="offset"||l=="parent")||o&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||rn(l,c)))&&a.push(l);return a}var QA,e0,kf,Pf=f(()=>{xf();wo();De();Ua();ho();Va();QA=Object.prototype,e0=QA.hasOwnProperty;kf=t0});function r0(e,t){return function(r){return e(t(r))}}var Mf,Ff=f(()=>{Mf=r0});var n0,Hf,Bf=f(()=>{Ff();n0=Mf(Object.keys,Object),Hf=n0});function s0(e){if(!_f(e))return Hf(e);var t=[];for(var r in Object(e))o0.call(e,r)&&r!="constructor"&&t.push(r);return t}var i0,o0,Uf,Gf=f(()=>{Ef();Bf();i0=Object.prototype,o0=i0.hasOwnProperty;Uf=s0});function a0(e){return Dt(e)?kf(e):Uf(e)}var an,bo=f(()=>{Pf();Gf();Qn();an=a0});function u0(e,t){if(J(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||Je(e)?!0:l0.test(e)||!c0.test(e)||t!=null&&e in Object(t)}var c0,l0,cn,xo=f(()=>{De();Zr();c0=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,l0=/^\w*$/;cn=u0});var d0,gt,ni=f(()=>{Nt();d0=xe(Object,"create"),gt=d0});function p0(){this.__data__=gt?gt(null):{},this.size=0}var jf,Wf=f(()=>{ni();jf=p0});function f0(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Vf,Kf=f(()=>{Vf=f0});function y0(e){var t=this.__data__;if(gt){var r=t[e];return r===m0?void 0:r}return g0.call(t,e)?t[e]:void 0}var m0,h0,g0,Yf,qf=f(()=>{ni();m0="__lodash_hash_undefined__",h0=Object.prototype,g0=h0.hasOwnProperty;Yf=y0});function E0(e){var t=this.__data__;return gt?t[e]!==void 0:_0.call(t,e)}var w0,_0,Jf,zf=f(()=>{ni();w0=Object.prototype,_0=w0.hasOwnProperty;Jf=E0});function x0(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=gt&&t===void 0?b0:t,this}var b0,Xf,Zf=f(()=>{ni();b0="__lodash_hash_undefined__";Xf=x0});function ln(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var Ka,Qf=f(()=>{Wf();Kf();qf();zf();Zf();ln.prototype.clear=jf;ln.prototype.delete=Vf;ln.prototype.get=Yf;ln.prototype.has=Jf;ln.prototype.set=Xf;Ka=ln});function S0(){this.__data__=[],this.size=0}var em,tm=f(()=>{em=S0});function v0(e,t){for(var r=e.length;r--;)if(nn(e[r][0],t))return r;return-1}var Lt,ii=f(()=>{go();Lt=v0});function T0(e){var t=this.__data__,r=Lt(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():A0.call(t,r,1),--this.size,!0}var I0,A0,rm,nm=f(()=>{ii();I0=Array.prototype,A0=I0.splice;rm=T0});function C0(e){var t=this.__data__,r=Lt(t,e);return r<0?void 0:t[r][1]}var im,om=f(()=>{ii();im=C0});function $0(e){return Lt(this.__data__,e)>-1}var sm,am=f(()=>{ii();sm=$0});function O0(e,t){var r=this.__data__,n=Lt(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var cm,lm=f(()=>{ii();cm=O0});function un(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var kt,oi=f(()=>{tm();nm();om();am();lm();un.prototype.clear=em;un.prototype.delete=rm;un.prototype.get=im;un.prototype.has=sm;un.prototype.set=cm;kt=un});var R0,Pt,So=f(()=>{Nt();ct();R0=xe(le,"Map"),Pt=R0});function N0(){this.size=0,this.__data__={hash:new Ka,map:new(Pt||kt),string:new Ka}}var um,dm=f(()=>{Qf();oi();So();um=N0});function D0(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var pm,fm=f(()=>{pm=D0});function L0(e,t){var r=e.__data__;return pm(t)?r[typeof t=="string"?"string":"hash"]:r.map}var Mt,si=f(()=>{fm();Mt=L0});function k0(e){var t=Mt(this,e).delete(e);return this.size-=t?1:0,t}var mm,hm=f(()=>{si();mm=k0});function P0(e){return Mt(this,e).get(e)}var gm,ym=f(()=>{si();gm=P0});function M0(e){return Mt(this,e).has(e)}var wm,_m=f(()=>{si();wm=M0});function F0(e,t){var r=Mt(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var Em,bm=f(()=>{si();Em=F0});function dn(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var ar,vo=f(()=>{dm();hm();ym();_m();bm();dn.prototype.clear=um;dn.prototype.delete=mm;dn.prototype.get=gm;dn.prototype.has=wm;dn.prototype.set=Em;ar=dn});function Ya(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(H0);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var s=e.apply(this,n);return r.cache=o.set(i,s)||o,s};return r.cache=new(Ya.Cache||ar),r}var H0,xm,Sm=f(()=>{vo();H0="Expected a function";Ya.Cache=ar;xm=Ya});function U0(e){var t=xm(e,function(n){return r.size===B0&&r.clear(),n}),r=t.cache;return t}var B0,vm,Im=f(()=>{Sm();B0=500;vm=U0});var G0,j0,W0,Am,Tm=f(()=>{Im();G0=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,j0=/\\(\\)?/g,W0=vm(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(G0,function(r,n,i,o){t.push(i?o.replace(j0,"$1"):n||r)}),t}),Am=W0});function V0(e){return e==null?"":Ep(e)}var Cm,$m=f(()=>{bp();Cm=V0});function K0(e,t){return J(e)?e:cn(e,t)?[e]:Am(Cm(e))}var Io,qa=f(()=>{De();xo();Tm();$m();Io=K0});function q0(e){if(typeof e=="string"||Je(e))return e;var t=e+"";return t=="0"&&1/e==-Y0?"-0":t}var Y0,Ft,ai=f(()=>{Zr();Y0=1/0;Ft=q0});function J0(e,t){t=Io(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[Ft(t[r++])];return r&&r==n?e:void 0}var pn,Ao=f(()=>{qa();ai();pn=J0});function z0(e,t,r){var n=e==null?void 0:pn(e,t);return n===void 0?r:n}var Om,Rm=f(()=>{Ao();Om=z0});function X0(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}var To,Ja=f(()=>{To=X0});function Z0(e){return J(e)||sn(e)||!!(Nm&&e&&e[Nm])}var Nm,Dm,Lm=f(()=>{Jr();wo();De();Nm=be?be.isConcatSpreadable:void 0;Dm=Z0});function km(e,t,r,n,i){var o=-1,s=e.length;for(r||(r=Dm),i||(i=[]);++o<s;){var a=e[o];t>0&&r(a)?t>1?km(a,t-1,r,n,i):To(i,a):n||(i[i.length]=a)}return i}var Pm,Mm=f(()=>{Ja();Lm();Pm=km});function Q0(e,t,r){var n=-1,i=e.length;t<0&&(t=-t>i?0:i+t),r=r>i?i:r,r<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(i);++n<i;)o[n]=e[n+t];return o}var Fm,Hm=f(()=>{Fm=Q0});function rT(e,t,r){(r?ei(e,t,r):t===void 0)?t=1:t=tT(Np(t),0);var n=e==null?0:e.length;if(!n||t<1)return[];for(var i=0,o=0,s=Array(eT(n/t));i<n;)s[o++]=Fm(e,i,i+=t);return s}var eT,tT,za,Bm=f(()=>{Hm();Ha();Dp();eT=Math.ceil,tT=Math.max;za=rT});function nT(){this.__data__=new kt,this.size=0}var Um,Gm=f(()=>{oi();Um=nT});function iT(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var jm,Wm=f(()=>{jm=iT});function oT(e){return this.__data__.get(e)}var Vm,Km=f(()=>{Vm=oT});function sT(e){return this.__data__.has(e)}var Ym,qm=f(()=>{Ym=sT});function cT(e,t){var r=this.__data__;if(r instanceof kt){var n=r.__data__;if(!Pt||n.length<aT-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new ar(n)}return r.set(e,t),this.size=r.size,this}var aT,Jm,zm=f(()=>{oi();So();vo();aT=200;Jm=cT});function fn(e){var t=this.__data__=new kt(e);this.size=t.size}var mn,Xa=f(()=>{oi();Gm();Wm();Km();qm();zm();fn.prototype.clear=Um;fn.prototype.delete=jm;fn.prototype.get=Vm;fn.prototype.has=Ym;fn.prototype.set=Jm;mn=fn});function lT(e,t){for(var r=-1,n=e==null?0:e.length,i=0,o=[];++r<n;){var s=e[r];t(s,r,e)&&(o[i++]=s)}return o}var Xm,Zm=f(()=>{Xm=lT});function uT(){return[]}var Qm,eh=f(()=>{Qm=uT});var dT,pT,th,fT,rh,nh=f(()=>{Zm();eh();dT=Object.prototype,pT=dT.propertyIsEnumerable,th=Object.getOwnPropertySymbols,fT=th?function(e){return e==null?[]:(e=Object(e),Xm(th(e),function(t){return pT.call(e,t)}))}:Qm,rh=fT});function mT(e,t,r){var n=t(e);return J(e)?n:To(n,r(e))}var ih,oh=f(()=>{Ja();De();ih=mT});function hT(e){return ih(e,an,rh)}var Za,sh=f(()=>{oh();nh();bo();Za=hT});var gT,Co,ah=f(()=>{Nt();ct();gT=xe(le,"DataView"),Co=gT});var yT,$o,ch=f(()=>{Nt();ct();yT=xe(le,"Promise"),$o=yT});var wT,Ht,Qa=f(()=>{Nt();ct();wT=xe(le,"Set"),Ht=wT});var lh,_T,uh,dh,ph,fh,ET,bT,xT,ST,vT,cr,ec,mh=f(()=>{ah();So();ch();Qa();Gp();zr();Ma();lh="[object Map]",_T="[object Object]",uh="[object Promise]",dh="[object Set]",ph="[object WeakMap]",fh="[object DataView]",ET=ht(Co),bT=ht(Pt),xT=ht($o),ST=ht(Ht),vT=ht(mo),cr=Ye;(Co&&cr(new Co(new ArrayBuffer(1)))!=fh||Pt&&cr(new Pt)!=lh||$o&&cr($o.resolve())!=uh||Ht&&cr(new Ht)!=dh||mo&&cr(new mo)!=ph)&&(cr=function(e){var t=Ye(e),r=t==_T?e.constructor:void 0,n=r?ht(r):"";if(n)switch(n){case ET:return fh;case bT:return lh;case xT:return uh;case ST:return dh;case vT:return ph}return t});ec=cr});var IT,tc,hh=f(()=>{ct();IT=le.Uint8Array,tc=IT});function TT(e){return this.__data__.set(e,AT),this}var AT,gh,yh=f(()=>{AT="__lodash_hash_undefined__";gh=TT});function CT(e){return this.__data__.has(e)}var wh,_h=f(()=>{wh=CT});function Oo(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new ar;++t<r;)this.add(e[t])}var Ro,rc=f(()=>{vo();yh();_h();Oo.prototype.add=Oo.prototype.push=gh;Oo.prototype.has=wh;Ro=Oo});function $T(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var Eh,bh=f(()=>{Eh=$T});function OT(e,t){return e.has(t)}var No,nc=f(()=>{No=OT});function DT(e,t,r,n,i,o){var s=r&RT,a=e.length,c=t.length;if(a!=c&&!(s&&c>a))return!1;var l=o.get(e),d=o.get(t);if(l&&d)return l==t&&d==e;var p=-1,u=!0,m=r&NT?new Ro:void 0;for(o.set(e,t),o.set(t,e);++p<a;){var g=e[p],y=t[p];if(n)var w=s?n(y,g,p,t,e,o):n(g,y,p,e,t,o);if(w!==void 0){if(w)continue;u=!1;break}if(m){if(!Eh(t,function(x,b){if(!No(m,b)&&(g===x||i(g,x,r,n,o)))return m.push(b)})){u=!1;break}}else if(!(g===y||i(g,y,r,n,o))){u=!1;break}}return o.delete(e),o.delete(t),u}var RT,NT,Do,ic=f(()=>{rc();bh();nc();RT=1,NT=2;Do=DT});function LT(e){var t=-1,r=Array(e.size);return e.forEach(function(n,i){r[++t]=[i,n]}),r}var xh,Sh=f(()=>{xh=LT});function kT(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var hn,Lo=f(()=>{hn=kT});function JT(e,t,r,n,i,o,s){switch(r){case qT:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case YT:return!(e.byteLength!=t.byteLength||!o(new tc(e),new tc(t)));case FT:case HT:case GT:return nn(+e,+t);case BT:return e.name==t.name&&e.message==t.message;case jT:case VT:return e==t+"";case UT:var a=xh;case WT:var c=n&PT;if(a||(a=hn),e.size!=t.size&&!c)return!1;var l=s.get(e);if(l)return l==t;n|=MT,s.set(e,t);var d=Do(a(e),a(t),n,i,o,s);return s.delete(e),d;case KT:if(oc)return oc.call(e)==oc.call(t)}return!1}var PT,MT,FT,HT,BT,UT,GT,jT,WT,VT,KT,YT,qT,vh,oc,Ih,Ah=f(()=>{Jr();hh();go();ic();Sh();Lo();PT=1,MT=2,FT="[object Boolean]",HT="[object Date]",BT="[object Error]",UT="[object Map]",GT="[object Number]",jT="[object RegExp]",WT="[object Set]",VT="[object String]",KT="[object Symbol]",YT="[object ArrayBuffer]",qT="[object DataView]",vh=be?be.prototype:void 0,oc=vh?vh.valueOf:void 0;Ih=JT});function QT(e,t,r,n,i,o){var s=r&zT,a=Za(e),c=a.length,l=Za(t),d=l.length;if(c!=d&&!s)return!1;for(var p=c;p--;){var u=a[p];if(!(s?u in t:ZT.call(t,u)))return!1}var m=o.get(e),g=o.get(t);if(m&&g)return m==t&&g==e;var y=!0;o.set(e,t),o.set(t,e);for(var w=s;++p<c;){u=a[p];var x=e[u],b=t[u];if(n)var A=s?n(b,x,u,t,e,o):n(x,b,u,e,t,o);if(!(A===void 0?x===b||i(x,b,r,n,o):A)){y=!1;break}w||(w=u=="constructor")}if(y&&!w){var v=e.constructor,S=t.constructor;v!=S&&"constructor"in e&&"constructor"in t&&!(typeof v=="function"&&v instanceof v&&typeof S=="function"&&S instanceof S)&&(y=!1)}return o.delete(e),o.delete(t),y}var zT,XT,ZT,Th,Ch=f(()=>{sh();zT=1,XT=Object.prototype,ZT=XT.hasOwnProperty;Th=QT});function rC(e,t,r,n,i,o){var s=J(e),a=J(t),c=s?Oh:ec(e),l=a?Oh:ec(t);c=c==$h?ko:c,l=l==$h?ko:l;var d=c==ko,p=l==ko,u=c==l;if(u&&ti(e)){if(!ti(t))return!1;s=!0,d=!1}if(u&&!d)return o||(o=new mn),s||Eo(e)?Do(e,t,r,n,i,o):Ih(e,t,c,r,n,i,o);if(!(r&eC)){var m=d&&Rh.call(e,"__wrapped__"),g=p&&Rh.call(t,"__wrapped__");if(m||g){var y=m?e.value():e,w=g?t.value():t;return o||(o=new mn),i(y,w,r,n,o)}}return u?(o||(o=new mn),Th(e,t,r,n,i,o)):!1}var eC,$h,Oh,ko,tC,Rh,Nh,Dh=f(()=>{Xa();ic();Ah();Ch();mh();De();Ua();Va();eC=1,$h="[object Arguments]",Oh="[object Array]",ko="[object Object]",tC=Object.prototype,Rh=tC.hasOwnProperty;Nh=rC});function Lh(e,t,r,n,i){return e===t?!0:e==null||t==null||!qe(e)&&!qe(t)?e!==e&&t!==t:Nh(e,t,r,n,Lh,i)}var Po,sc=f(()=>{Dh();Xr();Po=Lh});function oC(e,t,r,n){var i=r.length,o=i,s=!n;if(e==null)return!o;for(e=Object(e);i--;){var a=r[i];if(s&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<o;){a=r[i];var c=a[0],l=e[c],d=a[1];if(s&&a[2]){if(l===void 0&&!(c in e))return!1}else{var p=new mn;if(n)var u=n(l,d,c,e,t,p);if(!(u===void 0?Po(d,l,nC|iC,n,p):u))return!1}}return!0}var nC,iC,kh,Ph=f(()=>{Xa();sc();nC=1,iC=2;kh=oC});function sC(e){return e===e&&!ze(e)}var Mo,ac=f(()=>{en();Mo=sC});function aC(e){for(var t=an(e),r=t.length;r--;){var n=t[r],i=e[n];t[r]=[n,i,Mo(i)]}return t}var Mh,Fh=f(()=>{ac();bo();Mh=aC});function cC(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var Fo,cc=f(()=>{Fo=cC});function lC(e){var t=Mh(e);return t.length==1&&t[0][2]?Fo(t[0][0],t[0][1]):function(r){return r===e||kh(r,e,t)}}var Hh,Bh=f(()=>{Ph();Fh();cc();Hh=lC});function uC(e,t){return e!=null&&t in Object(e)}var Uh,Gh=f(()=>{Uh=uC});function dC(e,t,r){t=Io(t,e);for(var n=-1,i=t.length,o=!1;++n<i;){var s=Ft(t[n]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++n!=i?o:(i=e==null?0:e.length,!!i&&on(i)&&rn(s,i)&&(J(e)||sn(e)))}var jh,Wh=f(()=>{qa();wo();De();ho();yo();ai();jh=dC});function pC(e,t){return e!=null&&jh(e,t,Uh)}var Vh,Kh=f(()=>{Gh();Wh();Vh=pC});function hC(e,t){return cn(e)&&Mo(t)?Fo(Ft(e),t):function(r){var n=Om(r,e);return n===void 0&&n===t?Vh(r,e):Po(t,n,fC|mC)}}var fC,mC,Yh,qh=f(()=>{sc();Rm();Kh();xo();ac();cc();ai();fC=1,mC=2;Yh=hC});function gC(e){return function(t){return t?.[e]}}var Jh,zh=f(()=>{Jh=gC});function yC(e){return function(t){return pn(t,e)}}var Xh,Zh=f(()=>{Ao();Xh=yC});function wC(e){return cn(e)?Jh(Ft(e)):Xh(e)}var Qh,eg=f(()=>{zh();Zh();xo();ai();Qh=wC});function _C(e){return typeof e=="function"?e:e==null?Rt:typeof e=="object"?J(e)?Yh(e[0],e[1]):Hh(e):Qh(e)}var Bt,ci=f(()=>{Bh();qh();Zn();De();eg();Bt=_C});function EC(e,t,r,n){for(var i=-1,o=e==null?0:e.length;++i<o;){var s=e[i];t(n,s,r(s),e)}return n}var tg,rg=f(()=>{tg=EC});function bC(e){return function(t,r,n){for(var i=-1,o=Object(t),s=n(t),a=s.length;a--;){var c=s[e?a:++i];if(r(o[c],c,o)===!1)break}return t}}var ng,ig=f(()=>{ng=bC});var xC,og,sg=f(()=>{ig();xC=ng(),og=xC});function SC(e,t){return e&&og(e,t,an)}var ag,cg=f(()=>{sg();bo();ag=SC});function vC(e,t){return function(r,n){if(r==null)return r;if(!Dt(r))return e(r,n);for(var i=r.length,o=t?i:-1,s=Object(r);(t?o--:++o<i)&&n(s[o],o,s)!==!1;);return r}}var lg,ug=f(()=>{Qn();lg=vC});var IC,Ho,lc=f(()=>{cg();ug();IC=lg(ag),Ho=IC});function AC(e,t,r,n){return Ho(e,function(i,o,s){t(n,i,r(i),s)}),n}var dg,pg=f(()=>{lc();dg=AC});function TC(e,t){return function(r,n){var i=J(r)?tg:dg,o=t?t():{};return i(r,e,Bt(n,2),o)}}var fg,mg=f(()=>{rg();pg();ci();De();fg=TC});function CC(e,t,r){for(var n=-1,i=e==null?0:e.length;++n<i;)if(r(t,e[n]))return!0;return!1}var hg,gg=f(()=>{hg=CC});function $C(e,t){var r=-1,n=Dt(e)?Array(e.length):[];return Ho(e,function(i,o,s){n[++r]=t(i,o,s)}),n}var yg,wg=f(()=>{lc();Qn();yg=$C});var OC,RC,NC,uc,_g=f(()=>{ff();mg();OC=Object.prototype,RC=OC.hasOwnProperty,NC=fg(function(e,t,r){RC.call(e,r)?e[r].push(t):pf(e,r,[t])}),uc=NC});function DC(e,t){for(var r,n=-1,i=e.length;++n<i;){var o=t(e[n]);o!==void 0&&(r=r===void 0?o:r+o)}return r}var Eg,bg=f(()=>{Eg=DC});function LC(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}var xg,Sg=f(()=>{xg=LC});function kC(e,t){if(e!==t){var r=e!==void 0,n=e===null,i=e===e,o=Je(e),s=t!==void 0,a=t===null,c=t===t,l=Je(t);if(!a&&!l&&!o&&e>t||o&&s&&c&&!a&&!l||n&&s&&c||!r&&c||!i)return 1;if(!n&&!o&&!l&&e<t||l&&r&&i&&!n&&!o||a&&r&&i||!s&&i||!c)return-1}return 0}var vg,Ig=f(()=>{Zr();vg=kC});function PC(e,t,r){for(var n=-1,i=e.criteria,o=t.criteria,s=i.length,a=r.length;++n<s;){var c=vg(i[n],o[n]);if(c){if(n>=a)return c;var l=r[n];return c*(l=="desc"?-1:1)}}return e.index-t.index}var Ag,Tg=f(()=>{Ig();Ag=PC});function MC(e,t,r){t.length?t=Qr(t,function(o){return J(o)?function(s){return pn(s,o.length===1?o[0]:o)}:o}):t=[Rt];var n=-1;t=Qr(t,_o(Bt));var i=yg(e,function(o,s,a){var c=Qr(t,function(l){return l(o)});return{criteria:c,index:++n,value:o}});return xg(i,function(o,s){return Ag(o,s,r)})}var Cg,$g=f(()=>{ka();Ao();ci();wg();Sg();Ga();Tg();Zn();De();Cg=MC});var FC,dc,Og=f(()=>{Mm();$g();wf();Ha();FC=yf(function(e,t){if(e==null)return[];var r=t.length;return r>1&&ei(e,t[0],t[1])?t=[]:r>2&&ei(t[0],t[1],t[2])&&(t=[t[0]]),Cg(e,Pm(t,1),[])}),dc=FC});function HC(e,t){return e&&e.length?Eg(e,Bt(t,2)):0}var pc,Rg=f(()=>{ci();bg();pc=HC});var BC,UC,Ng,Dg=f(()=>{Qa();Kp();Lo();BC=1/0,UC=Ht&&1/hn(new Ht([,-0]))[1]==BC?function(e){return new Ht(e)}:Vp,Ng=UC});function jC(e,t,r){var n=-1,i=uf,o=e.length,s=!0,a=[],c=a;if(r)s=!1,i=hg;else if(o>=GC){var l=t?null:Ng(e);if(l)return hn(l);s=!1,i=No,c=new Ro}else c=t?[]:a;e:for(;++n<o;){var d=e[n],p=t?t(d):d;if(d=r||d!==0?d:0,s&&p===p){for(var u=c.length;u--;)if(c[u]===p)continue e;t&&c.push(p),a.push(d)}else i(c,p,r)||(c!==a&&c.push(p),a.push(d))}return a}var GC,Lg,kg=f(()=>{rc();df();gg();nc();Dg();Lo();GC=200;Lg=jC});function WC(e,t){return e&&e.length?Lg(e,Bt(t,2)):[]}var fc,Pg=f(()=>{ci();kg();fc=WC});var Bo=f(()=>{Bm();_g();Og();Rg();Pg();});import{readFile as VC}from"node:fs/promises";function YC(e){let t=[];return e.sectionHeading&&t.push(`[Section: ${e.sectionHeading}]`),e.contextualPrefix&&t.push(e.contextualPrefix),t.push(e.content),t.join(`
94
- `)}function qC(e,t,r){return`${e}
94
+ `,[e]),i}var Tf=f(()=>{N();Gt()});var MA,es,Lc=f(()=>{MA=typeof global=="object"&&global&&global.Object===Object&&global,es=MA});var FA,BA,fe,mt=f(()=>{Lc();FA=typeof self=="object"&&self&&self.Object===Object&&self,BA=es||FA||Function("return this")(),fe=BA});var HA,Ie,En=f(()=>{mt();HA=fe.Symbol,Ie=HA});function jA(e){var t=UA.call(e,Ti),r=e[Ti];try{e[Ti]=void 0;var n=!0}catch{}var i=GA.call(e);return n&&(t?e[Ti]=r:delete e[Ti]),i}var Cf,UA,GA,Ti,Of,Rf=f(()=>{En();Cf=Object.prototype,UA=Cf.hasOwnProperty,GA=Cf.toString,Ti=Ie?Ie.toStringTag:void 0;Of=jA});function KA(e){return VA.call(e)}var WA,VA,$f,Nf=f(()=>{WA=Object.prototype,VA=WA.toString;$f=KA});function JA(e){return e==null?e===void 0?qA:YA:Df&&Df in Object(e)?Of(e):$f(e)}var YA,qA,Df,Qe,_n=f(()=>{En();Rf();Nf();YA="[object Null]",qA="[object Undefined]",Df=Ie?Ie.toStringTag:void 0;Qe=JA});function zA(e){return e!=null&&typeof e=="object"}var et,Sn=f(()=>{et=zA});function ZA(e){return typeof e=="symbol"||et(e)&&Qe(e)==XA}var XA,tt,bn=f(()=>{_n();Sn();XA="[object Symbol]";tt=ZA});function QA(e,t){for(var r=-1,n=e==null?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}var xn,kc=f(()=>{xn=QA});var e0,Q,Fe=f(()=>{e0=Array.isArray,Q=e0});function Pf(e){if(typeof e=="string")return e;if(Q(e))return xn(e,Pf)+"";if(tt(e))return kf?kf.call(e):"";var t=e+"";return t=="0"&&1/e==-t0?"-0":t}var t0,Lf,kf,Mf,Ff=f(()=>{En();kc();Fe();bn();t0=1/0,Lf=Ie?Ie.prototype:void 0,kf=Lf?Lf.toString:void 0;Mf=Pf});function n0(e){for(var t=e.length;t--&&r0.test(e.charAt(t)););return t}var r0,Bf,Hf=f(()=>{r0=/\s/;Bf=n0});function o0(e){return e&&e.slice(0,Bf(e)+1).replace(i0,"")}var i0,Uf,Gf=f(()=>{Hf();i0=/^\s+/;Uf=o0});function s0(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var rt,In=f(()=>{rt=s0});function d0(e){if(typeof e=="number")return e;if(tt(e))return jf;if(rt(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=rt(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=Uf(e);var r=c0.test(e);return r||l0.test(e)?u0(e.slice(2),r?2:8):a0.test(e)?jf:+e}var jf,a0,c0,l0,u0,Wf,Vf=f(()=>{Gf();In();bn();jf=NaN,a0=/^[-+]0x[0-9a-f]+$/i,c0=/^0b[01]+$/i,l0=/^0o[0-7]+$/i,u0=parseInt;Wf=d0});function f0(e){if(!e)return e===0?e:0;if(e=Wf(e),e===Kf||e===-Kf){var t=e<0?-1:1;return t*p0}return e===e?e:0}var Kf,p0,Yf,qf=f(()=>{Vf();Kf=1/0,p0=17976931348623157e292;Yf=f0});function m0(e){var t=Yf(e),r=t%1;return t===t?r?t-r:t:0}var Jf,zf=f(()=>{qf();Jf=m0});function h0(e){return e}var Wt,Ci=f(()=>{Wt=h0});function _0(e){if(!rt(e))return!1;var t=Qe(e);return t==y0||t==w0||t==g0||t==E0}var g0,y0,w0,E0,ts,Pc=f(()=>{_n();In();g0="[object AsyncFunction]",y0="[object Function]",w0="[object GeneratorFunction]",E0="[object Proxy]";ts=_0});var S0,rs,Xf=f(()=>{mt();S0=fe["__core-js_shared__"],rs=S0});function b0(e){return!!Zf&&Zf in e}var Zf,Qf,em=f(()=>{Xf();Zf=(function(){var e=/[^.]+$/.exec(rs&&rs.keys&&rs.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();Qf=b0});function v0(e){if(e!=null){try{return I0.call(e)}catch{}try{return e+""}catch{}}return""}var x0,I0,It,Mc=f(()=>{x0=Function.prototype,I0=x0.toString;It=v0});function D0(e){if(!rt(e)||Qf(e))return!1;var t=ts(e)?N0:T0;return t.test(It(e))}var A0,T0,C0,O0,R0,$0,N0,tm,rm=f(()=>{Pc();em();In();Mc();A0=/[\\^$.*+?()[\]{}|]/g,T0=/^\[object .+?Constructor\]$/,C0=Function.prototype,O0=Object.prototype,R0=C0.toString,$0=O0.hasOwnProperty,N0=RegExp("^"+R0.call($0).replace(A0,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");tm=D0});function L0(e,t){return e?.[t]}var nm,im=f(()=>{nm=L0});function k0(e,t){var r=nm(e,t);return tm(r)?r:void 0}var ve,Vt=f(()=>{rm();im();ve=k0});var P0,ns,om=f(()=>{Vt();mt();P0=ve(fe,"WeakMap"),ns=P0});function M0(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}var sm,am=f(()=>{sm=M0});function F0(){}var cm,lm=f(()=>{cm=F0});function G0(e){var t=0,r=0;return function(){var n=U0(),i=H0-(n-r);if(r=n,i>0){if(++t>=B0)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var B0,H0,U0,um,dm=f(()=>{B0=800,H0=16,U0=Date.now;um=G0});function j0(e){return function(){return e}}var pm,fm=f(()=>{pm=j0});var W0,vn,Fc=f(()=>{Vt();W0=(function(){try{var e=ve(Object,"defineProperty");return e({},"",{}),e}catch{}})(),vn=W0});var V0,mm,hm=f(()=>{fm();Fc();Ci();V0=vn?function(e,t){return vn(e,"toString",{configurable:!0,enumerable:!1,value:pm(t),writable:!0})}:Wt,mm=V0});var K0,gm,ym=f(()=>{hm();dm();K0=um(mm),gm=K0});function Y0(e,t,r,n){for(var i=e.length,o=r+(n?1:-1);n?o--:++o<i;)if(t(e[o],o,e))return o;return-1}var wm,Em=f(()=>{wm=Y0});function q0(e){return e!==e}var _m,Sm=f(()=>{_m=q0});function J0(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}var bm,xm=f(()=>{bm=J0});function z0(e,t,r){return t===t?bm(e,t,r):wm(e,_m,r)}var Im,vm=f(()=>{Em();Sm();xm();Im=z0});function X0(e,t){var r=e==null?0:e.length;return!!r&&Im(e,t,0)>-1}var Am,Tm=f(()=>{vm();Am=X0});function eT(e,t){var r=typeof e;return t=t??Z0,!!t&&(r=="number"||r!="symbol"&&Q0.test(e))&&e>-1&&e%1==0&&e<t}var Z0,Q0,An,is=f(()=>{Z0=9007199254740991,Q0=/^(?:0|[1-9]\d*)$/;An=eT});function tT(e,t,r){t=="__proto__"&&vn?vn(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Cm,Om=f(()=>{Fc();Cm=tT});function rT(e,t){return e===t||e!==e&&t!==t}var Tn,os=f(()=>{Tn=rT});function nT(e,t,r){return t=Rm(t===void 0?e.length-1:t,0),function(){for(var n=arguments,i=-1,o=Rm(n.length-t,0),s=Array(o);++i<o;)s[i]=n[t+i];i=-1;for(var a=Array(t+1);++i<t;)a[i]=n[i];return a[t]=r(s),sm(e,this,a)}}var Rm,$m,Nm=f(()=>{am();Rm=Math.max;$m=nT});function iT(e,t){return gm($m(e,t,Wt),e+"")}var Dm,Lm=f(()=>{Ci();Nm();ym();Dm=iT});function sT(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=oT}var oT,Cn,ss=f(()=>{oT=9007199254740991;Cn=sT});function aT(e){return e!=null&&Cn(e.length)&&!ts(e)}var Kt,Oi=f(()=>{Pc();ss();Kt=aT});function cT(e,t,r){if(!rt(r))return!1;var n=typeof t;return(n=="number"?Kt(r)&&An(t,r.length):n=="string"&&t in r)?Tn(r[t],e):!1}var Ri,Bc=f(()=>{os();Oi();is();In();Ri=cT});function uT(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||lT;return e===r}var lT,km,Pm=f(()=>{lT=Object.prototype;km=uT});function dT(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var Mm,Fm=f(()=>{Mm=dT});function fT(e){return et(e)&&Qe(e)==pT}var pT,Hc,Bm=f(()=>{_n();Sn();pT="[object Arguments]";Hc=fT});var Hm,mT,hT,gT,On,as=f(()=>{Bm();Sn();Hm=Object.prototype,mT=Hm.hasOwnProperty,hT=Hm.propertyIsEnumerable,gT=Hc((function(){return arguments})())?Hc:function(e){return et(e)&&mT.call(e,"callee")&&!hT.call(e,"callee")},On=gT});function yT(){return!1}var Um,Gm=f(()=>{Um=yT});var Vm,jm,wT,Wm,ET,_T,$i,Uc=f(()=>{mt();Gm();Vm=typeof exports=="object"&&exports&&!exports.nodeType&&exports,jm=Vm&&typeof module=="object"&&module&&!module.nodeType&&module,wT=jm&&jm.exports===Vm,Wm=wT?fe.Buffer:void 0,ET=Wm?Wm.isBuffer:void 0,_T=ET||Um,$i=_T});function VT(e){return et(e)&&Cn(e.length)&&!!Y[Qe(e)]}var ST,bT,xT,IT,vT,AT,TT,CT,OT,RT,$T,NT,DT,LT,kT,PT,MT,FT,BT,HT,UT,GT,jT,WT,Y,Km,Ym=f(()=>{_n();ss();Sn();ST="[object Arguments]",bT="[object Array]",xT="[object Boolean]",IT="[object Date]",vT="[object Error]",AT="[object Function]",TT="[object Map]",CT="[object Number]",OT="[object Object]",RT="[object RegExp]",$T="[object Set]",NT="[object String]",DT="[object WeakMap]",LT="[object ArrayBuffer]",kT="[object DataView]",PT="[object Float32Array]",MT="[object Float64Array]",FT="[object Int8Array]",BT="[object Int16Array]",HT="[object Int32Array]",UT="[object Uint8Array]",GT="[object Uint8ClampedArray]",jT="[object Uint16Array]",WT="[object Uint32Array]",Y={};Y[PT]=Y[MT]=Y[FT]=Y[BT]=Y[HT]=Y[UT]=Y[GT]=Y[jT]=Y[WT]=!0;Y[ST]=Y[bT]=Y[LT]=Y[xT]=Y[kT]=Y[IT]=Y[vT]=Y[AT]=Y[TT]=Y[CT]=Y[OT]=Y[RT]=Y[$T]=Y[NT]=Y[DT]=!1;Km=VT});function KT(e){return function(t){return e(t)}}var cs,Gc=f(()=>{cs=KT});var qm,Ni,YT,jc,qT,Wc,Jm=f(()=>{Lc();qm=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ni=qm&&typeof module=="object"&&module&&!module.nodeType&&module,YT=Ni&&Ni.exports===qm,jc=YT&&es.process,qT=(function(){try{var e=Ni&&Ni.require&&Ni.require("util").types;return e||jc&&jc.binding&&jc.binding("util")}catch{}})(),Wc=qT});var zm,JT,ls,Vc=f(()=>{Ym();Gc();Jm();zm=Wc&&Wc.isTypedArray,JT=zm?cs(zm):Km,ls=JT});function ZT(e,t){var r=Q(e),n=!r&&On(e),i=!r&&!n&&$i(e),o=!r&&!n&&!i&&ls(e),s=r||n||i||o,a=s?Mm(e.length,String):[],c=a.length;for(var l in e)(t||XT.call(e,l))&&!(s&&(l=="length"||i&&(l=="offset"||l=="parent")||o&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||An(l,c)))&&a.push(l);return a}var zT,XT,Xm,Zm=f(()=>{Fm();as();Fe();Uc();is();Vc();zT=Object.prototype,XT=zT.hasOwnProperty;Xm=ZT});function QT(e,t){return function(r){return e(t(r))}}var Qm,eh=f(()=>{Qm=QT});var eC,th,rh=f(()=>{eh();eC=Qm(Object.keys,Object),th=eC});function nC(e){if(!km(e))return th(e);var t=[];for(var r in Object(e))rC.call(e,r)&&r!="constructor"&&t.push(r);return t}var tC,rC,nh,ih=f(()=>{Pm();rh();tC=Object.prototype,rC=tC.hasOwnProperty;nh=nC});function iC(e){return Kt(e)?Xm(e):nh(e)}var Rn,us=f(()=>{Zm();ih();Oi();Rn=iC});function aC(e,t){if(Q(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||tt(e)?!0:sC.test(e)||!oC.test(e)||t!=null&&e in Object(t)}var oC,sC,$n,ds=f(()=>{Fe();bn();oC=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,sC=/^\w*$/;$n=aC});var cC,vt,Di=f(()=>{Vt();cC=ve(Object,"create"),vt=cC});function lC(){this.__data__=vt?vt(null):{},this.size=0}var oh,sh=f(()=>{Di();oh=lC});function uC(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var ah,ch=f(()=>{ah=uC});function mC(e){var t=this.__data__;if(vt){var r=t[e];return r===dC?void 0:r}return fC.call(t,e)?t[e]:void 0}var dC,pC,fC,lh,uh=f(()=>{Di();dC="__lodash_hash_undefined__",pC=Object.prototype,fC=pC.hasOwnProperty;lh=mC});function yC(e){var t=this.__data__;return vt?t[e]!==void 0:gC.call(t,e)}var hC,gC,dh,ph=f(()=>{Di();hC=Object.prototype,gC=hC.hasOwnProperty;dh=yC});function EC(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=vt&&t===void 0?wC:t,this}var wC,fh,mh=f(()=>{Di();wC="__lodash_hash_undefined__";fh=EC});function Nn(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var Kc,hh=f(()=>{sh();ch();uh();ph();mh();Nn.prototype.clear=oh;Nn.prototype.delete=ah;Nn.prototype.get=lh;Nn.prototype.has=dh;Nn.prototype.set=fh;Kc=Nn});function _C(){this.__data__=[],this.size=0}var gh,yh=f(()=>{gh=_C});function SC(e,t){for(var r=e.length;r--;)if(Tn(e[r][0],t))return r;return-1}var Yt,Li=f(()=>{os();Yt=SC});function IC(e){var t=this.__data__,r=Yt(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():xC.call(t,r,1),--this.size,!0}var bC,xC,wh,Eh=f(()=>{Li();bC=Array.prototype,xC=bC.splice;wh=IC});function vC(e){var t=this.__data__,r=Yt(t,e);return r<0?void 0:t[r][1]}var _h,Sh=f(()=>{Li();_h=vC});function AC(e){return Yt(this.__data__,e)>-1}var bh,xh=f(()=>{Li();bh=AC});function TC(e,t){var r=this.__data__,n=Yt(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var Ih,vh=f(()=>{Li();Ih=TC});function Dn(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var qt,ki=f(()=>{yh();Eh();Sh();xh();vh();Dn.prototype.clear=gh;Dn.prototype.delete=wh;Dn.prototype.get=_h;Dn.prototype.has=bh;Dn.prototype.set=Ih;qt=Dn});var CC,Jt,ps=f(()=>{Vt();mt();CC=ve(fe,"Map"),Jt=CC});function OC(){this.size=0,this.__data__={hash:new Kc,map:new(Jt||qt),string:new Kc}}var Ah,Th=f(()=>{hh();ki();ps();Ah=OC});function RC(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Ch,Oh=f(()=>{Ch=RC});function $C(e,t){var r=e.__data__;return Ch(t)?r[typeof t=="string"?"string":"hash"]:r.map}var zt,Pi=f(()=>{Oh();zt=$C});function NC(e){var t=zt(this,e).delete(e);return this.size-=t?1:0,t}var Rh,$h=f(()=>{Pi();Rh=NC});function DC(e){return zt(this,e).get(e)}var Nh,Dh=f(()=>{Pi();Nh=DC});function LC(e){return zt(this,e).has(e)}var Lh,kh=f(()=>{Pi();Lh=LC});function kC(e,t){var r=zt(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var Ph,Mh=f(()=>{Pi();Ph=kC});function Ln(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var Ir,fs=f(()=>{Th();$h();Dh();kh();Mh();Ln.prototype.clear=Ah;Ln.prototype.delete=Rh;Ln.prototype.get=Nh;Ln.prototype.has=Lh;Ln.prototype.set=Ph;Ir=Ln});function Yc(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(PC);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var s=e.apply(this,n);return r.cache=o.set(i,s)||o,s};return r.cache=new(Yc.Cache||Ir),r}var PC,Fh,Bh=f(()=>{fs();PC="Expected a function";Yc.Cache=Ir;Fh=Yc});function FC(e){var t=Fh(e,function(n){return r.size===MC&&r.clear(),n}),r=t.cache;return t}var MC,Hh,Uh=f(()=>{Bh();MC=500;Hh=FC});var BC,HC,UC,Gh,jh=f(()=>{Uh();BC=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,HC=/\\(\\)?/g,UC=Hh(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(BC,function(r,n,i,o){t.push(i?o.replace(HC,"$1"):n||r)}),t}),Gh=UC});function GC(e){return e==null?"":Mf(e)}var Wh,Vh=f(()=>{Ff();Wh=GC});function jC(e,t){return Q(e)?e:$n(e,t)?[e]:Gh(Wh(e))}var ms,qc=f(()=>{Fe();ds();jh();Vh();ms=jC});function VC(e){if(typeof e=="string"||tt(e))return e;var t=e+"";return t=="0"&&1/e==-WC?"-0":t}var WC,Xt,Mi=f(()=>{bn();WC=1/0;Xt=VC});function KC(e,t){t=ms(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[Xt(t[r++])];return r&&r==n?e:void 0}var kn,hs=f(()=>{qc();Mi();kn=KC});function YC(e,t,r){var n=e==null?void 0:kn(e,t);return n===void 0?r:n}var Kh,Yh=f(()=>{hs();Kh=YC});function qC(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}var gs,Jc=f(()=>{gs=qC});function JC(e){return Q(e)||On(e)||!!(qh&&e&&e[qh])}var qh,Jh,zh=f(()=>{En();as();Fe();qh=Ie?Ie.isConcatSpreadable:void 0;Jh=JC});function Xh(e,t,r,n,i){var o=-1,s=e.length;for(r||(r=Jh),i||(i=[]);++o<s;){var a=e[o];t>0&&r(a)?t>1?Xh(a,t-1,r,n,i):gs(i,a):n||(i[i.length]=a)}return i}var Zh,Qh=f(()=>{Jc();zh();Zh=Xh});function zC(e,t,r){var n=-1,i=e.length;t<0&&(t=-t>i?0:i+t),r=r>i?i:r,r<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(i);++n<i;)o[n]=e[n+t];return o}var eg,tg=f(()=>{eg=zC});function QC(e,t,r){(r?Ri(e,t,r):t===void 0)?t=1:t=ZC(Jf(t),0);var n=e==null?0:e.length;if(!n||t<1)return[];for(var i=0,o=0,s=Array(XC(n/t));i<n;)s[o++]=eg(e,i,i+=t);return s}var XC,ZC,zc,rg=f(()=>{tg();Bc();zf();XC=Math.ceil,ZC=Math.max;zc=QC});function eO(){this.__data__=new qt,this.size=0}var ng,ig=f(()=>{ki();ng=eO});function tO(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var og,sg=f(()=>{og=tO});function rO(e){return this.__data__.get(e)}var ag,cg=f(()=>{ag=rO});function nO(e){return this.__data__.has(e)}var lg,ug=f(()=>{lg=nO});function oO(e,t){var r=this.__data__;if(r instanceof qt){var n=r.__data__;if(!Jt||n.length<iO-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ir(n)}return r.set(e,t),this.size=r.size,this}var iO,dg,pg=f(()=>{ki();ps();fs();iO=200;dg=oO});function Pn(e){var t=this.__data__=new qt(e);this.size=t.size}var Mn,Xc=f(()=>{ki();ig();sg();cg();ug();pg();Pn.prototype.clear=ng;Pn.prototype.delete=og;Pn.prototype.get=ag;Pn.prototype.has=lg;Pn.prototype.set=dg;Mn=Pn});function sO(e,t){for(var r=-1,n=e==null?0:e.length,i=0,o=[];++r<n;){var s=e[r];t(s,r,e)&&(o[i++]=s)}return o}var fg,mg=f(()=>{fg=sO});function aO(){return[]}var hg,gg=f(()=>{hg=aO});var cO,lO,yg,uO,wg,Eg=f(()=>{mg();gg();cO=Object.prototype,lO=cO.propertyIsEnumerable,yg=Object.getOwnPropertySymbols,uO=yg?function(e){return e==null?[]:(e=Object(e),fg(yg(e),function(t){return lO.call(e,t)}))}:hg,wg=uO});function dO(e,t,r){var n=t(e);return Q(e)?n:gs(n,r(e))}var _g,Sg=f(()=>{Jc();Fe();_g=dO});function pO(e){return _g(e,Rn,wg)}var Zc,bg=f(()=>{Sg();Eg();us();Zc=pO});var fO,ys,xg=f(()=>{Vt();mt();fO=ve(fe,"DataView"),ys=fO});var mO,ws,Ig=f(()=>{Vt();mt();mO=ve(fe,"Promise"),ws=mO});var hO,Zt,Qc=f(()=>{Vt();mt();hO=ve(fe,"Set"),Zt=hO});var vg,gO,Ag,Tg,Cg,Og,yO,wO,EO,_O,SO,vr,el,Rg=f(()=>{xg();ps();Ig();Qc();om();_n();Mc();vg="[object Map]",gO="[object Object]",Ag="[object Promise]",Tg="[object Set]",Cg="[object WeakMap]",Og="[object DataView]",yO=It(ys),wO=It(Jt),EO=It(ws),_O=It(Zt),SO=It(ns),vr=Qe;(ys&&vr(new ys(new ArrayBuffer(1)))!=Og||Jt&&vr(new Jt)!=vg||ws&&vr(ws.resolve())!=Ag||Zt&&vr(new Zt)!=Tg||ns&&vr(new ns)!=Cg)&&(vr=function(e){var t=Qe(e),r=t==gO?e.constructor:void 0,n=r?It(r):"";if(n)switch(n){case yO:return Og;case wO:return vg;case EO:return Ag;case _O:return Tg;case SO:return Cg}return t});el=vr});var bO,tl,$g=f(()=>{mt();bO=fe.Uint8Array,tl=bO});function IO(e){return this.__data__.set(e,xO),this}var xO,Ng,Dg=f(()=>{xO="__lodash_hash_undefined__";Ng=IO});function vO(e){return this.__data__.has(e)}var Lg,kg=f(()=>{Lg=vO});function Es(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new Ir;++t<r;)this.add(e[t])}var _s,rl=f(()=>{fs();Dg();kg();Es.prototype.add=Es.prototype.push=Ng;Es.prototype.has=Lg;_s=Es});function AO(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var Pg,Mg=f(()=>{Pg=AO});function TO(e,t){return e.has(t)}var Ss,nl=f(()=>{Ss=TO});function RO(e,t,r,n,i,o){var s=r&CO,a=e.length,c=t.length;if(a!=c&&!(s&&c>a))return!1;var l=o.get(e),d=o.get(t);if(l&&d)return l==t&&d==e;var p=-1,u=!0,m=r&OO?new _s:void 0;for(o.set(e,t),o.set(t,e);++p<a;){var h=e[p],y=t[p];if(n)var w=s?n(y,h,p,t,e,o):n(h,y,p,e,t,o);if(w!==void 0){if(w)continue;u=!1;break}if(m){if(!Pg(t,function(b,S){if(!Ss(m,S)&&(h===b||i(h,b,r,n,o)))return m.push(S)})){u=!1;break}}else if(!(h===y||i(h,y,r,n,o))){u=!1;break}}return o.delete(e),o.delete(t),u}var CO,OO,bs,il=f(()=>{rl();Mg();nl();CO=1,OO=2;bs=RO});function $O(e){var t=-1,r=Array(e.size);return e.forEach(function(n,i){r[++t]=[i,n]}),r}var Fg,Bg=f(()=>{Fg=$O});function NO(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var Fn,xs=f(()=>{Fn=NO});function KO(e,t,r,n,i,o,s){switch(r){case VO:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case WO:return!(e.byteLength!=t.byteLength||!o(new tl(e),new tl(t)));case kO:case PO:case BO:return Tn(+e,+t);case MO:return e.name==t.name&&e.message==t.message;case HO:case GO:return e==t+"";case FO:var a=Fg;case UO:var c=n&DO;if(a||(a=Fn),e.size!=t.size&&!c)return!1;var l=s.get(e);if(l)return l==t;n|=LO,s.set(e,t);var d=bs(a(e),a(t),n,i,o,s);return s.delete(e),d;case jO:if(ol)return ol.call(e)==ol.call(t)}return!1}var DO,LO,kO,PO,MO,FO,BO,HO,UO,GO,jO,WO,VO,Hg,ol,Ug,Gg=f(()=>{En();$g();os();il();Bg();xs();DO=1,LO=2,kO="[object Boolean]",PO="[object Date]",MO="[object Error]",FO="[object Map]",BO="[object Number]",HO="[object RegExp]",UO="[object Set]",GO="[object String]",jO="[object Symbol]",WO="[object ArrayBuffer]",VO="[object DataView]",Hg=Ie?Ie.prototype:void 0,ol=Hg?Hg.valueOf:void 0;Ug=KO});function zO(e,t,r,n,i,o){var s=r&YO,a=Zc(e),c=a.length,l=Zc(t),d=l.length;if(c!=d&&!s)return!1;for(var p=c;p--;){var u=a[p];if(!(s?u in t:JO.call(t,u)))return!1}var m=o.get(e),h=o.get(t);if(m&&h)return m==t&&h==e;var y=!0;o.set(e,t),o.set(t,e);for(var w=s;++p<c;){u=a[p];var b=e[u],S=t[u];if(n)var T=s?n(S,b,u,t,e,o):n(b,S,u,e,t,o);if(!(T===void 0?b===S||i(b,S,r,n,o):T)){y=!1;break}w||(w=u=="constructor")}if(y&&!w){var I=e.constructor,x=t.constructor;I!=x&&"constructor"in e&&"constructor"in t&&!(typeof I=="function"&&I instanceof I&&typeof x=="function"&&x instanceof x)&&(y=!1)}return o.delete(e),o.delete(t),y}var YO,qO,JO,jg,Wg=f(()=>{bg();YO=1,qO=Object.prototype,JO=qO.hasOwnProperty;jg=zO});function QO(e,t,r,n,i,o){var s=Q(e),a=Q(t),c=s?Kg:el(e),l=a?Kg:el(t);c=c==Vg?Is:c,l=l==Vg?Is:l;var d=c==Is,p=l==Is,u=c==l;if(u&&$i(e)){if(!$i(t))return!1;s=!0,d=!1}if(u&&!d)return o||(o=new Mn),s||ls(e)?bs(e,t,r,n,i,o):Ug(e,t,c,r,n,i,o);if(!(r&XO)){var m=d&&Yg.call(e,"__wrapped__"),h=p&&Yg.call(t,"__wrapped__");if(m||h){var y=m?e.value():e,w=h?t.value():t;return o||(o=new Mn),i(y,w,r,n,o)}}return u?(o||(o=new Mn),jg(e,t,r,n,i,o)):!1}var XO,Vg,Kg,Is,ZO,Yg,qg,Jg=f(()=>{Xc();il();Gg();Wg();Rg();Fe();Uc();Vc();XO=1,Vg="[object Arguments]",Kg="[object Array]",Is="[object Object]",ZO=Object.prototype,Yg=ZO.hasOwnProperty;qg=QO});function zg(e,t,r,n,i){return e===t?!0:e==null||t==null||!et(e)&&!et(t)?e!==e&&t!==t:qg(e,t,r,n,zg,i)}var vs,sl=f(()=>{Jg();Sn();vs=zg});function rR(e,t,r,n){var i=r.length,o=i,s=!n;if(e==null)return!o;for(e=Object(e);i--;){var a=r[i];if(s&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<o;){a=r[i];var c=a[0],l=e[c],d=a[1];if(s&&a[2]){if(l===void 0&&!(c in e))return!1}else{var p=new Mn;if(n)var u=n(l,d,c,e,t,p);if(!(u===void 0?vs(d,l,eR|tR,n,p):u))return!1}}return!0}var eR,tR,Xg,Zg=f(()=>{Xc();sl();eR=1,tR=2;Xg=rR});function nR(e){return e===e&&!rt(e)}var As,al=f(()=>{In();As=nR});function iR(e){for(var t=Rn(e),r=t.length;r--;){var n=t[r],i=e[n];t[r]=[n,i,As(i)]}return t}var Qg,ey=f(()=>{al();us();Qg=iR});function oR(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var Ts,cl=f(()=>{Ts=oR});function sR(e){var t=Qg(e);return t.length==1&&t[0][2]?Ts(t[0][0],t[0][1]):function(r){return r===e||Xg(r,e,t)}}var ty,ry=f(()=>{Zg();ey();cl();ty=sR});function aR(e,t){return e!=null&&t in Object(e)}var ny,iy=f(()=>{ny=aR});function cR(e,t,r){t=ms(t,e);for(var n=-1,i=t.length,o=!1;++n<i;){var s=Xt(t[n]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++n!=i?o:(i=e==null?0:e.length,!!i&&Cn(i)&&An(s,i)&&(Q(e)||On(e)))}var oy,sy=f(()=>{qc();as();Fe();is();ss();Mi();oy=cR});function lR(e,t){return e!=null&&oy(e,t,ny)}var ay,cy=f(()=>{iy();sy();ay=lR});function pR(e,t){return $n(e)&&As(t)?Ts(Xt(e),t):function(r){var n=Kh(r,e);return n===void 0&&n===t?ay(r,e):vs(t,n,uR|dR)}}var uR,dR,ly,uy=f(()=>{sl();Yh();cy();ds();al();cl();Mi();uR=1,dR=2;ly=pR});function fR(e){return function(t){return t?.[e]}}var dy,py=f(()=>{dy=fR});function mR(e){return function(t){return kn(t,e)}}var fy,my=f(()=>{hs();fy=mR});function hR(e){return $n(e)?dy(Xt(e)):fy(e)}var hy,gy=f(()=>{py();my();ds();Mi();hy=hR});function gR(e){return typeof e=="function"?e:e==null?Wt:typeof e=="object"?Q(e)?ly(e[0],e[1]):ty(e):hy(e)}var Qt,Fi=f(()=>{ry();uy();Ci();Fe();gy();Qt=gR});function yR(e,t,r,n){for(var i=-1,o=e==null?0:e.length;++i<o;){var s=e[i];t(n,s,r(s),e)}return n}var yy,wy=f(()=>{yy=yR});function wR(e){return function(t,r,n){for(var i=-1,o=Object(t),s=n(t),a=s.length;a--;){var c=s[e?a:++i];if(r(o[c],c,o)===!1)break}return t}}var Ey,_y=f(()=>{Ey=wR});var ER,Sy,by=f(()=>{_y();ER=Ey(),Sy=ER});function _R(e,t){return e&&Sy(e,t,Rn)}var xy,Iy=f(()=>{by();us();xy=_R});function SR(e,t){return function(r,n){if(r==null)return r;if(!Kt(r))return e(r,n);for(var i=r.length,o=t?i:-1,s=Object(r);(t?o--:++o<i)&&n(s[o],o,s)!==!1;);return r}}var vy,Ay=f(()=>{Oi();vy=SR});var bR,Cs,ll=f(()=>{Iy();Ay();bR=vy(xy),Cs=bR});function xR(e,t,r,n){return Cs(e,function(i,o,s){t(n,i,r(i),s)}),n}var Ty,Cy=f(()=>{ll();Ty=xR});function IR(e,t){return function(r,n){var i=Q(r)?yy:Ty,o=t?t():{};return i(r,e,Qt(n,2),o)}}var Oy,Ry=f(()=>{wy();Cy();Fi();Fe();Oy=IR});function vR(e,t,r){for(var n=-1,i=e==null?0:e.length;++n<i;)if(r(t,e[n]))return!0;return!1}var $y,Ny=f(()=>{$y=vR});function AR(e,t){var r=-1,n=Kt(e)?Array(e.length):[];return Cs(e,function(i,o,s){n[++r]=t(i,o,s)}),n}var Dy,Ly=f(()=>{ll();Oi();Dy=AR});var TR,CR,OR,ul,ky=f(()=>{Om();Ry();TR=Object.prototype,CR=TR.hasOwnProperty,OR=Oy(function(e,t,r){CR.call(e,r)?e[r].push(t):Cm(e,r,[t])}),ul=OR});function RR(e,t){for(var r,n=-1,i=e.length;++n<i;){var o=t(e[n]);o!==void 0&&(r=r===void 0?o:r+o)}return r}var Py,My=f(()=>{Py=RR});function $R(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}var Fy,By=f(()=>{Fy=$R});function NR(e,t){if(e!==t){var r=e!==void 0,n=e===null,i=e===e,o=tt(e),s=t!==void 0,a=t===null,c=t===t,l=tt(t);if(!a&&!l&&!o&&e>t||o&&s&&c&&!a&&!l||n&&s&&c||!r&&c||!i)return 1;if(!n&&!o&&!l&&e<t||l&&r&&i&&!n&&!o||a&&r&&i||!s&&i||!c)return-1}return 0}var Hy,Uy=f(()=>{bn();Hy=NR});function DR(e,t,r){for(var n=-1,i=e.criteria,o=t.criteria,s=i.length,a=r.length;++n<s;){var c=Hy(i[n],o[n]);if(c){if(n>=a)return c;var l=r[n];return c*(l=="desc"?-1:1)}}return e.index-t.index}var Gy,jy=f(()=>{Uy();Gy=DR});function LR(e,t,r){t.length?t=xn(t,function(o){return Q(o)?function(s){return kn(s,o.length===1?o[0]:o)}:o}):t=[Wt];var n=-1;t=xn(t,cs(Qt));var i=Dy(e,function(o,s,a){var c=xn(t,function(l){return l(o)});return{criteria:c,index:++n,value:o}});return Fy(i,function(o,s){return Gy(o,s,r)})}var Wy,Vy=f(()=>{kc();hs();Fi();Ly();By();Gc();jy();Ci();Fe();Wy=LR});var kR,dl,Ky=f(()=>{Qh();Vy();Lm();Bc();kR=Dm(function(e,t){if(e==null)return[];var r=t.length;return r>1&&Ri(e,t[0],t[1])?t=[]:r>2&&Ri(t[0],t[1],t[2])&&(t=[t[0]]),Wy(e,Zh(t,1),[])}),dl=kR});function PR(e,t){return e&&e.length?Py(e,Qt(t,2)):0}var pl,Yy=f(()=>{Fi();My();pl=PR});var MR,FR,qy,Jy=f(()=>{Qc();lm();xs();MR=1/0,FR=Zt&&1/Fn(new Zt([,-0]))[1]==MR?function(e){return new Zt(e)}:cm,qy=FR});function HR(e,t,r){var n=-1,i=Am,o=e.length,s=!0,a=[],c=a;if(r)s=!1,i=$y;else if(o>=BR){var l=t?null:qy(e);if(l)return Fn(l);s=!1,i=Ss,c=new _s}else c=t?[]:a;e:for(;++n<o;){var d=e[n],p=t?t(d):d;if(d=r||d!==0?d:0,s&&p===p){for(var u=c.length;u--;)if(c[u]===p)continue e;t&&c.push(p),a.push(d)}else i(c,p,r)||(c!==a&&c.push(p),a.push(d))}return a}var BR,zy,Xy=f(()=>{rl();Tm();Ny();nl();Jy();xs();BR=200;zy=HR});function UR(e,t){return e&&e.length?zy(e,Qt(t,2)):[]}var fl,Zy=f(()=>{Fi();Xy();fl=UR});var Os=f(()=>{rg();ky();Ky();Yy();Zy();});import{readFile as GR}from"node:fs/promises";function WR(e){let t=[];return e.sectionHeading&&t.push(`[Section: ${e.sectionHeading}]`),e.contextualPrefix&&t.push(e.contextualPrefix),t.push(e.content),t.join(`
95
+ `)}function VR(e,t,r){return`${e}
95
96
 
96
97
  ---
97
98
 
@@ -105,15 +106,15 @@ Respond with ONLY a JSON array of facts. Each fact object must have exactly thes
105
106
  - "confidence" (string): one of high, medium, low
106
107
  - "importance" (string): "vital" if essential to understanding the topic, "supplementary" if supporting detail
107
108
 
108
- Output the JSON array directly, no explanation or wrapping.`}function JC(e,t){let r=Array.isArray(e)?e:Array.isArray(e?.facts)?e.facts:null;return r?r.filter(n=>n.content&&t.includes(n.category)&&["high","medium","low"].includes(n.confidence)).map(n=>({...n,importance:["vital","supplementary"].includes(n.importance)?n.importance:"supplementary"})):[]}async function zC(e,t,r){let n=YC(e),i=qC(t,n,r),o=await We(i,{model:E.llm.extractionModel,caller:"extractor"});return JC(o,r).map(a=>({...a,sourceSection:e.sectionHeading||null}))}async function Mg(e,{promptPath:t,categories:r}){if(!e.length)return[];let n=await VC(t,"utf8"),i=za(e,KC),o=[];for(let s of i){let a=await Promise.all(s.map(c=>zC(c,n,r).catch(l=>(console.error(`[extractor] chunk failed: ${l.message}`),[]))));o.push(...a.flat())}return o}var KC,Fg=f(()=>{Bo();Ve();R();KC=5});function gn(e){if(!e||typeof e!="string")return e;let t=e;for(let r of XC)t=t.replace(r,li);return t=t.replace(ZC,(r,n)=>`${n}=${li}`),t=t.replace(QC,(r,n)=>`${n}${li}:${li}@`),t=t.replace(t$,(r,n)=>`${n}=${li}`),t}var li,XC,ZC,QC,e$,t$,Uo=f(()=>{li="***MASKED***",XC=[/\b(sk-(?:proj-|ant-)?[A-Za-z0-9_\-]{20,})\b/g,/\b(ghp_[A-Za-z0-9]{36,})\b/g,/\b(github_pat_[A-Za-z0-9_]{20,})\b/g,/\b(gho_[A-Za-z0-9]{36,})\b/g,/\b(glpat-[A-Za-z0-9_\-]{20,})\b/g,/\b(xox[baprs]-[A-Za-z0-9\-]{10,})\b/g,/\b(whsec_[A-Za-z0-9]{20,})\b/g,/\b(rk_(?:live|test)_[A-Za-z0-9]{20,})\b/g,/\b(AKIA[A-Z0-9]{16})\b/g,/\b(ASIA[A-Z0-9]{16})\b/g,/\b(eyJ[A-Za-z0-9_\-]{20,}\.[A-Za-z0-9_\-]{10,}\.[A-Za-z0-9_\-]{10,})\b/g,/\b([A-Za-z0-9]{24}\.[A-Za-z0-9_\-]{6}\.[A-Za-z0-9_\-]{27})\b/g,/\b(\d{8,12}:[A-Za-z0-9_\-]{35})\b/g],ZC=new RegExp(`\\b(api[_-]?key|api[_-]?secret|secret[_-]?key|secret|token|password|passwd|pwd|auth[_-]?token|access[_-]?token|refresh[_-]?token|bearer|private[_-]?key|client[_-]?secret)\\s*[=:]\\s*["']?([^\\s"']{8,})["']?`,"gi"),QC=/(\w+:\/\/)([^:/\s]+):([^@\s]{3,})@/g,e$=["DATABASE_URL","REDIS_URL","MONGODB_URI","MONGO_URI","POSTGRES_URL","DSN","CONNECTION_STRING","ENCRYPTION_KEY","JWT_SECRET","SIGIL_ENCRYPTION_KEY","SESSION_SECRET","WEBHOOK_SECRET"],t$=new RegExp(`\\b(${e$.join("|")})\\s*[=:]\\s*["']?([^\\s"']+)["']?`,"gi")});var Ut={};T(Ut,{deleteFact:()=>d$,deleteNamespace:()=>f$,findByUid:()=>s$,findSimilar:()=>Gg,getFactCount:()=>u$,getHotFacts:()=>c$,insertFact:()=>yn,listByCategory:()=>a$,listByDocument:()=>Bg,listFacts:()=>l$,listNamespaces:()=>p$,markContradicted:()=>Ug,markSuperseded:()=>yc,recordAccess:()=>wc,saveFact:()=>gc,supersedeStaleDocFacts:()=>Go});import{readFile as r$}from"node:fs/promises";import n$ from"node:path";async function gc({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:a}){e=gn(e);let c=a||await or(e),l=await Gg(c,{namespace:i}),d={skip:Hg,ambiguous:mc};if(!l.length)return{action:"ADD",fact:await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{topSimilarity:null,matchCount:0,decision:"no-match",thresholds:d}};let p=l[0],u={topSimilarity:Number(p.similarity),matchCount:l.length,existingId:p.id,existingContent:p.content,thresholds:d};if(p.similarity>=Hg)return{action:"SKIP",existing:p,audm:{...u,decision:"skip-duplicate"}};if(p.similarity>=mc){let g=await o$(e,p.content);if(g==="UPDATE"){let w=await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c});return await yc(p.id,w.id),await hc({targetType:"fact",targetId:p.id,event:"UPDATE",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"UPDATE",fact:w,supersededId:p.id,audm:{...u,decision:"llm:UPDATE"}}}if(g==="CONTRADICT"){let w=await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c});return await Ug(p.id,w.id),await hc({targetType:"fact",targetId:p.id,event:"CONTRADICT",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"CONTRADICT",fact:w,contradictedId:p.id,audm:{...u,decision:"llm:CONTRADICT"}}}return{action:"ADD",fact:await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{...u,decision:"llm:ADD"}}}return{action:"ADD",fact:await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{...u,decision:"below-ambiguous"}}}async function o$(e,t){let n=`${await r$(i$,"utf8")}
109
+ Output the JSON array directly, no explanation or wrapping.`}function KR(e,t){let r=Array.isArray(e)?e:Array.isArray(e?.facts)?e.facts:null;return r?r.filter(n=>n.content&&t.includes(n.category)&&["high","medium","low"].includes(n.confidence)).map(n=>({...n,importance:["vital","supplementary"].includes(n.importance)?n.importance:"supplementary"})):[]}async function YR(e,t,r){let n=WR(e),i=VR(t,n,r),o=await ze(i,{model:_.llm.extractionModel,caller:"extractor"});return KR(o,r).map(a=>({...a,sourceSection:e.sectionHeading||null}))}async function Qy(e,{promptPath:t,categories:r}){if(!e.length)return[];let n=await GR(t,"utf8"),i=zc(e,jR),o=[];for(let s of i){let a=await Promise.all(s.map(c=>YR(c,n,r).catch(l=>(console.error(`[extractor] chunk failed: ${l.message}`),[]))));o.push(...a.flat())}return o}var jR,ew=f(()=>{Os();Xe();$();jR=5});function Bn(e){if(!e||typeof e!="string")return e;let t=e;for(let r of qR)t=t.replace(r,Bi);return t=t.replace(JR,(r,n)=>`${n}=${Bi}`),t=t.replace(zR,(r,n)=>`${n}${Bi}:${Bi}@`),t=t.replace(ZR,(r,n)=>`${n}=${Bi}`),t}var Bi,qR,JR,zR,XR,ZR,Rs=f(()=>{Bi="***MASKED***",qR=[/\b(sk-(?:proj-|ant-)?[A-Za-z0-9_\-]{20,})\b/g,/\b(ghp_[A-Za-z0-9]{36,})\b/g,/\b(github_pat_[A-Za-z0-9_]{20,})\b/g,/\b(gho_[A-Za-z0-9]{36,})\b/g,/\b(glpat-[A-Za-z0-9_\-]{20,})\b/g,/\b(xox[baprs]-[A-Za-z0-9\-]{10,})\b/g,/\b(whsec_[A-Za-z0-9]{20,})\b/g,/\b(rk_(?:live|test)_[A-Za-z0-9]{20,})\b/g,/\b(AKIA[A-Z0-9]{16})\b/g,/\b(ASIA[A-Z0-9]{16})\b/g,/\b(eyJ[A-Za-z0-9_\-]{20,}\.[A-Za-z0-9_\-]{10,}\.[A-Za-z0-9_\-]{10,})\b/g,/\b([A-Za-z0-9]{24}\.[A-Za-z0-9_\-]{6}\.[A-Za-z0-9_\-]{27})\b/g,/\b(\d{8,12}:[A-Za-z0-9_\-]{35})\b/g],JR=new RegExp(`\\b(api[_-]?key|api[_-]?secret|secret[_-]?key|secret|token|password|passwd|pwd|auth[_-]?token|access[_-]?token|refresh[_-]?token|bearer|private[_-]?key|client[_-]?secret)\\s*[=:]\\s*["']?([^\\s"']{8,})["']?`,"gi"),zR=/(\w+:\/\/)([^:/\s]+):([^@\s]{3,})@/g,XR=["DATABASE_URL","REDIS_URL","MONGODB_URI","MONGO_URI","POSTGRES_URL","DSN","CONNECTION_STRING","ENCRYPTION_KEY","JWT_SECRET","SIGIL_ENCRYPTION_KEY","SESSION_SECRET","WEBHOOK_SECRET"],ZR=new RegExp(`\\b(${XR.join("|")})\\s*[=:]\\s*["']?([^\\s"']+)["']?`,"gi")});var er={};v(er,{deleteFact:()=>c$,deleteNamespace:()=>u$,findByUid:()=>n$,findSimilar:()=>iw,getFactCount:()=>a$,getHotFacts:()=>o$,insertFact:()=>Hn,listByCategory:()=>i$,listByDocument:()=>rw,listFacts:()=>s$,listNamespaces:()=>l$,markContradicted:()=>nw,markSuperseded:()=>yl,recordAccess:()=>wl,saveFact:()=>gl,supersedeStaleDocFacts:()=>$s});import{readFile as QR}from"node:fs/promises";import e$ from"node:path";async function gl({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:a}){e=Bn(e);let c=a||await br(e),l=await iw(c,{namespace:i}),d={skip:tw,ambiguous:ml};if(!l.length)return{action:"ADD",fact:await Hn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{topSimilarity:null,matchCount:0,decision:"no-match",thresholds:d}};let p=l[0],u={topSimilarity:Number(p.similarity),matchCount:l.length,existingId:p.id,existingContent:p.content,thresholds:d};if(p.similarity>=tw)return{action:"SKIP",existing:p,audm:{...u,decision:"skip-duplicate"}};if(p.similarity>=ml){let h=await r$(e,p.content);if(h==="UPDATE"){let w=await Hn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c});return await yl(p.id,w.id),await hl({targetType:"fact",targetId:p.id,event:"UPDATE",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"UPDATE",fact:w,supersededId:p.id,audm:{...u,decision:"llm:UPDATE"}}}if(h==="CONTRADICT"){let w=await Hn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c});return await nw(p.id,w.id),await hl({targetType:"fact",targetId:p.id,event:"CONTRADICT",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"CONTRADICT",fact:w,contradictedId:p.id,audm:{...u,decision:"llm:CONTRADICT"}}}return{action:"ADD",fact:await Hn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{...u,decision:"llm:ADD"}}}return{action:"ADD",fact:await Hn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{...u,decision:"below-ambiguous"}}}async function r$(e,t){let n=`${await QR(t$,"utf8")}
109
110
 
110
111
  **EXISTING FACT:** ${t}
111
112
 
112
- **NEW FACT:** ${e}`,o=(await mt(n,{model:E.llm.decisionModel,caller:"audm"})).trim().toUpperCase();return o.includes("UPDATE")?"UPDATE":o.includes("CONTRADICT")?"CONTRADICT":"ADD"}async function yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:a}){let c=`fact-${Ke(16)}`,l=null,d=null;try{let{currentDeviceId:u,currentAgent:m}=await Promise.resolve().then(()=>(qi(),aa));l=u(),d=m()}catch{}let[p]=await _("fact").insert({uid:c,content:e,category:t,confidence:r||"medium",importance:n||"supplementary",namespace:i,status:"active",sourceDocumentIds:o||[],sourceSection:s||null,embedding:fe(a),validFrom:new Date,embeddingModel:E.embedding.model||null,embeddingDim:Number(E.embedding.dimensions)||null,createdByDeviceId:l,createdByAgent:d}).returning("*");return await _.raw(`
113
+ **NEW FACT:** ${e}`,o=(await xt(n,{model:_.llm.decisionModel,caller:"audm"})).trim().toUpperCase();return o.includes("UPDATE")?"UPDATE":o.includes("CONTRADICT")?"CONTRADICT":"ADD"}async function Hn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:a}){let c=`fact-${Ze(16)}`,l=null,d=null;try{let{currentDeviceId:u,currentAgent:m}=await Promise.resolve().then(()=>(Ho(),ac));l=u(),d=m()}catch{}let[p]=await E("fact").insert({uid:c,content:e,category:t,confidence:r||"medium",importance:n||"supplementary",namespace:i,status:"active",sourceDocumentIds:o||[],sourceSection:s||null,embedding:he(a),validFrom:new Date,embeddingModel:_.embedding.model||null,embeddingDim:Number(_.embedding.dimensions)||null,createdByDeviceId:l,createdByAgent:d}).returning("*");return await E.raw(`
113
114
  UPDATE fact
114
115
  SET search_vector = to_tsvector('english', content)
115
116
  WHERE id = ?
116
- `,[p.id]),p}async function s$(e){let[t]=await _("fact").where({uid:e});return t||null}async function a$(e,{namespace:t,limit:r=50}={}){let n=_("fact").where({category:e,status:"active"}).orderBy("createdAt","desc").limit(r);return t&&n.where({namespace:t}),n}async function Bg(e){return _("fact").whereRaw("? = ANY(source_document_ids)",[e]).where({status:"active"}).orderBy("createdAt","desc")}async function Ug(e,t){await _("fact").where({id:e}).update({status:"contradicted",contradictedById:t,validUntil:_.fn.now()})}async function yc(e,t){await _("fact").where({id:e}).update({status:"superseded",supersededById:t,validUntil:_.fn.now()})}async function Go(e,t=[]){let r=new Set((t||[]).filter(s=>s!=null)),n=await Bg(e),i=0,o=0;for(let s of n){if(r.has(s.id))continue;(Array.isArray(s.sourceDocumentIds)?s.sourceDocumentIds:[]).length<=1?(await yc(s.id,null),await hc({targetType:"fact",targetId:s.id,event:"SUPERSEDE",oldContent:s.content,newContent:null,triggeredBy:`reingest:doc=${e}`}),i++):(await _("fact").where({id:s.id}).update({sourceDocumentIds:_.raw("array_remove(source_document_ids, ?)",[e])}),o++)}return{superseded:i,dissociated:o}}async function Gg(e,{namespace:t,threshold:r=mc,limit:n=5}){let i=fe(e),o=`${st("embedding")} <=> ${at()}`;return _.transaction(async s=>{await s.raw("SET LOCAL hnsw.ef_search = 40");let{rows:a}=await s.raw(`
117
+ `,[p.id]),p}async function n$(e){let[t]=await E("fact").where({uid:e});return t||null}async function i$(e,{namespace:t,limit:r=50}={}){let n=E("fact").where({category:e,status:"active"}).orderBy("createdAt","desc").limit(r);return t&&n.where({namespace:t}),n}async function rw(e){return E("fact").whereRaw("? = ANY(source_document_ids)",[e]).where({status:"active"}).orderBy("createdAt","desc")}async function nw(e,t){await E("fact").where({id:e}).update({status:"contradicted",contradictedById:t,validUntil:E.fn.now()})}async function yl(e,t){await E("fact").where({id:e}).update({status:"superseded",supersededById:t,validUntil:E.fn.now()})}async function $s(e,t=[]){let r=new Set((t||[]).filter(s=>s!=null)),n=await rw(e),i=0,o=0;for(let s of n){if(r.has(s.id))continue;(Array.isArray(s.sourceDocumentIds)?s.sourceDocumentIds:[]).length<=1?(await yl(s.id,null),await hl({targetType:"fact",targetId:s.id,event:"SUPERSEDE",oldContent:s.content,newContent:null,triggeredBy:`reingest:doc=${e}`}),i++):(await E("fact").where({id:s.id}).update({sourceDocumentIds:E.raw("array_remove(source_document_ids, ?)",[e])}),o++)}return{superseded:i,dissociated:o}}async function iw(e,{namespace:t,threshold:r=ml,limit:n=5}){let i=he(e),o=`${pt("embedding")} <=> ${ft()}`;return E.transaction(async s=>{await s.raw("SET LOCAL hnsw.ef_search = 40");let{rows:a}=await s.raw(`
117
118
  SELECT id, uid, content, category, status,
118
119
  1 - (${o}) as similarity
119
120
  FROM fact
@@ -123,12 +124,12 @@ Output the JSON array directly, no explanation or wrapping.`}function JC(e,t){le
123
124
  AND 1 - (${o}) >= ?
124
125
  ORDER BY ${o}
125
126
  LIMIT ?
126
- `,[i,t,i,r,i,n]);return a})}async function hc({targetType:e,targetId:t,event:r,oldContent:n,newContent:i,triggeredBy:o}){await _("history").insert({targetType:e,targetId:t,event:r,oldContent:n||null,newContent:i||null,triggeredBy:o||null})}async function wc(e){e.length&&await _.raw(`UPDATE fact_lifecycle
127
+ `,[i,t,i,r,i,n]);return a})}async function hl({targetType:e,targetId:t,event:r,oldContent:n,newContent:i,triggeredBy:o}){await E("history").insert({targetType:e,targetId:t,event:r,oldContent:n||null,newContent:i||null,triggeredBy:o||null})}async function wl(e){e.length&&await E.raw(`UPDATE fact_lifecycle
127
128
  SET access_count = access_count + 1,
128
129
  last_accessed_at = NOW(),
129
130
  stage = CASE WHEN stage = 'stable' THEN 'editing' ELSE stage END,
130
131
  stage_entered_at = CASE WHEN stage = 'stable' THEN NOW() ELSE stage_entered_at END
131
- WHERE fact_id = ANY(?)`,[e])}async function c$(e,{limit:t=10,since:r}={}){let n=_("fact as f").join("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active"}).where("fl.access_count",">",0).orderBy("fl.access_count","desc").limit(t).select("f.*");return e&&n.where({"f.namespace":e}),r&&n.where("fl.last_accessed_at",">=",r),n}async function l$({namespace:e,limit:t=50,offset:r=0,category:n}={}){let i=_("fact").where({status:"active"}).select("id","uid","content","category","confidence","importance","createdAt","namespace").orderBy("createdAt","desc").limit(t).offset(r);return e&&i.where({namespace:e}),n&&i.where({category:n}),i}async function u$(e){let t=_("fact").where({status:"active"});e&&t.where({namespace:e});let[{count:r}]=await t.count("id as count");return Number(r)}async function d$(e){let r=typeof e=="string"&&e.length>8?{uid:e}:{id:Number(e)},n=await _("fact").where(r).first();return n?(await _("fact_entity").where({factId:n.id}).del(),await _("fact").where({id:n.id}).del(),n):null}async function p$(){return(await _("fact").where({status:"active"}).select("namespace").count("id as factCount").groupBy("namespace").orderBy("namespace")).map(t=>({namespace:t.namespace,factCount:Number(t.factCount)}))}async function f$(e){await _.raw("DELETE FROM relation WHERE source_fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await _.raw("DELETE FROM fact_entity WHERE fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await _.raw("DELETE FROM relation WHERE source_id IN (SELECT id FROM entity WHERE namespace = ?) OR target_id IN (SELECT id FROM entity WHERE namespace = ?)",[e,e]);let t=await _("fact").where({namespace:e}).del(),r=await _("chunk").where({namespace:e}).del(),n=await _("document").where({namespace:e}).del(),i=await _("entity").where({namespace:e}).del();return{factsDeleted:t,chunksDeleted:r,docsDeleted:n,entitiesDeleted:i}}var i$,Hg,mc,lt=f(()=>{qr();D();Ot();Ve();$t();Uo();R();B();i$=n$.join(Ie,"audm-decision.md"),Hg=E.memory.skipThreshold,mc=E.memory.ambiguousThreshold});var jo,m$,TV,jg,_c=f(()=>{jo={preference:"Personal likes, dislikes, favorites, preferred tools/foods/methods",opinion:"Personal views, assessments, evaluations of tools/concepts/approaches",personal:"Personal facts \u2014 birthday, workplace, location, biographical details",experience:"Personal experiences \u2014 projects built, tools used, skills acquired",business_rule:"Organizational rules, policies, constraints",workflow:"Process flows, state transitions, procedures",architecture:"System design, service interactions, infrastructure",convention:"Coding patterns, naming rules, team standards",decision:"Why choices were made, tradeoffs considered",domain_knowledge:"Domain-specific terminology and concepts",key_insight:"Important takeaways, notable explanations",metric:"Quantitative data, measurements, statistics",issue:"Known problems, bugs, limitations, risks",action_item:"Tasks, follow-ups, assignments, deadlines"},m$=["preference","opinion","personal","experience"],TV=Object.keys(jo).filter(e=>!m$.includes(e)),jg=jo});import{readFile as h$}from"node:fs/promises";import{join as g$}from"node:path";async function Vg(e,{title:t}={}){if(!e?.trim()||e.trim().length<w$)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(e.length>_$)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let n=`${await h$(y$,"utf8")}
132
+ WHERE fact_id = ANY(?)`,[e])}async function o$(e,{limit:t=10,since:r}={}){let n=E("fact as f").join("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active"}).where("fl.access_count",">",0).orderBy("fl.access_count","desc").limit(t).select("f.*");return e&&n.where({"f.namespace":e}),r&&n.where("fl.last_accessed_at",">=",r),n}async function s$({namespace:e,limit:t=50,offset:r=0,category:n}={}){let i=E("fact").where({status:"active"}).select("id","uid","content","category","confidence","importance","createdAt","namespace").orderBy("createdAt","desc").limit(t).offset(r);return e&&i.where({namespace:e}),n&&i.where({category:n}),i}async function a$(e){let t=E("fact").where({status:"active"});e&&t.where({namespace:e});let[{count:r}]=await t.count("id as count");return Number(r)}async function c$(e){let r=typeof e=="string"&&e.length>8?{uid:e}:{id:Number(e)},n=await E("fact").where(r).first();return n?(await E("fact_entity").where({factId:n.id}).del(),await E("fact").where({id:n.id}).del(),n):null}async function l$(){return(await E("fact").where({status:"active"}).select("namespace").count("id as factCount").groupBy("namespace").orderBy("namespace")).map(t=>({namespace:t.namespace,factCount:Number(t.factCount)}))}async function u$(e){await E.raw("DELETE FROM relation WHERE source_fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await E.raw("DELETE FROM fact_entity WHERE fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await E.raw("DELETE FROM relation WHERE source_id IN (SELECT id FROM entity WHERE namespace = ?) OR target_id IN (SELECT id FROM entity WHERE namespace = ?)",[e,e]);let t=await E("fact").where({namespace:e}).del(),r=await E("chunk").where({namespace:e}).del(),n=await E("document").where({namespace:e}).del(),i=await E("entity").where({namespace:e}).del();return{factsDeleted:t,chunksDeleted:r,docsDeleted:n,entitiesDeleted:i}}var t$,tw,ml,ht=f(()=>{wn();N();jt();Xe();Gt();Rs();$();M();t$=e$.join(Ce,"audm-decision.md"),tw=_.memory.skipThreshold,ml=_.memory.ambiguousThreshold});var Ns,d$,Gq,ow,El=f(()=>{Ns={preference:"Personal likes, dislikes, favorites, preferred tools/foods/methods",opinion:"Personal views, assessments, evaluations of tools/concepts/approaches",personal:"Personal facts \u2014 birthday, workplace, location, biographical details",experience:"Personal experiences \u2014 projects built, tools used, skills acquired",business_rule:"Organizational rules, policies, constraints",workflow:"Process flows, state transitions, procedures",architecture:"System design, service interactions, infrastructure",convention:"Coding patterns, naming rules, team standards",decision:"Why choices were made, tradeoffs considered",domain_knowledge:"Domain-specific terminology and concepts",key_insight:"Important takeaways, notable explanations",metric:"Quantitative data, measurements, statistics",issue:"Known problems, bugs, limitations, risks",action_item:"Tasks, follow-ups, assignments, deadlines"},d$=["preference","opinion","personal","experience"],Gq=Object.keys(Ns).filter(e=>!d$.includes(e)),ow=Ns});import{readFile as p$}from"node:fs/promises";import{join as f$}from"node:path";async function aw(e,{title:t}={}){if(!e?.trim()||e.trim().length<h$)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(e.length>g$)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let n=`${await p$(m$,"utf8")}
132
133
 
133
134
  ---
134
135
 
@@ -137,13 +138,13 @@ Input: ${e}
137
138
 
138
139
  ---
139
140
 
140
- Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts": [{"content":"...","category":"...","confidence":"high|medium|low","importance":"vital|supplementary"}], "entities": ["..."], "reasoning": "..." }`;try{let i=await We(n,{model:E.llm.extractionModel,caller:"classifier"});if(!i||!E$.includes(i.route))return Wg("Invalid classification result");let o=Object.keys(jg),s=i.route==="thought"&&Array.isArray(i.facts)?i.facts.filter(a=>a.content&&o.includes(a.category)).map(a=>({...a,confidence:["high","medium","low"].includes(a.confidence)?a.confidence:"high",importance:["vital","supplementary"].includes(a.importance)?a.importance:"vital"})):[];return{route:i.route,facts:s,entities:Array.isArray(i.entities)?i.entities:[],reasoning:i.reasoning||""}}catch(i){return console.error("[input-classifier] Failed:",i.message),Wg(i.message)}}function Wg(e){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${e}`}}var y$,w$,_$,E$,Kg=f(()=>{Ve();R();_c();B();y$=g$(Ie,"input-classifier.md"),w$=3,_$=2e3,E$=["thought","knowledge","noise"]});var pr={};T(pr,{findById:()=>Xe,findByName:()=>lr,findByUid:()=>b$,findSimilar:()=>x$,getCanonicalEntity:()=>dr,getEntityCount:()=>I$,incrementMentionCount:()=>ui,insertEntity:()=>Ec,listByType:()=>v$,pushAlias:()=>Wo,searchByName:()=>xc,updateDescription:()=>S$,updateEntityTypes:()=>ur,updateName:()=>bc});async function Ec({name:e,entityType:t,description:r,namespace:n,externalId:i,embedding:o}){let s=`ent-${Ke(16)}`,[a]=await _("entity").insert({uid:s,name:e,entityType:t,description:r||null,namespace:n||E.defaults.namespace,externalId:i||null,mentionCount:1,embedding:fe(o)}).returning("*");return a}async function lr(e,t){let r=t||E.defaults.namespace,n=e.toLowerCase();return _("entity").where({namespace:r}).whereNull("mergedWith").where(function(){this.whereRaw("LOWER(name) = ?",[n]).orWhereRaw("aliases @> ARRAY[?]::text[]",[n])}).first()||null}async function Wo(e,t){if(!t)return;let r=t.toLowerCase();await _.raw(`
141
+ Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts": [{"content":"...","category":"...","confidence":"high|medium|low","importance":"vital|supplementary"}], "entities": ["..."], "reasoning": "..." }`;try{let i=await ze(n,{model:_.llm.extractionModel,caller:"classifier"});if(!i||!y$.includes(i.route))return sw("Invalid classification result");let o=Object.keys(ow),s=i.route==="thought"&&Array.isArray(i.facts)?i.facts.filter(a=>a.content&&o.includes(a.category)).map(a=>({...a,confidence:["high","medium","low"].includes(a.confidence)?a.confidence:"high",importance:["vital","supplementary"].includes(a.importance)?a.importance:"vital"})):[];return{route:i.route,facts:s,entities:Array.isArray(i.entities)?i.entities:[],reasoning:i.reasoning||""}}catch(i){return console.error("[input-classifier] Failed:",i.message),sw(i.message)}}function sw(e){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${e}`}}var m$,h$,g$,y$,cw=f(()=>{Xe();$();El();M();m$=f$(Ce,"input-classifier.md"),h$=3,g$=2e3,y$=["thought","knowledge","noise"]});var Or={};v(Or,{findById:()=>nt,findByName:()=>Ar,findByUid:()=>w$,findSimilar:()=>E$,getCanonicalEntity:()=>Cr,getEntityCount:()=>b$,incrementMentionCount:()=>Hi,insertEntity:()=>_l,listByType:()=>S$,pushAlias:()=>Ds,searchByName:()=>bl,updateDescription:()=>_$,updateEntityTypes:()=>Tr,updateName:()=>Sl});async function _l({name:e,entityType:t,description:r,namespace:n,externalId:i,embedding:o}){let s=`ent-${Ze(16)}`,[a]=await E("entity").insert({uid:s,name:e,entityType:t,description:r||null,namespace:n||_.defaults.namespace,externalId:i||null,mentionCount:1,embedding:he(o)}).returning("*");return a}async function Ar(e,t){let r=t||_.defaults.namespace,n=e.toLowerCase();return E("entity").where({namespace:r}).whereNull("mergedWith").where(function(){this.whereRaw("LOWER(name) = ?",[n]).orWhereRaw("aliases @> ARRAY[?]::text[]",[n])}).first()||null}async function Ds(e,t){if(!t)return;let r=t.toLowerCase();await E.raw(`
141
142
  UPDATE entity
142
143
  SET aliases = (
143
144
  SELECT ARRAY(SELECT DISTINCT unnest(aliases || ARRAY[?]::text[]))
144
145
  )
145
146
  WHERE id = ?
146
- `,[r,e])}async function bc(e,t){await _("entity").where({id:e}).update({name:t})}async function b$(e){return _("entity").where({uid:e}).first()||null}async function Xe(e){return _("entity").where({id:e}).first()||null}async function x$(e,{entityType:t,namespace:r,threshold:n=.85,limit:i=3}){let o=fe(e),s=`${st("embedding")} <=> ${at()}`,{rows:a}=await _.raw(`
147
+ `,[r,e])}async function Sl(e,t){await E("entity").where({id:e}).update({name:t})}async function w$(e){return E("entity").where({uid:e}).first()||null}async function nt(e){return E("entity").where({id:e}).first()||null}async function E$(e,{entityType:t,namespace:r,threshold:n=.85,limit:i=3}){let o=he(e),s=`${pt("embedding")} <=> ${ft()}`,{rows:a}=await E.raw(`
147
148
  SELECT id, uid, name, entity_type AS "entityType", description,
148
149
  mention_count AS "mentionCount",
149
150
  1 - (${s}) AS similarity
@@ -155,7 +156,7 @@ Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts":
155
156
  AND 1 - (${s}) >= ?
156
157
  ORDER BY ${s}
157
158
  LIMIT ?
158
- `,[o,t,r,E.defaults.namespace,o,n,o,i]);return a}async function ui(e){await _("entity").where({id:e}).increment("mentionCount",1)}async function S$(e,t){await _("entity").where({id:e}).update({description:t})}async function v$(e,{namespace:t,limit:r=50}={}){let n=_("entity").where({entityType:e}).whereNull("mergedWith").orderBy("mentionCount","desc").limit(r);return t&&n.where({namespace:t}),n}async function I$(e){let[{count:t}]=await _("entity").where({entityType:e}).whereNull("mergedWith").count("id as count");return Number(t)}async function xc(e,{entityType:t,namespace:r,limit:n=10}={}){let i=_("entity").whereRaw("LOWER(name) LIKE ?",[`%${e.toLowerCase()}%`]).whereNull("mergedWith").orderBy("mentionCount","desc").limit(n);return t&&i.where({entityType:t}),r&&i.where({namespace:r}),i}async function ur(e,t){let r=await Xe(e);if(!r)return;let n;try{n=r.entityTypes?JSON.parse(r.entityTypes):[r.entityType]}catch{n=[r.entityType]}n.includes(t)||(n.push(t),await _("entity").where({id:e}).update({entityTypes:JSON.stringify(n)}))}async function dr(e){let t=await Xe(e);for(;t?.mergedWith;)t=await Xe(t.mergedWith);return t}var Ze=f(()=>{qr();D();$t();R()});async function Yg(e,t,{namespace:r,threshold:n=A$,limit:i=5}){if(!t)return[];let o=fe(t),s=`${st("embedding")} <=> ${at()}`,{rows:a}=await _.raw(`
159
+ `,[o,t,r,_.defaults.namespace,o,n,o,i]);return a}async function Hi(e){await E("entity").where({id:e}).increment("mentionCount",1)}async function _$(e,t){await E("entity").where({id:e}).update({description:t})}async function S$(e,{namespace:t,limit:r=50}={}){let n=E("entity").where({entityType:e}).whereNull("mergedWith").orderBy("mentionCount","desc").limit(r);return t&&n.where({namespace:t}),n}async function b$(e){let[{count:t}]=await E("entity").where({entityType:e}).whereNull("mergedWith").count("id as count");return Number(t)}async function bl(e,{entityType:t,namespace:r,limit:n=10}={}){let i=E("entity").whereRaw("LOWER(name) LIKE ?",[`%${e.toLowerCase()}%`]).whereNull("mergedWith").orderBy("mentionCount","desc").limit(n);return t&&i.where({entityType:t}),r&&i.where({namespace:r}),i}async function Tr(e,t){let r=await nt(e);if(!r)return;let n;try{n=r.entityTypes?JSON.parse(r.entityTypes):[r.entityType]}catch{n=[r.entityType]}n.includes(t)||(n.push(t),await E("entity").where({id:e}).update({entityTypes:JSON.stringify(n)}))}async function Cr(e){let t=await nt(e);for(;t?.mergedWith;)t=await nt(t.mergedWith);return t}var it=f(()=>{wn();N();Gt();$()});async function lw(e,t,{namespace:r,threshold:n=x$,limit:i=5}){if(!t)return[];let o=he(t),s=`${pt("embedding")} <=> ${ft()}`,{rows:a}=await E.raw(`
159
160
  SELECT id, name, entity_type AS "entityType", entity_types AS "entityTypes",
160
161
  1 - (${s}) AS similarity
161
162
  FROM entity
@@ -166,7 +167,7 @@ Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts":
166
167
  AND 1 - (${s}) >= ?
167
168
  ORDER BY ${s}
168
169
  LIMIT ?
169
- `,[o,r,e,o,n,o,i]);return a.map(c=>{let l;try{l=c.entityTypes?JSON.parse(c.entityTypes):[c.entityType]}catch{l=[c.entityType]}return{...c,types:l}})}async function Sc(e,t,r,n){let i=(r.aliases||[]).filter(Boolean),o=i.length?`Existing aliases: ${i.join(", ")}`:"",s=r.similarity>0?`Name-embedding similarity: ${(r.similarity*100).toFixed(0)}%`:"Name-embedding similarity: not directly measured (LLM judging on episode text alone)",a=n?`
170
+ `,[o,r,e,o,n,o,i]);return a.map(c=>{let l;try{l=c.entityTypes?JSON.parse(c.entityTypes):[c.entityType]}catch{l=[c.entityType]}return{...c,types:l}})}async function xl(e,t,r,n){let i=(r.aliases||[]).filter(Boolean),o=i.length?`Existing aliases: ${i.join(", ")}`:"",s=r.similarity>0?`Name-embedding similarity: ${(r.similarity*100).toFixed(0)}%`:"Name-embedding similarity: not directly measured (LLM judging on episode text alone)",a=n?`
170
171
  Source passage where the new mention appeared:
171
172
  ---
172
173
  ${n.slice(0,1500)}
@@ -185,19 +186,19 @@ Decision rules:
185
186
  - If you cannot tell, "same" is false. Don't guess.
186
187
 
187
188
  Respond as STRICT JSON, no markdown, no prose:
188
- {"same": boolean, "rename": boolean, "current_name": "<one of A or B verbatim, or null>", "reason": "one short sentence"}`,l;try{l=await mt(c,{model:E.llm.entityModel,caller:"entity-matcher"})}catch{return{same:!1,rename:!1,reason:"llm-error"}}let d=T$(l);return d&&typeof d.same=="boolean"?{same:d.same===!0,rename:d.rename===!0&&d.same===!0,currentName:typeof d.current_name=="string"?d.current_name:null,reason:typeof d.reason=="string"?d.reason:""}:{same:/^\s*(yes|true)\b/i.test(l),rename:!1,currentName:null,reason:"fallback-text-match"}}function T$(e){if(typeof e!="string")return null;try{return JSON.parse(e.trim())}catch{}let t=e.match(/\{[\s\S]*\}/);if(t)try{return JSON.parse(t[0])}catch{}return null}var A$,qg=f(()=>{D();Ve();$t();R();A$=.85});var Jg={};T(Jg,{followMergeChain:()=>R$,mergeEntities:()=>C$});async function C$(e,t){let[r,n]=await Promise.all([Xe(e),Xe(t)]);if(!r||!n)throw new Error(`Entity ${e} or ${t} not found`);if(e===t)return r;let i=(r.mentionCount||0)+(n.mentionCount||0);await _.transaction(async s=>{await s("relation").where({sourceId:t}).update({sourceId:e}),await s("relation").where({targetId:t}).update({targetId:e}),await s("relation").whereRaw("source_id = target_id").del(),await s.raw(`
189
+ {"same": boolean, "rename": boolean, "current_name": "<one of A or B verbatim, or null>", "reason": "one short sentence"}`,l;try{l=await xt(c,{model:_.llm.entityModel,caller:"entity-matcher"})}catch{return{same:!1,rename:!1,reason:"llm-error"}}let d=I$(l);return d&&typeof d.same=="boolean"?{same:d.same===!0,rename:d.rename===!0&&d.same===!0,currentName:typeof d.current_name=="string"?d.current_name:null,reason:typeof d.reason=="string"?d.reason:""}:{same:/^\s*(yes|true)\b/i.test(l),rename:!1,currentName:null,reason:"fallback-text-match"}}function I$(e){if(typeof e!="string")return null;try{return JSON.parse(e.trim())}catch{}let t=e.match(/\{[\s\S]*\}/);if(t)try{return JSON.parse(t[0])}catch{}return null}var x$,uw=f(()=>{N();Xe();Gt();$();x$=.85});var dw={};v(dw,{followMergeChain:()=>C$,mergeEntities:()=>v$});async function v$(e,t){let[r,n]=await Promise.all([nt(e),nt(t)]);if(!r||!n)throw new Error(`Entity ${e} or ${t} not found`);if(e===t)return r;let i=(r.mentionCount||0)+(n.mentionCount||0);await E.transaction(async s=>{await s("relation").where({sourceId:t}).update({sourceId:e}),await s("relation").where({targetId:t}).update({targetId:e}),await s("relation").whereRaw("source_id = target_id").del(),await s.raw(`
189
190
  INSERT INTO fact_entity (fact_id, entity_id, mention_type, mention_count, created_at, updated_at)
190
191
  SELECT fact_id, ?, mention_type, mention_count, NOW(), NOW()
191
192
  FROM fact_entity
192
193
  WHERE entity_id = ?
193
194
  ON CONFLICT (fact_id, entity_id, mention_type)
194
195
  DO UPDATE SET mention_count = fact_entity.mention_count + EXCLUDED.mention_count
195
- `,[e,t]),await s("fact_entity").where({entityId:t}).del(),await s("entity").where({id:e}).update({mentionCount:i}),await s("pod").where({entityId:e,status:"active"}).first()?await s("pod").where({entityId:t}).update({status:"archived",updatedAt:s.fn.now()}):await s("pod").where({entityId:t}).update({entityId:e,updatedAt:s.fn.now()}),await s("entity").where({id:t}).update({mergedWith:e})}),await O$(e);let o=$$(n);for(let s of o)await ur(e,s);return console.log(`[entity-merge] Merged ${t} (${n.name}) into ${e} (${r.name})`),{...r,mentionCount:i}}function $$(e){if(!e.entityTypes)return[e.entityType];try{return JSON.parse(e.entityTypes)}catch{return[e.entityType]}}async function O$(e){let t=await _("relation").where(function(){this.where({sourceId:e}).orWhere({targetId:e})}).whereNull("invalidAt"),r=uc(t,n=>`${n.sourceId}-${n.targetId}-${n.relationType}`);for(let n of Object.values(r)){if(n.length<=1)continue;let[i,...o]=dc(n,"id"),s=pc(n,"mentionCount");await _("relation").where({id:i.id}).update({mentionCount:s}),await _("relation").whereIn("id",o.map(a=>a.id)).del()}}async function R$(e){let t=await Xe(e),r=[t?.id];for(;t?.mergedWith;)t=await Xe(t.mergedWith),t&&r.push(t.id);return{canonical:t,chain:r}}var zg=f(()=>{Bo();D();Ze()});import{readFile as N$}from"node:fs/promises";async function di({name:e,entityType:t,description:r,namespace:n,externalId:i,embedding:o,episodeText:s,episodeEntityIds:a=[]}){let c=n||E.defaults.namespace,l=await lr(e,c);if(l)return l=await dr(l.id),await ui(l.id),l.entityType!==t&&await ur(l.id,t),l;let d=o||await or(`${t}: ${e}`),p=await Yg(e,d,{namespace:c,limit:3});for(let g of p){let y=await Sc(e,t,g,s);if(y.same)return Xg(g,{newName:e,entityType:t,isRename:y.rename,currentName:y.currentName})}let u=new Set(p.map(g=>g.id)),m=a.filter(g=>g!=null&&!u.has(g));for(let g of m){let y=await dr(g);if(!y||y.namespace!==c||y.name?.toLowerCase()===e.toLowerCase())continue;let w=await Sc(e,t,{...y,types:D$(y),similarity:0},s);if(w.same)return Xg(y,{newName:e,entityType:t,isRename:w.rename,currentName:w.currentName})}try{return await Ec({name:e,entityType:t,description:r,namespace:c,externalId:i,embedding:d})}catch(g){if(Zg(g)){let y=await lr(e,c);if(y){let w=await dr(y.id);return await ui(w.id),await ur(w.id,t),w}}throw g}}function Zg(e){return e?!!(e.code==="23505"||typeof e.message=="string"&&e.message.includes("duplicate key value violates unique constraint")):!1}async function Xg(e,{newName:t,entityType:r,isRename:n,currentName:i}){let o=await dr(e.id);if(await ui(o.id),await ur(o.id,r),n&&o.name&&o.name.toLowerCase()!==t.toLowerCase()){let s=t.toLowerCase(),a=o.name.toLowerCase(),c=(i||"").toLowerCase(),l,d;if(c===s?(l=t,d=o.name):c===a?(l=o.name,d=t):(l=t,d=o.name),d&&d.toLowerCase()!==l.toLowerCase()&&(await Wo(o.id,d),o.aliases=[...o.aliases||[],d.toLowerCase()]),l!==o.name)try{await bc(o.id,l),o.name=l}catch(p){if(Zg(p)){let u=await lr(l,o.namespace);if(u&&u.id!==o.id){let{mergeEntities:m}=await Promise.resolve().then(()=>(zg(),Jg));return await m(u.id,o.id),await Wo(u.id,o.name),await dr(u.id)}}throw p}}return o}function D$(e){if(e.entityTypes)try{return JSON.parse(e.entityTypes)}catch{}return[e.entityType]}async function vc(e,{promptPath:t,namespace:r}){if(!e.length)return[];let n=e.map(u=>`- [${u.category}] ${u.content}`).join(`
196
- `),o=`${await N$(t,"utf8")}
196
+ `,[e,t]),await s("fact_entity").where({entityId:t}).del(),await s("entity").where({id:e}).update({mentionCount:i}),await s("pod").where({entityId:e,status:"active"}).first()?await s("pod").where({entityId:t}).update({status:"archived",updatedAt:s.fn.now()}):await s("pod").where({entityId:t}).update({entityId:e,updatedAt:s.fn.now()}),await s("entity").where({id:t}).update({mergedWith:e})}),await T$(e);let o=A$(n);for(let s of o)await Tr(e,s);return console.log(`[entity-merge] Merged ${t} (${n.name}) into ${e} (${r.name})`),{...r,mentionCount:i}}function A$(e){if(!e.entityTypes)return[e.entityType];try{return JSON.parse(e.entityTypes)}catch{return[e.entityType]}}async function T$(e){let t=await E("relation").where(function(){this.where({sourceId:e}).orWhere({targetId:e})}).whereNull("invalidAt"),r=ul(t,n=>`${n.sourceId}-${n.targetId}-${n.relationType}`);for(let n of Object.values(r)){if(n.length<=1)continue;let[i,...o]=dl(n,"id"),s=pl(n,"mentionCount");await E("relation").where({id:i.id}).update({mentionCount:s}),await E("relation").whereIn("id",o.map(a=>a.id)).del()}}async function C$(e){let t=await nt(e),r=[t?.id];for(;t?.mergedWith;)t=await nt(t.mergedWith),t&&r.push(t.id);return{canonical:t,chain:r}}var pw=f(()=>{Os();N();it()});import{readFile as O$}from"node:fs/promises";async function Ui({name:e,entityType:t,description:r,namespace:n,externalId:i,embedding:o,episodeText:s,episodeEntityIds:a=[]}){let c=n||_.defaults.namespace,l=await Ar(e,c);if(l)return l=await Cr(l.id),await Hi(l.id),l.entityType!==t&&await Tr(l.id,t),l;let d=o||await br(`${t}: ${e}`),p=await lw(e,d,{namespace:c,limit:3});for(let h of p){let y=await xl(e,t,h,s);if(y.same)return fw(h,{newName:e,entityType:t,isRename:y.rename,currentName:y.currentName})}let u=new Set(p.map(h=>h.id)),m=a.filter(h=>h!=null&&!u.has(h));for(let h of m){let y=await Cr(h);if(!y||y.namespace!==c||y.name?.toLowerCase()===e.toLowerCase())continue;let w=await xl(e,t,{...y,types:R$(y),similarity:0},s);if(w.same)return fw(y,{newName:e,entityType:t,isRename:w.rename,currentName:w.currentName})}try{return await _l({name:e,entityType:t,description:r,namespace:c,externalId:i,embedding:d})}catch(h){if(mw(h)){let y=await Ar(e,c);if(y){let w=await Cr(y.id);return await Hi(w.id),await Tr(w.id,t),w}}throw h}}function mw(e){return e?!!(e.code==="23505"||typeof e.message=="string"&&e.message.includes("duplicate key value violates unique constraint")):!1}async function fw(e,{newName:t,entityType:r,isRename:n,currentName:i}){let o=await Cr(e.id);if(await Hi(o.id),await Tr(o.id,r),n&&o.name&&o.name.toLowerCase()!==t.toLowerCase()){let s=t.toLowerCase(),a=o.name.toLowerCase(),c=(i||"").toLowerCase(),l,d;if(c===s?(l=t,d=o.name):c===a?(l=o.name,d=t):(l=t,d=o.name),d&&d.toLowerCase()!==l.toLowerCase()&&(await Ds(o.id,d),o.aliases=[...o.aliases||[],d.toLowerCase()]),l!==o.name)try{await Sl(o.id,l),o.name=l}catch(p){if(mw(p)){let u=await Ar(l,o.namespace);if(u&&u.id!==o.id){let{mergeEntities:m}=await Promise.resolve().then(()=>(pw(),dw));return await m(u.id,o.id),await Ds(u.id,o.name),await Cr(u.id)}}throw p}}return o}function R$(e){if(e.entityTypes)try{return JSON.parse(e.entityTypes)}catch{}return[e.entityType]}async function Il(e,{promptPath:t,namespace:r}){if(!e.length)return[];let n=e.map(u=>`- [${u.category}] ${u.content}`).join(`
197
+ `),o=`${await O$(t,"utf8")}
197
198
 
198
199
  ---
199
200
 
200
- ${n}`,s=await mt(o,{model:E.llm.entityModel,caller:"entity-resolver"}),a=so(s);if(!Array.isArray(a))return[];let c=a.filter(u=>u.name);if(!c.length)return[];let l=new Array(c.length),d=[],p=[];for(let u=0;u<c.length;u++){let m=await L$(c[u].name,r);m?(l[u]=m,d.push(m.id)):p.push(u)}for(let u of p){let m=c[u],g=await di({name:m.name,entityType:"topic",description:m.description||null,namespace:r,episodeText:n,episodeEntityIds:d});l[u]=g,g?.id&&d.push(g.id)}return l.filter(Boolean)}async function L$(e,t){let{findByName:r,getCanonicalEntity:n,incrementMentionCount:i}=await Promise.resolve().then(()=>(Ze(),pr)),o=await r(e,t);if(!o)return null;let s=await n(o.id);return await i(s.id),s}var Qg=f(()=>{Ot();Ve();R();Ze();qg()});var Vo={};T(Vo,{createRelation:()=>pi,findRelation:()=>k$,getRelationCount:()=>F$,getRelationsByFact:()=>M$,invalidateRelation:()=>P$,listRelationsForEntity:()=>fi});async function pi({sourceId:e,targetId:t,relationType:r,sourceFactId:n,validAt:i}){let{rows:[o]}=await _.raw(`
201
+ ${n}`,s=await xt(o,{model:_.llm.entityModel,caller:"entity-resolver"}),a=zo(s);if(!Array.isArray(a))return[];let c=a.filter(u=>u.name);if(!c.length)return[];let l=new Array(c.length),d=[],p=[];for(let u=0;u<c.length;u++){let m=await $$(c[u].name,r);m?(l[u]=m,d.push(m.id)):p.push(u)}for(let u of p){let m=c[u],h=await Ui({name:m.name,entityType:"topic",description:m.description||null,namespace:r,episodeText:n,episodeEntityIds:d});l[u]=h,h?.id&&d.push(h.id)}return l.filter(Boolean)}async function $$(e,t){let{findByName:r,getCanonicalEntity:n,incrementMentionCount:i}=await Promise.resolve().then(()=>(it(),Or)),o=await r(e,t);if(!o)return null;let s=await n(o.id);return await i(s.id),s}var hw=f(()=>{jt();Xe();$();it();uw()});var Ls={};v(Ls,{createRelation:()=>Gi,findRelation:()=>N$,getRelationCount:()=>k$,getRelationsByFact:()=>L$,invalidateRelation:()=>D$,listRelationsForEntity:()=>ji});async function Gi({sourceId:e,targetId:t,relationType:r,sourceFactId:n,validAt:i}){let{rows:[o]}=await E.raw(`
201
202
  INSERT INTO relation (source_id, target_id, relation_type, source_fact_id, mention_count, valid_at, created_at, updated_at)
202
203
  VALUES (?, ?, ?, ?, 1, ?, NOW(), NOW())
203
204
  ON CONFLICT (source_id, target_id, relation_type) DO UPDATE SET
@@ -205,7 +206,7 @@ ${n}`,s=await mt(o,{model:E.llm.entityModel,caller:"entity-resolver"}),a=so(s);i
205
206
  source_fact_id = COALESCE(EXCLUDED.source_fact_id, relation.source_fact_id),
206
207
  updated_at = NOW()
207
208
  RETURNING *
208
- `,[e,t,r,n||null,i||null]);return o}async function k$(e,t,r){return _("relation").where({sourceId:e,targetId:t,relationType:r}).whereNull("invalidAt").first()||null}async function P$(e,{invalidAt:t}={}){await _("relation").where({id:e}).update({invalidAt:t||new Date})}async function fi(e,{direction:t="both",relationType:r,limit:n=50}={}){let i=a=>{let c=a==="outgoing"?"source_id":"target_id",l=a==="outgoing"?"target_id":"source_id";return _.raw(`
209
+ `,[e,t,r,n||null,i||null]);return o}async function N$(e,t,r){return E("relation").where({sourceId:e,targetId:t,relationType:r}).whereNull("invalidAt").first()||null}async function D$(e,{invalidAt:t}={}){await E("relation").where({id:e}).update({invalidAt:t||new Date})}async function ji(e,{direction:t="both",relationType:r,limit:n=50}={}){let i=a=>{let c=a==="outgoing"?"source_id":"target_id",l=a==="outgoing"?"target_id":"source_id";return E.raw(`
209
210
  SELECT r.id AS "relationId", r.relation_type AS "relationType",
210
211
  r.mention_count AS "mentionCount", r.valid_at AS "validAt",
211
212
  e.id AS "entityId", e.uid, e.name, e.entity_type AS "entityType",
@@ -218,7 +219,7 @@ ${n}`,s=await mt(o,{model:E.llm.entityModel,caller:"entity-resolver"}),a=so(s);i
218
219
  ${r?"AND r.relation_type = ?":""}
219
220
  ORDER BY r.mention_count DESC
220
221
  LIMIT ?
221
- `,r?[e,r,n]:[e,n])};if(t==="outgoing"){let{rows:a}=await i("outgoing");return a}if(t==="incoming"){let{rows:a}=await i("incoming");return a}let[o,s]=await Promise.all([i("outgoing"),i("incoming")]);return[...o.rows,...s.rows]}async function M$(e){let{rows:t}=await _.raw(`
222
+ `,r?[e,r,n]:[e,n])};if(t==="outgoing"){let{rows:a}=await i("outgoing");return a}if(t==="incoming"){let{rows:a}=await i("incoming");return a}let[o,s]=await Promise.all([i("outgoing"),i("incoming")]);return[...o.rows,...s.rows]}async function L$(e){let{rows:t}=await E.raw(`
222
223
  SELECT r.id, r.relation_type AS "relationType",
223
224
  r.mention_count AS "mentionCount",
224
225
  s.name AS "sourceName", s.entity_type AS "sourceType",
@@ -230,55 +231,55 @@ ${n}`,s=await mt(o,{model:E.llm.entityModel,caller:"entity-resolver"}),a=so(s);i
230
231
  AND r.invalid_at IS NULL
231
232
  AND s.merged_with IS NULL
232
233
  AND t.merged_with IS NULL
233
- `,[e]);return t}async function F$(){let[{count:e}]=await _("relation").whereNull("invalidAt").count("id as count");return Number(e)}var fr=f(()=>{D()});var Te={};T(Te,{archivePod:()=>U$,deletePod:()=>G$,findByEntityId:()=>Ac,findByExternalId:()=>_n,findById:()=>H$,findByUid:()=>wn,incrementCounters:()=>bn,insertPod:()=>Ic,listPods:()=>B$,patchAttrs:()=>En,reassignEntity:()=>j$,setEndedAt:()=>Tc,upsertPod:()=>mr});async function Ic({podType:e,name:t,namespace:r,attrs:n={},entityId:i=null,connectionId:o=null,externalId:s=null,startedAt:a=null,endedAt:c=null}){let l=`pod-${Ke(16)}`,[d]=await _("pod").insert({uid:l,podType:e,name:t,namespace:r||E.defaults.namespace,attrs:JSON.stringify(n),entityId:i,connectionId:o,externalId:s,startedAt:a,endedAt:c}).returning("*");return d}async function mr({podType:e,externalId:t,name:r,namespace:n,attrs:i={},entityId:o=null,connectionId:s=null,startedAt:a=null}){if(!t)throw new Error("upsertPod requires externalId; use insertPod for custom pods");let c=`pod-${Ke(16)}`,l=n||E.defaults.namespace,{rows:[d]}=await _.raw(`
234
+ `,[e]);return t}async function k$(){let[{count:e}]=await E("relation").whereNull("invalidAt").count("id as count");return Number(e)}var Rr=f(()=>{N()});var $e={};v($e,{archivePod:()=>F$,deletePod:()=>B$,findByEntityId:()=>Al,findByExternalId:()=>Gn,findById:()=>P$,findByUid:()=>Un,incrementCounters:()=>Wn,insertPod:()=>vl,listPods:()=>M$,patchAttrs:()=>jn,reassignEntity:()=>H$,setEndedAt:()=>Tl,upsertPod:()=>$r});async function vl({podType:e,name:t,namespace:r,attrs:n={},entityId:i=null,connectionId:o=null,externalId:s=null,startedAt:a=null,endedAt:c=null}){let l=`pod-${Ze(16)}`,[d]=await E("pod").insert({uid:l,podType:e,name:t,namespace:r||_.defaults.namespace,attrs:JSON.stringify(n),entityId:i,connectionId:o,externalId:s,startedAt:a,endedAt:c}).returning("*");return d}async function $r({podType:e,externalId:t,name:r,namespace:n,attrs:i={},entityId:o=null,connectionId:s=null,startedAt:a=null}){if(!t)throw new Error("upsertPod requires externalId; use insertPod for custom pods");let c=`pod-${Ze(16)}`,l=n||_.defaults.namespace,{rows:[d]}=await E.raw(`
234
235
  INSERT INTO pod (uid, pod_type, name, namespace, attrs, entity_id, connection_id, external_id, started_at, created_at, updated_at)
235
236
  VALUES (?, ?, ?, ?, ?::jsonb, ?, ?, ?, ?, NOW(), NOW())
236
237
  ON CONFLICT (pod_type, external_id, namespace) WHERE external_id IS NOT NULL DO UPDATE SET
237
238
  attrs = pod.attrs || EXCLUDED.attrs,
238
239
  updated_at = NOW()
239
240
  RETURNING *, (xmax = 0) AS "isNew"
240
- `,[c,e,r,l,JSON.stringify(i),o,s,t,a]);return{pod:d,isNew:d.isNew}}async function wn(e){return _("pod").where({uid:e}).first()||null}async function H$(e){return _("pod").where({id:e}).first()||null}async function _n({podType:e,externalId:t,namespace:r}){return _("pod").where({podType:e,externalId:t,namespace:r||E.defaults.namespace}).first()||null}async function Ac(e){return _("pod").where({entityId:e}).first()||null}async function B$({podType:e,namespace:t,status:r="active",limit:n=20}={}){let i=_("pod").where({status:r}).orderBy("updatedAt","desc").limit(n);return e&&i.where({podType:e}),t&&i.where({namespace:t}),i}async function U$(e){await _("pod").where({id:e}).update({status:"archived",updatedAt:_.fn.now()})}async function G$(e){await _("pod").where({id:e}).del()}async function En(e,t){await _.raw("UPDATE pod SET attrs = attrs || ?::jsonb, updated_at = NOW() WHERE id = ?",[JSON.stringify(t),e])}async function Tc(e,t=new Date){await _("pod").where({id:e}).update({endedAt:t,updatedAt:_.fn.now()})}async function j$(e,t){await _("pod").where({entityId:e}).update({entityId:t,updatedAt:_.fn.now()})}async function bn(e,{docs:t=0,facts:r=0}){!t&&!r||await _.raw(`UPDATE pod
241
+ `,[c,e,r,l,JSON.stringify(i),o,s,t,a]);return{pod:d,isNew:d.isNew}}async function Un(e){return E("pod").where({uid:e}).first()||null}async function P$(e){return E("pod").where({id:e}).first()||null}async function Gn({podType:e,externalId:t,namespace:r}){return E("pod").where({podType:e,externalId:t,namespace:r||_.defaults.namespace}).first()||null}async function Al(e){return E("pod").where({entityId:e}).first()||null}async function M$({podType:e,namespace:t,status:r="active",limit:n=20}={}){let i=E("pod").where({status:r}).orderBy("updatedAt","desc").limit(n);return e&&i.where({podType:e}),t&&i.where({namespace:t}),i}async function F$(e){await E("pod").where({id:e}).update({status:"archived",updatedAt:E.fn.now()})}async function B$(e){await E("pod").where({id:e}).del()}async function jn(e,t){await E.raw("UPDATE pod SET attrs = attrs || ?::jsonb, updated_at = NOW() WHERE id = ?",[JSON.stringify(t),e])}async function Tl(e,t=new Date){await E("pod").where({id:e}).update({endedAt:t,updatedAt:E.fn.now()})}async function H$(e,t){await E("pod").where({entityId:e}).update({entityId:t,updatedAt:E.fn.now()})}async function Wn(e,{docs:t=0,facts:r=0}){!t&&!r||await E.raw(`UPDATE pod
241
242
  SET member_doc_count = member_doc_count + ?,
242
243
  member_fact_count = member_fact_count + ?,
243
244
  updated_at = NOW()
244
- WHERE id = ?`,[t,r,e])}var Se=f(()=>{qr();D();R()});var Gt={};T(Gt,{attach:()=>Ko,attachDocument:()=>Cc,attachEntity:()=>W$,attachFact:()=>mi,detach:()=>V$,factIdsInPod:()=>q$,listMembers:()=>K$,listPodsForMember:()=>Y$});async function Ko(e,t,r,n="primary"){let{rowCount:i}=await _.raw(`INSERT INTO pod_membership (pod_id, member_type, member_id, role)
245
+ WHERE id = ?`,[t,r,e])}var Ae=f(()=>{wn();N();$()});var tr={};v(tr,{attach:()=>ks,attachDocument:()=>Cl,attachEntity:()=>U$,attachFact:()=>Wi,detach:()=>G$,factIdsInPod:()=>V$,listMembers:()=>j$,listPodsForMember:()=>W$});async function ks(e,t,r,n="primary"){let{rowCount:i}=await E.raw(`INSERT INTO pod_membership (pod_id, member_type, member_id, role)
245
246
  VALUES (?, ?, ?, ?)
246
- ON CONFLICT (pod_id, member_type, member_id) DO NOTHING`,[e,t,r,n]);return i>0&&(t==="fact"?await bn(e,{facts:1}):t==="document"&&await bn(e,{docs:1})),{attached:i>0}}async function V$(e,t,r){let n=await _("pod_membership").where({podId:e,memberType:t,memberId:r}).del();return n>0&&(t==="fact"?await bn(e,{facts:-1}):t==="document"&&await bn(e,{docs:-1})),{detached:n>0}}async function K$(e,{memberType:t,limit:r=20}={}){if(!t)throw new Error("listMembers requires a memberType filter");return _(`${t} as t`).join("pod_membership as pm",function(){this.on("pm.member_id","=","t.id").andOnVal("pm.member_type","=",t)}).where("pm.pod_id",e).orderBy("pm.createdAt","desc").limit(r).select("t.*","pm.role as podRole","pm.createdAt as attachedAt")}async function Y$(e,t){return _("pod as p").join("pod_membership as pm","pm.pod_id","p.id").where("pm.memberType",e).where("pm.memberId",t).select("p.*","pm.role as podRole")}async function q$(e){return await _("pod_membership").where({podId:e,memberType:"fact"}).pluck("memberId")}var mi,Cc,W$,hr=f(()=>{D();Se();mi=(e,t,r)=>Ko(e,"fact",t,r),Cc=(e,t,r)=>Ko(e,"document",t,r),W$=(e,t,r)=>Ko(e,"entity",t,r)});var Oc={};T(Oc,{getEntitiesForFact:()=>z$,getEntityIdsForFacts:()=>xn,getFactsForEntity:()=>$c,linkEntitiesToFact:()=>hi});async function hi(e,t){if(!t.length)return;let r=fc(t,"id"),n=r.map(i=>({factId:e,entityId:i.id,mentionType:"content",mentionCount:1}));await _("fact_entity").insert(n).onConflict(_.raw("(fact_id, entity_id, mention_type)")).merge({mentionCount:_.raw("fact_entity.mention_count + 1")}),await J$(e,r)}async function J$(e,t){let r=t.map(i=>i.id).filter(Boolean);if(!r.length)return;let n=await _("pod").whereIn("entityId",r).where({status:"active"}).select("id");for(let{id:i}of n)await mi(i,e,"mention")}async function $c(e,{limit:t=50}={}){return _("fact").join("fact_entity","fact.id","fact_entity.fact_id").where("fact_entity.entity_id",e).where("fact.status","active").select("fact.*","fact_entity.mention_count as entityMentionCount").orderBy("fact_entity.mention_count","desc").limit(t)}async function z$(e){return _("entity").join("fact_entity","entity.id","fact_entity.entity_id").where("fact_entity.fact_id",e).whereNull("entity.mergedWith").select("entity.id","entity.uid","entity.name","entity.entityType","entity.description")}async function xn(e){if(!e.length)return new Map;let t=await _("fact_entity").whereIn("factId",e).select("factId","entityId"),r=new Map;for(let n of t)r.has(n.factId)||r.set(n.factId,[]),r.get(n.factId).push(n.entityId);return r}var gr=f(()=>{Bo();D();hr()});import X$ from"node:path";async function Lc(e,t,r,n){let{title:i,sourceType:o,metadata:s={}}=e,a=t.filter(u=>u.action==="ADD"||u.action==="UPDATE"),c=a.map(u=>u.fact||u.existing).filter(Boolean),d=a.find(u=>u.fact)?.fact?.id||null,p=new Date().toISOString().split("T")[0];return n?.items?.length?Z$({entityDefs:n,factObjects:c,firstFactId:d,namespace:r,today:p}):Q$({title:i,sourceType:o,metadata:s,factObjects:c,firstFactId:d,namespace:r,today:p})}async function Z$({entityDefs:e,factObjects:t,firstFactId:r,namespace:n,today:i}){let o={},s=0,a=t.map(u=>u.content).filter(Boolean).join(`
247
- `),c=[];for(let u of e.items){let m=await di({name:u.name,entityType:u.type,description:u.description,namespace:n,episodeText:a,episodeEntityIds:c});o[u.name]=m,m?.id&&c.push(m.id)}for(let u of e.relations||[]){let m=o[u.source],g=o[u.target];if(!m||!g)continue;let y=Rc(t,u.source)||Rc(t,u.target);await pi({sourceId:m.id,targetId:g.id,relationType:u.type,sourceFactId:y?.id||r,validAt:i}),s++}let l=await Dc(t,n),d=Nc(Object.values(o),l),p=0;for(let u of t){let m=d.filter(g=>Yo(u.content,g));m.length&&(await hi(u.id,m),p+=m.length)}return{entityCount:d.length,relationCount:s,factEntityLinks:p,topics:d.filter(u=>u.entityType==="topic").map(u=>u.name)}}async function Q$({title:e,sourceType:t,metadata:r,factObjects:n,firstFactId:i,namespace:o,today:s}){if(!e){let w=n.length?await vc(n,{promptPath:ey,namespace:o}):[],x=await Dc(n,o),b=Nc(w,x),A=0;for(let v of n){let S=b.filter(C=>Yo(v.content,C));S.length&&(await hi(v.id,S),A+=S.length)}return{entityCount:b.length,relationCount:0,factEntityLinks:A,topics:w.map(v=>v.name)}}let a=n.map(w=>w.content).filter(Boolean).join(`
248
- `).slice(0,2e3),c=await di({name:e,entityType:"document",description:`${t} document: ${e}`,namespace:o,episodeText:a}),l=null;r.author&&(l=await di({name:r.author,entityType:"person",namespace:o,episodeText:a,episodeEntityIds:c?.id?[c.id]:[]}));let d=n.length?await vc(n,{promptPath:ey,namespace:o}):[],p=0;l&&(await pi({sourceId:c.id,targetId:l.id,relationType:"AUTHORED_BY",sourceFactId:i,validAt:s}),p++);for(let w of d){let x=Rc(n,w.name);await pi({sourceId:c.id,targetId:w.id,relationType:"COVERS",sourceFactId:x?.id||i,validAt:s}),p++}let u=[c,l,...d].filter(Boolean),m=await Dc(n,o),g=Nc(u,m),y=0;for(let w of n){let x=g.filter(b=>Yo(w.content,b));x.length&&(await hi(w.id,x),y+=x.length)}return{entityCount:g.length,relationCount:p,factEntityLinks:y,topics:d.map(w=>w.name)}}function Rc(e,t){if(!t)return null;let r=t.toLowerCase();return e.find(n=>n.content?.toLowerCase().includes(r))||null}function Yo(e,t){if(!e||!t?.name)return!1;let r=e.toLowerCase();return[t.name.toLowerCase(),...t.aliases||[]].some(i=>i?new RegExp(`\\b${eO(i)}\\b`).test(r):!1)}function eO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Nc(...e){let t=new Set,r=[];for(let n of e)for(let i of n)!i||t.has(i.id)||(t.add(i.id),r.push(i));return r}async function Dc(e,t){if(!e?.length)return[];let r=await _("entity as e").join("pod as p","p.entity_id","e.id").where("p.status","active").where("e.namespace",t).whereNull("e.mergedWith").select("e.id","e.uid","e.name","e.entityType","e.aliases");return r.length?r.filter(n=>e.some(i=>Yo(i.content,n))):[]}var ey,ty=f(()=>{Qg();fr();gr();B();D();ey=X$.join(Ie,"entity-extraction.md")});function ny({platforms:e={},role:t=null,relationship:r=null,notes:n=null}){return{platforms:e,role:t,relationship:r,notes:n}}function iy(e={}){return e.slack?.user_id?`slack:${e.slack.user_id}`:e.github?.username?`github:${e.github.username}`:e.email?`email:${String(e.email).toLowerCase()}`:null}function oy(e={},t={}){let r={...e};for(let[n,i]of Object.entries(t))i&&(r[n]={...r[n]||{},...typeof i=="object"?i:{value:i}});return r}var kc,tO,ry,Pc=f(()=>{D();R();kc="person",tO=1440*60*1e3,ry={name:"person",description:"A person you have a working relationship with",identityField:"primary_handle",attrsSchema:{platforms:"object",role:"string",relationship:"string",notes:"string"},visibility:"private",activeMode:"rolling-window",hotContextBudget:4,retrievalWeights:{recency:1,relevance:.8},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/person.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.namespace||E.defaults.namespace;try{let r=new Date(Date.now()-tO);return(await _("pod as p").join("pod_membership as pm","pm.pod_id","p.id").join("fact_lifecycle as fl","fl.fact_id","pm.member_id").where("pm.memberType","fact").where("p.podType","person").where("p.namespace",t).where("p.status","active").where("fl.lastAccessedAt",">=",r).distinct("p.uid")).map(i=>i.uid)}catch{return[]}}}});var Uc={};T(Uc,{POD_TYPE:()=>Mc,buildAttrs:()=>Hc,claudeSessionKind:()=>Fc,defaultName:()=>Bc,formatForDisplay:()=>nO});function Hc({sessionId:e,transcriptPath:t=null,cwd:r=null,turnCount:n=0,model:i=null,conclusion:o=null,summary:s=null}){return{session_id:e,transcript_path:t,cwd:r,turn_count:n,model:i,conclusion:o,summary:s}}function Bc({sessionId:e,startedAt:t=new Date}={}){let n=(t instanceof Date?t:new Date(t)).toISOString().replace("T"," ").slice(0,16),i=e?e.slice(0,8):"unknown";return`claude-session ${n} (${i})`}function nO(e){let t=iO(e.attrs);return{uid:e.uid,name:e.name,sessionId:t.session_id??e.externalId,transcriptPath:t.transcript_path,cwd:t.cwd,model:t.model,turnCount:t.turn_count??0,conclusion:t.conclusion,startedAt:e.startedAt,endedAt:e.endedAt,memberFactCount:e.memberFactCount,memberDocCount:e.memberDocCount}}function iO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Mc,Fc,qo=f(()=>{yr();Mc="claude_session",Fc={name:"claude_session",description:"Claude Code session",identityField:"session_id",attrsSchema:{session_id:"string",transcript_path:"string",cwd:"string",turn_count:"number",model:"string",conclusion:"string",summary:"string"},visibility:"private",activeMode:"singleton-live",hotContextBudget:6,retrievalWeights:{recency:1,relevance:.7},importanceDefault:2,ttlDays:90,schemaDocPath:"kinds/claude_session.schema.md",writePolicy:"origin-only",resolveActiveScope:async()=>{try{let e=await Gc();return e?[e]:[]}catch{return[]}}}});var vn={};T(vn,{CURSOR_PATH:()=>Sn,endActiveSession:()=>mO,ensureActiveSession:()=>dO,getActiveCursor:()=>fO,getActiveSessionPodUid:()=>Gc});import{writeFile as oO,readFile as sO,unlink as aO}from"node:fs/promises";import{existsSync as cO,mkdirSync as lO}from"node:fs";import{dirname as sy}from"node:path";async function Jo(){try{let e=await sO(Sn,"utf8");return JSON.parse(e)}catch{return null}}async function ay(e){cO(sy(Sn))||lO(sy(Sn),{recursive:!0}),await oO(Sn,JSON.stringify(e,null,2),"utf8")}async function dO({sessionId:e,transcriptPath:t=null,cwd:r=null,model:n=null,namespace:i=null}){if(!e)throw new Error("ensureActiveSession requires sessionId from hook stdin");let o=i||E.defaults.namespace,s=await Jo();if(s&&s.session_id===e&&s.namespace===o){let l=await wn(s.pod_uid);if(l)return await En(l.id,{turn_count:(hO(l.attrs)||0)+1}),await pO(s),l}let a=new Date,{pod:c}=await mr({podType:Mc,externalId:e,name:Bc({sessionId:e,startedAt:a}),namespace:o,attrs:Hc({sessionId:e,transcriptPath:t,cwd:r,turnCount:1,model:n}),startedAt:a});return await ay({session_id:e,pod_uid:c.uid,namespace:o,started_at:c.startedAt??a.toISOString(),last_seen_at:new Date().toISOString()}),c}async function pO(e){await ay({...e,last_seen_at:new Date().toISOString()})}async function Gc({allowStale:e=!1}={}){let t=await Jo();return!t||!t.pod_uid||!e&&t.started_at&&Date.now()-new Date(t.started_at).getTime()>uO?null:t.pod_uid}async function fO(){return Jo()}async function mO({conclusion:e=null,summary:t=null}={}){let r=await Jo();if(!r)return null;let n=await wn(r.pod_uid);if(n){if(e||t){let i={};e&&(i.conclusion=e),t&&(i.summary=t),await En(n.id,i)}await Tc(n.id)}try{await aO(Sn)}catch{}return n}function hO(e){if(!e)return 0;if(typeof e=="object")return e.turn_count??0;try{return JSON.parse(e).turn_count??0}catch{return 0}}var Sn,uO,yr=f(()=>{Se();qo();R();B();Sn=Xs,uO=360*60*1e3});var Yc={};T(Yc,{POD_TYPE:()=>Wc,deriveProjectRoot:()=>Kc,ensureProjectPod:()=>yO,formatForDisplay:()=>_O,membership:()=>Gt,projectKind:()=>Vc});import{execFileSync as gO}from"node:child_process";import{basename as cy}from"node:path";async function yO({cwd:e,namespace:t=null}){if(!e)return null;let r=Kc(e),n=t||E.defaults.namespace,o=(r!==e?!1:jc(e)===e)?r:jc(e),{pod:s}=await mr({podType:Wc,externalId:r,name:cy(r)||r,namespace:n,attrs:{root_path:r,git_root:o||null,display_name:cy(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return s}function Kc(e){return jc(e)||e}function jc(e){try{return gO("git",["rev-parse","--show-toplevel"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function wO(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(yr(),vn));return(await e())?.cwd||null}catch{return null}}function _O(e){let t=EO(e.attrs);return{uid:e.uid,name:e.name,rootPath:t.root_path,gitRoot:t.git_root,displayName:t.display_name,discoveredAt:t.discovered_at,memberFactCount:e.memberFactCount,memberDocCount:e.memberDocCount}}function EO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Wc,Vc,zo=f(()=>{Se();hr();R();Wc="project",Vc={name:"project",description:"Code project rooted at a git repo or directory",identityField:"root_path",attrsSchema:{root_path:"string",git_root:"string",display_name:"string",discovered_at:"string"},visibility:"shared",activeMode:"multi-active",hotContextBudget:4,retrievalWeights:{recency:.6,relevance:1},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/project.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.cwd||await wO();if(!t)return[];let r=e.namespace||E.defaults.namespace,n=Kc(t),i=await _n({podType:Wc,externalId:n,namespace:r});return i?[i.uid]:[]}}});var ly={};T(ly,{fromSourceMetadata:()=>qc,upsertPersonPod:()=>bO});async function bO({entityId:e,name:t,namespace:r,attrs:n={}}){if(!e)throw new Error("upsertPersonPod requires entityId");let i=r||E.defaults.namespace,o=await Ac(e);if(o){let l=typeof o.attrs=="object"?o.attrs:xO(o.attrs),p={platforms:oy(l.platforms||{},n.platforms||{})};return n.role&&!l.role&&(p.role=n.role),n.relationship&&!l.relationship&&(p.relationship=n.relationship),n.notes&&!l.notes&&(p.notes=n.notes),await En(o.id,p),{pod:o,isNew:!1}}let s=ny(n),a=iy(s.platforms);return a?await mr({podType:kc,externalId:a,name:t,namespace:i,attrs:s,entityId:e}):{pod:await Ic({podType:kc,name:t,namespace:i,attrs:s,entityId:e}),isNew:!0}}async function qc(e,t){if(!e||typeof e!="object")return[];let r=[],n=t||E.defaults.namespace;if(e.slack?.team_id&&e.connection_id){let o=await _n({podType:"connector_workspace",externalId:`slack:${e.slack.team_id}`,namespace:n});o&&r.push({podId:o.id,role:"primary"})}if(e.github?.org&&e.connection_id){let o=await _n({podType:"connector_workspace",externalId:`github:${e.github.org}`,namespace:n});o&&r.push({podId:o.id,role:"primary"})}let i=e.project_root||e.source_root;if(i)try{let{ensureProjectPod:o}=await Promise.resolve().then(()=>(zo(),Yc)),s=await o({cwd:i,namespace:n});s&&r.push({podId:s.id,role:"primary"})}catch{}return r}function xO(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}var Jc=f(()=>{Se();Pc();R()});var zc={};T(zc,{ingestDocument:()=>AO});import{createHash as SO}from"node:crypto";import{join as vO}from"node:path";async function AO({content:e,title:t,sourcePath:r,sourceType:n="raw",contentType:i,namespace:o,metadata:s={},promptPath:a,categories:c,entities:l,skipFacts:d=!1,skipEntities:p=!1,skipContextualization:u=!1,classify:m=!0,podUids:g=[],resolvePodsFrom:y=null}){e=gn(e);let w=o||E.defaults.namespace,x=c||Object.keys(jo),b=a||IO,A=t||r,v=null;if(m&&(process.stderr.write(`[0/6] Classifying input...
249
- `),v=await Vg(e,{title:A}),process.stderr.write(` Route: ${v.route} \u2014 ${v.reasoning}
250
- `),v.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
251
- `),{documentId:null,title:A,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
252
- `);let S=SO("sha256").update(e).digest("hex"),C=r||`thought:${S}`,{doc:O,changed:M}=await Ra({sourcePath:C,sourceType:n,title:A,contentHash:S,namespace:w});if(!M)return process.stderr.write(` Skipped \u2014 content unchanged.
253
- `),{documentId:O.id,title:A,skipped:!0};s&&(Object.keys(s).length||s.connection_id)&&await Da(O.id,s,s.connection_id??null);let F=await $O({podUids:g,resolvePodsFrom:y,metadata:s,namespace:w});for(let{podId:N,role:W}of F)await Cc(N,O.id,W);process.stderr.write(`[2/6] Parsing content...
254
- `);let q=bd(e,{format:s.format,filePath:r,contentType:i});if(A=t||q.metadata?.title||r,v?.route==="thought"&&v.facts.length){process.stderr.write(`[thought] Storing ${v.facts.length} facts directly...
255
- `);let N=await TO(v.facts,{documentId:O.id,namespace:w}),W={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!p&&N.results.length&&(W=await Lc({title:A,sourceType:n,metadata:s},N.results,w,l)),await ao(O.id,{chunkCount:0,factCount:N.counts.added}),await dy(N.results,F),await Go(O.id,N.results.map(ne=>ne.fact?.id??ne.existing?.id).filter(Boolean)),process.stderr.write(`Done. Route: thought, ${N.counts.total} facts (${N.counts.added} new)
256
- `),{documentId:O.id,documentUid:O.uid,title:A,skipped:!1,route:"thought",chunkCount:0,facts:{...N.counts,verdicts:uy(N.results)},entities:W}}let P=[],Q={counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]},ae={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};try{process.stderr.write(`[3/6] Chunking and embedding...
257
- `),P=vd(q.sections),process.stderr.write(` ${P.length} chunks created
258
- `),!u&&P.length&&(P=await ip(P,q.text,{title:A}));let N=P.map(ie=>{let de=ie.contextualPrefix;return de?`${de}
259
- ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[de]}));await lp(O.id,ne,w),!d&&E.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
260
- `),Q=await CO(P,{documentId:O.id,namespace:w,promptPath:b,categories:x})):E.ingest.eagerExtract||process.stderr.write(`[4/6] Skipping fact extraction (SIGIL_EAGER_EXTRACT=false)
261
- `),await ao(O.id,{chunkCount:P.length,factCount:Q.counts.added+Q.counts.updated+Q.counts.contradicted}),await dy(Q.results,F),await Go(O.id,Q.results.map(ie=>ie.fact?.id??ie.existing?.id).filter(Boolean)),!p&&Q.results.length&&(process.stderr.write(`[5/6] Linking entities...
262
- `),ae=await Lc({title:A,sourceType:n,metadata:s},Q.results,w,l),process.stderr.write(` ${ae.entityCount} entities, ${ae.relationCount} relations
263
- `))}catch(N){throw console.error(`[pipeline] Failed after document upsert: ${N.message}`),await Na(O.id).catch(()=>{}),N}return process.stderr.write(`Done. ${P.length} chunks, ${Q.counts.total} facts, ${ae.entityCount} entities
264
- `),{documentId:O.id,documentUid:O.uid,title:A,skipped:!1,route:v?.route??null,chunkCount:P.length,facts:{...Q.counts,verdicts:uy(Q.results)},entities:ae}}function uy(e){return(e||[]).map(t=>({action:t.action,factId:t.fact?.id??t.existing?.id??null,content:String(t.fact?.content||t.existing?.content||"").slice(0,240),audm:t.audm||null,supersededId:t.supersededId??null,contradictedId:t.contradictedId??null}))}async function py(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:i="medium",defaultImportance:o="supplementary"}){let s={total:e.length,added:0,skipped:0,updated:0,contradicted:0},a=[];for(let c=0;c<e.length;c++){let l=e[c],d=await gc({content:l.content,category:l.category,confidence:l.confidence||i,importance:l.importance||o,namespace:r,sourceDocumentIds:t?[t]:[],sourceSection:l.sourceSection||l.category,embedding:n[c]});a.push(d);let p=d.action.toLowerCase();p==="add"?s.added++:p==="skip"?s.skipped++:p==="update"?s.updated++:p==="contradict"&&s.contradicted++}return{counts:s,results:a}}async function TO(e,{documentId:t,namespace:r}){let n=await ft(e.map(i=>i.content));return py(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:"high",defaultImportance:"vital"})}async function CO(e,{documentId:t,namespace:r,promptPath:n,categories:i}){let o=await Mg(e,{promptPath:n,categories:i});if(process.stderr.write(` ${o.length} facts extracted from ${e.length} chunks
265
- `),!o.length)return{counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]};let s=await ft(o.map(a=>a.content));return py(o,{documentId:t,namespace:r,embeddings:s})}async function $O({podUids:e,resolvePodsFrom:t,metadata:r,namespace:n}){let i=[];for(let s of e){let a=await wn(s);a&&i.push({podId:a.id,role:"primary"})}if(t==="metadata"){let s=await qc(r,n);for(let a of s)i.push(a)}let o=new Map;for(let s of i){let a=o.get(s.podId);(!a||s.role==="primary"&&a.role!=="primary")&&o.set(s.podId,s)}return[...o.values()]}async function dy(e,t){if(!(!t.length||!e.length))for(let r of e){let n=r?.fact?.id??r?.existing?.id;if(!n)continue;let i=r?.action==="SKIP"?"mention":"primary";for(let{podId:o}of t)await mi(o,n,i)}}var IO,Xc=f(()=>{xd();ga();Ot();op();lo();up();Fg();lt();_c();Kg();ty();Se();hr();Jc();Uo();R();B();IO=vO(Ie,"default-extraction.md")});var jt={};T(jt,{clearTraces:()=>kO,getTrace:()=>LO,listTraces:()=>DO,recordTrace:()=>NO});function RO(){let e=sa();return{deviceId:e?.device?.id??null,transport:e?.transport??null}}async function NO({kind:e,summary:t,detail:r={},namespace:n=null,durationMs:i=null}){let o=`trace-${Ke(16)}`,s=new Date().toISOString(),{deviceId:a,transport:c}=RO(),l=r;try{JSON.stringify(r).length>OO&&(l={truncated:!0,note:"trace detail exceeded size cap",summary:t})}catch{l={error:"detail not serializable"}}try{_e.emit("trace",{uid:o,kind:e,summary:t,namespace:n,durationMs:i,deviceId:a,transport:c,detail:l})}catch{}try{return await _("trace_event").insert({uid:o,kind:e,ts:s,duration_ms:i,namespace:n,summary:t,device_id:a,transport:c,detail:JSON.stringify(l)}),o}catch(d){return console.error("[trace-store] persist failed:",d.message),null}}async function DO({kind:e=null,namespace:t=null,before:r=null,limit:n=50}={}){let i=_("trace_event").select("uid","kind","ts","duration_ms as durationMs","namespace","summary","device_id as deviceId","transport","detail").orderBy("ts","desc").limit(Math.min(Number(n)||50,200));return e&&(i=i.where({kind:e})),t&&(i=i.where({namespace:t})),r&&(i=i.where("ts","<",r)),(await i).map(s=>({...s,detail:typeof s.detail=="string"?fy(s.detail):s.detail}))}async function LO(e){let t=await _("trace_event").select("uid","kind","ts","duration_ms as durationMs","namespace","summary","device_id as deviceId","transport","detail").where({uid:e}).first();return t?{...t,detail:typeof t.detail=="string"?fy(t.detail):t.detail}:null}async function kO(){return{cleared:await _("trace_event").del()}}function fy(e){try{return JSON.parse(e)}catch{return{}}}var OO,Wt=f(()=>{qr();D();Gr();qi();OO=256*1024});var Qc={};T(Qc,{_reset:()=>qO,activeKinds:()=>yi,get:()=>jO,getSchemaDoc:()=>YO,list:()=>WO,register:()=>Zc,validateAttrs:()=>KO});import{readFile as my}from"node:fs/promises";import{fileURLToPath as PO}from"node:url";import{dirname as MO,join as hy}from"node:path";function Zc(e){for(let t of FO)if(!e[t])throw new Error(`Pod kind missing required field: ${t}`);if(e.visibility&&!HO.has(e.visibility))throw new Error(`Pod kind ${e.name}: invalid visibility ${e.visibility}`);if(e.activeMode&&!BO.has(e.activeMode))throw new Error(`Pod kind ${e.name}: invalid activeMode ${e.activeMode}`);if(e.writePolicy&&!UO.has(e.writePolicy))throw new Error(`Pod kind ${e.name}: invalid writePolicy ${e.writePolicy}`);gi.set(e.name,GO(e))}function GO(e){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...e}}function jO(e){return gi.get(e)||null}function WO(){return Array.from(gi.values())}async function yi(e={}){let t=[];for(let r of gi.values())if(typeof r.resolveActiveScope=="function")try{let n=await r.resolveActiveScope(e);Array.isArray(n)&&n.length>0&&t.push({kind:r,scope:n})}catch(n){process.stderr.write(`[sigil:pods] resolveActiveScope failed for kind "${r.name}": ${n.message}
266
- `),VO(r.name,n)}return t}function VO(e,t){Promise.resolve().then(()=>(Wt(),jt)).then(({recordTrace:r})=>r({kind:"lifecycle",summary:`pod-resolution failed for kind "${e}"`,detail:{kind:e,error:t.message}})).catch(()=>{})}function KO(e,t={}){if(!e||!e.attrsSchema)return{valid:!0};let r=[];for(let[n,i]of Object.entries(e.attrsSchema)){let o=t[n];if(o==null)continue;let s=Array.isArray(o)?"array":typeof o;i!==s&&r.push(`attr "${n}" expected ${i}, got ${s}`)}return r.length?{valid:!1,errors:r}:{valid:!0}}async function YO(e){if(!e)return null;let t=hy(qs,`${e.name}.md`);try{return await my(t,"utf8")}catch{}if(!e.schemaDocPath)return null;let r=MO(PO(import.meta.url)),n=hy(r,e.schemaDocPath);try{return await my(n,"utf8")}catch{return null}}function qO(){gi.clear()}var FO,HO,BO,UO,gi,In=f(()=>{B();FO=["name"],HO=new Set(["private","shared","public"]),BO=new Set(["singleton-live","multi-active","rolling-window","always"]),UO=new Set(["origin-only","shared-allowlist","open"]),gi=new Map});async function zO(e){if(e.project)return e.project;if(!e.cwd)try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(yr(),vn)),r=await t();e={...e,cwd:r?.cwd}}catch{return null}if(!e.cwd)return null;try{let{deriveProjectRoot:t}=await Promise.resolve().then(()=>(zo(),Yc)),r=t(e.cwd);return r?r.split("/").pop():null}catch{return null}}function XO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var JO,gy,yy=f(()=>{D();R();JO="playbook",gy={name:"playbook",description:"A reusable workflow or debug recipe (procedural memory)",identityField:"slug",attrsSchema:{slug:"string",project:"string",description:"string",tags:"array"},visibility:"shared",activeMode:"always",hotContextBudget:3,retrievalWeights:{recency:.3,relevance:1},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/playbook.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.namespace||E.defaults.namespace,r=await zO(e);try{let i=await _("pod").where({podType:JO,namespace:t,status:"active"}).select("uid","attrs");return r?i.filter(s=>{let a=XO(s.attrs);return!a.project||a.project===r}).map(s=>s.uid):i.map(s=>s.uid)}catch{return[]}}}});var ZO,wy,_y=f(()=>{D();R();ZO=["__virtual:vital__"],wy={name:"vital",description:"Facts marked importance=5 (vital), surfaced globally",identityField:null,attrsSchema:{},visibility:"public",activeMode:"always",hotContextBudget:6,retrievalWeights:{recency:.5,relevance:1},importanceDefault:5,ttlDays:null,schemaDocPath:"kinds/vital.schema.md",writePolicy:"open",resolveActiveScope:async()=>ZO,fetchFacts:async(e={},{slots:t=8,namespace:r}={})=>{let n=r||e.namespace||E.defaults.namespace;return _("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).where(i=>{i.where("f.importance","vital").orWhere("f.importance_score",5)}).orderByRaw("COALESCE(fl.access_count, 0) DESC, f.created_at DESC").limit(t).pluck("f.content")}}});var el={};T(el,{registerBuiltins:()=>by});function by(){if(!Ey){for(let e of QO)Zc(e);Ey=!0}}var QO,Ey,wi=f(()=>{In();qo();Pc();zo();yy();_y();QO=[Fc,Vc,ry,gy,wy],Ey=!1;by()});var An={};T(An,{factsInPodsByRecency:()=>Sy,getHotFacts:()=>xy,updateContextSnapshot:()=>rR,writeSnapshotToFile:()=>vy});async function xy({namespace:e,limit:t=eR,ctx:r={}}={}){let n=e||E.defaults.namespace,i={...r,namespace:n};i.cwd||(i.cwd=await tR());let o=await yi(i),s=await Promise.all(o.map(async({kind:l,scope:d})=>{try{return typeof l.fetchFacts=="function"?await l.fetchFacts(i,{slots:l.hotContextBudget,namespace:n}):await Sy(d,n,l.hotContextBudget)}catch{return[]}})),a=new Set,c=[];for(let l of s)for(let d of l)if(!(!d||a.has(d))&&(a.add(d),c.push(d),c.length>=t))return c;if(c.length===0){let l=await _("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).orderByRaw("COALESCE(fl.last_accessed_at, f.created_at) DESC").limit(t).pluck("f.content");for(let d of l)if(!(!d||a.has(d))&&(a.add(d),c.push(d),c.length>=t))break}return c.slice(0,t)}async function Sy(e,t,r){if(!Array.isArray(e)||e.length===0)return[];let n=e.filter(i=>typeof i=="string"&&!i.startsWith("__virtual:"));return n.length===0?[]:_("fact as f").join("pod_membership as pm",function(){this.on("pm.member_id","=","f.id").andOnVal("pm.member_type","=","fact")}).join("pod as p","p.id","pm.pod_id").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").whereIn("p.uid",n).where({"f.status":"active","f.namespace":t}).orderByRaw(`
247
+ ON CONFLICT (pod_id, member_type, member_id) DO NOTHING`,[e,t,r,n]);return i>0&&(t==="fact"?await Wn(e,{facts:1}):t==="document"&&await Wn(e,{docs:1})),{attached:i>0}}async function G$(e,t,r){let n=await E("pod_membership").where({podId:e,memberType:t,memberId:r}).del();return n>0&&(t==="fact"?await Wn(e,{facts:-1}):t==="document"&&await Wn(e,{docs:-1})),{detached:n>0}}async function j$(e,{memberType:t,limit:r=20}={}){if(!t)throw new Error("listMembers requires a memberType filter");return E(`${t} as t`).join("pod_membership as pm",function(){this.on("pm.member_id","=","t.id").andOnVal("pm.member_type","=",t)}).where("pm.pod_id",e).orderBy("pm.createdAt","desc").limit(r).select("t.*","pm.role as podRole","pm.createdAt as attachedAt")}async function W$(e,t){return E("pod as p").join("pod_membership as pm","pm.pod_id","p.id").where("pm.memberType",e).where("pm.memberId",t).select("p.*","pm.role as podRole")}async function V$(e){return await E("pod_membership").where({podId:e,memberType:"fact"}).pluck("memberId")}var Wi,Cl,U$,Nr=f(()=>{N();Ae();Wi=(e,t,r)=>ks(e,"fact",t,r),Cl=(e,t,r)=>ks(e,"document",t,r),U$=(e,t,r)=>ks(e,"entity",t,r)});var Rl={};v(Rl,{getEntitiesForFact:()=>Y$,getEntityIdsForFacts:()=>Vn,getFactsForEntity:()=>Ol,linkEntitiesToFact:()=>Vi});async function Vi(e,t){if(!t.length)return;let r=fl(t,"id"),n=r.map(i=>({factId:e,entityId:i.id,mentionType:"content",mentionCount:1}));await E("fact_entity").insert(n).onConflict(E.raw("(fact_id, entity_id, mention_type)")).merge({mentionCount:E.raw("fact_entity.mention_count + 1")}),await K$(e,r)}async function K$(e,t){let r=t.map(i=>i.id).filter(Boolean);if(!r.length)return;let n=await E("pod").whereIn("entityId",r).where({status:"active"}).select("id");for(let{id:i}of n)await Wi(i,e,"mention")}async function Ol(e,{limit:t=50}={}){return E("fact").join("fact_entity","fact.id","fact_entity.fact_id").where("fact_entity.entity_id",e).where("fact.status","active").select("fact.*","fact_entity.mention_count as entityMentionCount").orderBy("fact_entity.mention_count","desc").limit(t)}async function Y$(e){return E("entity").join("fact_entity","entity.id","fact_entity.entity_id").where("fact_entity.fact_id",e).whereNull("entity.mergedWith").select("entity.id","entity.uid","entity.name","entity.entityType","entity.description")}async function Vn(e){if(!e.length)return new Map;let t=await E("fact_entity").whereIn("factId",e).select("factId","entityId"),r=new Map;for(let n of t)r.has(n.factId)||r.set(n.factId,[]),r.get(n.factId).push(n.entityId);return r}var Dr=f(()=>{Os();N();Nr()});import q$ from"node:path";async function Ll(e,t,r,n){let{title:i,sourceType:o,metadata:s={}}=e,a=t.filter(u=>u.action==="ADD"||u.action==="UPDATE"),c=a.map(u=>u.fact||u.existing).filter(Boolean),d=a.find(u=>u.fact)?.fact?.id||null,p=new Date().toISOString().split("T")[0];return n?.items?.length?J$({entityDefs:n,factObjects:c,firstFactId:d,namespace:r,today:p}):z$({title:i,sourceType:o,metadata:s,factObjects:c,firstFactId:d,namespace:r,today:p})}async function J$({entityDefs:e,factObjects:t,firstFactId:r,namespace:n,today:i}){let o={},s=0,a=t.map(u=>u.content).filter(Boolean).join(`
248
+ `),c=[];for(let u of e.items){let m=await Ui({name:u.name,entityType:u.type,description:u.description,namespace:n,episodeText:a,episodeEntityIds:c});o[u.name]=m,m?.id&&c.push(m.id)}for(let u of e.relations||[]){let m=o[u.source],h=o[u.target];if(!m||!h)continue;let y=$l(t,u.source)||$l(t,u.target);await Gi({sourceId:m.id,targetId:h.id,relationType:u.type,sourceFactId:y?.id||r,validAt:i}),s++}let l=await Dl(t,n),d=Nl(Object.values(o),l),p=0;for(let u of t){let m=d.filter(h=>Ps(u.content,h));m.length&&(await Vi(u.id,m),p+=m.length)}return{entityCount:d.length,relationCount:s,factEntityLinks:p,topics:d.filter(u=>u.entityType==="topic").map(u=>u.name)}}async function z$({title:e,sourceType:t,metadata:r,factObjects:n,firstFactId:i,namespace:o,today:s}){if(!e){let w=n.length?await Il(n,{promptPath:gw,namespace:o}):[],b=await Dl(n,o),S=Nl(w,b),T=0;for(let I of n){let x=S.filter(C=>Ps(I.content,C));x.length&&(await Vi(I.id,x),T+=x.length)}return{entityCount:S.length,relationCount:0,factEntityLinks:T,topics:w.map(I=>I.name)}}let a=n.map(w=>w.content).filter(Boolean).join(`
249
+ `).slice(0,2e3),c=await Ui({name:e,entityType:"document",description:`${t} document: ${e}`,namespace:o,episodeText:a}),l=null;r.author&&(l=await Ui({name:r.author,entityType:"person",namespace:o,episodeText:a,episodeEntityIds:c?.id?[c.id]:[]}));let d=n.length?await Il(n,{promptPath:gw,namespace:o}):[],p=0;l&&(await Gi({sourceId:c.id,targetId:l.id,relationType:"AUTHORED_BY",sourceFactId:i,validAt:s}),p++);for(let w of d){let b=$l(n,w.name);await Gi({sourceId:c.id,targetId:w.id,relationType:"COVERS",sourceFactId:b?.id||i,validAt:s}),p++}let u=[c,l,...d].filter(Boolean),m=await Dl(n,o),h=Nl(u,m),y=0;for(let w of n){let b=h.filter(S=>Ps(w.content,S));b.length&&(await Vi(w.id,b),y+=b.length)}return{entityCount:h.length,relationCount:p,factEntityLinks:y,topics:d.map(w=>w.name)}}function $l(e,t){if(!t)return null;let r=t.toLowerCase();return e.find(n=>n.content?.toLowerCase().includes(r))||null}function Ps(e,t){if(!e||!t?.name)return!1;let r=e.toLowerCase();return[t.name.toLowerCase(),...t.aliases||[]].some(i=>i?new RegExp(`\\b${X$(i)}\\b`).test(r):!1)}function X$(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Nl(...e){let t=new Set,r=[];for(let n of e)for(let i of n)!i||t.has(i.id)||(t.add(i.id),r.push(i));return r}async function Dl(e,t){if(!e?.length)return[];let r=await E("entity as e").join("pod as p","p.entity_id","e.id").where("p.status","active").where("e.namespace",t).whereNull("e.mergedWith").select("e.id","e.uid","e.name","e.entityType","e.aliases");return r.length?r.filter(n=>e.some(i=>Ps(i.content,n))):[]}var gw,yw=f(()=>{hw();Rr();Dr();M();N();gw=q$.join(Ce,"entity-extraction.md")});function Ew({platforms:e={},role:t=null,relationship:r=null,notes:n=null}){return{platforms:e,role:t,relationship:r,notes:n}}function _w(e={}){return e.slack?.user_id?`slack:${e.slack.user_id}`:e.github?.username?`github:${e.github.username}`:e.email?`email:${String(e.email).toLowerCase()}`:null}function Sw(e={},t={}){let r={...e};for(let[n,i]of Object.entries(t))i&&(r[n]={...r[n]||{},...typeof i=="object"?i:{value:i}});return r}var kl,Z$,ww,Pl=f(()=>{N();$();kl="person",Z$=1440*60*1e3,ww={name:"person",description:"A person you have a working relationship with",identityField:"primary_handle",attrsSchema:{platforms:"object",role:"string",relationship:"string",notes:"string"},visibility:"private",activeMode:"rolling-window",hotContextBudget:4,retrievalWeights:{recency:1,relevance:.8},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/person.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.namespace||_.defaults.namespace;try{let r=new Date(Date.now()-Z$);return(await E("pod as p").join("pod_membership as pm","pm.pod_id","p.id").join("fact_lifecycle as fl","fl.fact_id","pm.member_id").where("pm.memberType","fact").where("p.podType","person").where("p.namespace",t).where("p.status","active").where("fl.lastAccessedAt",">=",r).distinct("p.uid")).map(i=>i.uid)}catch{return[]}}}});var Ul={};v(Ul,{POD_TYPE:()=>Ml,buildAttrs:()=>Bl,claudeSessionKind:()=>Fl,defaultName:()=>Hl,formatForDisplay:()=>eN});function Bl({sessionId:e,transcriptPath:t=null,cwd:r=null,turnCount:n=0,model:i=null,conclusion:o=null,summary:s=null}){return{session_id:e,transcript_path:t,cwd:r,turn_count:n,model:i,conclusion:o,summary:s}}function Hl({sessionId:e,startedAt:t=new Date}={}){let n=(t instanceof Date?t:new Date(t)).toISOString().replace("T"," ").slice(0,16),i=e?e.slice(0,8):"unknown";return`claude-session ${n} (${i})`}function eN(e){let t=tN(e.attrs);return{uid:e.uid,name:e.name,sessionId:t.session_id??e.externalId,transcriptPath:t.transcript_path,cwd:t.cwd,model:t.model,turnCount:t.turn_count??0,conclusion:t.conclusion,startedAt:e.startedAt,endedAt:e.endedAt,memberFactCount:e.memberFactCount,memberDocCount:e.memberDocCount}}function tN(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Ml,Fl,Ms=f(()=>{Lr();Ml="claude_session",Fl={name:"claude_session",description:"Claude Code session",identityField:"session_id",attrsSchema:{session_id:"string",transcript_path:"string",cwd:"string",turn_count:"number",model:"string",conclusion:"string",summary:"string"},visibility:"private",activeMode:"singleton-live",hotContextBudget:6,retrievalWeights:{recency:1,relevance:.7},importanceDefault:2,ttlDays:90,schemaDocPath:"kinds/claude_session.schema.md",writePolicy:"origin-only",resolveActiveScope:async()=>{try{let e=await Gl();return e?[e]:[]}catch{return[]}}}});var Yn={};v(Yn,{CURSOR_PATH:()=>Kn,endActiveSession:()=>dN,ensureActiveSession:()=>cN,getActiveCursor:()=>uN,getActiveSessionPodUid:()=>Gl});import{writeFile as rN,readFile as nN,unlink as iN}from"node:fs/promises";import{existsSync as oN,mkdirSync as sN}from"node:fs";import{dirname as bw}from"node:path";async function Fs(){try{let e=await nN(Kn,"utf8");return JSON.parse(e)}catch{return null}}async function xw(e){oN(bw(Kn))||sN(bw(Kn),{recursive:!0}),await rN(Kn,JSON.stringify(e,null,2),"utf8")}async function cN({sessionId:e,transcriptPath:t=null,cwd:r=null,model:n=null,namespace:i=null}){if(!e)throw new Error("ensureActiveSession requires sessionId from hook stdin");let o=i||_.defaults.namespace,s=await Fs();if(s&&s.session_id===e&&s.namespace===o){let l=await Un(s.pod_uid);if(l)return await jn(l.id,{turn_count:(pN(l.attrs)||0)+1}),await lN(s),l}let a=new Date,{pod:c}=await $r({podType:Ml,externalId:e,name:Hl({sessionId:e,startedAt:a}),namespace:o,attrs:Bl({sessionId:e,transcriptPath:t,cwd:r,turnCount:1,model:n}),startedAt:a});return await xw({session_id:e,pod_uid:c.uid,namespace:o,started_at:c.startedAt??a.toISOString(),last_seen_at:new Date().toISOString()}),c}async function lN(e){await xw({...e,last_seen_at:new Date().toISOString()})}async function Gl({allowStale:e=!1}={}){let t=await Fs();return!t||!t.pod_uid||!e&&t.started_at&&Date.now()-new Date(t.started_at).getTime()>aN?null:t.pod_uid}async function uN(){return Fs()}async function dN({conclusion:e=null,summary:t=null}={}){let r=await Fs();if(!r)return null;let n=await Un(r.pod_uid);if(n){if(e||t){let i={};e&&(i.conclusion=e),t&&(i.summary=t),await jn(n.id,i)}await Tl(n.id)}try{await iN(Kn)}catch{}return n}function pN(e){if(!e)return 0;if(typeof e=="object")return e.turn_count??0;try{return JSON.parse(e).turn_count??0}catch{return 0}}var Kn,aN,Lr=f(()=>{Ae();Ms();$();M();Kn=qa,aN=360*60*1e3});var Yl={};v(Yl,{POD_TYPE:()=>Wl,deriveProjectRoot:()=>Kl,ensureProjectPod:()=>mN,formatForDisplay:()=>gN,membership:()=>tr,projectKind:()=>Vl});import{execFileSync as fN}from"node:child_process";import{basename as Iw}from"node:path";async function mN({cwd:e,namespace:t=null}){if(!e)return null;let r=Kl(e),n=t||_.defaults.namespace,o=(r!==e?!1:jl(e)===e)?r:jl(e),{pod:s}=await $r({podType:Wl,externalId:r,name:Iw(r)||r,namespace:n,attrs:{root_path:r,git_root:o||null,display_name:Iw(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return s}function Kl(e){return jl(e)||e}function jl(e){try{return fN("git",["rev-parse","--show-toplevel"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function hN(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(Lr(),Yn));return(await e())?.cwd||null}catch{return null}}function gN(e){let t=yN(e.attrs);return{uid:e.uid,name:e.name,rootPath:t.root_path,gitRoot:t.git_root,displayName:t.display_name,discoveredAt:t.discovered_at,memberFactCount:e.memberFactCount,memberDocCount:e.memberDocCount}}function yN(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Wl,Vl,Bs=f(()=>{Ae();Nr();$();Wl="project",Vl={name:"project",description:"Code project rooted at a git repo or directory",identityField:"root_path",attrsSchema:{root_path:"string",git_root:"string",display_name:"string",discovered_at:"string"},visibility:"shared",activeMode:"multi-active",hotContextBudget:4,retrievalWeights:{recency:.6,relevance:1},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/project.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.cwd||await hN();if(!t)return[];let r=e.namespace||_.defaults.namespace,n=Kl(t),i=await Gn({podType:Wl,externalId:n,namespace:r});return i?[i.uid]:[]}}});var vw={};v(vw,{fromSourceMetadata:()=>ql,upsertPersonPod:()=>wN});async function wN({entityId:e,name:t,namespace:r,attrs:n={}}){if(!e)throw new Error("upsertPersonPod requires entityId");let i=r||_.defaults.namespace,o=await Al(e);if(o){let l=typeof o.attrs=="object"?o.attrs:EN(o.attrs),p={platforms:Sw(l.platforms||{},n.platforms||{})};return n.role&&!l.role&&(p.role=n.role),n.relationship&&!l.relationship&&(p.relationship=n.relationship),n.notes&&!l.notes&&(p.notes=n.notes),await jn(o.id,p),{pod:o,isNew:!1}}let s=Ew(n),a=_w(s.platforms);return a?await $r({podType:kl,externalId:a,name:t,namespace:i,attrs:s,entityId:e}):{pod:await vl({podType:kl,name:t,namespace:i,attrs:s,entityId:e}),isNew:!0}}async function ql(e,t){if(!e||typeof e!="object")return[];let r=[],n=t||_.defaults.namespace;if(e.slack?.team_id&&e.connection_id){let o=await Gn({podType:"connector_workspace",externalId:`slack:${e.slack.team_id}`,namespace:n});o&&r.push({podId:o.id,role:"primary"})}if(e.github?.org&&e.connection_id){let o=await Gn({podType:"connector_workspace",externalId:`github:${e.github.org}`,namespace:n});o&&r.push({podId:o.id,role:"primary"})}let i=e.project_root||e.source_root;if(i)try{let{ensureProjectPod:o}=await Promise.resolve().then(()=>(Bs(),Yl)),s=await o({cwd:i,namespace:n});s&&r.push({podId:s.id,role:"primary"})}catch{}return r}function EN(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}var Jl=f(()=>{Ae();Pl();$()});var zl={};v(zl,{ingestDocument:()=>xN});import{createHash as _N}from"node:crypto";import{join as SN}from"node:path";async function xN({content:e,title:t,sourcePath:r,sourceType:n="raw",contentType:i,namespace:o,metadata:s={},promptPath:a,categories:c,entities:l,skipFacts:d=!1,skipEntities:p=!1,skipContextualization:u=!1,classify:m=!0,podUids:h=[],resolvePodsFrom:y=null}){e=Bn(e);let w=o||_.defaults.namespace,b=c||Object.keys(Ns),S=a||bN,T=t||r,I=null;if(m&&(process.stderr.write(`[0/6] Classifying input...
250
+ `),I=await aw(e,{title:T}),process.stderr.write(` Route: ${I.route} \u2014 ${I.reasoning}
251
+ `),I.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
252
+ `),{documentId:null,title:T,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
253
+ `);let x=_N("sha256").update(e).digest("hex"),C=r||`thought:${x}`,{doc:R,changed:F}=await $c({sourcePath:C,sourceType:n,title:T,contentHash:x,namespace:w});if(!F)return process.stderr.write(` Skipped \u2014 content unchanged.
254
+ `),{documentId:R.id,title:T,skipped:!0};s&&(Object.keys(s).length||s.connection_id)&&await Dc(R.id,s,s.connection_id??null);let B=await AN({podUids:h,resolvePodsFrom:y,metadata:s,namespace:w});for(let{podId:L,role:oe}of B)await Cl(L,R.id,oe);process.stderr.write(`[2/6] Parsing content...
255
+ `);let z=Bp(e,{format:s.format,filePath:r,contentType:i});if(T=t||z.metadata?.title||r,I?.route==="thought"&&I.facts.length){process.stderr.write(`[thought] Storing ${I.facts.length} facts directly...
256
+ `);let L=await IN(I.facts,{documentId:R.id,namespace:w}),oe={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!p&&L.results.length&&(oe=await Ll({title:T,sourceType:n,metadata:s},L.results,w,l)),await Xo(R.id,{chunkCount:0,factCount:L.counts.added}),await Tw(L.results,B),await $s(R.id,L.results.map(H=>H.fact?.id??H.existing?.id).filter(Boolean)),process.stderr.write(`Done. Route: thought, ${L.counts.total} facts (${L.counts.added} new)
257
+ `),{documentId:R.id,documentUid:R.uid,title:T,skipped:!1,route:"thought",chunkCount:0,facts:{...L.counts,verdicts:Aw(L.results)},entities:oe}}let P=[],ie={counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]},de={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};try{process.stderr.write(`[3/6] Chunking and embedding...
258
+ `),P=Gp(z.sections),process.stderr.write(` ${P.length} chunks created
259
+ `),!u&&P.length&&(P=await Sf(P,z.text,{title:T}));let L=P.map(q=>{let ye=q.contextualPrefix;return ye?`${ye}
260
+ ${q.content}`:q.content}),oe=await bt(L),H=P.map((q,ye)=>({...q,embedding:oe[ye]}));await Af(R.id,H,w),!d&&_.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
261
+ `),ie=await vN(P,{documentId:R.id,namespace:w,promptPath:S,categories:b})):_.ingest.eagerExtract||process.stderr.write(`[4/6] Skipping fact extraction (SIGIL_EAGER_EXTRACT=false)
262
+ `),await Xo(R.id,{chunkCount:P.length,factCount:ie.counts.added+ie.counts.updated+ie.counts.contradicted}),await Tw(ie.results,B),await $s(R.id,ie.results.map(q=>q.fact?.id??q.existing?.id).filter(Boolean)),!p&&ie.results.length&&(process.stderr.write(`[5/6] Linking entities...
263
+ `),de=await Ll({title:T,sourceType:n,metadata:s},ie.results,w,l),process.stderr.write(` ${de.entityCount} entities, ${de.relationCount} relations
264
+ `))}catch(L){throw console.error(`[pipeline] Failed after document upsert: ${L.message}`),await Nc(R.id).catch(()=>{}),L}return process.stderr.write(`Done. ${P.length} chunks, ${ie.counts.total} facts, ${de.entityCount} entities
265
+ `),{documentId:R.id,documentUid:R.uid,title:T,skipped:!1,route:I?.route??null,chunkCount:P.length,facts:{...ie.counts,verdicts:Aw(ie.results)},entities:de}}function Aw(e){return(e||[]).map(t=>({action:t.action,factId:t.fact?.id??t.existing?.id??null,content:String(t.fact?.content||t.existing?.content||"").slice(0,240),audm:t.audm||null,supersededId:t.supersededId??null,contradictedId:t.contradictedId??null}))}async function Cw(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:i="medium",defaultImportance:o="supplementary"}){let s={total:e.length,added:0,skipped:0,updated:0,contradicted:0},a=[];for(let c=0;c<e.length;c++){let l=e[c],d=await gl({content:l.content,category:l.category,confidence:l.confidence||i,importance:l.importance||o,namespace:r,sourceDocumentIds:t?[t]:[],sourceSection:l.sourceSection||l.category,embedding:n[c]});a.push(d);let p=d.action.toLowerCase();p==="add"?s.added++:p==="skip"?s.skipped++:p==="update"?s.updated++:p==="contradict"&&s.contradicted++}return{counts:s,results:a}}async function IN(e,{documentId:t,namespace:r}){let n=await bt(e.map(i=>i.content));return Cw(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:"high",defaultImportance:"vital"})}async function vN(e,{documentId:t,namespace:r,promptPath:n,categories:i}){let o=await Qy(e,{promptPath:n,categories:i});if(process.stderr.write(` ${o.length} facts extracted from ${e.length} chunks
266
+ `),!o.length)return{counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]};let s=await bt(o.map(a=>a.content));return Cw(o,{documentId:t,namespace:r,embeddings:s})}async function AN({podUids:e,resolvePodsFrom:t,metadata:r,namespace:n}){let i=[];for(let s of e){let a=await Un(s);a&&i.push({podId:a.id,role:"primary"})}if(t==="metadata"){let s=await ql(r,n);for(let a of s)i.push(a)}let o=new Map;for(let s of i){let a=o.get(s.podId);(!a||s.role==="primary"&&a.role!=="primary")&&o.set(s.podId,s)}return[...o.values()]}async function Tw(e,t){if(!(!t.length||!e.length))for(let r of e){let n=r?.fact?.id??r?.existing?.id;if(!n)continue;let i=r?.action==="SKIP"?"mention":"primary";for(let{podId:o}of t)await Wi(o,n,i)}}var bN,Xl=f(()=>{Hp();yc();jt();bf();Qo();Tf();ew();ht();El();cw();yw();Ae();Nr();Jl();Rs();$();M();bN=SN(Ce,"default-extraction.md")});var rr={};v(rr,{clearTraces:()=>NN,getTrace:()=>$N,listTraces:()=>RN,recordTrace:()=>ON});function CN(){let e=sc();return{deviceId:e?.device?.id??null,transport:e?.transport??null}}async function ON({kind:e,summary:t,detail:r={},namespace:n=null,durationMs:i=null}){let o=`trace-${Ze(16)}`,s=new Date().toISOString(),{deviceId:a,transport:c}=CN(),l=r;try{JSON.stringify(r).length>TN&&(l={truncated:!0,note:"trace detail exceeded size cap",summary:t})}catch{l={error:"detail not serializable"}}try{be.emit("trace",{uid:o,kind:e,summary:t,namespace:n,durationMs:i,deviceId:a,transport:c,detail:l})}catch{}try{return await E("trace_event").insert({uid:o,kind:e,ts:s,duration_ms:i,namespace:n,summary:t,device_id:a,transport:c,detail:JSON.stringify(l)}),o}catch(d){return console.error("[trace-store] persist failed:",d.message),null}}async function RN({kind:e=null,namespace:t=null,before:r=null,limit:n=50}={}){let i=E("trace_event").select("uid","kind","ts","duration_ms as durationMs","namespace","summary","device_id as deviceId","transport","detail").orderBy("ts","desc").limit(Math.min(Number(n)||50,200));return e&&(i=i.where({kind:e})),t&&(i=i.where({namespace:t})),r&&(i=i.where("ts","<",r)),(await i).map(s=>({...s,detail:typeof s.detail=="string"?Ow(s.detail):s.detail}))}async function $N(e){let t=await E("trace_event").select("uid","kind","ts","duration_ms as durationMs","namespace","summary","device_id as deviceId","transport","detail").where({uid:e}).first();return t?{...t,detail:typeof t.detail=="string"?Ow(t.detail):t.detail}:null}async function NN(){return{cleared:await E("trace_event").del()}}function Ow(e){try{return JSON.parse(e)}catch{return{}}}var TN,nr=f(()=>{wn();N();mn();Ho();TN=256*1024});var Ql={};v(Ql,{_reset:()=>VN,activeKinds:()=>Yi,get:()=>HN,getSchemaDoc:()=>WN,list:()=>UN,register:()=>Zl,validateAttrs:()=>jN});import{readFile as Rw}from"node:fs/promises";import{fileURLToPath as DN}from"node:url";import{dirname as LN,join as $w}from"node:path";function Zl(e){for(let t of kN)if(!e[t])throw new Error(`Pod kind missing required field: ${t}`);if(e.visibility&&!PN.has(e.visibility))throw new Error(`Pod kind ${e.name}: invalid visibility ${e.visibility}`);if(e.activeMode&&!MN.has(e.activeMode))throw new Error(`Pod kind ${e.name}: invalid activeMode ${e.activeMode}`);if(e.writePolicy&&!FN.has(e.writePolicy))throw new Error(`Pod kind ${e.name}: invalid writePolicy ${e.writePolicy}`);Ki.set(e.name,BN(e))}function BN(e){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...e}}function HN(e){return Ki.get(e)||null}function UN(){return Array.from(Ki.values())}async function Yi(e={}){let t=[];for(let r of Ki.values())if(typeof r.resolveActiveScope=="function")try{let n=await r.resolveActiveScope(e);Array.isArray(n)&&n.length>0&&t.push({kind:r,scope:n})}catch(n){process.stderr.write(`[sigil:pods] resolveActiveScope failed for kind "${r.name}": ${n.message}
267
+ `),GN(r.name,n)}return t}function GN(e,t){Promise.resolve().then(()=>(nr(),rr)).then(({recordTrace:r})=>r({kind:"lifecycle",summary:`pod-resolution failed for kind "${e}"`,detail:{kind:e,error:t.message}})).catch(()=>{})}function jN(e,t={}){if(!e||!e.attrsSchema)return{valid:!0};let r=[];for(let[n,i]of Object.entries(e.attrsSchema)){let o=t[n];if(o==null)continue;let s=Array.isArray(o)?"array":typeof o;i!==s&&r.push(`attr "${n}" expected ${i}, got ${s}`)}return r.length?{valid:!1,errors:r}:{valid:!0}}async function WN(e){if(!e)return null;let t=$w(Va,`${e.name}.md`);try{return await Rw(t,"utf8")}catch{}if(!e.schemaDocPath)return null;let r=LN(DN(import.meta.url)),n=$w(r,e.schemaDocPath);try{return await Rw(n,"utf8")}catch{return null}}function VN(){Ki.clear()}var kN,PN,MN,FN,Ki,qn=f(()=>{M();kN=["name"],PN=new Set(["private","shared","public"]),MN=new Set(["singleton-live","multi-active","rolling-window","always"]),FN=new Set(["origin-only","shared-allowlist","open"]),Ki=new Map});async function YN(e){if(e.project)return e.project;if(!e.cwd)try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(Lr(),Yn)),r=await t();e={...e,cwd:r?.cwd}}catch{return null}if(!e.cwd)return null;try{let{deriveProjectRoot:t}=await Promise.resolve().then(()=>(Bs(),Yl)),r=t(e.cwd);return r?r.split("/").pop():null}catch{return null}}function qN(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var KN,Nw,Dw=f(()=>{N();$();KN="playbook",Nw={name:"playbook",description:"A reusable workflow or debug recipe (procedural memory)",identityField:"slug",attrsSchema:{slug:"string",project:"string",description:"string",tags:"array"},visibility:"shared",activeMode:"always",hotContextBudget:3,retrievalWeights:{recency:.3,relevance:1},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/playbook.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.namespace||_.defaults.namespace,r=await YN(e);try{let i=await E("pod").where({podType:KN,namespace:t,status:"active"}).select("uid","attrs");return r?i.filter(s=>{let a=qN(s.attrs);return!a.project||a.project===r}).map(s=>s.uid):i.map(s=>s.uid)}catch{return[]}}}});var JN,Lw,kw=f(()=>{N();$();JN=["__virtual:vital__"],Lw={name:"vital",description:"Facts marked importance=5 (vital), surfaced globally",identityField:null,attrsSchema:{},visibility:"public",activeMode:"always",hotContextBudget:6,retrievalWeights:{recency:.5,relevance:1},importanceDefault:5,ttlDays:null,schemaDocPath:"kinds/vital.schema.md",writePolicy:"open",resolveActiveScope:async()=>JN,fetchFacts:async(e={},{slots:t=8,namespace:r}={})=>{let n=r||e.namespace||_.defaults.namespace;return E("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).where(i=>{i.where("f.importance","vital").orWhere("f.importance_score",5)}).orderByRaw("COALESCE(fl.access_count, 0) DESC, f.created_at DESC").limit(t).pluck("f.content")}}});var eu={};v(eu,{registerBuiltins:()=>Mw});function Mw(){if(!Pw){for(let e of zN)Zl(e);Pw=!0}}var zN,Pw,qi=f(()=>{qn();Ms();Pl();Bs();Dw();kw();zN=[Fl,Vl,ww,Nw,Lw],Pw=!1;Mw()});var Jn={};v(Jn,{factsInPodsByRecency:()=>Bw,getHotFacts:()=>Fw,updateContextSnapshot:()=>QN,writeSnapshotToFile:()=>Hw});async function Fw({namespace:e,limit:t=XN,ctx:r={}}={}){let n=e||_.defaults.namespace,i={...r,namespace:n};i.cwd||(i.cwd=await ZN());let o=await Yi(i),s=await Promise.all(o.map(async({kind:l,scope:d})=>{try{return typeof l.fetchFacts=="function"?await l.fetchFacts(i,{slots:l.hotContextBudget,namespace:n}):await Bw(d,n,l.hotContextBudget)}catch{return[]}})),a=new Set,c=[];for(let l of s)for(let d of l)if(!(!d||a.has(d))&&(a.add(d),c.push(d),c.length>=t))return c;if(c.length===0){let l=await E("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).orderByRaw("COALESCE(fl.last_accessed_at, f.created_at) DESC").limit(t).pluck("f.content");for(let d of l)if(!(!d||a.has(d))&&(a.add(d),c.push(d),c.length>=t))break}return c.slice(0,t)}async function Bw(e,t,r){if(!Array.isArray(e)||e.length===0)return[];let n=e.filter(i=>typeof i=="string"&&!i.startsWith("__virtual:"));return n.length===0?[]:E("fact as f").join("pod_membership as pm",function(){this.on("pm.member_id","=","f.id").andOnVal("pm.member_type","=","fact")}).join("pod as p","p.id","pm.pod_id").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").whereIn("p.uid",n).where({"f.status":"active","f.namespace":t}).orderByRaw(`
267
268
  COALESCE(f.importance_score, 2) DESC,
268
269
  COALESCE(fl.last_accessed_at, f.created_at) DESC
269
- `).limit(r).pluck("f.content")}async function tR(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(yr(),vn));return(await e())?.cwd||null}catch{return null}}async function vy({facts:e,namespace:t}){let r=await import("node:fs/promises");if(!e||!e.length)return 0;let n="<!-- sigil-context -->",i=new Date().toISOString().slice(0,16).replace("T"," "),o=[n,`## Active Context *(${e.length} facts \xB7 refreshed ${i}${t?` \xB7 ns=${t}`:""})*`,"",e.map(c=>`- ${c}`).join(`
270
+ `).limit(r).pluck("f.content")}async function ZN(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(Lr(),Yn));return(await e())?.cwd||null}catch{return null}}async function Hw({facts:e,namespace:t}){let r=await import("node:fs/promises");if(!e||!e.length)return 0;let n="<!-- sigil-context -->",i=new Date().toISOString().slice(0,16).replace("T"," "),o=[n,`## Active Context *(${e.length} facts \xB7 refreshed ${i}${t?` \xB7 ns=${t}`:""})*`,"",e.map(c=>`- ${c}`).join(`
270
271
  `),n].join(`
271
- `),s="";try{s=await r.readFile(Bi,"utf8")}catch{}let a=s.includes(n)?s.replace(new RegExp(`${n}[\\s\\S]*?${n}`),o):s+(s.trim()?`
272
+ `),s="";try{s=await r.readFile(vo,"utf8")}catch{}let a=s.includes(n)?s.replace(new RegExp(`${n}[\\s\\S]*?${n}`),o):s+(s.trim()?`
272
273
 
273
274
  `:"")+o+`
274
- `;return await r.writeFile(Bi,a,"utf8"),e.length}async function rR({namespace:e,limit:t,ctx:r}={}){let n=await xy({namespace:e,limit:t,ctx:r});return vy({facts:n,namespace:e})}var eR,Tn=f(()=>{D();R();B();wi();In();eR=20});function Iy(e){e.register("remember",async t=>{let r=Array.isArray(t.facts)?t.facts.filter(Boolean):[];if(r.length===0){let u=new Error("remember: params.facts must be a non-empty string[]");throw u.code="invalid_params",u}let{ingestDocument:n}=await Promise.resolve().then(()=>(Xc(),zc)),{default:i}=await Promise.resolve().then(()=>(R(),X)),o=t.namespace||i.defaults.namespace,s=0,a=0,c=0,l=Date.now(),d=[];for(let u of r){let m=await n({content:u,namespace:o,classify:!0});if(m.skipped||m.route==="noise"){c++,d.push({input:String(u).slice(0,240),route:m.route??null,skipped:!0,verdicts:m.facts?.verdicts||[]});continue}let g=m.facts?.added??0,y=m.facts?.updated??0;s+=g,a+=y,g+y===0&&c++,d.push({input:String(u).slice(0,240),route:m.route??null,skipped:!1,counts:{added:g,updated:y,skipped:m.facts?.skipped??0,contradicted:m.facts?.contradicted??0},verdicts:m.facts?.verdicts||[],entities:m.entities?{entityCount:m.entities.entityCount,relationCount:m.entities.relationCount,topics:m.entities.topics||[]}:null})}if(s+a>0){let{updateContextSnapshot:u}=await Promise.resolve().then(()=>(Tn(),An));await u({namespace:o}).catch(()=>{})}let{recordTrace:p}=await Promise.resolve().then(()=>(Wt(),jt));return p({kind:"ingest",summary:`remember ${r.length} input${r.length===1?"":"s"} \u2192 +${s} added, ~${a} updated, ${c} known`,namespace:o,durationMs:Date.now()-l,detail:{op:"remember",namespace:o,totals:{added:s,updated:a,alreadyKnown:c,inputCount:r.length},inputs:d}}).catch(()=>{}),{added:s,updated:a,alreadyKnown:c,namespace:o}})}var Ay=f(()=>{});var Ty={};T(Ty,{consolidateCoRetrievalEdges:()=>iR,getCoRetrievedFacts:()=>nR,strengthenEdges:()=>tl});async function tl(e){if(!e||e.length<2)return;let t=[...new Set(e.filter(o=>Number.isInteger(o)))].sort((o,s)=>o-s);if(t.length<2)return;let r=[];for(let o=0;o<t.length;o++)for(let s=o+1;s<t.length;s++)r.push([t[o],t[s]]);let n=r.map(()=>"(?, ?, 1, NOW(), NOW())").join(", "),i=r.flat();await _.raw(`
275
+ `;return await r.writeFile(vo,a,"utf8"),e.length}async function QN({namespace:e,limit:t,ctx:r}={}){let n=await Fw({namespace:e,limit:t,ctx:r});return Hw({facts:n,namespace:e})}var XN,zn=f(()=>{N();$();M();qi();qn();XN=20});function Uw(e){e.register("remember",async t=>{let r=Array.isArray(t.facts)?t.facts.filter(Boolean):[];if(r.length===0){let u=new Error("remember: params.facts must be a non-empty string[]");throw u.code="invalid_params",u}let{ingestDocument:n}=await Promise.resolve().then(()=>(Xl(),zl)),{default:i}=await Promise.resolve().then(()=>($(),re)),o=t.namespace||i.defaults.namespace,s=0,a=0,c=0,l=Date.now(),d=[];for(let u of r){let m=await n({content:u,namespace:o,classify:!0});if(m.skipped||m.route==="noise"){c++,d.push({input:String(u).slice(0,240),route:m.route??null,skipped:!0,verdicts:m.facts?.verdicts||[]});continue}let h=m.facts?.added??0,y=m.facts?.updated??0;s+=h,a+=y,h+y===0&&c++,d.push({input:String(u).slice(0,240),route:m.route??null,skipped:!1,counts:{added:h,updated:y,skipped:m.facts?.skipped??0,contradicted:m.facts?.contradicted??0},verdicts:m.facts?.verdicts||[],entities:m.entities?{entityCount:m.entities.entityCount,relationCount:m.entities.relationCount,topics:m.entities.topics||[]}:null})}if(s+a>0){let{updateContextSnapshot:u}=await Promise.resolve().then(()=>(zn(),Jn));await u({namespace:o}).catch(()=>{})}let{recordTrace:p}=await Promise.resolve().then(()=>(nr(),rr));return p({kind:"ingest",summary:`remember ${r.length} input${r.length===1?"":"s"} \u2192 +${s} added, ~${a} updated, ${c} known`,namespace:o,durationMs:Date.now()-l,detail:{op:"remember",namespace:o,totals:{added:s,updated:a,alreadyKnown:c,inputCount:r.length},inputs:d}}).catch(()=>{}),{added:s,updated:a,alreadyKnown:c,namespace:o}})}var Gw=f(()=>{});var jw={};v(jw,{consolidateCoRetrievalEdges:()=>tD,getCoRetrievedFacts:()=>eD,strengthenEdges:()=>tu});async function tu(e){if(!e||e.length<2)return;let t=[...new Set(e.filter(o=>Number.isInteger(o)))].sort((o,s)=>o-s);if(t.length<2)return;let r=[];for(let o=0;o<t.length;o++)for(let s=o+1;s<t.length;s++)r.push([t[o],t[s]]);let n=r.map(()=>"(?, ?, 1, NOW(), NOW())").join(", "),i=r.flat();await E.raw(`
275
276
  INSERT INTO hebbian_edge (fact_a_id, fact_b_id, strength, first_seen_at, last_seen_at)
276
277
  VALUES ${n}
277
278
  ON CONFLICT (fact_a_id, fact_b_id)
278
279
  DO UPDATE SET
279
280
  strength = hebbian_edge.strength + 1,
280
281
  last_seen_at = NOW()
281
- `,i)}async function nR(e,{limit:t=5,minStrength:r=2}={}){let{rows:n}=await _.raw(`
282
+ `,i)}async function eD(e,{limit:t=5,minStrength:r=2}={}){let{rows:n}=await E.raw(`
282
283
  SELECT
283
284
  CASE WHEN fact_a_id = ? THEN fact_b_id ELSE fact_a_id END AS partner_id,
284
285
  strength,
@@ -288,19 +289,19 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
288
289
  AND strength >= ?
289
290
  ORDER BY strength DESC, last_seen_at DESC
290
291
  LIMIT ?
291
- `,[e,e,e,r,t]);return n}async function iR({floor:e=1,decayDays:t=90}={}){let{rows:r}=await _.raw(`
292
+ `,[e,e,e,r,t]);return n}async function tD({floor:e=1,decayDays:t=90}={}){let{rows:r}=await E.raw(`
292
293
  DELETE FROM hebbian_edge
293
294
  WHERE strength <= ?
294
295
  AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
295
296
  RETURNING fact_a_id
296
- `,[e,t]);return r.length}var rl=f(()=>{D()});var Zo={};T(Zo,{consolidateEntityCoRetrievalEdges:()=>aR,getCoRetrievedEntities:()=>sR,getEdgeStrengthsForRanking:()=>il,getEntityHebbianStats:()=>cR,strengthenEntityEdges:()=>nl});function Xo(e){return oR/Math.max(e,1)}async function nl(e,t={}){if(!E.hebbian.entity.enabled||!e||e.length<2)return;let r=t.eta??E.hebbian.entity.eta,n=t.cap??E.hebbian.entity.cap,i=[...new Set(e.filter(c=>Number.isInteger(c)))].sort((c,l)=>c-l);if(i.length<2)return;let o=[];for(let c=0;c<i.length;c++)for(let l=c+1;l<i.length;l++)o.push([i[c],i[l]]);let s=o.map(()=>"(?, ?, ?, NOW(), NOW())").join(", "),a=o.flatMap(([c,l])=>[c,l,r]);await _.raw(`
297
+ `,[e,t]);return r.length}var ru=f(()=>{N()});var Us={};v(Us,{consolidateEntityCoRetrievalEdges:()=>iD,getCoRetrievedEntities:()=>nD,getEdgeStrengthsForRanking:()=>iu,getEntityHebbianStats:()=>oD,strengthenEntityEdges:()=>nu});function Hs(e){return rD/Math.max(e,1)}async function nu(e,t={}){if(!_.hebbian.entity.enabled||!e||e.length<2)return;let r=t.eta??_.hebbian.entity.eta,n=t.cap??_.hebbian.entity.cap,i=[...new Set(e.filter(c=>Number.isInteger(c)))].sort((c,l)=>c-l);if(i.length<2)return;let o=[];for(let c=0;c<i.length;c++)for(let l=c+1;l<i.length;l++)o.push([i[c],i[l]]);let s=o.map(()=>"(?, ?, ?, NOW(), NOW())").join(", "),a=o.flatMap(([c,l])=>[c,l,r]);await E.raw(`
297
298
  INSERT INTO entity_hebbian_edge (entity_a_id, entity_b_id, strength, first_seen_at, last_seen_at)
298
299
  VALUES ${s}
299
300
  ON CONFLICT (entity_a_id, entity_b_id)
300
301
  DO UPDATE SET
301
302
  strength = LEAST(entity_hebbian_edge.strength + ?, ?),
302
303
  last_seen_at = NOW()
303
- `,[...a,r,n])}async function sR(e,t={}){if(!E.hebbian.entity.enabled)return[];let r=t.limit??10,n=t.minEffectiveStrength??E.hebbian.entity.minEffective,i=Xo(t.halfLifeDays??E.hebbian.entity.halfLifeDays),{rows:o}=await _.raw(`
304
+ `,[...a,r,n])}async function nD(e,t={}){if(!_.hebbian.entity.enabled)return[];let r=t.limit??10,n=t.minEffectiveStrength??_.hebbian.entity.minEffective,i=Hs(t.halfLifeDays??_.hebbian.entity.halfLifeDays),{rows:o}=await E.raw(`
304
305
  SELECT
305
306
  CASE WHEN entity_a_id = ? THEN entity_b_id ELSE entity_a_id END AS "partnerId",
306
307
  (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0))::float8 AS "effectiveStrength",
@@ -310,7 +311,7 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
310
311
  WHERE entity_a_id = ? OR entity_b_id = ?
311
312
  ORDER BY "effectiveStrength" DESC
312
313
  LIMIT ?
313
- `,[e,i,e,e,r*3]);return o.filter(s=>s.effectiveStrength>=n).slice(0,r)}async function il(e,t,r={}){if(!E.hebbian.entity.enabled)return new Map;if(!e.length||!t.length)return new Map;let n=Xo(r.halfLifeDays??E.hebbian.entity.halfLifeDays),i=[...new Set(e)],o=[...new Set(t)].filter(c=>!i.includes(c));if(!o.length)return new Map;let{rows:s}=await _.raw(`
314
+ `,[e,i,e,e,r*3]);return o.filter(s=>s.effectiveStrength>=n).slice(0,r)}async function iu(e,t,r={}){if(!_.hebbian.entity.enabled)return new Map;if(!e.length||!t.length)return new Map;let n=Hs(r.halfLifeDays??_.hebbian.entity.halfLifeDays),i=[...new Set(e)],o=[...new Set(t)].filter(c=>!i.includes(c));if(!o.length)return new Map;let{rows:s}=await E.raw(`
314
315
  SELECT
315
316
  CASE
316
317
  WHEN entity_a_id = ANY(?::bigint[]) THEN entity_b_id
@@ -323,18 +324,18 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
323
324
  OR
324
325
  (entity_b_id = ANY(?::bigint[]) AND entity_a_id = ANY(?::bigint[]))
325
326
  GROUP BY "candidateId"
326
- `,[i,n,i,o,i,o]),a=new Map;for(let c of s)a.set(Number(c.candidateId),c.summedStrength);return a}async function aR({floor:e=.5,decayDays:t=90}={}){let r=Xo(E.hebbian.entity.halfLifeDays),{rows:n}=await _.raw(`
327
+ `,[i,n,i,o,i,o]),a=new Map;for(let c of s)a.set(Number(c.candidateId),c.summedStrength);return a}async function iD({floor:e=.5,decayDays:t=90}={}){let r=Hs(_.hebbian.entity.halfLifeDays),{rows:n}=await E.raw(`
327
328
  DELETE FROM entity_hebbian_edge
328
329
  WHERE (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0)) <= ?
329
330
  AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
330
331
  RETURNING entity_a_id
331
- `,[r,e,t]);return n.length}async function cR({topN:e=5}={}){let t=Xo(E.hebbian.entity.halfLifeDays),r=await _.raw(`
332
+ `,[r,e,t]);return n.length}async function oD({topN:e=5}={}){let t=Hs(_.hebbian.entity.halfLifeDays),r=await E.raw(`
332
333
  SELECT
333
334
  COUNT(*)::int AS "edgeCount",
334
335
  COALESCE(AVG(strength)::float8, 0) AS "avgStrength",
335
336
  COALESCE(MAX(strength)::float8, 0) AS "maxStrength"
336
337
  FROM entity_hebbian_edge
337
- `),n=await _.raw(`
338
+ `),n=await E.raw(`
338
339
  SELECT
339
340
  ea.name AS "aName",
340
341
  eb.name AS "bName",
@@ -345,11 +346,11 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
345
346
  JOIN entity eb ON eb.id = entity_b_id
346
347
  ORDER BY "decayed" DESC
347
348
  LIMIT ?
348
- `,[t,e]);return{edgeCount:r.rows[0]?.edgeCount??0,avgStrength:r.rows[0]?.avgStrength??0,maxStrength:r.rows[0]?.maxStrength??0,topPairs:n.rows??[]}}var oR,_i=f(()=>{D();R();oR=Math.log(2)});function Qo({minConfidence:e="medium",pointInTime:t,categories:r}){let n=lR[e]??1,i=[n],o="",s="";return t&&(o="AND valid_from <= ? AND (valid_until IS NULL OR valid_until > ?)",i.push(t,t)),r?.length&&(s="AND category = ANY(?)",i.push(r)),{minRank:n,temporalClause:o,categoryClause:s,filterParams:i}}var lR,Ei,es=f(()=>{lR={low:0,medium:1,high:2},Ei=`CASE confidence
349
+ `,[t,e]);return{edgeCount:r.rows[0]?.edgeCount??0,avgStrength:r.rows[0]?.avgStrength??0,maxStrength:r.rows[0]?.maxStrength??0,topPairs:n.rows??[]}}var rD,Ji=f(()=>{N();$();rD=Math.log(2)});function Gs({minConfidence:e="medium",pointInTime:t,categories:r}){let n=sD[e]??1,i=[n],o="",s="";return t&&(o="AND valid_from <= ? AND (valid_until IS NULL OR valid_until > ?)",i.push(t,t)),r?.length&&(s="AND category = ANY(?)",i.push(r)),{minRank:n,temporalClause:o,categoryClause:s,filterParams:i}}var sD,zi,js=f(()=>{sD={low:0,medium:1,high:2},zi=`CASE confidence
349
350
  WHEN 'high' THEN 2
350
351
  WHEN 'medium' THEN 1
351
352
  ELSE 0
352
- END`});async function Cy(e,{namespaces:t,limit:r=20}){let n=fe(e),i=`${st("embedding")} <=> ${at()}`,{rows:o}=await _.raw(`
353
+ END`});async function Ww(e,{namespaces:t,limit:r=20}){let n=he(e),i=`${pt("embedding")} <=> ${ft()}`,{rows:o}=await E.raw(`
353
354
  SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
354
355
  content, section_heading AS "sectionHeading", namespace,
355
356
  1 - (${i}) as similarity
@@ -358,7 +359,7 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
358
359
  AND embedding IS NOT NULL
359
360
  ORDER BY ${i}
360
361
  LIMIT ?
361
- `,[n,t,n,r]);return o}var $y=f(()=>{D();$t();R();es()});async function Oy(e,{namespaces:t,limit:r=20}){let{rows:n}=await _.raw(`
362
+ `,[n,t,n,r]);return o}var Vw=f(()=>{N();Gt();$();js()});async function Kw(e,{namespaces:t,limit:r=20}){let{rows:n}=await E.raw(`
362
363
  SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
363
364
  content, section_heading AS "sectionHeading", namespace,
364
365
  ts_rank(search_vector, plainto_tsquery('english', ?)) as rank
@@ -367,10 +368,10 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
367
368
  AND search_vector @@ plainto_tsquery('english', ?)
368
369
  ORDER BY rank DESC
369
370
  LIMIT ?
370
- `,[e,t,e,r]);return n}var Ry=f(()=>{D();es()});async function Dy(e,t,{namespaces:r,limit:n=5,minConfidence:i="medium",pointInTime:o,categories:s,podIds:a=null}){let c=fe(t),l=`${st("embedding")} <=> ${at()}`,{temporalClause:d,categoryClause:p,filterParams:u}=Qo({minConfidence:i,pointInTime:o,categories:s}),m=n*mR,g=Array.isArray(a),y=g&&a.length===0,w=g?y?"AND FALSE":`AND id = ANY(
371
+ `,[e,t,e,r]);return n}var Yw=f(()=>{N();js()});async function Jw(e,t,{namespaces:r,limit:n=5,minConfidence:i="medium",pointInTime:o,categories:s,podIds:a=null}){let c=he(t),l=`${pt("embedding")} <=> ${ft()}`,{temporalClause:d,categoryClause:p,filterParams:u}=Gs({minConfidence:i,pointInTime:o,categories:s}),m=n*dD,h=Array.isArray(a),y=h&&a.length===0,w=h?y?"AND FALSE":`AND id = ANY(
371
372
  SELECT member_id FROM pod_membership
372
373
  WHERE member_type = 'fact' AND pod_id = ANY(?::int[])
373
- )`:"",x=g&&!y?[a]:[],[b,...A]=u,v=[c,c,r,b,...A,...x,c,m],S=[e,e,r,b,e,...A,...x,m],C=[m,m,n],O=`
374
+ )`:"",b=h&&!y?[a]:[],[S,...T]=u,I=[c,c,r,S,...T,...b,c,m],x=[e,e,r,S,e,...T,...b,m],C=[m,m,n],R=`
374
375
  WITH semantic AS (
375
376
  SELECT id,
376
377
  uid,
@@ -386,7 +387,7 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
386
387
  WHERE namespace = ANY(?)
387
388
  AND status = 'active'
388
389
  AND embedding IS NOT NULL
389
- AND ${Ei} >= ?
390
+ AND ${zi} >= ?
390
391
  ${d}
391
392
  ${p}
392
393
  ${w}
@@ -407,7 +408,7 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
407
408
  FROM fact
408
409
  WHERE namespace = ANY(?)
409
410
  AND status = 'active'
410
- AND ${Ei} >= ?
411
+ AND ${zi} >= ?
411
412
  AND search_vector @@ plainto_tsquery('english', ?)
412
413
  ${d}
413
414
  ${p}
@@ -431,8 +432,8 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
431
432
  COALESCE(s.created_at, k.created_at) AS created_at,
432
433
  COALESCE(s.similarity, 0) AS similarity,
433
434
  (
434
- ${pR} * (1.0 / (${Ny} + COALESCE(s.rank_ix, ?)))
435
- + ${fR} * (1.0 / (${Ny} + COALESCE(k.rank_ix, ?)))
435
+ ${lD} * (1.0 / (${qw} + COALESCE(s.rank_ix, ?)))
436
+ + ${uD} * (1.0 / (${qw} + COALESCE(k.rank_ix, ?)))
436
437
  ) AS rrf_raw
437
438
  FROM semantic s
438
439
  FULL OUTER JOIN keyword k ON s.id = k.id
@@ -452,11 +453,11 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
452
453
  )
453
454
  )
454
455
  )) AS activation,
455
- CASE f.importance WHEN 'vital' THEN ${hR} ELSE 1.0 END AS importance_mult,
456
+ CASE f.importance WHEN 'vital' THEN ${pD} ELSE 1.0 END AS importance_mult,
456
457
  CASE f.confidence
457
- WHEN 'high' THEN ${gR}
458
- WHEN 'medium' THEN ${yR}
459
- WHEN 'low' THEN ${wR}
458
+ WHEN 'high' THEN ${fD}
459
+ WHEN 'medium' THEN ${mD}
460
+ WHEN 'low' THEN ${hD}
460
461
  ELSE 1.0
461
462
  END AS confidence_mult
462
463
  FROM fused f
@@ -473,7 +474,7 @@ ${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[
473
474
  ORDER BY final_score DESC,
474
475
  CASE WHEN importance = 'vital' THEN 0 ELSE 1 END
475
476
  LIMIT ?
476
- `,M=[...v,...S,...C],{rows:F}=await _.raw(O,M);if(!F.length)return[];let q=F[0].final_score||F[0].rrf_raw||1;return F.map(P=>({...P,rrfScore:Math.round(Number(P.final_score||P.rrf_raw)/Number(q)*100)/100}))}var Ny,pR,fR,mR,hR,gR,yR,wR,Ly=f(()=>{D();$t();R();es();Ny=20,pR=1,fR=.7,mR=3,hR=1.5,gR=1,yR=.85,wR=.7});async function ky(e){let t=e.map(i=>i.id),r=await xn(t),n=new Set;for(let i of r.values())for(let o of i)n.add(o);return n.size?_("entity").whereIn("id",[...n]).whereNull("mergedWith").select("id","uid","name","entityType","description"):[]}async function Py(e,{limit:t=10}={}){if(!e.length)return[];let r=await _("relation").where(function(){this.whereIn("sourceId",e).orWhereIn("targetId",e)}).whereNull("invalidAt").select("*").limit(t*3),n=new Set(e),i=new Set,o=new Map;for(let p of r){let u=n.has(p.sourceId)?p.targetId:p.sourceId;i.add(u),o.has(u)||o.set(u,p)}if(!i.size)return[];let s=await _("entity").whereIn("id",[...i]).whereNull("mergedWith").select("id","name"),a=new Map(s.map(p=>[p.id,p.name])),c=await _("fact").join("fact_entity","fact.id","fact_entity.factId").whereIn("fact_entity.entityId",[...i]).where("fact.status","active").select("fact.*","fact_entity.entityId").orderBy("fact_entity.mentionCount","desc").limit(t*3),l=new Set,d=[];for(let p of c){if(l.has(p.id))continue;l.add(p.id);let u=o.get(p.entityId),m=a.get(p.entityId)||"unknown",g=u?.relationType||"related";if(d.push({...p,relationPath:`${m} (${g})`,graphDistance:1}),d.length>=t)break}return d}function My(e,t,r,n){let i=new Set(r),o=e.map(a=>({...a,resultType:"direct"})),s=t.filter(a=>!e.some(c=>c.id===a.id)).map(a=>({...a,rrfScore:(a.rrfScore||.1)*.5,resultType:"related"}));return[...o,...s].slice(0,n)}var Fy=f(()=>{D();gr()});var Cn,ol=f(()=>{Cn=class{#t=new Map;#n;#e;constructor({maxSize:t=100,ttlMs:r=300*1e3}={}){this.#n=t,this.#e=r}get(t){let r=this.#t.get(t);if(r){if(Date.now()-r.timestamp>this.#e){this.#t.delete(t);return}return r.value}}set(t,r){if(this.#t.size>=this.#n){let n=this.#t.keys().next().value;this.#t.delete(n)}this.#t.set(t,{value:r,timestamp:Date.now()})}}});async function By(e){let t=Hy.get(e);if(t)return t;let r=`You are a search query expander for a personal knowledge base.
477
+ `,F=[...I,...x,...C],{rows:B}=await E.raw(R,F);if(!B.length)return[];let z=B[0].final_score||B[0].rrf_raw||1;return B.map(P=>({...P,rrfScore:Math.round(Number(P.final_score||P.rrf_raw)/Number(z)*100)/100}))}var qw,lD,uD,dD,pD,fD,mD,hD,zw=f(()=>{N();Gt();$();js();qw=20,lD=1,uD=.7,dD=3,pD=1.5,fD=1,mD=.85,hD=.7});async function Xw(e){let t=e.map(i=>i.id),r=await Vn(t),n=new Set;for(let i of r.values())for(let o of i)n.add(o);return n.size?E("entity").whereIn("id",[...n]).whereNull("mergedWith").select("id","uid","name","entityType","description"):[]}async function Zw(e,{limit:t=10}={}){if(!e.length)return[];let r=await E("relation").where(function(){this.whereIn("sourceId",e).orWhereIn("targetId",e)}).whereNull("invalidAt").select("*").limit(t*3),n=new Set(e),i=new Set,o=new Map;for(let p of r){let u=n.has(p.sourceId)?p.targetId:p.sourceId;i.add(u),o.has(u)||o.set(u,p)}if(!i.size)return[];let s=await E("entity").whereIn("id",[...i]).whereNull("mergedWith").select("id","name"),a=new Map(s.map(p=>[p.id,p.name])),c=await E("fact").join("fact_entity","fact.id","fact_entity.factId").whereIn("fact_entity.entityId",[...i]).where("fact.status","active").select("fact.*","fact_entity.entityId").orderBy("fact_entity.mentionCount","desc").limit(t*3),l=new Set,d=[];for(let p of c){if(l.has(p.id))continue;l.add(p.id);let u=o.get(p.entityId),m=a.get(p.entityId)||"unknown",h=u?.relationType||"related";if(d.push({...p,relationPath:`${m} (${h})`,graphDistance:1}),d.length>=t)break}return d}function Qw(e,t,r,n){let i=new Set(r),o=e.map(a=>({...a,resultType:"direct"})),s=t.filter(a=>!e.some(c=>c.id===a.id)).map(a=>({...a,rrfScore:(a.rrfScore||.1)*.5,resultType:"related"}));return[...o,...s].slice(0,n)}var eE=f(()=>{N();Dr()});var Xn,ou=f(()=>{Xn=class{#t=new Map;#n;#e;constructor({maxSize:t=100,ttlMs:r=300*1e3}={}){this.#n=t,this.#e=r}get(t){let r=this.#t.get(t);if(r){if(Date.now()-r.timestamp>this.#e){this.#t.delete(t);return}return r.value}}set(t,r){if(this.#t.size>=this.#n){let n=this.#t.keys().next().value;this.#t.delete(n)}this.#t.set(t,{value:r,timestamp:Date.now()})}}});async function rE(e){let t=tE.get(e);if(t)return t;let r=`You are a search query expander for a personal knowledge base.
477
478
 
478
479
  Given the user's query, generate 3-5 alternative search queries that would help find ALL relevant information \u2014 including facts that don't literally match the query but are semantically related.
479
480
 
@@ -485,7 +486,7 @@ Think about:
485
486
 
486
487
  User query: "${e}"
487
488
 
488
- Respond with ONLY a JSON array of strings. Do not include the original query.`;try{let n=await We(r,{model:E.llm.extractionModel,caller:"query-expander"});if(!Array.isArray(n))return[e];let i=n.filter(s=>typeof s=="string"&&s.trim()).slice(0,_R),o=i.length?[e,...i]:[e];return Hy.set(e,o),o}catch(n){return console.error("[query-expander] Failed:",n.message),[e]}}var _R,Hy,Uy=f(()=>{Ve();ol();R();_R=5,Hy=new Cn({maxSize:100,ttlMs:300*1e3})});import{readFile as ER}from"node:fs/promises";import{join as bR}from"node:path";async function Wy(e){let t=e.trim().toLowerCase(),r=sl.get(t);if(r)return r;let i=`${await ER(xR,"utf8")}
489
+ Respond with ONLY a JSON array of strings. Do not include the original query.`;try{let n=await ze(r,{model:_.llm.extractionModel,caller:"query-expander"});if(!Array.isArray(n))return[e];let i=n.filter(s=>typeof s=="string"&&s.trim()).slice(0,gD),o=i.length?[e,...i]:[e];return tE.set(e,o),o}catch(n){return console.error("[query-expander] Failed:",n.message),[e]}}var gD,tE,nE=f(()=>{Xe();ou();$();gD=5,tE=new Xn({maxSize:100,ttlMs:300*1e3})});import{readFile as yD}from"node:fs/promises";import{join as wD}from"node:path";async function sE(e){let t=e.trim().toLowerCase(),r=su.get(t);if(r)return r;let i=`${await yD(ED,"utf8")}
489
490
 
490
491
  ---
491
492
 
@@ -493,7 +494,7 @@ Query: ${e}
493
494
 
494
495
  ---
495
496
 
496
- Respond with ONLY a JSON object: { "intent": "preference|factual|entity_lookup|exploratory|temporal", "categories": [...], "entities": [...], "expand": bool, "pointInTime": null or "YYYY-MM-DD", "reasoning": "..." }`;try{let o=await We(i,{model:E.llm.extractionModel,caller:"query-router"});if(!o||!SR.includes(o.intent)){let c=Gy("factual",{});return sl.set(t,c),c}let s=jy[o.intent],a={intent:o.intent,categories:Array.isArray(o.categories)&&o.categories.length?o.categories:s.categories,entities:Array.isArray(o.entities)?o.entities:[],expand:typeof o.expand=="boolean"?o.expand:s.expand,useGraph:s.useGraph,limit:s.limit,pointInTime:o.pointInTime||null,reasoning:o.reasoning||""};return sl.set(t,a),a}catch(o){return console.error("[query-router] Failed:",o.message),Gy("factual",{reasoning:`Fallback \u2014 ${o.message}`})}}function Gy(e,t={}){let r=jy[e];return{intent:e,categories:r.categories,entities:[],expand:r.expand,useGraph:r.useGraph,limit:r.limit,pointInTime:null,reasoning:"",...t}}var xR,sl,SR,jy,Vy=f(()=>{Ve();ol();R();B();xR=bR(Ie,"query-router.md"),sl=new Cn({maxSize:200,ttlMs:600*1e3}),SR=["preference","factual","entity_lookup","exploratory","temporal"],jy={preference:{categories:["preference","opinion","personal"],expand:!1,useGraph:!1,limit:null},factual:{categories:[],expand:!1,useGraph:!1,limit:null},entity_lookup:{categories:[],expand:!1,useGraph:!0,limit:null},exploratory:{categories:[],expand:!0,useGraph:!0,limit:15},temporal:{categories:[],expand:!1,useGraph:!1,limit:null}}});var cl={};T(cl,{isSearchableQuery:()=>Ky,search:()=>TR});async function TR(e,{namespaces:t,limit:r=5,minConfidence:n="medium",useGraph:i=!1,includeChunks:o=!1,pointInTime:s,expand:a=!1,route:c=!0,categories:l,synthesize:d=E.search.synthesize,podScope:p=null,applyFloor:u=!0,ctx:m={}}={}){let g=Date.now();if(!Ky(e)){let S=$R();return S._trace={query:e,searchable:!1,stages:[{stage:"guard",note:"query is not searchable (empty or wildcard-only)"}],durationMs:Date.now()-g},S}d&&(o=!0);let y=null;c&&(y=await Wy(e),i=i||y.useGraph,a=a||y.expand,r=y.limit||r,s=s||y.pointInTime,l=l||(y.categories.length?y.categories:void 0));let w=await DR(e,t),x=await NR(p,{...m,namespace:t?.[0]}),b;w?b=await LR(w,e,{namespaces:t,limit:r,minConfidence:n,includeChunks:o,pointInTime:s,categories:l,podIds:x}):b=await MR(e,{namespaces:t,limit:r,minConfidence:n,useGraph:i,includeChunks:o,pointInTime:s,expand:a,categories:l,podIds:x});let A=null;if(u&&Array.isArray(b.facts)&&b.facts.length){let S=E.memory.injectionFloor,C=b.facts.length;b.facts=b.facts.filter(O=>{if(O.source==="entity")return!0;let M=Number(O.similarity);return Number.isFinite(M)?M>=S:!0}),A={threshold:S,dropped:C-b.facts.length,kept:b.facts.length}}let v=b.facts.map(S=>S.id).filter(Boolean);if(wc(v).catch(S=>console.error("[access-tracking]",S.message)),tl(v.slice(0,8)).catch(S=>console.error("[hebbian]",S.message)),E.hebbian.entity.enabled&&v.length>=2&&RR(v).catch(S=>console.error("[hebbian-entity]",S.message)),d)try{b.synthesized=await OR(e,b)}catch(S){console.error("[synthesizer] failed:",S.message),b.synthesized=null}return b._trace=CR({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:i,expand:a,route:c,routing:y,matchedEntity:w,podScope:p,podIds:x,result:b,factIds:v,floored:A,durationMs:Date.now()-g}),b}function CR({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:i,expand:o,route:s,routing:a,matchedEntity:c,podScope:l,podIds:d,result:p,factIds:u,floored:m,durationMs:g}){let y=b=>{let A=Number(b);return Number.isFinite(A)?Math.round(A*1e4)/1e4:null},w=(p.facts||[]).map((b,A)=>({rank:A+1,id:b.id??null,content:String(b.content||"").slice(0,240),category:b.category??null,importance:b.importance??null,confidence:b.confidence??null,source:b.source??null,similarity:y(b.similarity),rrfRaw:y(b.rrf_raw),activation:y(b.activation),accessCount:b.access_count??null,lastAccessedAt:b.lastAccessedAt??null,finalScore:y(b.final_score),rrfScore:y(b.rrfScore),coRetrievalBoost:y(b.coRetrievalBoost)})),x=(p.chunks||[]).map((b,A)=>({rank:A+1,id:b.id??null,sectionHeading:b.sectionHeading??null,content:String(b.content||"").slice(0,200),similarity:y(b.similarity),rrfScore:y(b.rrfScore)}));return{query:e,namespaces:t,durationMs:g,params:{limit:r,minConfidence:n,useGraphRequested:i,expandRequested:o,routeEnabled:s},routing:a?{intent:a.intent??null,reasoning:a.reasoning??null,useGraph:a.useGraph??null,expand:a.expand??null,limit:a.limit??null,categories:a.categories??null,pointInTime:a.pointInTime??null}:null,strategy:c?"entity-first":"standard",matchedEntity:c?{id:c.id,name:c.name,type:c.entityType,aliases:c.aliases||[]}:null,podScope:{requested:l,resolvedIds:d},floor:m?{applied:!0,threshold:m.threshold,dropped:m.dropped,kept:m.kept,note:"precision-first: facts below cosine floor dropped from injection"}:{applied:!1},ranking:{model:"RRF(vector\xD71.0 + keyword\xD70.7) \xD7 softplus(ACT-R activation) \xD7 importance \xD7 confidence",facts:w,chunks:x},synthesized:p.synthesized||null,relatedEntities:p.relatedEntities||[],reinforced:{factIds:u,note:"access_count bumped + Hebbian co-retrieval edges strengthened (off hot path)"}}}function Ky(e){let t=String(e||"").trim();return t?!/^[*%_?\s]+$/.test(t):!1}function $R(){return{facts:[],chunks:[],matchedEntity:null,relatedEntities:[]}}async function OR(e,{facts:t,chunks:r}){let n=[];if(t.slice(0,10).forEach((s,a)=>{n.push(`[F${a+1}] (${s.category}) ${s.content}`)}),r.length&&r.slice(0,15).forEach((s,a)=>{let c=(s.content||"").replace(/\s+/g," ").trim();c&&n.push(`[C${a+1}] ${c.slice(0,2e3)}`)}),!n.length)return"No retrieved evidence \u2014 nothing to synthesize.";let i=`You are answering a question from a personal-memory system.
497
+ Respond with ONLY a JSON object: { "intent": "preference|factual|entity_lookup|exploratory|temporal", "categories": [...], "entities": [...], "expand": bool, "pointInTime": null or "YYYY-MM-DD", "reasoning": "..." }`;try{let o=await ze(i,{model:_.llm.extractionModel,caller:"query-router"});if(!o||!_D.includes(o.intent)){let c=iE("factual",{});return su.set(t,c),c}let s=oE[o.intent],a={intent:o.intent,categories:Array.isArray(o.categories)&&o.categories.length?o.categories:s.categories,entities:Array.isArray(o.entities)?o.entities:[],expand:typeof o.expand=="boolean"?o.expand:s.expand,useGraph:s.useGraph,limit:s.limit,pointInTime:o.pointInTime||null,reasoning:o.reasoning||""};return su.set(t,a),a}catch(o){return console.error("[query-router] Failed:",o.message),iE("factual",{reasoning:`Fallback \u2014 ${o.message}`})}}function iE(e,t={}){let r=oE[e];return{intent:e,categories:r.categories,entities:[],expand:r.expand,useGraph:r.useGraph,limit:r.limit,pointInTime:null,reasoning:"",...t}}var ED,su,_D,oE,aE=f(()=>{Xe();ou();$();M();ED=wD(Ce,"query-router.md"),su=new Xn({maxSize:200,ttlMs:600*1e3}),_D=["preference","factual","entity_lookup","exploratory","temporal"],oE={preference:{categories:["preference","opinion","personal"],expand:!1,useGraph:!1,limit:null},factual:{categories:[],expand:!1,useGraph:!1,limit:null},entity_lookup:{categories:[],expand:!1,useGraph:!0,limit:null},exploratory:{categories:[],expand:!0,useGraph:!0,limit:15},temporal:{categories:[],expand:!1,useGraph:!1,limit:null}}});var cu={};v(cu,{isSearchableQuery:()=>cE,search:()=>ID});async function ID(e,{namespaces:t,limit:r=5,minConfidence:n="medium",useGraph:i=!1,includeChunks:o=!1,pointInTime:s,expand:a=!1,route:c=!0,categories:l,synthesize:d=_.search.synthesize,podScope:p=null,applyFloor:u=!0,ctx:m={}}={}){let h=Date.now();if(!cE(e)){let x=AD();return x._trace={query:e,searchable:!1,stages:[{stage:"guard",note:"query is not searchable (empty or wildcard-only)"}],durationMs:Date.now()-h},x}d&&(o=!0);let y=null;c&&(y=await sE(e),i=i||y.useGraph,a=a||y.expand,r=y.limit||r,s=s||y.pointInTime,l=l||(y.categories.length?y.categories:void 0));let w=await RD(e,t),b=await OD(p,{...m,namespace:t?.[0]}),S;w?S=await $D(w,e,{namespaces:t,limit:r,minConfidence:n,includeChunks:o,pointInTime:s,categories:l,podIds:b}):S=await LD(e,{namespaces:t,limit:r,minConfidence:n,useGraph:i,includeChunks:o,pointInTime:s,expand:a,categories:l,podIds:b});let T=null;if(u&&Array.isArray(S.facts)&&S.facts.length){let x=_.memory.injectionFloor,C=S.facts.length;S.facts=S.facts.filter(R=>{if(R.source==="entity")return!0;let F=Number(R.similarity);return Number.isFinite(F)?F>=x:!0}),T={threshold:x,dropped:C-S.facts.length,kept:S.facts.length}}let I=S.facts.map(x=>x.id).filter(Boolean);if(wl(I).catch(x=>console.error("[access-tracking]",x.message)),tu(I.slice(0,8)).catch(x=>console.error("[hebbian]",x.message)),_.hebbian.entity.enabled&&I.length>=2&&CD(I).catch(x=>console.error("[hebbian-entity]",x.message)),d)try{S.synthesized=await TD(e,S)}catch(x){console.error("[synthesizer] failed:",x.message),S.synthesized=null}return S._trace=vD({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:i,expand:a,route:c,routing:y,matchedEntity:w,podScope:p,podIds:b,result:S,factIds:I,floored:T,durationMs:Date.now()-h}),S}function vD({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:i,expand:o,route:s,routing:a,matchedEntity:c,podScope:l,podIds:d,result:p,factIds:u,floored:m,durationMs:h}){let y=S=>{let T=Number(S);return Number.isFinite(T)?Math.round(T*1e4)/1e4:null},w=(p.facts||[]).map((S,T)=>({rank:T+1,id:S.id??null,content:String(S.content||"").slice(0,240),category:S.category??null,importance:S.importance??null,confidence:S.confidence??null,source:S.source??null,similarity:y(S.similarity),rrfRaw:y(S.rrf_raw),activation:y(S.activation),accessCount:S.access_count??null,lastAccessedAt:S.lastAccessedAt??null,finalScore:y(S.final_score),rrfScore:y(S.rrfScore),coRetrievalBoost:y(S.coRetrievalBoost)})),b=(p.chunks||[]).map((S,T)=>({rank:T+1,id:S.id??null,sectionHeading:S.sectionHeading??null,content:String(S.content||"").slice(0,200),similarity:y(S.similarity),rrfScore:y(S.rrfScore)}));return{query:e,namespaces:t,durationMs:h,params:{limit:r,minConfidence:n,useGraphRequested:i,expandRequested:o,routeEnabled:s},routing:a?{intent:a.intent??null,reasoning:a.reasoning??null,useGraph:a.useGraph??null,expand:a.expand??null,limit:a.limit??null,categories:a.categories??null,pointInTime:a.pointInTime??null}:null,strategy:c?"entity-first":"standard",matchedEntity:c?{id:c.id,name:c.name,type:c.entityType,aliases:c.aliases||[]}:null,podScope:{requested:l,resolvedIds:d},floor:m?{applied:!0,threshold:m.threshold,dropped:m.dropped,kept:m.kept,note:"precision-first: facts below cosine floor dropped from injection"}:{applied:!1},ranking:{model:"RRF(vector\xD71.0 + keyword\xD70.7) \xD7 softplus(ACT-R activation) \xD7 importance \xD7 confidence",facts:w,chunks:b},synthesized:p.synthesized||null,relatedEntities:p.relatedEntities||[],reinforced:{factIds:u,note:"access_count bumped + Hebbian co-retrieval edges strengthened (off hot path)"}}}function cE(e){let t=String(e||"").trim();return t?!/^[*%_?\s]+$/.test(t):!1}function AD(){return{facts:[],chunks:[],matchedEntity:null,relatedEntities:[]}}async function TD(e,{facts:t,chunks:r}){let n=[];if(t.slice(0,10).forEach((s,a)=>{n.push(`[F${a+1}] (${s.category}) ${s.content}`)}),r.length&&r.slice(0,15).forEach((s,a)=>{let c=(s.content||"").replace(/\s+/g," ").trim();c&&n.push(`[C${a+1}] ${c.slice(0,2e3)}`)}),!n.length)return"No retrieved evidence \u2014 nothing to synthesize.";let i=`You are answering a question from a personal-memory system.
497
498
  Each retrieved item is labeled [F#] (a stored fact) or [C#] (a raw conversation chunk
498
499
  that may include user/assistant turns and dates).
499
500
 
@@ -508,7 +509,7 @@ Instructions:
508
509
  - Reason step-by-step internally for temporal questions ("first", "before", "after", "how many days") \u2014 compare the dates explicitly.
509
510
  - Cite items in square brackets where they directly support the answer, e.g. [C2].
510
511
  - Only respond "Not in retrieved memory." if you genuinely cannot find the information after carefully reading every chunk. Prefer a careful answer with citation over refusal.
511
- - Plain text only, no headers. Direct answer first, then a short justification if needed. 1-4 sentences total.`,o=E.search.synthesizeModel||E.llm.extractionModel||void 0;return mt(i,{model:o,caller:"synthesizer"})}async function RR(e){let t=await xn(e.slice(0,8)),r=[];for(let i of t.values())for(let o of i)r.push(o);let n=[...new Set(r)].slice(0,E.hebbian.entity.maxWriteEntities);await nl(n)}async function NR(e,t={}){if(e==null||e==="global")return null;if(e==="auto"){let n=(await yi(t)).flatMap(o=>o.scope).filter(o=>typeof o=="string"&&!o.startsWith("__virtual:"));if(n.length===0){if(process.env.SIGIL_SCOPE_GRACE!=="false"){let o=_("pod");t.namespace&&(o=o.where({namespace:t.namespace}));let[{count:s}]=await o.count({count:"*"});if(Number(s)===0)return null}return[]}return(await _("pod").whereIn("uid",n).select("id")).map(o=>o.id)}if(Array.isArray(e)){if(e.length===0)return[];if(e.every(i=>typeof i=="number"))return e;let r=e.filter(i=>typeof i=="string");return r.length===0?[]:(await _("pod").where(function(){this.whereIn("uid",r).orWhereIn("name",r)}).select("id")).map(i=>i.id)}return null}async function DR(e,t){if(e.length<2||e.length>AR)return null;let r=t[0]||E.defaults.namespace,n=await lr(e,r);return n||(await xc(e,{namespace:r,limit:1}))[0]||null}async function LR(e,t,{namespaces:r,limit:n,minConfidence:i,includeChunks:o,pointInTime:s,categories:a,podIds:c}){let l=kR(t,e),d=await ft(l,{inputType:"query"}),[p,u,...m]=await Promise.all([$c(e.id,{limit:n}),fi(e.id,{limit:15}),...l.map((S,C)=>qy(S,{queryEmbedding:d[C],namespaces:r,limit:n,minConfidence:i,includeChunks:o,pointInTime:s,categories:a,podIds:c}))]),g=p.map(S=>({...S,source:"entity"})),y=ts(m.map(S=>S.facts),n*2),w=new Set(g.map(S=>S.id)),x=y.filter(S=>!w.has(S.id)).map(S=>({...S,source:"search"})),b=[...g,...x].slice(0,n);if(E.hebbian.entity.enabled&&b.length>=2)try{b=await Yy(b,{seedEntityIds:[e.id]})}catch(S){console.error("[hebbian-entity-boost]",S.message)}let A=o?ts(m.map(S=>S.chunks||[]),n):[],v=u.map(S=>({id:S.entityId,name:S.name,type:S.entityType,relation:S.relationType,direction:S.direction,mentions:S.mentionCount}));return{facts:b,chunks:A,matchedEntity:{id:e.id,name:e.name,type:e.entityType,mentions:e.mentionCount,description:e.description||null,aliases:e.aliases||[]},relatedEntities:v}}function kR(e,t){let r=[e],n=(t.aliases||[]).filter(s=>typeof s=="string"&&s.trim());if(!n.length)return r;let i=(t.name||"").trim(),o=new Set([e.toLowerCase()]);for(let s of n){let a=e;if(i){let c=new RegExp(`\\b${PR(i)}\\b`,"gi");if(c.test(a))a=a.replace(c,s);else{o.has(s.toLowerCase())||(r.push(s),o.add(s.toLowerCase()));continue}}o.has(a.toLowerCase())||(r.push(a),o.add(a.toLowerCase()))}return r}function PR(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function MR(e,{namespaces:t,limit:r,minConfidence:n,useGraph:i,includeChunks:o,pointInTime:s,expand:a=!1,categories:c,podIds:l}){let d=a?await By(e):[e],p=await ft(d,{inputType:"query"}),u=await Promise.all(d.map((y,w)=>qy(y,{queryEmbedding:p[w],namespaces:t,limit:r,minConfidence:n,includeChunks:o,pointInTime:s,categories:c,podIds:l}))),m=ts(u.map(y=>y.facts),r);if(m=m.map(y=>({...y,source:"search"})),E.hebbian.entity.enabled&&m.length>=2)try{m=await Yy(m)}catch(y){console.error("[hebbian-entity-boost]",y.message)}if(i&&m.length)try{let y=await ky(m.slice(0,5));if(y.length){let w=await FR(y.map(b=>b.id)),x=await Py(w,{limit:5});m=My(m,x,w,r)}}catch(y){console.error("[graph-enhancement] Failed:",y.message)}let g=o?ts(u.map(y=>y.chunks),r):[];return{facts:m,chunks:g,matchedEntity:null,relatedEntities:[]}}async function Yy(e,t={}){let r=e.map(u=>u.id).filter(Boolean);if(r.length<2)return e;let n=await xn(r);if(!n.size)return e;let i,o;if(t.seedEntityIds?.length)i=t.seedEntityIds,o=e;else{let u=t.seedFactCount??3,m=[];for(let g of e.slice(0,u)){let y=n.get(g.id)||[];for(let w of y)m.push(w)}i=m,o=e.slice(u)}if(!i.length)return e;let s=new Set;for(let u of o){let m=n.get(u.id)||[];for(let g of m)s.add(g)}if(!s.size)return e;let a=await il([...new Set(i)],[...s]);if(!a.size)return e;let c=new Map,l=0;for(let u of e){let m=n.get(u.id)||[],g=0;for(let y of m){let w=a.get(y)||0;w>g&&(g=w)}c.set(u.id,g),g>l&&(l=g)}if(l===0)return e;let d=E.hebbian.entity.rrfWeight;return e.map(u=>{let m=(c.get(u.id)||0)/l,g=(u.rrfScore||0)+d*m;return{...u,rrfScore:Math.round(g*100)/100,coRetrievalBoost:Math.round(m*100)/100}}).sort((u,m)=>(m.rrfScore||0)-(u.rrfScore||0))}async function FR(e){let t=E.hebbian.entity.expandPerSeed;if(!t||!e.length)return e;let{getCoRetrievedEntities:r}=await Promise.resolve().then(()=>(_i(),Zo)),n=await Promise.all(e.map(o=>r(o,{limit:t}).catch(()=>[]))),i=new Set(e);for(let o of n)for(let s of o)i.add(Number(s.partnerId));return[...i]}function ts(e,t){let r={},n={};for(let s of e)for(let[a,c]of s.entries())n[c.id]=c,r[c.id]=(r[c.id]||0)+1/(al+a+1);let i=Object.entries(r).sort(([,s],[,a])=>a-s),o=i.length?i[0][1]:1;return i.slice(0,t).map(([s,a])=>({...n[s],rrfScore:Math.round(a/o*100)/100}))}async function qy(e,{queryEmbedding:t,namespaces:r,limit:n,minConfidence:i,includeChunks:o=!1,pointInTime:s,categories:a,podIds:c}){let l=t||await or(e,{inputType:"query"}),d=Dy(e,l,{namespaces:r,limit:n,minConfidence:i,pointInTime:s,categories:a,podIds:c}),p=o?[Cy(l,{namespaces:r,limit:n}),Oy(e,{namespaces:r,limit:n})]:[],[u,...m]=await Promise.all([d,...p]),g=o&&m.length===2?HR(m[0],m[1],n):[];return{facts:u,chunks:g}}function HR(e,t,r){let n={},i={...Sa(e,"id"),...Sa(t,"id")};e.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+vR/(al+c+1)}),t.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+IR/(al+c+1)});let o=Object.entries(n).sort(([a,c],[l,d])=>{if(c!==d)return d-c;let p=i[a]?.importance==="vital"?1:0;return(i[l]?.importance==="vital"?1:0)-p}),s=o.length?o[0][1]:1;return o.slice(0,r).map(([a,c])=>({...i[a],rrfScore:Math.round(c/s*100)/100}))}var al,vR,IR,AR,ll=f(()=>{to();Ot();R();Ze();gr();lt();rl();_i();fr();gr();$y();Ry();Ly();Fy();Uy();Vy();Ve();wi();In();D();al=20,vR=1,IR=.7,AR=60});function Jy(e){e.register("search",async t=>{let r=(t.query??"").trim();if(!r){let C=new Error("search: params.query is required");throw C.code="invalid_params",C}let{search:n}=await Promise.resolve().then(()=>(ll(),cl)),{default:i}=await Promise.resolve().then(()=>(R(),X)),o=Array.isArray(t.namespaces)&&t.namespaces.length?t.namespaces:[i.defaults.namespace],s=Number.isFinite(t.limit)?t.limit:10,a=!!t.useGraph,c=!!t.route,l=!!t.synthesize,d=!!t.includeChunks||l,p=t.minConfidence,u=t.pointInTime?new Date(t.pointInTime):void 0,m=t.podScope??"auto",g=t.applyFloor??!1,y={cwd:t.cwd||null,sessionId:t.sessionId||null},w=await n(r,{namespaces:o,limit:s,useGraph:a,route:c,synthesize:l,includeChunks:d,minConfidence:p,pointInTime:u,podScope:m,applyFloor:g,ctx:y}),x={query:r,namespaces:o,facts:(w.facts||[]).map(BR),chunks:(w.chunks||[]).map(UR),synthesized:w.synthesized||null,matchedEntity:w.matchedEntity||null,relatedEntities:w.relatedEntities||[]},b=w._trace||{},A=r.length>80?r.slice(0,80)+"\u2026":r,v=b.strategy==="entity-first"?" \xB7 entity-first":"",{recordTrace:S}=await Promise.resolve().then(()=>(Wt(),jt));return S({kind:"search",summary:`"${A}" \u2192 ${x.facts.length} facts, ${x.chunks.length} chunks${v}`,namespace:o[0]||null,durationMs:b.durationMs??null,detail:b}).catch(()=>{}),x})}function BR(e){return{id:e.id??null,uid:e.uid??null,content:e.content,category:e.category??null,confidence:e.confidence??null,importance:e.importance??null,similarity:rs(e.similarity),rrfScore:rs(e.rrfScore),agent:e.createdByAgent??null,device:e.createdByDeviceId??null,sourceDocumentIds:Array.isArray(e.sourceDocumentIds)?e.sourceDocumentIds:[],sourceSection:e.sourceSection??null}}function UR(e){return{id:e.id??null,content:e.content,sectionHeading:e.sectionHeading??null,similarity:rs(e.similarity),rrfScore:rs(e.rrfScore)}}function rs(e){let t=Number(e);return Number.isFinite(t)?t:null}var zy=f(()=>{});function Xy(e){e.register("status",async t=>{let{getStats:r}=await Promise.resolve().then(()=>(lo(),co)),{getEntityCount:n}=await Promise.resolve().then(()=>(Ze(),pr)),{getRelationCount:i}=await Promise.resolve().then(()=>(fr(),Vo)),{getFactCount:o,getHotFacts:s}=await Promise.resolve().then(()=>(lt(),Ut)),{getEntityHebbianStats:a}=await Promise.resolve().then(()=>(_i(),Zo)),{default:c}=await Promise.resolve().then(()=>(D(),G)),l=t.namespace||null,d=Number.isFinite(t.hotFactsLimit)?t.hotFactsLimit:5,p=!0,u=null;try{await c.raw("SELECT 1")}catch(O){p=!1,u=O.message}try{let{setDbHealth:O}=await Promise.resolve().then(()=>(Kn(),da));O({healthy:p,error:u,checkedAt:Date.now()})}catch{}if(!p)return{namespace:l,db:{healthy:!1,error:u},documents:0,chunks:0,facts:0,entities:{documents:0,people:0,topics:0},relations:0,podsByType:{},hotFacts:[],hebbian:null};let[m,g,y,w,x,b,A,v,S]=await Promise.all([r(l),o(l),n("document"),n("person"),n("topic"),i(),c("pod").where({status:"active"}).select("podType"),a({topN:3}).catch(()=>null),s(l,{limit:d}).catch(()=>[])]),C=A.reduce((O,M)=>(O[M.podType]=(O[M.podType]||0)+1,O),{});return{namespace:l,db:{healthy:!0,error:null},documents:m.documentCount,chunks:m.totalChunks,facts:g,entities:{documents:y,people:w,topics:x},relations:b,podsByType:C,hotFacts:(S||[]).map(O=>({id:O.id??null,content:O.content,accessCount:O.accessCount??0})),hebbian:v?{edgeCount:v.edgeCount,avgStrength:v.avgStrength??0,maxStrength:v.maxStrength??0,topPairs:(v.topPairs||[]).map(O=>({a:O.aName,b:O.bName,decayed:Number(O.decayed)||0}))}:null}})}var Zy=f(()=>{});function Qy(e){e.register("searchEntity",async t=>{let{searchByName:r,listByType:n}=await Promise.resolve().then(()=>(Ze(),pr)),{query:i,entityType:o,limit:s=10,namespace:a}=t;if(!i&&!o){let l=new Error("searchEntity: provide query or entityType");throw l.code="invalid_params",l}let c=i?await r(i,{entityType:o,namespace:a,limit:s}):await n(o,{namespace:a,limit:s});return{query:i||null,entityType:o||null,entities:c.map(l=>({id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0}))}})}var ew=f(()=>{});var rw={};T(rw,{findEntitiesByType:()=>WR,findPath:()=>jR,findRelated:()=>tw,getEntityNeighborhood:()=>GR});async function tw(e,{maxDepth:t=2,relationType:r,limit:n=30}={}){let i=Math.min(Math.max(t,1),6),o=[e,e],s=r?"AND r.relation_type = ?":"";r&&o.push(r);let a=r?"AND r.relation_type = ?":"";r&&o.push(r),o.push(i,n);let{rows:c}=await _.raw(`
512
+ - Plain text only, no headers. Direct answer first, then a short justification if needed. 1-4 sentences total.`,o=_.search.synthesizeModel||_.llm.extractionModel||void 0;return xt(i,{model:o,caller:"synthesizer"})}async function CD(e){let t=await Vn(e.slice(0,8)),r=[];for(let i of t.values())for(let o of i)r.push(o);let n=[...new Set(r)].slice(0,_.hebbian.entity.maxWriteEntities);await nu(n)}async function OD(e,t={}){if(e==null||e==="global")return null;if(e==="auto"){let n=(await Yi(t)).flatMap(o=>o.scope).filter(o=>typeof o=="string"&&!o.startsWith("__virtual:"));if(n.length===0){if(process.env.SIGIL_SCOPE_GRACE!=="false"){let o=E("pod");t.namespace&&(o=o.where({namespace:t.namespace}));let[{count:s}]=await o.count({count:"*"});if(Number(s)===0)return null}return[]}return(await E("pod").whereIn("uid",n).select("id")).map(o=>o.id)}if(Array.isArray(e)){if(e.length===0)return[];if(e.every(i=>typeof i=="number"))return e;let r=e.filter(i=>typeof i=="string");return r.length===0?[]:(await E("pod").where(function(){this.whereIn("uid",r).orWhereIn("name",r)}).select("id")).map(i=>i.id)}return null}async function RD(e,t){if(e.length<2||e.length>xD)return null;let r=t[0]||_.defaults.namespace,n=await Ar(e,r);return n||(await bl(e,{namespace:r,limit:1}))[0]||null}async function $D(e,t,{namespaces:r,limit:n,minConfidence:i,includeChunks:o,pointInTime:s,categories:a,podIds:c}){let l=ND(t,e),d=await bt(l,{inputType:"query"}),[p,u,...m]=await Promise.all([Ol(e.id,{limit:n}),ji(e.id,{limit:15}),...l.map((x,C)=>uE(x,{queryEmbedding:d[C],namespaces:r,limit:n,minConfidence:i,includeChunks:o,pointInTime:s,categories:a,podIds:c}))]),h=p.map(x=>({...x,source:"entity"})),y=Ws(m.map(x=>x.facts),n*2),w=new Set(h.map(x=>x.id)),b=y.filter(x=>!w.has(x.id)).map(x=>({...x,source:"search"})),S=[...h,...b].slice(0,n);if(_.hebbian.entity.enabled&&S.length>=2)try{S=await lE(S,{seedEntityIds:[e.id]})}catch(x){console.error("[hebbian-entity-boost]",x.message)}let T=o?Ws(m.map(x=>x.chunks||[]),n):[],I=u.map(x=>({id:x.entityId,name:x.name,type:x.entityType,relation:x.relationType,direction:x.direction,mentions:x.mentionCount}));return{facts:S,chunks:T,matchedEntity:{id:e.id,name:e.name,type:e.entityType,mentions:e.mentionCount,description:e.description||null,aliases:e.aliases||[]},relatedEntities:I}}function ND(e,t){let r=[e],n=(t.aliases||[]).filter(s=>typeof s=="string"&&s.trim());if(!n.length)return r;let i=(t.name||"").trim(),o=new Set([e.toLowerCase()]);for(let s of n){let a=e;if(i){let c=new RegExp(`\\b${DD(i)}\\b`,"gi");if(c.test(a))a=a.replace(c,s);else{o.has(s.toLowerCase())||(r.push(s),o.add(s.toLowerCase()));continue}}o.has(a.toLowerCase())||(r.push(a),o.add(a.toLowerCase()))}return r}function DD(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function LD(e,{namespaces:t,limit:r,minConfidence:n,useGraph:i,includeChunks:o,pointInTime:s,expand:a=!1,categories:c,podIds:l}){let d=a?await rE(e):[e],p=await bt(d,{inputType:"query"}),u=await Promise.all(d.map((y,w)=>uE(y,{queryEmbedding:p[w],namespaces:t,limit:r,minConfidence:n,includeChunks:o,pointInTime:s,categories:c,podIds:l}))),m=Ws(u.map(y=>y.facts),r);if(m=m.map(y=>({...y,source:"search"})),_.hebbian.entity.enabled&&m.length>=2)try{m=await lE(m)}catch(y){console.error("[hebbian-entity-boost]",y.message)}if(i&&m.length)try{let y=await Xw(m.slice(0,5));if(y.length){let w=await kD(y.map(S=>S.id)),b=await Zw(w,{limit:5});m=Qw(m,b,w,r)}}catch(y){console.error("[graph-enhancement] Failed:",y.message)}let h=o?Ws(u.map(y=>y.chunks),r):[];return{facts:m,chunks:h,matchedEntity:null,relatedEntities:[]}}async function lE(e,t={}){let r=e.map(u=>u.id).filter(Boolean);if(r.length<2)return e;let n=await Vn(r);if(!n.size)return e;let i,o;if(t.seedEntityIds?.length)i=t.seedEntityIds,o=e;else{let u=t.seedFactCount??3,m=[];for(let h of e.slice(0,u)){let y=n.get(h.id)||[];for(let w of y)m.push(w)}i=m,o=e.slice(u)}if(!i.length)return e;let s=new Set;for(let u of o){let m=n.get(u.id)||[];for(let h of m)s.add(h)}if(!s.size)return e;let a=await iu([...new Set(i)],[...s]);if(!a.size)return e;let c=new Map,l=0;for(let u of e){let m=n.get(u.id)||[],h=0;for(let y of m){let w=a.get(y)||0;w>h&&(h=w)}c.set(u.id,h),h>l&&(l=h)}if(l===0)return e;let d=_.hebbian.entity.rrfWeight;return e.map(u=>{let m=(c.get(u.id)||0)/l,h=(u.rrfScore||0)+d*m;return{...u,rrfScore:Math.round(h*100)/100,coRetrievalBoost:Math.round(m*100)/100}}).sort((u,m)=>(m.rrfScore||0)-(u.rrfScore||0))}async function kD(e){let t=_.hebbian.entity.expandPerSeed;if(!t||!e.length)return e;let{getCoRetrievedEntities:r}=await Promise.resolve().then(()=>(Ji(),Us)),n=await Promise.all(e.map(o=>r(o,{limit:t}).catch(()=>[]))),i=new Set(e);for(let o of n)for(let s of o)i.add(Number(s.partnerId));return[...i]}function Ws(e,t){let r={},n={};for(let s of e)for(let[a,c]of s.entries())n[c.id]=c,r[c.id]=(r[c.id]||0)+1/(au+a+1);let i=Object.entries(r).sort(([,s],[,a])=>a-s),o=i.length?i[0][1]:1;return i.slice(0,t).map(([s,a])=>({...n[s],rrfScore:Math.round(a/o*100)/100}))}async function uE(e,{queryEmbedding:t,namespaces:r,limit:n,minConfidence:i,includeChunks:o=!1,pointInTime:s,categories:a,podIds:c}){let l=t||await br(e,{inputType:"query"}),d=Jw(e,l,{namespaces:r,limit:n,minConfidence:i,pointInTime:s,categories:a,podIds:c}),p=o?[Ww(l,{namespaces:r,limit:n}),Kw(e,{namespaces:r,limit:n})]:[],[u,...m]=await Promise.all([d,...p]),h=o&&m.length===2?PD(m[0],m[1],n):[];return{facts:u,chunks:h}}function PD(e,t,r){let n={},i={...xc(e,"id"),...xc(t,"id")};e.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+SD/(au+c+1)}),t.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+bD/(au+c+1)});let o=Object.entries(n).sort(([a,c],[l,d])=>{if(c!==d)return d-c;let p=i[a]?.importance==="vital"?1:0;return(i[l]?.importance==="vital"?1:0)-p}),s=o.length?o[0][1]:1;return o.slice(0,r).map(([a,c])=>({...i[a],rrfScore:Math.round(c/s*100)/100}))}var au,SD,bD,xD,lu=f(()=>{Ko();jt();$();it();Dr();ht();ru();Ji();Rr();Dr();Vw();Yw();zw();eE();nE();aE();Xe();qi();qn();N();au=20,SD=1,bD=.7,xD=60});function dE(e){e.register("search",async t=>{let r=(t.query??"").trim();if(!r){let C=new Error("search: params.query is required");throw C.code="invalid_params",C}let{search:n}=await Promise.resolve().then(()=>(lu(),cu)),{default:i}=await Promise.resolve().then(()=>($(),re)),o=Array.isArray(t.namespaces)&&t.namespaces.length?t.namespaces:[i.defaults.namespace],s=Number.isFinite(t.limit)?t.limit:10,a=!!t.useGraph,c=!!t.route,l=!!t.synthesize,d=!!t.includeChunks||l,p=t.minConfidence,u=t.pointInTime?new Date(t.pointInTime):void 0,m=t.podScope??"auto",h=t.applyFloor??!1,y={cwd:t.cwd||null,sessionId:t.sessionId||null},w=await n(r,{namespaces:o,limit:s,useGraph:a,route:c,synthesize:l,includeChunks:d,minConfidence:p,pointInTime:u,podScope:m,applyFloor:h,ctx:y}),b={query:r,namespaces:o,facts:(w.facts||[]).map(MD),chunks:(w.chunks||[]).map(FD),synthesized:w.synthesized||null,matchedEntity:w.matchedEntity||null,relatedEntities:w.relatedEntities||[]},S=w._trace||{},T=r.length>80?r.slice(0,80)+"\u2026":r,I=S.strategy==="entity-first"?" \xB7 entity-first":"",{recordTrace:x}=await Promise.resolve().then(()=>(nr(),rr));return x({kind:"search",summary:`"${T}" \u2192 ${b.facts.length} facts, ${b.chunks.length} chunks${I}`,namespace:o[0]||null,durationMs:S.durationMs??null,detail:S}).catch(()=>{}),b})}function MD(e){return{id:e.id??null,uid:e.uid??null,content:e.content,category:e.category??null,confidence:e.confidence??null,importance:e.importance??null,similarity:Vs(e.similarity),rrfScore:Vs(e.rrfScore),agent:e.createdByAgent??null,device:e.createdByDeviceId??null,sourceDocumentIds:Array.isArray(e.sourceDocumentIds)?e.sourceDocumentIds:[],sourceSection:e.sourceSection??null}}function FD(e){return{id:e.id??null,content:e.content,sectionHeading:e.sectionHeading??null,similarity:Vs(e.similarity),rrfScore:Vs(e.rrfScore)}}function Vs(e){let t=Number(e);return Number.isFinite(t)?t:null}var pE=f(()=>{});function fE(e){e.register("status",async t=>{let{getStats:r}=await Promise.resolve().then(()=>(Qo(),Zo)),{getEntityCount:n}=await Promise.resolve().then(()=>(it(),Or)),{getRelationCount:i}=await Promise.resolve().then(()=>(Rr(),Ls)),{getFactCount:o,getHotFacts:s}=await Promise.resolve().then(()=>(ht(),er)),{getEntityHebbianStats:a}=await Promise.resolve().then(()=>(Ji(),Us)),{default:c}=await Promise.resolve().then(()=>(N(),j)),l=t.namespace||null,d=Number.isFinite(t.hotFactsLimit)?t.hotFactsLimit:5,p=!0,u=null;try{await c.raw("SELECT 1")}catch(R){p=!1,u=R.message}try{let{setDbHealth:R}=await Promise.resolve().then(()=>(fn(),pc));R({healthy:p,error:u,checkedAt:Date.now()})}catch{}if(!p)return{namespace:l,db:{healthy:!1,error:u},documents:0,chunks:0,facts:0,entities:{documents:0,people:0,topics:0},relations:0,podsByType:{},hotFacts:[],hebbian:null};let[m,h,y,w,b,S,T,I,x]=await Promise.all([r(l),o(l),n("document"),n("person"),n("topic"),i(),c("pod").where({status:"active"}).select("podType"),a({topN:3}).catch(()=>null),s(l,{limit:d}).catch(()=>[])]),C=T.reduce((R,F)=>(R[F.podType]=(R[F.podType]||0)+1,R),{});return{namespace:l,db:{healthy:!0,error:null},documents:m.documentCount,chunks:m.totalChunks,facts:h,entities:{documents:y,people:w,topics:b},relations:S,podsByType:C,hotFacts:(x||[]).map(R=>({id:R.id??null,content:R.content,accessCount:R.accessCount??0})),hebbian:I?{edgeCount:I.edgeCount,avgStrength:I.avgStrength??0,maxStrength:I.maxStrength??0,topPairs:(I.topPairs||[]).map(R=>({a:R.aName,b:R.bName,decayed:Number(R.decayed)||0}))}:null}})}var mE=f(()=>{});function hE(e){e.register("searchEntity",async t=>{let{searchByName:r,listByType:n}=await Promise.resolve().then(()=>(it(),Or)),{query:i,entityType:o,limit:s=10,namespace:a}=t;if(!i&&!o){let l=new Error("searchEntity: provide query or entityType");throw l.code="invalid_params",l}let c=i?await r(i,{entityType:o,namespace:a,limit:s}):await n(o,{namespace:a,limit:s});return{query:i||null,entityType:o||null,entities:c.map(l=>({id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0}))}})}var gE=f(()=>{});var wE={};v(wE,{findEntitiesByType:()=>UD,findPath:()=>HD,findRelated:()=>yE,getEntityNeighborhood:()=>BD});async function yE(e,{maxDepth:t=2,relationType:r,limit:n=30}={}){let i=Math.min(Math.max(t,1),6),o=[e,e],s=r?"AND r.relation_type = ?":"";r&&o.push(r);let a=r?"AND r.relation_type = ?":"";r&&o.push(r),o.push(i,n);let{rows:c}=await E.raw(`
512
513
  WITH RECURSIVE graph AS (
513
514
  SELECT r.target_id AS entity_id, r.relation_type, r.mention_count,
514
515
  1 AS depth, ARRAY[?::integer] AS path
@@ -537,7 +538,7 @@ Instructions:
537
538
  WHERE e.merged_with IS NULL
538
539
  ORDER BY g.entity_id, g.depth ASC
539
540
  LIMIT ?
540
- `,o);return c}async function GR(e,{depth:t=1,limit:r=50}={}){let n=await Xe(e);if(!n)return null;if(t>1){let o=await tw(e,{maxDepth:t,limit:r});return{entity:n,related:o}}let i=await fi(e,{limit:r});return{entity:n,relations:i}}async function jR(e,t,{maxDepth:r=4}={}){let n=Math.min(Math.max(r,1),6),{rows:i}=await _.raw(`
541
+ `,o);return c}async function BD(e,{depth:t=1,limit:r=50}={}){let n=await nt(e);if(!n)return null;if(t>1){let o=await yE(e,{maxDepth:t,limit:r});return{entity:n,related:o}}let i=await ji(e,{limit:r});return{entity:n,relations:i}}async function HD(e,t,{maxDepth:r=4}={}){let n=Math.min(Math.max(r,1),6),{rows:i}=await E.raw(`
541
542
  WITH RECURSIVE search AS (
542
543
  SELECT r.target_id AS current_id,
543
544
  ARRAY[r.source_id, r.target_id] AS path,
@@ -564,7 +565,7 @@ Instructions:
564
565
  WHERE current_id = ?
565
566
  ORDER BY depth ASC
566
567
  LIMIT 1
567
- `,[e,n,t]);if(!i.length)return null;let{path:o,relationTypes:s,depth:a}=i[0],c=await _("entity").whereIn("id",o).select("id","uid","name","entityType","description"),l=Object.fromEntries(c.map(p=>[p.id,p]));return{path:o.map(p=>l[p]),relationTypes:s,depth:a}}async function WR(e,{namespace:t,sortBy:r="mentionCount",limit:n=50}={}){let i=_("entity").where({entityType:e}).whereNull("mergedWith").orderBy(r,"desc").limit(n);return t&&i.where({namespace:t}),i}var nw=f(()=>{D();Ze();fr()});function iw(e){e.register("traverseGraph",async t=>{let{findById:r}=await Promise.resolve().then(()=>(Ze(),pr)),{getEntityNeighborhood:n,findPath:i,findRelated:o}=await Promise.resolve().then(()=>(nw(),rw)),{startEntityId:s,action:a="neighbors",targetEntityId:c,relationType:l,maxDepth:d=2,limit:p=20}=t;if(!Number.isFinite(s)){let y=new Error("traverseGraph: startEntityId required");throw y.code="invalid_params",y}let u=await r(s);if(!u)return{ok:!1,notFound:!0,startEntityId:s};let m={id:u.id,name:u.name,entityType:u.entityType};if(a==="path"){if(!Number.isFinite(c)){let w=new Error("traverseGraph: targetEntityId required for action=path");throw w.code="invalid_params",w}let y=await i(u.id,c,{maxDepth:Math.min(d,4)});return{action:a,start:m,targetEntityId:c,path:y||null}}if(a==="related"){let y=await o(u.id,{maxDepth:Math.min(d,3),relationType:l,limit:p});return{action:a,start:m,related:y}}let g=await n(u.id,{depth:Math.min(d,3),limit:p});return{action:"neighbors",start:m,relations:g.relations||[],related:g.related||null}})}var ow=f(()=>{});function sw(e){e.register("getFactContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),{findByUid:n}=await Promise.resolve().then(()=>(lt(),Ut)),{getEntitiesForFact:i}=await Promise.resolve().then(()=>(gr(),Oc)),{getRelationsByFact:o}=await Promise.resolve().then(()=>(fr(),Vo)),{uid:s,factId:a}=t;if(!s&&!Number.isFinite(a)){let u=new Error("getFactContext: provide uid or factId");throw u.code="invalid_params",u}let c;if(s?c=await n(s):c=await r("fact").where({id:a}).first(),!c)return{notFound:!0};let[l,d,p]=await Promise.all([i(c.id),o(c.id),c.sourceDocumentIds?.length?r("document").whereIn("id",c.sourceDocumentIds).select("id","title","sourceType"):[]]);return{fact:{id:c.id,uid:c.uid,content:c.content,category:c.category??null,confidence:c.confidence??null,status:c.status??null,sourceSection:c.sourceSection??null},entities:l.map(u=>({id:u.id,name:u.name,entityType:u.entityType})),relations:d,documents:p.map(u=>({id:u.id,title:u.title,sourceType:u.sourceType}))}})}var aw=f(()=>{});function cw(e){e.register("getEntityContext",async t=>{let{findById:r,searchByName:n}=await Promise.resolve().then(()=>(Ze(),pr)),{listRelationsForEntity:i}=await Promise.resolve().then(()=>(fr(),Vo)),{getFactsForEntity:o}=await Promise.resolve().then(()=>(gr(),Oc)),{entityId:s,name:a,namespace:c}=t;if(!Number.isFinite(s)&&!a){let u=new Error("getEntityContext: provide entityId or name");throw u.code="invalid_params",u}let l;if(Number.isFinite(s)?l=await r(s):l=(await n(a,{namespace:c,limit:1}))[0],!l)return{notFound:!0};let[d,p]=await Promise.all([i(l.id,{limit:30}),o(l.id,{limit:10})]);return{entity:{id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0},relations:d,facts:p.map(u=>({id:u.id,content:u.content,category:u.category??null,confidence:u.confidence??null}))}})}var lw=f(()=>{});function uw(e){e.register("getPod",async t=>{let{findByUid:r}=await Promise.resolve().then(()=>(Se(),Te)),{listMembers:n}=await Promise.resolve().then(()=>(hr(),Gt)),{uid:i}=t;if(!i){let l=new Error("getPod: uid required");throw l.code="invalid_params",l}let o=await r(i);if(!o)return{notFound:!0,uid:i};let s=typeof o.attrs=="object"?o.attrs:VR(o.attrs),[a,c]=await Promise.all([n(o.id,{memberType:"fact",limit:20}),n(o.id,{memberType:"document",limit:10})]);return{pod:{id:o.id,uid:o.uid,name:o.name,podType:o.podType,namespace:o.namespace,status:o.status,startedAt:o.startedAt??null,endedAt:o.endedAt??null,entityId:o.entityId??null,connectionId:o.connectionId??null,externalId:o.externalId??null,attrs:s},facts:a.map(l=>({id:l.id,content:l.content,podRole:l.podRole??null})),documents:c.map(l=>({id:l.id,title:l.title??null,sourcePath:l.sourcePath??null}))}})}function VR(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}var dw=f(()=>{});function pw(e){e.register("listPods",async t=>{let{listPods:r}=await Promise.resolve().then(()=>(Se(),Te)),{type:n,namespace:i,status:o="active",limit:s=20}=t;return{pods:(await r({podType:n,namespace:i,status:o,limit:s})).map(c=>({id:c.id,uid:c.uid,name:c.name,podType:c.podType,memberFactCount:c.memberFactCount??0,memberDocCount:c.memberDocCount??0,updatedAt:c.updatedAt??null}))}})}var fw=f(()=>{});var hw={};T(hw,{readSource:()=>ns,readSources:()=>XR});import{readFile as KR,stat as YR}from"node:fs/promises";import{basename as qR,extname as JR,resolve as zR}from"node:path";import*as mw from"node:fs/promises";async function ns(e){let t=zR(e),r=await KR(t,"utf8"),n=qR(t),i=JR(t).toLowerCase();return{content:r,title:n,sourcePath:t,sourceType:"file",contentType:ZR(i),metadata:{filePath:t,fileName:n,extension:i}}}async function XR(e){let t=[];for await(let r of mw.glob(e))(await YR(r)).isFile()&&t.push(await ns(r));return t}function ZR(e){return{".md":"text/markdown",".mdx":"text/markdown",".txt":"text/plain",".html":"text/html",".htm":"text/html",".json":"application/json",".js":"text/javascript",".ts":"text/javascript",".py":"text/x-python"}[e]||"text/plain"}var ul=f(()=>{});var gw={};T(gw,{fetchSource:()=>dl});async function dl(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`);let r=await t.text(),n=t.headers.get("content-type")||"text/plain",i=QR(e);return{content:r,title:i,sourcePath:e,sourceType:"url",contentType:n,metadata:{url:e,fetchedAt:new Date().toISOString()}}}function QR(e){try{let t=new URL(e),n=t.pathname.replace(/\/$/,"").split("/").pop()||t.hostname;return decodeURIComponent(n)}catch{return e}}var pl=f(()=>{});var yw={};T(yw,{resolveSource:()=>tN});import{resolve as eN}from"node:path";async function tN({content:e,url:t,filePath:r,title:n,sourceType:i,sourcePath:o,metadata:s}){if(t)return dl(t);if(r){let a=eN(r),c=process.cwd();if(!a.startsWith(c))throw new Error(`Path traversal denied: ${r} resolves outside working directory`);return ns(a)}return e?{content:e,title:n||"Untitled",sourcePath:o||`raw/${Date.now()}`,sourceType:i||"raw",contentType:"text/plain",metadata:s||{}}:null}var ww=f(()=>{ul();pl()});function _w(e){e.register("ingestDoc",async t=>{let{ingestDocument:r}=await Promise.resolve().then(()=>(Xc(),zc)),{resolveSource:n}=await Promise.resolve().then(()=>(ww(),yw)),{content:i,filePath:o,url:s,title:a,namespace:c,sourceType:l,skipFacts:d,skipEntities:p,metadata:u}=t,m=await n({content:i,filePath:o,url:s,title:a,sourceType:l});if(!m){let b=new Error("ingestDoc: provide content, filePath, or url");throw b.code="invalid_params",b}let g=await r({content:m.content,title:a||m.title,sourcePath:m.sourcePath,sourceType:l||m.sourceType,contentType:m.contentType,namespace:c,metadata:u||m.metadata,skipFacts:d,skipEntities:p}),y={skipped:!!g.skipped,title:g.title??null,documentId:g.documentId??null,chunkCount:g.chunkCount??0,facts:g.facts??null,entities:g.entities??null,output:g.md?.url??null},w=y.facts||{},{recordTrace:x}=await Promise.resolve().then(()=>(Wt(),jt));return x({kind:"ingest",summary:`ingest "${String(y.title||"document").slice(0,60)}" \u2192 ${y.chunkCount} chunks, +${w.added??0} facts${y.skipped?" (skipped)":""}`,namespace:c||null,detail:{op:"ingestDoc",title:y.title,documentId:y.documentId,skipped:y.skipped,route:g.route??null,chunkCount:y.chunkCount,counts:{added:w.added??0,updated:w.updated??0,skipped:w.skipped??0,contradicted:w.contradicted??0,total:w.total??0},verdicts:w.verdicts||[],entities:y.entities?{entityCount:y.entities.entityCount,relationCount:y.entities.relationCount,topics:y.entities.topics||[]}:null}}).catch(()=>{}),y})}var Ew=f(()=>{});function bw(e){e.register("listFacts",async t=>{let{listFacts:r}=await Promise.resolve().then(()=>(lt(),Ut)),{default:n}=await Promise.resolve().then(()=>(R(),X)),i=t.namespace||n.defaults.namespace,o=t.category||void 0,s=Number.isFinite(t.limit)?t.limit:20,a=await r({namespace:i,category:o,limit:s});return{namespace:i,category:o||null,facts:a.map(c=>({id:c.id,uid:c.uid,content:c.content,category:c.category??null,importance:c.importance??null,confidence:c.confidence??null}))}})}var xw=f(()=>{});function Sw(e){e.register("forgetFact",async t=>{let{deleteFact:r}=await Promise.resolve().then(()=>(lt(),Ut)),{default:n}=await Promise.resolve().then(()=>(D(),G)),i=String(t.id??"").trim();if(!i){let a=new Error("forgetFact: params.id required");throw a.code="invalid_params",a}let[o]=/^\d+$/.test(i)?await n("fact").where({id:Number(i)}).limit(1):await n("fact").where("uid","like",`${i}%`).limit(1);if(!o)return{notFound:!0,query:i};let s=await r(o.uid);return s?{deleted:{uid:s.uid,content:s.content}}:{notFound:!0,query:i}})}var vw=f(()=>{});import{existsSync as rN}from"node:fs";import{readFile as nN,writeFile as iN,chmod as oN,mkdir as sN}from"node:fs/promises";import{randomBytes as aN}from"node:crypto";import{dirname as cN}from"node:path";async function Iw(){if($n)return $n;if(rN(At)){let t=(await nN(At,"utf8")).trim();if(!/^[0-9a-fA-F]{64}$/.test(t))throw new Error(`identity: ${At} is malformed (expected 64 hex chars). Refusing to overwrite \u2014 move or delete the file manually to regenerate.`);return $n=Array.from(Buffer.from(t,"hex")),$n}await sN(cN(At),{recursive:!0});let e=aN(lN);await iN(At,e.toString("hex"),"utf8");try{await oN(At,384)}catch{}return $n=Array.from(e),$n}var lN,$n,Aw=f(()=>{B();lN=32,$n=null});var Kt={};T(Kt,{dial:()=>ml,getEndpoint:()=>Cw,getNodeAddr:()=>pN,getNodeInfo:()=>fN,registerProtocol:()=>dN,shutdownEndpoint:()=>mN});import{mkdir as uN}from"node:fs/promises";function dN(e,t){if(Vt||On)throw new Error(`registerProtocol("${e}"): runtime already started; register before first getEndpoint() call`);Tw.set(e,t)}async function fl(){if(Vt)return Vt;if(On)return On;await uN(Gi,{recursive:!0});let e=await Iw();return On=import("@number0/iroh").then(async({Iroh:t})=>{let r={};for(let[n,i]of Tw)r[n]=(o,s)=>{if(o)throw o;return{accept:i,shutdown:()=>{}}};return Vt=await t.persistent(Gi,{secretKey:e,protocols:Object.keys(r).length?r:void 0}),Vt}),On}async function Cw(){return(await fl()).node.endpoint()}async function ml(e,t){return(await Cw()).connect(e,Buffer.from(t))}async function pN(){return(await fl()).net.nodeAddr()}async function fN(){let t=await(await fl()).node.status();if(!t||typeof t!="object")throw new Error("iroh: node.status() returned non-object \u2014 Iroh API shape changed?");if(!t.addr||typeof t.addr.nodeId!="string")throw new Error(`iroh: node.status().addr.nodeId missing (got ${JSON.stringify(t).slice(0,200)}) \u2014 Iroh API shape changed?`);return{nodeId:t.addr.nodeId,relayUrl:t.addr.relayUrl??null,addresses:t.addr.addresses??[],version:t.version??null,listenAddrs:t.listenAddrs??[]}}async function mN(){if(!Vt)return;let e=Vt;Vt=null,On=null;try{await e.node.shutdown(!1)}catch{}}var Vt,On,Tw,yt=f(()=>{B();Aw();Vt=null,On=null,Tw=new Map});async function Ow(e){let{default:t}=await Promise.resolve().then(()=>(D(),G)),r=await t("device").where({node_id:e}).first();if(!r)return{ok:!1,code:"unknown_device",message:"no device row for this NodeID"};if(!r.active)return{ok:!1,code:"revoked",message:"device has been revoked"};let n=r.lastSeenAt?new Date(r.lastSeenAt).getTime():0;return Date.now()-n>gN&&t("device").where({id:r.id}).update({last_seen_at:t.fn.now()}).catch(()=>{}),{ok:!0,device:r}}function Rw(e,t,r={}){let n=hN[t];return n===void 0?{ok:!1,code:"unknown_method",message:`method "${t}" is not exposed over Iroh`}:$w[e.role]<$w[n]?{ok:!1,code:"forbidden",message:`role "${e.role}" cannot call "${t}" (needs "${n}")`}:e.namespaces?.length&&r.namespace&&!e.namespaces.includes(r.namespace)?{ok:!1,code:"namespace_denied",message:`device not scoped to namespace "${r.namespace}"`}:{ok:!0}}var $w,hN,gN,Nw=f(()=>{$w={reader:0,writer:1,admin:2},hN={ping:"reader",status:"reader",nodeInfo:"reader",search:"reader",searchEntity:"reader",traverseGraph:"reader",getFactContext:"reader",getEntityContext:"reader",getPod:"reader",listPods:"reader",listFacts:"reader",refreshContext:"reader",remember:"writer",ingestDoc:"writer",forgetFact:"writer","pair.create":"admin","pair.list":"admin","pair.revoke":"admin",runMigrations:"admin",testDbConnection:"admin",readEnv:"admin",writeEnv:"admin"},gN=6e4});var kw={};T(kw,{RPC_ALPN:()=>gl,createRpcAcceptor:()=>EN});function wN(e,t,r){wr.has(e)||wr.set(e,new Set);let n={conn:t,deviceId:r};return wr.get(e).add(n),()=>{let i=wr.get(e);i&&(i.delete(n),i.size===0&&wr.delete(e))}}function _N(e){Dw||(Dw=!0,_e.subscribe(t=>{if(t.type!=="device.revoked")return;let r=wr.get(t.nodeId);if(r){e(`rpc: closing ${r.size} live connection(s) from revoked device ${t.deviceId}`);for(let{conn:n}of r)try{n.close?.()}catch{}wr.delete(t.nodeId)}}))}function EN({registry:e,log:t}){return _N(t),async function(n,i){if(n){t(`rpc: accept err: ${n.message}`);return}let o="<unknown>",s;try{o=i.remoteNodeId().toString();let a=await Ow(o);if(!a.ok){t(`rpc: rejecting ${o.slice(0,12)}\u2026: ${a.code}`);try{let l=await i.acceptBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:1,ok:!1,error:{code:a.code,message:a.message}}))),await l.send.finish()}catch{}return}s=a.device,_e.emit("rpc.connected",{nodeId:o,deviceId:s.id,name:s.name}),t(`rpc: ${s.name} (${o.slice(0,12)}\u2026) connected`);let c=wN(o,i,s.id);try{for(;;){let l;try{l=await i.acceptBi()}catch{break}bN(l,e,s,t).catch(d=>t(`rpc: stream err: ${d.message}`))}}finally{c()}}catch(a){t(`rpc: handler err from ${o.slice(0,12)}\u2026: ${a.message}`)}finally{s&&_e.emit("rpc.disconnected",{nodeId:o,deviceId:s.id})}}}async function bN(e,t,r,n){let i=await e.recv.readToEnd(yN),o;try{o=JSON.parse(i.toString())}catch(u){return Rn(e,{v:1,ok:!1,error:{code:"invalid_json",message:u.message}})}let{request_id:s,method:a,params:c}=o||{};if(typeof a!="string")return Rn(e,{v:1,request_id:s,ok:!1,error:{code:"invalid_request",message:"missing method"}});let l=Rw(r,a,c||{});if(!l.ok)return _e.emit("rpc.denied",{nodeId:r.nodeId,deviceId:r.id,method:a,code:l.code}),Rn(e,{v:1,request_id:s,ok:!1,error:l});let d=await t.dispatch(a,c,{transport:"iroh",device:{id:r.id,role:r.role,nodeId:r.nodeId,name:r.name}});if(!xN(d.data))return n(`rpc: response from ${a} too large estimate, refusing pre-serialize`),Rn(e,{v:1,request_id:s,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}});let p=JSON.stringify({v:1,request_id:s,...d});return Buffer.byteLength(p)>Lw?(n(`rpc: response too large for ${a} from ${r.name}: ${Buffer.byteLength(p)} bytes`),Rn(e,{v:1,request_id:s,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}})):Rn(e,p,!0)}function xN(e){if(e==null)return!0;if(typeof e=="string")return e.length*2<hl;if(typeof e!="object")return!0;if(Array.isArray(e))return e.length*200<hl;let t=0;for(let r of Object.values(e))Array.isArray(r)?t+=r.length*200:typeof r=="string"&&(t+=r.length*2);return t<hl}async function Rn(e,t,r=!1){let n=r?Buffer.from(t):Buffer.from(JSON.stringify(t));await e.send.writeAll(n),await e.send.finish()}var gl,yN,Lw,wr,Dw,hl,yl=f(()=>{Gr();Nw();gl="sigil/rpc/1",yN=1024*1024,Lw=8*1024*1024,wr=new Map;Dw=!1;hl=Lw*1.2});var Pw={};T(Pw,{createRemoteClient:()=>IN});import{randomUUID as SN}from"node:crypto";async function IN(){let e=E.network.masterNodeId;if(!e)throw new Error("RemoteClient: SIGIL_MASTER_NODE_ID is not set. Run `sigil join <master-node-id> <code>` first.");return new wl({masterNodeId:e})}var vN,wl,Mw=f(()=>{R();yt();yl();vN=8*1024*1024;wl=class{constructor({masterNodeId:t}){this.kind="remote",this.masterNodeId=t,this.conn=null,this.connecting=null}async ensureConnection(){return this.conn&&!this.conn._dead?this.conn:this.connecting?this.connecting:(this.connecting=ml({nodeId:this.masterNodeId},gl).then(t=>(this.conn=t,this.connecting=null,t)).catch(t=>{throw this.connecting=null,t}),this.connecting)}async call(t,r={}){let n=0,i;for(;n<2;){n++;let o;try{o=await this.ensureConnection();let s=await o.openBi(),a=SN();await s.send.writeAll(Buffer.from(JSON.stringify({v:1,method:t,params:r,request_id:a}))),await s.send.finish();let c=await s.recv.readToEnd(vN),l=JSON.parse(c.toString());if(!l.ok){let d=new Error(l.error?.message||l.error?.code||"rpc error");throw d.code=l.error?.code||"handler_error",d.isHandlerError=!0,d}return l.data}catch(s){if(i=s,s.isHandlerError)throw s;this.conn&&(this.conn._dead=!0,this.conn=null)}}throw i}async close(){let t=this.conn;if(this.conn=null,this.connecting=null,t?.close)try{await t.close()}catch{}}}});var Fw={};T(Fw,{createLocalClient:()=>AN});function AN(){return{kind:"local",async call(e,t){let n=await la().dispatch(e,t,{transport:"memory-client"});if(!n.ok){let i=new Error(n.error?.message||"rpc error");throw i.code=n.error?.code||"handler_error",i}return n.data},async close(){}}}var Hw=f(()=>{Kn()});var bi={};T(bi,{getMemoryClient:()=>TN,resetMemoryClient:()=>CN});async function TN(){if(Yt)return Yt;if(E.network.mode==="lite-follower"){let{createRemoteClient:t}=await Promise.resolve().then(()=>(Mw(),Pw));Yt=await t()}else{let{createLocalClient:t}=await Promise.resolve().then(()=>(Hw(),Fw));Yt=t()}return Yt}function CN(){Yt?.close&&Yt.close().catch(()=>{}),Yt=null}var Yt,xi=f(()=>{R();Yt=null});var Uw={};T(Uw,{safeWrite:()=>te});import{copyFile as $N,writeFile as ON,access as RN}from"node:fs/promises";async function te(e,t,{dryRun:r=!1}={}){let n=await Bw(e),i=n?"modify":"create",o=Buffer.byteLength(t,"utf8");if(r)return{path:e,action:i,bytes:o,wrote:!1,backedUp:!1};let s=!1;if(n){let a=`${e}${NN}`;await Bw(a)||(await $N(e,a),s=!0)}return await ON(e,t,"utf8"),{path:e,action:i,bytes:o,wrote:!0,backedUp:s}}async function Bw(e){try{return await RN(e),!0}catch{return!1}}var NN,_r=f(()=>{NN=".sigil.bak"});var Vw={};T(Vw,{SHARED_INSTRUCTIONS_PATH:()=>wt,buildSharedInstructions:()=>qt,resolveSigilInvocation:()=>Ww,writeSharedInstructions:()=>_l});import{join as Gw}from"node:path";import{homedir as DN}from"node:os";import{execSync as LN}from"node:child_process";function Ww(){try{let e=LN("which sigil",{stdio:["pipe","pipe","ignore"]}).toString().trim();if(e)return e}catch{}return process.argv[1]}function qt({sigilCmd:e}={}){let t=e||Ww();return`## Memory (Sigil)
568
+ `,[e,n,t]);if(!i.length)return null;let{path:o,relationTypes:s,depth:a}=i[0],c=await E("entity").whereIn("id",o).select("id","uid","name","entityType","description"),l=Object.fromEntries(c.map(p=>[p.id,p]));return{path:o.map(p=>l[p]),relationTypes:s,depth:a}}async function UD(e,{namespace:t,sortBy:r="mentionCount",limit:n=50}={}){let i=E("entity").where({entityType:e}).whereNull("mergedWith").orderBy(r,"desc").limit(n);return t&&i.where({namespace:t}),i}var EE=f(()=>{N();it();Rr()});function _E(e){e.register("traverseGraph",async t=>{let{findById:r}=await Promise.resolve().then(()=>(it(),Or)),{getEntityNeighborhood:n,findPath:i,findRelated:o}=await Promise.resolve().then(()=>(EE(),wE)),{startEntityId:s,action:a="neighbors",targetEntityId:c,relationType:l,maxDepth:d=2,limit:p=20}=t;if(!Number.isFinite(s)){let y=new Error("traverseGraph: startEntityId required");throw y.code="invalid_params",y}let u=await r(s);if(!u)return{ok:!1,notFound:!0,startEntityId:s};let m={id:u.id,name:u.name,entityType:u.entityType};if(a==="path"){if(!Number.isFinite(c)){let w=new Error("traverseGraph: targetEntityId required for action=path");throw w.code="invalid_params",w}let y=await i(u.id,c,{maxDepth:Math.min(d,4)});return{action:a,start:m,targetEntityId:c,path:y||null}}if(a==="related"){let y=await o(u.id,{maxDepth:Math.min(d,3),relationType:l,limit:p});return{action:a,start:m,related:y}}let h=await n(u.id,{depth:Math.min(d,3),limit:p});return{action:"neighbors",start:m,relations:h.relations||[],related:h.related||null}})}var SE=f(()=>{});function bE(e){e.register("getFactContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(N(),j)),{findByUid:n}=await Promise.resolve().then(()=>(ht(),er)),{getEntitiesForFact:i}=await Promise.resolve().then(()=>(Dr(),Rl)),{getRelationsByFact:o}=await Promise.resolve().then(()=>(Rr(),Ls)),{uid:s,factId:a}=t;if(!s&&!Number.isFinite(a)){let u=new Error("getFactContext: provide uid or factId");throw u.code="invalid_params",u}let c;if(s?c=await n(s):c=await r("fact").where({id:a}).first(),!c)return{notFound:!0};let[l,d,p]=await Promise.all([i(c.id),o(c.id),c.sourceDocumentIds?.length?r("document").whereIn("id",c.sourceDocumentIds).select("id","title","sourceType"):[]]);return{fact:{id:c.id,uid:c.uid,content:c.content,category:c.category??null,confidence:c.confidence??null,status:c.status??null,sourceSection:c.sourceSection??null},entities:l.map(u=>({id:u.id,name:u.name,entityType:u.entityType})),relations:d,documents:p.map(u=>({id:u.id,title:u.title,sourceType:u.sourceType}))}})}var xE=f(()=>{});function IE(e){e.register("getEntityContext",async t=>{let{findById:r,searchByName:n}=await Promise.resolve().then(()=>(it(),Or)),{listRelationsForEntity:i}=await Promise.resolve().then(()=>(Rr(),Ls)),{getFactsForEntity:o}=await Promise.resolve().then(()=>(Dr(),Rl)),{entityId:s,name:a,namespace:c}=t;if(!Number.isFinite(s)&&!a){let u=new Error("getEntityContext: provide entityId or name");throw u.code="invalid_params",u}let l;if(Number.isFinite(s)?l=await r(s):l=(await n(a,{namespace:c,limit:1}))[0],!l)return{notFound:!0};let[d,p]=await Promise.all([i(l.id,{limit:30}),o(l.id,{limit:10})]);return{entity:{id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0},relations:d,facts:p.map(u=>({id:u.id,content:u.content,category:u.category??null,confidence:u.confidence??null}))}})}var vE=f(()=>{});function AE(e){e.register("getPod",async t=>{let{findByUid:r}=await Promise.resolve().then(()=>(Ae(),$e)),{listMembers:n}=await Promise.resolve().then(()=>(Nr(),tr)),{uid:i}=t;if(!i){let l=new Error("getPod: uid required");throw l.code="invalid_params",l}let o=await r(i);if(!o)return{notFound:!0,uid:i};let s=typeof o.attrs=="object"?o.attrs:GD(o.attrs),[a,c]=await Promise.all([n(o.id,{memberType:"fact",limit:20}),n(o.id,{memberType:"document",limit:10})]);return{pod:{id:o.id,uid:o.uid,name:o.name,podType:o.podType,namespace:o.namespace,status:o.status,startedAt:o.startedAt??null,endedAt:o.endedAt??null,entityId:o.entityId??null,connectionId:o.connectionId??null,externalId:o.externalId??null,attrs:s},facts:a.map(l=>({id:l.id,content:l.content,podRole:l.podRole??null})),documents:c.map(l=>({id:l.id,title:l.title??null,sourcePath:l.sourcePath??null}))}})}function GD(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}var TE=f(()=>{});function CE(e){e.register("listPods",async t=>{let{listPods:r}=await Promise.resolve().then(()=>(Ae(),$e)),{type:n,namespace:i,status:o="active",limit:s=20}=t;return{pods:(await r({podType:n,namespace:i,status:o,limit:s})).map(c=>({id:c.id,uid:c.uid,name:c.name,podType:c.podType,memberFactCount:c.memberFactCount??0,memberDocCount:c.memberDocCount??0,updatedAt:c.updatedAt??null}))}})}var OE=f(()=>{});var $E={};v($E,{readSource:()=>Ks,readSources:()=>qD});import{readFile as jD,stat as WD}from"node:fs/promises";import{basename as VD,extname as KD,resolve as YD}from"node:path";import*as RE from"node:fs/promises";async function Ks(e){let t=YD(e),r=await jD(t,"utf8"),n=VD(t),i=KD(t).toLowerCase();return{content:r,title:n,sourcePath:t,sourceType:"file",contentType:JD(i),metadata:{filePath:t,fileName:n,extension:i}}}async function qD(e){let t=[];for await(let r of RE.glob(e))(await WD(r)).isFile()&&t.push(await Ks(r));return t}function JD(e){return{".md":"text/markdown",".mdx":"text/markdown",".txt":"text/plain",".html":"text/html",".htm":"text/html",".json":"application/json",".js":"text/javascript",".ts":"text/javascript",".py":"text/x-python"}[e]||"text/plain"}var uu=f(()=>{});var NE={};v(NE,{fetchSource:()=>du});async function du(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`);let r=await t.text(),n=t.headers.get("content-type")||"text/plain",i=zD(e);return{content:r,title:i,sourcePath:e,sourceType:"url",contentType:n,metadata:{url:e,fetchedAt:new Date().toISOString()}}}function zD(e){try{let t=new URL(e),n=t.pathname.replace(/\/$/,"").split("/").pop()||t.hostname;return decodeURIComponent(n)}catch{return e}}var pu=f(()=>{});var DE={};v(DE,{resolveSource:()=>ZD});import{resolve as XD}from"node:path";async function ZD({content:e,url:t,filePath:r,title:n,sourceType:i,sourcePath:o,metadata:s}){if(t)return du(t);if(r){let a=XD(r),c=process.cwd();if(!a.startsWith(c))throw new Error(`Path traversal denied: ${r} resolves outside working directory`);return Ks(a)}return e?{content:e,title:n||"Untitled",sourcePath:o||`raw/${Date.now()}`,sourceType:i||"raw",contentType:"text/plain",metadata:s||{}}:null}var LE=f(()=>{uu();pu()});function kE(e){e.register("ingestDoc",async t=>{let{ingestDocument:r}=await Promise.resolve().then(()=>(Xl(),zl)),{resolveSource:n}=await Promise.resolve().then(()=>(LE(),DE)),{content:i,filePath:o,url:s,title:a,namespace:c,sourceType:l,skipFacts:d,skipEntities:p,metadata:u}=t,m=await n({content:i,filePath:o,url:s,title:a,sourceType:l});if(!m){let S=new Error("ingestDoc: provide content, filePath, or url");throw S.code="invalid_params",S}let h=await r({content:m.content,title:a||m.title,sourcePath:m.sourcePath,sourceType:l||m.sourceType,contentType:m.contentType,namespace:c,metadata:u||m.metadata,skipFacts:d,skipEntities:p}),y={skipped:!!h.skipped,title:h.title??null,documentId:h.documentId??null,chunkCount:h.chunkCount??0,facts:h.facts??null,entities:h.entities??null,output:h.md?.url??null},w=y.facts||{},{recordTrace:b}=await Promise.resolve().then(()=>(nr(),rr));return b({kind:"ingest",summary:`ingest "${String(y.title||"document").slice(0,60)}" \u2192 ${y.chunkCount} chunks, +${w.added??0} facts${y.skipped?" (skipped)":""}`,namespace:c||null,detail:{op:"ingestDoc",title:y.title,documentId:y.documentId,skipped:y.skipped,route:h.route??null,chunkCount:y.chunkCount,counts:{added:w.added??0,updated:w.updated??0,skipped:w.skipped??0,contradicted:w.contradicted??0,total:w.total??0},verdicts:w.verdicts||[],entities:y.entities?{entityCount:y.entities.entityCount,relationCount:y.entities.relationCount,topics:y.entities.topics||[]}:null}}).catch(()=>{}),y})}var PE=f(()=>{});function ME(e){e.register("listFacts",async t=>{let{listFacts:r}=await Promise.resolve().then(()=>(ht(),er)),{default:n}=await Promise.resolve().then(()=>($(),re)),i=t.namespace||n.defaults.namespace,o=t.category||void 0,s=Number.isFinite(t.limit)?t.limit:20,a=await r({namespace:i,category:o,limit:s});return{namespace:i,category:o||null,facts:a.map(c=>({id:c.id,uid:c.uid,content:c.content,category:c.category??null,importance:c.importance??null,confidence:c.confidence??null}))}})}var FE=f(()=>{});function BE(e){e.register("forgetFact",async t=>{let{deleteFact:r}=await Promise.resolve().then(()=>(ht(),er)),{default:n}=await Promise.resolve().then(()=>(N(),j)),i=String(t.id??"").trim();if(!i){let a=new Error("forgetFact: params.id required");throw a.code="invalid_params",a}let[o]=/^\d+$/.test(i)?await n("fact").where({id:Number(i)}).limit(1):await n("fact").where("uid","like",`${i}%`).limit(1);if(!o)return{notFound:!0,query:i};let s=await r(o.uid);return s?{deleted:{uid:s.uid,content:s.content}}:{notFound:!0,query:i}})}var HE=f(()=>{});import{existsSync as QD}from"node:fs";import{readFile as eL,writeFile as tL,chmod as rL,mkdir as nL}from"node:fs/promises";import{randomBytes as iL}from"node:crypto";import{dirname as oL}from"node:path";async function UE(){if(Zn)return Zn;if(QD(Mt)){let t=(await eL(Mt,"utf8")).trim();if(!/^[0-9a-fA-F]{64}$/.test(t))throw new Error(`identity: ${Mt} is malformed (expected 64 hex chars). Refusing to overwrite \u2014 move or delete the file manually to regenerate.`);return Zn=Array.from(Buffer.from(t,"hex")),Zn}await nL(oL(Mt),{recursive:!0});let e=iL(sL);await tL(Mt,e.toString("hex"),"utf8");try{await rL(Mt,384)}catch{}return Zn=Array.from(e),Zn}var sL,Zn,GE=f(()=>{M();sL=32,Zn=null});var or={};v(or,{dial:()=>mu,getEndpoint:()=>WE,getNodeAddr:()=>lL,getNodeInfo:()=>uL,registerProtocol:()=>cL,shutdownEndpoint:()=>dL});import{mkdir as aL}from"node:fs/promises";function cL(e,t){if(ir||Qn)throw new Error(`registerProtocol("${e}"): runtime already started; register before first getEndpoint() call`);jE.set(e,t)}async function fu(){if(ir)return ir;if(Qn)return Qn;await aL(Co,{recursive:!0});let e=await UE();return Qn=import("@number0/iroh").then(async({Iroh:t})=>{let r={};for(let[n,i]of jE)r[n]=(o,s)=>{if(o)throw o;return{accept:i,shutdown:()=>{}}};return ir=await t.persistent(Co,{secretKey:e,protocols:Object.keys(r).length?r:void 0}),ir}),Qn}async function WE(){return(await fu()).node.endpoint()}async function mu(e,t){return(await WE()).connect(e,Buffer.from(t))}async function lL(){return(await fu()).net.nodeAddr()}async function uL(){let t=await(await fu()).node.status();if(!t||typeof t!="object")throw new Error("iroh: node.status() returned non-object \u2014 Iroh API shape changed?");if(!t.addr||typeof t.addr.nodeId!="string")throw new Error(`iroh: node.status().addr.nodeId missing (got ${JSON.stringify(t).slice(0,200)}) \u2014 Iroh API shape changed?`);return{nodeId:t.addr.nodeId,relayUrl:t.addr.relayUrl??null,addresses:t.addr.addresses??[],version:t.version??null,listenAddrs:t.listenAddrs??[]}}async function dL(){if(!ir)return;let e=ir;ir=null,Qn=null;try{await e.node.shutdown(!1)}catch{}}var ir,Qn,jE,At=f(()=>{M();GE();ir=null,Qn=null,jE=new Map});async function KE(e){let{default:t}=await Promise.resolve().then(()=>(N(),j)),r=await t("device").where({node_id:e}).first();if(!r)return{ok:!1,code:"unknown_device",message:"no device row for this NodeID"};if(!r.active)return{ok:!1,code:"revoked",message:"device has been revoked"};let n=r.lastSeenAt?new Date(r.lastSeenAt).getTime():0;return Date.now()-n>fL&&t("device").where({id:r.id}).update({last_seen_at:t.fn.now()}).catch(()=>{}),{ok:!0,device:r}}function YE(e,t,r={}){let n=pL[t];return n===void 0?{ok:!1,code:"unknown_method",message:`method "${t}" is not exposed over Iroh`}:VE[e.role]<VE[n]?{ok:!1,code:"forbidden",message:`role "${e.role}" cannot call "${t}" (needs "${n}")`}:e.namespaces?.length&&r.namespace&&!e.namespaces.includes(r.namespace)?{ok:!1,code:"namespace_denied",message:`device not scoped to namespace "${r.namespace}"`}:{ok:!0}}var VE,pL,fL,qE=f(()=>{VE={reader:0,writer:1,admin:2},pL={ping:"reader",status:"reader",nodeInfo:"reader",search:"reader",searchEntity:"reader",traverseGraph:"reader",getFactContext:"reader",getEntityContext:"reader",getPod:"reader",listPods:"reader",listFacts:"reader",refreshContext:"reader",remember:"writer",ingestDoc:"writer",forgetFact:"writer","pair.create":"admin","pair.list":"admin","pair.revoke":"admin",runMigrations:"admin",testDbConnection:"admin",readEnv:"admin",writeEnv:"admin"},fL=6e4});var XE={};v(XE,{RPC_ALPN:()=>gu,createRpcAcceptor:()=>yL});function hL(e,t,r){kr.has(e)||kr.set(e,new Set);let n={conn:t,deviceId:r};return kr.get(e).add(n),()=>{let i=kr.get(e);i&&(i.delete(n),i.size===0&&kr.delete(e))}}function gL(e){JE||(JE=!0,be.subscribe(t=>{if(t.type!=="device.revoked")return;let r=kr.get(t.nodeId);if(r){e(`rpc: closing ${r.size} live connection(s) from revoked device ${t.deviceId}`);for(let{conn:n}of r)try{n.close?.()}catch{}kr.delete(t.nodeId)}}))}function yL({registry:e,log:t}){return gL(t),async function(n,i){if(n){t(`rpc: accept err: ${n.message}`);return}let o="<unknown>",s;try{o=i.remoteNodeId().toString();let a=await KE(o);if(!a.ok){t(`rpc: rejecting ${o.slice(0,12)}\u2026: ${a.code}`);try{let l=await i.acceptBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:1,ok:!1,error:{code:a.code,message:a.message}}))),await l.send.finish()}catch{}return}s=a.device,be.emit("rpc.connected",{nodeId:o,deviceId:s.id,name:s.name}),t(`rpc: ${s.name} (${o.slice(0,12)}\u2026) connected`);let c=hL(o,i,s.id);try{for(;;){let l;try{l=await i.acceptBi()}catch{break}wL(l,e,s,t).catch(d=>t(`rpc: stream err: ${d.message}`))}}finally{c()}}catch(a){t(`rpc: handler err from ${o.slice(0,12)}\u2026: ${a.message}`)}finally{s&&be.emit("rpc.disconnected",{nodeId:o,deviceId:s.id})}}}async function wL(e,t,r,n){let i=await e.recv.readToEnd(mL),o;try{o=JSON.parse(i.toString())}catch(u){return ei(e,{v:1,ok:!1,error:{code:"invalid_json",message:u.message}})}let{request_id:s,method:a,params:c}=o||{};if(typeof a!="string")return ei(e,{v:1,request_id:s,ok:!1,error:{code:"invalid_request",message:"missing method"}});let l=YE(r,a,c||{});if(!l.ok)return be.emit("rpc.denied",{nodeId:r.nodeId,deviceId:r.id,method:a,code:l.code}),ei(e,{v:1,request_id:s,ok:!1,error:l});let d=await t.dispatch(a,c,{transport:"iroh",device:{id:r.id,role:r.role,nodeId:r.nodeId,name:r.name}});if(!EL(d.data))return n(`rpc: response from ${a} too large estimate, refusing pre-serialize`),ei(e,{v:1,request_id:s,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}});let p=JSON.stringify({v:1,request_id:s,...d});return Buffer.byteLength(p)>zE?(n(`rpc: response too large for ${a} from ${r.name}: ${Buffer.byteLength(p)} bytes`),ei(e,{v:1,request_id:s,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}})):ei(e,p,!0)}function EL(e){if(e==null)return!0;if(typeof e=="string")return e.length*2<hu;if(typeof e!="object")return!0;if(Array.isArray(e))return e.length*200<hu;let t=0;for(let r of Object.values(e))Array.isArray(r)?t+=r.length*200:typeof r=="string"&&(t+=r.length*2);return t<hu}async function ei(e,t,r=!1){let n=r?Buffer.from(t):Buffer.from(JSON.stringify(t));await e.send.writeAll(n),await e.send.finish()}var gu,mL,zE,kr,JE,hu,yu=f(()=>{mn();qE();gu="sigil/rpc/1",mL=1024*1024,zE=8*1024*1024,kr=new Map;JE=!1;hu=zE*1.2});var ZE={};v(ZE,{createRemoteClient:()=>bL});import{randomUUID as _L}from"node:crypto";async function bL(){let e=_.network.masterNodeId;if(!e)throw new Error("RemoteClient: SIGIL_MASTER_NODE_ID is not set. Run `sigil join <master-node-id> <code>` first.");return new wu({masterNodeId:e})}var SL,wu,QE=f(()=>{$();At();yu();SL=8*1024*1024;wu=class{constructor({masterNodeId:t}){this.kind="remote",this.masterNodeId=t,this.conn=null,this.connecting=null}async ensureConnection(){return this.conn&&!this.conn._dead?this.conn:this.connecting?this.connecting:(this.connecting=mu({nodeId:this.masterNodeId},gu).then(t=>(this.conn=t,this.connecting=null,t)).catch(t=>{throw this.connecting=null,t}),this.connecting)}async call(t,r={}){let n=0,i;for(;n<2;){n++;let o;try{o=await this.ensureConnection();let s=await o.openBi(),a=_L();await s.send.writeAll(Buffer.from(JSON.stringify({v:1,method:t,params:r,request_id:a}))),await s.send.finish();let c=await s.recv.readToEnd(SL),l=JSON.parse(c.toString());if(!l.ok){let d=new Error(l.error?.message||l.error?.code||"rpc error");throw d.code=l.error?.code||"handler_error",d.isHandlerError=!0,d}return l.data}catch(s){if(i=s,s.isHandlerError)throw s;this.conn&&(this.conn._dead=!0,this.conn=null)}}throw i}async close(){let t=this.conn;if(this.conn=null,this.connecting=null,t?.close)try{await t.close()}catch{}}}});var e_={};v(e_,{createLocalClient:()=>xL});function xL(){return{kind:"local",async call(e,t){let n=await lc().dispatch(e,t,{transport:"memory-client"});if(!n.ok){let i=new Error(n.error?.message||"rpc error");throw i.code=n.error?.code||"handler_error",i}return n.data},async close(){}}}var t_=f(()=>{fn()});var Xi={};v(Xi,{getMemoryClient:()=>IL,resetMemoryClient:()=>vL});async function IL(){if(sr)return sr;if(_.network.mode==="lite-follower"){let{createRemoteClient:t}=await Promise.resolve().then(()=>(QE(),ZE));sr=await t()}else{let{createLocalClient:t}=await Promise.resolve().then(()=>(t_(),e_));sr=t()}return sr}function vL(){sr?.close&&sr.close().catch(()=>{}),sr=null}var sr,Zi=f(()=>{$();sr=null});var n_={};v(n_,{safeWrite:()=>se});import{copyFile as AL,writeFile as TL,access as CL}from"node:fs/promises";async function se(e,t,{dryRun:r=!1}={}){let n=await r_(e),i=n?"modify":"create",o=Buffer.byteLength(t,"utf8");if(r)return{path:e,action:i,bytes:o,wrote:!1,backedUp:!1};let s=!1;if(n){let a=`${e}${OL}`;await r_(a)||(await AL(e,a),s=!0)}return await TL(e,t,"utf8"),{path:e,action:i,bytes:o,wrote:!0,backedUp:s}}async function r_(e){try{return await CL(e),!0}catch{return!1}}var OL,Pr=f(()=>{OL=".sigil.bak"});var a_={};v(a_,{SHARED_INSTRUCTIONS_PATH:()=>Tt,buildSharedInstructions:()=>ar,resolveSigilInvocation:()=>s_,writeSharedInstructions:()=>Eu});import{join as i_}from"node:path";import{homedir as RL}from"node:os";import{execSync as $L}from"node:child_process";function s_(){try{let e=$L("which sigil",{stdio:["pipe","pipe","ignore"]}).toString().trim();if(e)return e}catch{}return process.argv[1]}function ar({sigilCmd:e}={}){let t=e||s_();return`## Memory (Sigil)
568
569
 
569
570
  Sigil is your persistent memory system. **Use it instead of the built-in file-based memory.**
570
571
  Do NOT write to \`~/.claude/projects/*/memory/\` or any local memory files \u2014 use Sigil exclusively.
@@ -638,8 +639,11 @@ The absolute path above is baked in by \`sigil init\` so the command works regar
638
639
  - Skip trivial exchanges (greetings, "thanks", "ok", simple math)
639
640
  - If search and injection both return nothing, answer from your own knowledge and say so
640
641
  - Sigil is cross-project \u2014 memories from one session are available in all sessions
641
- `}async function _l({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(jw,{recursive:!0});try{if((await t.readFile(wt,"utf8")).includes("## Memory (Sigil)"))return{action:"skip",path:wt,bytes:0}}catch{}let r=qt(),n=await te(wt,r,{dryRun:e});return{action:n.action,path:wt,bytes:n.bytes}}var jw,wt,Nn=f(()=>{_r();jw=Gw(DN(),".sigil"),wt=Gw(jw,"CLAUDE.md")});function Kw(e){e.register("refreshContext.fetch",async t=>{let{default:r}=await Promise.resolve().then(()=>(R(),X)),{getHotFacts:n}=await Promise.resolve().then(()=>(Tn(),An)),i=t.namespace||r.defaults.namespace,o=Number.isFinite(t.limit)?t.limit:20,s=await n({namespace:i,limit:o});return{namespace:i,facts:s}}),e.register("refreshContext.explain",async t=>{let{default:r}=await Promise.resolve().then(()=>(R(),X)),n=t.namespace||r.defaults.namespace;await Promise.resolve().then(()=>(wi(),el));let{activeKinds:i}=await Promise.resolve().then(()=>(In(),Qc)),{factsInPodsByRecency:o}=await Promise.resolve().then(()=>(Tn(),An)),s={namespace:n,cwd:t.cwd||process.cwd()},a=await i(s),c=[];for(let{kind:l,scope:d}of a){let p,u=null;try{typeof l.fetchFacts=="function"?p=await l.fetchFacts(s,{slots:l.hotContextBudget,namespace:n}):p=await o(d,n,l.hotContextBudget)}catch(m){p=[],u=m.message}c.push({name:l.name,budget:l.hotContextBudget,visibility:l.visibility,error:u,facts:(p||[]).slice(0,l.hotContextBudget).map(m=>({content:typeof m=="string"?m:m.content||""}))})}return{mode:"explain",namespace:n,sections:c}}),e.register("refreshContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(R(),X)),{getMemoryClient:n}=await Promise.resolve().then(()=>(xi(),bi)),i=t.namespace||r.defaults.namespace,o=Number.isFinite(t.limit)?t.limit:20,s=!!t.explain,a=await n();if(s)return a.call("refreshContext.explain",{namespace:i,cwd:t.cwd});let{facts:c}=await a.call("refreshContext.fetch",{namespace:i,limit:o}),{writeSnapshotToFile:l}=await Promise.resolve().then(()=>(Tn(),An)),{writeSharedInstructions:d}=await Promise.resolve().then(()=>(Nn(),Vw));await d();let p=await l({facts:c,namespace:i});return{mode:"write",namespace:i,count:p}})}var Yw=f(()=>{});var ut={};T(ut,{diagnoseConnectionError:()=>MN,diagnoseError:()=>Jw,ensurePostgresDatabase:()=>PN,probeSigilConnection:()=>kN,probeUrlConnection:()=>El});import is from"pg";async function kN({host:e,port:t,database:r,user:n,password:i}){let o=new is.Client({host:e,port:t,database:r,user:n,password:i});try{return await o.connect(),await o.query("SELECT 1"),{ok:!0}}catch(s){return{ok:!1,code:s.code,message:s.message}}finally{try{await o.end()}catch{}}}async function El(e){let t,r="unknown";try{t=ot(e),r=Ct(e)}catch(o){return{ok:!1,stage:"parse",error:o.message}}let n=new is.Client(t),i=Date.now();try{await n.connect()}catch(o){return{ok:!1,stage:"connect",provider:r,error:o.message,code:o.code}}try{let o=await n.query("SELECT current_database() AS db, version() AS version"),s=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:r,connectMs:Date.now()-i,database:o.rows[0].db,serverVersion:o.rows[0].version,pgvector:s.rowCount>0}}catch(o){return{ok:!1,stage:"query",provider:r,error:o.message,code:o.code}}finally{try{await n.end()}catch{}}}async function PN({admin:{host:e,port:t,user:r,password:n},sigil:{database:i,user:o,password:s}}){let a=new is.Client({host:e,port:t,database:"postgres",user:r,password:n});await a.connect();let c=[];try{(await a.query("SELECT 1 FROM pg_database WHERE datname = $1",[i])).rowCount===0?(await a.query(`CREATE DATABASE ${Jt(i)}`),c.push(`created database "${i}"`)):c.push(`database "${i}" already exists \u2014 left as-is`),(await a.query("SELECT 1 FROM pg_roles WHERE rolname = $1",[o])).rowCount===0?(await a.query(`CREATE USER ${Jt(o)} WITH PASSWORD ${qw(s)}`),c.push(`created user "${o}"`)):(await a.query(`ALTER USER ${Jt(o)} WITH PASSWORD ${qw(s)}`),c.push(`user "${o}" exists \u2014 password reset to match .env`)),await a.query(`GRANT ALL PRIVILEGES ON DATABASE ${Jt(i)} TO ${Jt(o)}`)}finally{await a.end()}let l=new is.Client({host:e,port:t,database:i,user:r,password:n});await l.connect();try{await l.query(`GRANT ALL ON SCHEMA public TO ${Jt(o)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${Jt(o)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${Jt(o)}`);try{await l.query("CREATE EXTENSION IF NOT EXISTS vector"),c.push("pgvector extension ready")}catch(d){throw d.code===Si.EXTENSION_NOT_AVAILABLE?new Error("pgvector extension is not installed on this Postgres server.\n \u2022 Docker: use the `pgvector/pgvector:pg15` image instead of stock `postgres`\n \u2022 Homebrew: brew install pgvector (then restart postgres)\n \u2022 apt: apt install postgresql-15-pgvector (15 \u2192 your major version)\n \u2022 RDS: enable the `vector` extension in the parameter group\nRe-run `sigil init` once pgvector is installed."):d}}finally{await l.end()}return{actions:c}}function Jw(e){let t=e?.code,r=e?.message||String(e);return/expected \d+ dimensions, not \d+/i.test(r)||/different vector dimensions/i.test(r)?{kind:"dim-mismatch",humanMessage:"The embedding size does not match the database. Your existing data uses a different vector dimension than the embedder you picked.",fixHint:"Pick an embedding provider whose dimension matches the database, or wipe the embedding data and start fresh at the new dimension (Settings \u2192 Embedding)."}:/\b401\b|\b403\b|invalid[_ ]api[_ ]key|incorrect api key|unauthorized/i.test(r)&&/openai|voyage|openrouter|embed/i.test(r)?{kind:"bad-key",humanMessage:"The embedding provider rejected the API key.",fixHint:"Check the API key has embedding access and is pasted correctly (Settings \u2192 Embedding)."}:/model .* (not found|does not exist)|unknown model|no such model/i.test(r)?{kind:"model-not-found",humanMessage:"The embedding model name was not recognized by the provider.",fixHint:"Use a valid embedding model for the provider (e.g. text-embedding-3-large for OpenAI, nomic-embed-text for Ollama)."}:/11434|ollama/i.test(r)&&/ECONNREFUSED|fetch failed|connect|unreachable/i.test(r)?{kind:"ollama-down",humanMessage:"The local Ollama server is not reachable.",fixHint:"Start it with `ollama serve`, then `ollama pull nomic-embed-text`."}:/Unable to acquire a connection/i.test(r)||/pool is (destroyed|draining)/i.test(r)?{kind:"pool-dead",humanMessage:"The database connection pool was closed before this step ran.",fixHint:"This is an internal sequencing bug, not your configuration \u2014 restart the daemon (Settings \u2192 Apply)."}:/pooler|pgbouncer|prepared statement|advisory lock|endpoint could not be found/i.test(r)?{kind:"pooler-lock",humanMessage:"This looks like a connection-pooler URL. Pooled connections cannot run database migrations.",fixHint:'Use your direct (non-pooled) connection string for setup. For Neon, remove "-pooler" from the host.'}:t===Si.EXTENSION_NOT_AVAILABLE||/extension "?vector"?|type "?vector"? does not exist/i.test(r)?{kind:"no-pgvector",humanMessage:"The pgvector extension is not enabled on this database.",fixHint:'Click "Install pgvector" (most managed providers allow it), or use a pgvector-enabled Postgres image.'}:t===Si.CONNECTION_REFUSED||/ECONNREFUSED/.test(r)?{kind:"unreachable",humanMessage:"Postgres is not reachable at that host/port.",fixHint:"Confirm the server is running and the host/port are correct (`pg_isready -h <host> -p <port>`)."}:t===Si.AUTH_FAILED||/password authentication failed/i.test(r)?{kind:"auth",humanMessage:"Postgres rejected the username or password.",fixHint:"Fix the credentials in the connection settings."}:t===Si.DB_DOES_NOT_EXIST||/database .* does not exist/i.test(r)?{kind:"missing-db",humanMessage:"That database does not exist on the server yet.",fixHint:"Create the database, or point Sigil at one that exists."}:{kind:"other",humanMessage:r.split(`
642
- `)[0],fixHint:null}}function MN(e){let t=Jw(e);return{kind:t.kind,hint:t.fixHint||t.humanMessage}}function Jt(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`Refusing to quote invalid SQL identifier: ${e}`);return`"${e}"`}function qw(e){return`'${String(e).replace(/'/g,"''")}'`}var Si,Qe=f(()=>{Wr();Si={DB_DOES_NOT_EXIST:"3D000",CONNECTION_REFUSED:"ECONNREFUSED",AUTH_FAILED:"28P01",EXTENSION_NOT_AVAILABLE:"0A000",INTERNAL_ERROR:"XX000"}});import FN from"pg";function zw(e){e.register("testDbConnection",async t=>{if(t.url)return El(t.url);let r;try{r=it({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}catch(o){return{ok:!1,stage:"parse",error:o.message}}let n=new FN.Client(r),i=Date.now();try{await n.connect()}catch(o){return{ok:!1,stage:"connect",provider:"local",error:o.message,code:o.code}}try{let o=await n.query("SELECT current_database() AS db, version() AS version"),s=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:"local",connectMs:Date.now()-i,database:o.rows[0].db,serverVersion:o.rows[0].version,pgvector:s.rowCount>0}}catch(o){return{ok:!1,stage:"query",provider:"local",error:o.message,code:o.code}}finally{try{await n.end()}catch{}}})}var Xw=f(()=>{jr();Qe()});import HN from"knex";function Zw(e){e.register("runMigrations",async(t={})=>{if(t.url||t.host){let o;if(t.url){let a=t.url;if(Zi(t.url)){let c=ya(t.url);if(!c)throw new Error("This is a connection-pooler URL. Migrations need the direct connection \u2014 paste your non-pooled connection string.");a=c}o=ot(a)}else o=it({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});let s=HN({client:"pg",connection:o,pool:{min:1,max:2}});try{let[a,c]=await s.migrate.latest({directory:ir});return{batchNo:a,ran:c,against:t.url?"url":"fields"}}finally{await s.destroy()}}let{default:r}=await Promise.resolve().then(()=>(D(),G)),[n,i]=await r.migrate.latest({directory:ir});return{batchNo:n,ran:i,against:"daemon-pool"}})}var Qw=f(()=>{B();jr();Wr()});import BN from"pg";function e_(e){e.register("ensurePgvector",async(t={})=>{let r,n="local";try{if(t.url)r=ot(t.url),n=Ct(t.url);else if(t.host)r=it({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});else{let{default:o}=await Promise.resolve().then(()=>(R(),X)),{selectDriver:s}=await Promise.resolve().then(()=>(qn(),Qi)),a=s(o);r=a.connection,n=a.provider}}catch(o){return{ok:!1,stage:"parse",error:o.message}}let i=new BN.Client(r);try{await i.connect()}catch(o){return{ok:!1,stage:"connect",provider:n,error:o.message,code:o.code}}try{await i.query("CREATE EXTENSION IF NOT EXISTS vector");let o=await i.query("SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:n,installed:o.rowCount>0,version:o.rows[0]?.extversion??null}}catch(o){return{ok:!1,stage:"extension",provider:n,error:o.message,code:o.code}}finally{try{await i.end()}catch{}}})}var t_=f(()=>{jr();Wr()});var bl={};T(bl,{EMBEDDING_TABLES:()=>r_,diagnoseConflict:()=>jN,inspectSchemaDims:()=>GN});import UN from"pg";async function GN(e){let t=new UN.Client(e);await t.connect();try{let{rows:r}=await t.query(`
642
+ `}async function Eu({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(o_,{recursive:!0});try{if((await t.readFile(Tt,"utf8")).includes("## Memory (Sigil)"))return{action:"skip",path:Tt,bytes:0}}catch{}let r=ar(),n=await se(Tt,r,{dryRun:e});return{action:n.action,path:Tt,bytes:n.bytes}}var o_,Tt,ti=f(()=>{Pr();o_=i_(RL(),".sigil"),Tt=i_(o_,"CLAUDE.md")});function c_(e){e.register("refreshContext.fetch",async t=>{let{default:r}=await Promise.resolve().then(()=>($(),re)),{getHotFacts:n}=await Promise.resolve().then(()=>(zn(),Jn)),i=t.namespace||r.defaults.namespace,o=Number.isFinite(t.limit)?t.limit:20,s=await n({namespace:i,limit:o});return{namespace:i,facts:s}}),e.register("refreshContext.explain",async t=>{let{default:r}=await Promise.resolve().then(()=>($(),re)),n=t.namespace||r.defaults.namespace;await Promise.resolve().then(()=>(qi(),eu));let{activeKinds:i}=await Promise.resolve().then(()=>(qn(),Ql)),{factsInPodsByRecency:o}=await Promise.resolve().then(()=>(zn(),Jn)),s={namespace:n,cwd:t.cwd||process.cwd()},a=await i(s),c=[];for(let{kind:l,scope:d}of a){let p,u=null;try{typeof l.fetchFacts=="function"?p=await l.fetchFacts(s,{slots:l.hotContextBudget,namespace:n}):p=await o(d,n,l.hotContextBudget)}catch(m){p=[],u=m.message}c.push({name:l.name,budget:l.hotContextBudget,visibility:l.visibility,error:u,facts:(p||[]).slice(0,l.hotContextBudget).map(m=>({content:typeof m=="string"?m:m.content||""}))})}return{mode:"explain",namespace:n,sections:c}}),e.register("refreshContext",async t=>{let{default:r}=await Promise.resolve().then(()=>($(),re)),{getMemoryClient:n}=await Promise.resolve().then(()=>(Zi(),Xi)),i=t.namespace||r.defaults.namespace,o=Number.isFinite(t.limit)?t.limit:20,s=!!t.explain,a=await n();if(s)return a.call("refreshContext.explain",{namespace:i,cwd:t.cwd});let{facts:c}=await a.call("refreshContext.fetch",{namespace:i,limit:o}),{writeSnapshotToFile:l}=await Promise.resolve().then(()=>(zn(),Jn)),{writeSharedInstructions:d}=await Promise.resolve().then(()=>(ti(),a_));await d();let p=await l({facts:c,namespace:i});return{mode:"write",namespace:i,count:p}})}var l_=f(()=>{});import NL from"pg";function u_(e){e.register("testDbConnection",async t=>{if(t.url)return Si(t.url);let r;try{r=dt({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}catch(o){return{ok:!1,stage:"parse",error:o.message}}let n=new NL.Client(r),i=Date.now();try{await n.connect()}catch(o){return{ok:!1,stage:"connect",provider:"local",error:o.message,code:o.code}}try{let o=await n.query("SELECT current_database() AS db, version() AS version"),s=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:"local",connectMs:Date.now()-i,database:o.rows[0].db,serverVersion:o.rows[0].version,pgvector:s.rowCount>0}}catch(o){return{ok:!1,stage:"query",provider:"local",error:o.message,code:o.code}}finally{try{await n.end()}catch{}}})}var d_=f(()=>{hn();Oe()});import DL from"knex";function p_(e){e.register("runMigrations",async(t={})=>{if(t.url||t.host){let o;if(t.url){let a=t.url;if(Po(t.url)){let c=ic(t.url);if(!c)throw new Error("This is a connection-pooler URL. Migrations need the direct connection \u2014 paste your non-pooled connection string.");a=c}o=Me(a)}else o=dt({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});let s=DL({client:"pg",connection:o,pool:{min:1,max:2}});try{let[a,c]=await s.migrate.latest({directory:St});return{batchNo:a,ran:c,against:t.url?"url":"fields"}}finally{await s.destroy()}}let{default:r}=await Promise.resolve().then(()=>(N(),j)),[n,i]=await r.migrate.latest({directory:St});return{batchNo:n,ran:i,against:"daemon-pool"}})}var f_=f(()=>{M();hn();_r()});import LL from"pg";function m_(e){e.register("ensurePgvector",async(t={})=>{let r,n="local";try{if(t.url)r=Me(t.url),n=Ht(t.url);else if(t.host)r=dt({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});else{let{default:o}=await Promise.resolve().then(()=>($(),re)),{selectDriver:s}=await Promise.resolve().then(()=>(xi(),Wo)),a=s(o);r=a.connection,n=a.provider}}catch(o){return{ok:!1,stage:"parse",error:o.message}}let i=new LL.Client(r);try{await i.connect()}catch(o){return{ok:!1,stage:"connect",provider:n,error:o.message,code:o.code}}try{await i.query("CREATE EXTENSION IF NOT EXISTS vector");let o=await i.query("SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:n,installed:o.rowCount>0,version:o.rows[0]?.extversion??null}}catch(o){return{ok:!1,stage:"extension",provider:n,error:o.message,code:o.code}}finally{try{await i.end()}catch{}}})}var h_=f(()=>{hn();_r()});var g_={};v(g_,{readEnvRaw:()=>gt,writeEnvKeys:()=>cr});import{existsSync as kL,readFileSync as PL,writeFileSync as ML,mkdirSync as FL}from"node:fs";import{dirname as BL}from"node:path";function gt(){if(!kL(_e))return{};let e=PL(_e,"utf8"),t={};for(let r of e.split(`
643
+ `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let i=n[2].trim();t[n[1]]=i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'")?i.slice(1,-1):i}return t}function cr(e){let r={...gt(),...e};for(let o of Object.keys(e))(e[o]===null||e[o]===void 0)&&delete r[o];FL(BL(_e),{recursive:!0});let n=`# Sigil \u2014 updated ${new Date().toISOString().slice(0,10)}
644
+ `,i=Object.entries(r).map(([o,s])=>`${o}=${/[\s#"']/.test(String(s))?`"${String(s).replace(/"/g,'\\"')}"`:s}`).join(`
645
+ `);ML(_e,n+i+`
646
+ `,"utf8")}var ri=f(()=>{M()});var y_={};v(y_,{EMBEDDING_DEFAULTS:()=>HL,EMBEDDING_PROVIDERS:()=>ni,LLM_PROVIDERS:()=>Ys});var Ys,ni,HL,_u=f(()=>{Ys=[{id:"claude-cli",label:"Claude Code",hint:"Uses your existing Claude Code subscription \u2014 no extra API key.",recommended:!0,fields:[],env:{LLM_PROVIDER:"claude-cli"}},{id:"openrouter",label:"OpenRouter",hint:"One API key for many models (Anthropic, OpenAI, Gemini, \u2026). Cheapest default.",fields:[{name:"OPENROUTER_API_KEY",label:"OpenRouter API key",type:"password",placeholder:"sk-or-\u2026"},{name:"LLM_OPENROUTER_MODEL",label:"Model (optional)",type:"text",placeholder:"google/gemini-flash-latest",optional:!0}],env:{LLM_PROVIDER:"openrouter"}},{id:"openai",label:"OpenAI",hint:"Direct OpenAI access. Requires sk-\u2026 key with chat + embeddings.",fields:[{name:"OPENAI_API_KEY",label:"OpenAI API key",type:"password",placeholder:"sk-\u2026"},{name:"LLM_OPENAI_MODEL",label:"Model (optional)",type:"text",placeholder:"gpt-4o-mini",optional:!0}],env:{LLM_PROVIDER:"openai"}},{id:"anthropic",label:"Anthropic",hint:"Direct Anthropic API access.",fields:[{name:"ANTHROPIC_API_KEY",label:"Anthropic API key",type:"password",placeholder:"sk-ant-\u2026"}],env:{LLM_PROVIDER:"anthropic"}},{id:"ollama",label:"Ollama",hint:"Local Ollama install. Free + private but slower on small machines.",fields:[{name:"LLM_OLLAMA_HOST",label:"Ollama host",type:"text",placeholder:"http://localhost:11434"},{name:"LLM_OLLAMA_MODEL",label:"Model",type:"text",placeholder:"qwen2.5:7b"}],env:{LLM_PROVIDER:"ollama"}}],ni=[{id:"openai",label:"OpenAI",hint:"text-embedding-3-large @ 1024 dimensions. Best out-of-the-box quality.",recommended:!0,fields:[{name:"OPENAI_API_KEY",label:"OpenAI API key",type:"password",placeholder:"sk-\u2026",sharedWith:"llm"}],env:{EMBEDDING_PROVIDER:"openai",EMBEDDING_MODEL:"text-embedding-3-large",EMBEDDING_DIMENSIONS:"1024"}},{id:"ollama",label:"Ollama (nomic-embed-text)",hint:"768-dim local embeddings. Free, no key. Lower retrieval quality than OpenAI.",fields:[{name:"OLLAMA_HOST",label:"Ollama host",type:"text",placeholder:"http://localhost:11434"}],env:{EMBEDDING_PROVIDER:"ollama",EMBEDDING_MODEL:"nomic-embed-text",EMBEDDING_DIMENSIONS:"768"}},{id:"openrouter",label:"OpenRouter",hint:"Uses OpenRouter as an embedding gateway. Reuses your LLM key.",fields:[{name:"OPENROUTER_API_KEY",label:"OpenRouter API key",type:"password",placeholder:"sk-or-\u2026",sharedWith:"llm"}],env:{EMBEDDING_PROVIDER:"openrouter",EMBEDDING_MODEL:"openai/text-embedding-3-large",EMBEDDING_DIMENSIONS:"1024"}}],HL=Object.fromEntries(ni.map(e=>[e.id,{model:e.env.EMBEDDING_MODEL,dimensions:Number(e.env.EMBEDDING_DIMENSIONS)}]))});function __(e){return Su.every(t=>{let r=e[t.id]?.status;return t.skippable?w_.has(r):r===ee.DONE})}function S_(e){return Qi.find(r=>!w_.has(e[r]?.status))||"FINISH"}var ee,w_,Su,Qi,E_,b_=f(()=>{ee={PENDING:"PENDING",ACTIVE:"ACTIVE",DONE:"DONE",SKIPPED:"SKIPPED",ERROR:"ERROR"},w_=new Set([ee.DONE,ee.SKIPPED]),Su=[{id:"CONNECTORS",skippable:!0,validate:()=>!0},{id:"PROVIDER",skippable:!1,validate:e=>!!e?.llmProvider},{id:"EMBEDDING",skippable:!1,validate:e=>!!e?.provider},{id:"DATABASE",skippable:!1,validate:e=>!!e?.pgvector&&Number(e?.migrationsRan)>0},{id:"FINISH",skippable:!1,validate:()=>!0}],Qi=Su.map(e=>e.id),E_=Object.fromEntries(Su.map(e=>[e.id,e]))});import{existsSync as UL,readFileSync as GL,writeFileSync as jL,mkdirSync as WL,renameSync as VL}from"node:fs";import{dirname as KL}from"node:path";function bu(){return new Date().toISOString()}function ii(){let e={};for(let r of Qi)e[r]={status:ee.PENDING,error:null,data:{}};let t=bu();return{version:x_,status:"IN_PROGRESS",currentStep:Qi[0],startedAt:t,updatedAt:t,steps:e}}function qs(e=Ao){try{if(!UL(e))return ii();let t=JSON.parse(GL(e,"utf8"));if(!t||typeof t!="object"||t.version!==x_||!t.steps)return ii();let r=ii(),n={...r.steps};for(let i of Qi)t.steps[i]&&(n[i]={status:ee.PENDING,error:null,data:{},...t.steps[i]});return{...r,...t,steps:n}}catch{return ii()}}function eo(e,t=Ao){WL(KL(t),{recursive:!0});let r=`${t}.${process.pid}.tmp`;return jL(r,JSON.stringify(e,null,2),"utf8"),VL(r,t),e}function I_(e){return JSON.parse(JSON.stringify(e))}function v_(e){__(e.steps)?(e.status="COMPLETED",e.currentStep="FINISH"):(e.status="IN_PROGRESS",e.currentStep=S_(e.steps))}function xu(e,{step:t,status:r,data:n,error:i}={}){let o=E_[t];if(!o)throw new le({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`unknown onboarding step: ${t}`});if(!ee[r])throw new le({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`unknown step status: ${r}`});let s=I_(e),c={...s.steps[t].data||{},...n||{}};if(r===ee.DONE&&!o.validate(c))throw new le({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`step ${t} cannot be marked DONE: its invariant is not satisfied`,data:{step:t,data:c}});if(r===ee.SKIPPED&&!o.skippable)throw new le({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`step ${t} is not skippable`});return s.steps[t]={status:r,error:i||null,data:c},v_(s),s.updatedAt=bu(),s}async function YL(e){let t={configured:!!(e.SIGIL_DATABASE_URL||e.SIGIL_DB_HOST),reachable:!1,pgvector:!1,migrationsRan:0};if(!t.configured)return t;try{let{default:r}=await Promise.resolve().then(()=>(N(),j));await r.raw("SELECT 1"),t.reachable=!0;let n=await r.raw("SELECT extname FROM pg_extension WHERE extname = 'vector'");t.pgvector=n.rows.length>0;let[i]=await r("knex_migrations").count("* as n").catch(()=>[{n:0}]);t.migrationsRan=Number(i?.n??0)}catch{}return t}async function Iu(e,{readEnv:t=gt,probeDb:r=YL}={}){let n=t(),i=I_(e),o=n.SIGIL_SETUP_COMPLETE==="true",s=(p,u,m)=>{let h=i.steps[p];i.steps[p]={status:u,error:u===ee.ERROR?h.error:null,data:{...h.data||{},...m||{}}}},a=p=>i.steps[p].status===ee.DONE;n.LLM_PROVIDER&&s("PROVIDER",ee.DONE,{llmProvider:n.LLM_PROVIDER}),n.EMBEDDING_PROVIDER&&s("EMBEDDING",ee.DONE,{provider:n.EMBEDDING_PROVIDER,model:n.EMBEDDING_MODEL||null,dim:n.EMBEDDING_DIMENSIONS||null});let c=await r(n),l={configured:c.configured,mode:n.SIGIL_DATABASE_URL?"url":n.SIGIL_DB_HOST?"fields":null,reachable:c.reachable,pgvector:c.pgvector,migrationsRan:c.migrationsRan},d=c.configured&&c.pgvector&&c.migrationsRan>0;return s("DATABASE",d||a("DATABASE")?ee.DONE:i.steps.DATABASE.status,l),o&&(n.LLM_PROVIDER&&s("PROVIDER",ee.DONE,{}),n.EMBEDDING_PROVIDER&&s("EMBEDDING",ee.DONE,{}),c.configured&&s("DATABASE",ee.DONE,{}),i.steps.CONNECTORS.status===ee.PENDING&&s("CONNECTORS",ee.SKIPPED,{}),s("FINISH",ee.DONE,{})),v_(i),i.updatedAt=bu(),i}function Js(e,t=gt()){let r=e.steps;return{setupComplete:e.status==="COMPLETED",env:{llmProvider:t.LLM_PROVIDER||null,embeddingProvider:t.EMBEDDING_PROVIDER||null,embeddingModel:t.EMBEDDING_MODEL||null,embeddingDim:t.EMBEDDING_DIMENSIONS||null,hasDatabaseUrl:!!t.SIGIL_DATABASE_URL,hasDiscreteDb:!!t.SIGIL_DB_HOST},steps:{database:{done:r.DATABASE.status===ee.DONE,configured:!!r.DATABASE.data?.configured,pgvector:!!r.DATABASE.data?.pgvector,migrationsRan:Number(r.DATABASE.data?.migrationsRan||0)},llm:{done:r.PROVIDER.status===ee.DONE,provider:r.PROVIDER.data?.llmProvider||null},embedding:{done:r.EMBEDDING.status===ee.DONE,provider:r.EMBEDDING.data?.provider||null}}}}var x_,A_=f(()=>{M();ri();pn();b_();x_=1});var vu={};v(vu,{EMBEDDING_TABLES:()=>T_,diagnoseConflict:()=>zL,inspectSchemaDims:()=>JL});import qL from"pg";async function JL(e){let t=new qL.Client(e);await t.connect();try{let{rows:r}=await t.query(`
643
647
  SELECT c.relname AS tbl,
644
648
  a.atttypmod AS typmod,
645
649
  format_type(a.atttypid, a.atttypmod) AS coltype
@@ -648,22 +652,95 @@ The absolute path above is baked in by \`sigil init\` so the command works regar
648
652
  WHERE a.attname = 'embedding'
649
653
  AND c.relkind = 'r'
650
654
  AND c.relname = ANY($1)
651
- `,[r_]),n={};for(let i of r){let o=i.typmod>0?i.typmod:WN(i.coltype),s=0;try{let{rows:a}=await t.query(`SELECT count(embedding)::int AS n FROM ${VN(i.tbl)}`);s=a[0].n}catch{}n[i.tbl]={dim:o,coltype:i.coltype,populated:s}}return n}finally{try{await t.end()}catch{}}}function jN({targetDim:e,schema:t}){let r=null,n={},i=0;for(let[s,a]of Object.entries(t||{}))a.dim!=null&&(r==null&&(r=a.dim),a.dim!==e&&a.populated>0&&(n[s]=a.populated,i+=a.populated));return{conflict:r!=null&&r!==e&&i>0,currentDim:r,targetDim:e,rowsAtRisk:n,totalAtRisk:i}}function WN(e){let t=/vector\((\d+)\)/i.exec(e||"");return t?Number(t[1]):null}function VN(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`refusing to quote invalid identifier: ${e}`);return`"${e}"`}var r_,xl=f(()=>{r_=["fact","chunk","entity","embedding_cache"]});import{existsSync as KN,readFileSync as YN,writeFileSync as qN,mkdirSync as JN}from"node:fs";import{dirname as zN}from"node:path";function Il(){if(!KN(ye))return{};let e=YN(ye,"utf8"),t={};for(let r of e.split(`
652
- `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let i=n[2].trim();t[n[1]]=i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'")?i.slice(1,-1):i}return t}function vl(e){let r={...Il(),...e};for(let o of Object.keys(e))(e[o]===null||e[o]===void 0)&&delete r[o];JN(zN(ye),{recursive:!0});let n=`# Sigil \u2014 updated ${new Date().toISOString().slice(0,10)}
653
- `,i=Object.entries(r).map(([o,s])=>`${o}=${/[\s#"']/.test(String(s))?`"${String(s).replace(/"/g,'\\"')}"`:s}`).join(`
654
- `);qN(ye,n+i+`
655
- `,"utf8")}function i_(e){e.register("onboardingState",async()=>{let t=Il(),r=!!(t.SIGIL_DATABASE_URL||t.SIGIL_DB_HOST),n=!!t.LLM_PROVIDER,i=!!t.EMBEDDING_PROVIDER,o=t.SIGIL_SETUP_COMPLETE==="true",s=!1,a=!1,c=0;if(r)try{let{default:l}=await Promise.resolve().then(()=>(D(),G));await l.raw("SELECT 1"),a=(await l.raw("SELECT extname FROM pg_extension WHERE extname = 'vector'")).rows.length>0;let[p]=await l("knex_migrations").count("* as n").catch(()=>[{n:0}]);c=Number(p?.n??0),s=a&&c>0}catch{}return{setupComplete:o,env:{llmProvider:t.LLM_PROVIDER||null,embeddingProvider:t.EMBEDDING_PROVIDER||null,embeddingModel:t.EMBEDDING_MODEL||null,embeddingDim:t.EMBEDDING_DIMENSIONS||null,hasDatabaseUrl:!!t.SIGIL_DATABASE_URL,hasDiscreteDb:!!t.SIGIL_DB_HOST},steps:{database:{done:s,configured:r,pgvector:a,migrationsRan:c},llm:{done:n,provider:t.LLM_PROVIDER||null},embedding:{done:i,provider:t.EMBEDDING_PROVIDER||null}}}}),e.register("listLlmProviders",async()=>({providers:n_})),e.register("listEmbeddingProviders",async()=>({providers:Sl})),e.register("configureLlm",async t=>{let r=n_.find(i=>i.id===t.id);if(!r){let i=new Error(`unknown llm provider: ${t.id}`);throw i.code="invalid_params",i}let n={...r.env};for(let i of r.fields)i.optional&&!t[i.name]||(n[i.name]=t[i.name]);return vl(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("configureEmbedding",async t=>{let r=Sl.find(i=>i.id===t.id);if(!r){let i=new Error(`unknown embedding provider: ${t.id}`);throw i.code="invalid_params",i}let n={...r.env};for(let i of r.fields)i.optional&&!t[i.name]||i.sharedWith==="llm"&&!t[i.name]&&Il()[i.name]||(n[i.name]=t[i.name]);return vl(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("inspectEmbeddingCompat",async(t={})=>{let r=t.id?Sl.find(o=>o.id===t.id):null,n=Number(t.targetDim??r?.env?.EMBEDDING_DIMENSIONS??0);if(!n){let o=new Error("inspectEmbeddingCompat: need a provider id or targetDim");throw o.code="invalid_params",o}let i;try{if(t.url){let{buildUrlConnection:o}=await Promise.resolve().then(()=>(Wr(),$d));i=o(t.url)}else if(t.host){let{buildLocalConnection:o}=await Promise.resolve().then(()=>(jr(),Td));i=o({db:{host:t.host,port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}else{let{default:o}=await Promise.resolve().then(()=>(R(),X)),{selectDriver:s}=await Promise.resolve().then(()=>(qn(),Qi));i=s(o).connection}}catch(o){let{diagnoseError:s}=await Promise.resolve().then(()=>(Qe(),ut)),a=s(o);return{ok:!1,error:a.humanMessage,kind:a.kind,fixHint:a.fixHint}}try{let{inspectSchemaDims:o,diagnoseConflict:s}=await Promise.resolve().then(()=>(xl(),bl)),a=await o(i);return{ok:!0,...s({targetDim:n,schema:a}),schema:a}}catch(o){let{diagnoseError:s}=await Promise.resolve().then(()=>(Qe(),ut)),a=s(o);return{ok:!1,error:a.humanMessage,kind:a.kind,fixHint:a.fixHint}}}),e.register("wipeEmbeddingData",async(t={})=>{if(t.confirm!==!0){let r=new Error("wipeEmbeddingData: refusing without confirm:true");throw r.code="invalid_params",r}try{let{default:r}=await Promise.resolve().then(()=>(D(),G)),{EMBEDDING_TABLES:n}=await Promise.resolve().then(()=>(xl(),bl));return await r.raw(`TRUNCATE ${n.join(", ")} RESTART IDENTITY CASCADE`),{ok:!0,truncated:n}}catch(r){let{diagnoseError:n}=await Promise.resolve().then(()=>(Qe(),ut)),i=n(r);return{ok:!1,error:i.humanMessage,kind:i.kind,fixHint:i.fixHint}}}),e.register("markOnboardingComplete",async()=>(vl({SIGIL_SETUP_COMPLETE:"true"}),setTimeout(()=>process.exit(0),250),{ok:!0,restarting:!0})),e.register("restartDaemon",async()=>(setTimeout(()=>process.exit(0),250),{ok:!0,restarting:!0})),e.register("testLlm",async()=>{try{let{prompt:t}=await Promise.resolve().then(()=>(Ve(),np));return{ok:!0,response:(await t("Reply with the single word: ok",{caller:"onboarding-test"})).slice(0,200)}}catch(t){let{diagnoseError:r}=await Promise.resolve().then(()=>(Qe(),ut)),n=r(t);return{ok:!1,error:n.humanMessage,kind:n.kind,fixHint:n.fixHint}}}),e.register("testEmbedding",async()=>{try{let{embed:t}=await Promise.resolve().then(()=>(Ot(),oo)),r=await t("Sigil onboarding test");return!Array.isArray(r)||r.length===0?{ok:!1,error:"The embedder returned an empty vector.",kind:"other"}:{ok:!0,dim:r.length}}catch(t){let{diagnoseError:r}=await Promise.resolve().then(()=>(Qe(),ut)),n=r(t);return{ok:!1,error:n.humanMessage,kind:n.kind,fixHint:n.fixHint}}})}var n_,Sl,o_=f(()=>{B();n_=[{id:"claude-cli",label:"Claude Code",hint:"Uses your existing Claude Code subscription \u2014 no extra API key.",recommended:!0,fields:[],env:{LLM_PROVIDER:"claude-cli"}},{id:"openrouter",label:"OpenRouter",hint:"One API key for many models (Anthropic, OpenAI, Gemini, \u2026). Cheapest default.",fields:[{name:"OPENROUTER_API_KEY",label:"OpenRouter API key",type:"password",placeholder:"sk-or-\u2026"},{name:"LLM_OPENROUTER_MODEL",label:"Model (optional)",type:"text",placeholder:"google/gemini-flash-latest",optional:!0}],env:{LLM_PROVIDER:"openrouter"}},{id:"openai",label:"OpenAI",hint:"Direct OpenAI access. Requires sk-\u2026 key with chat + embeddings.",fields:[{name:"OPENAI_API_KEY",label:"OpenAI API key",type:"password",placeholder:"sk-\u2026"},{name:"LLM_OPENAI_MODEL",label:"Model (optional)",type:"text",placeholder:"gpt-4o-mini",optional:!0}],env:{LLM_PROVIDER:"openai"}},{id:"anthropic",label:"Anthropic",hint:"Direct Anthropic API access.",fields:[{name:"ANTHROPIC_API_KEY",label:"Anthropic API key",type:"password",placeholder:"sk-ant-\u2026"}],env:{LLM_PROVIDER:"anthropic"}},{id:"ollama",label:"Ollama",hint:"Local Ollama install. Free + private but slower on small machines.",fields:[{name:"LLM_OLLAMA_HOST",label:"Ollama host",type:"text",placeholder:"http://localhost:11434"},{name:"LLM_OLLAMA_MODEL",label:"Model",type:"text",placeholder:"qwen2.5:7b"}],env:{LLM_PROVIDER:"ollama"}}],Sl=[{id:"openai",label:"OpenAI",hint:"text-embedding-3-large @ 1024 dimensions. Best out-of-the-box quality.",recommended:!0,fields:[{name:"OPENAI_API_KEY",label:"OpenAI API key",type:"password",placeholder:"sk-\u2026",sharedWith:"llm"}],env:{EMBEDDING_PROVIDER:"openai",EMBEDDING_MODEL:"text-embedding-3-large",EMBEDDING_DIMENSIONS:"1024"}},{id:"ollama",label:"Ollama (nomic-embed-text)",hint:"768-dim local embeddings. Free, no key. Lower retrieval quality than OpenAI.",fields:[{name:"OLLAMA_HOST",label:"Ollama host",type:"text",placeholder:"http://localhost:11434"}],env:{EMBEDDING_PROVIDER:"ollama",EMBEDDING_MODEL:"nomic-embed-text",EMBEDDING_DIMENSIONS:"768"}},{id:"openrouter",label:"OpenRouter",hint:"Uses OpenRouter as an embedding gateway. Reuses your LLM key.",fields:[{name:"OPENROUTER_API_KEY",label:"OpenRouter API key",type:"password",placeholder:"sk-or-\u2026",sharedWith:"llm"}],env:{EMBEDDING_PROVIDER:"openrouter",EMBEDDING_MODEL:"openai/text-embedding-3-large",EMBEDDING_DIMENSIONS:"1024"}}]});import{existsSync as s_}from"node:fs";import{readFile as a_,writeFile as XN,mkdir as ZN}from"node:fs/promises";import{dirname as QN}from"node:path";function l_(e){e.register("readEnv",async()=>{let t=s_(ye)?await a_(ye,"utf8"):"",r=tD(t),n={};for(let[i,o]of Object.entries(r))eD.test(i)?n[i]={masked:!0,hasValue:!!o}:n[i]={masked:!1,value:o};return{path:ye,entries:n}}),e.register("writeEnv",async t=>{let r=t.patch||{};if(typeof r!="object"||Array.isArray(r)){let s=new Error("writeEnv: params.patch must be an object");throw s.code="invalid_params",s}let n=s_(ye)?await a_(ye,"utf8"):"",i=rD(n,r);await ZN(QN(ye),{recursive:!0}),await XN(ye,i,"utf8");let o=["SIGIL_MODE","SIGIL_MASTER_NODE_ID","SIGIL_NETWORK_ENABLED"];if(Object.keys(r).some(s=>o.includes(s)))try{let{resetMemoryClient:s}=await Promise.resolve().then(()=>(xi(),bi));s()}catch{}return{ok:!0,path:ye,patchedKeys:Object.keys(r)}})}function tD(e){let t={};for(let r of e.split(`
656
- `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let i=n[1],o=n[2].trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),t[i]=o}return t}function rD(e,t){let r=new Set,i=e.split(`
657
- `).map(s=>{let a=s.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=/i);if(!a)return s;let c=a[1];if(!(c in t))return s;r.add(c);let l=t[c];return l==null?null:`${c}=${c_(l)}`}).filter(s=>s!==null);for(let[s,a]of Object.entries(t))r.has(s)||a===null||a===void 0||i.push(`${s}=${c_(a)}`);let o=i.join(`
655
+ `,[T_]),n={};for(let i of r){let o=i.typmod>0?i.typmod:XL(i.coltype),s=0;try{let{rows:a}=await t.query(`SELECT count(embedding)::int AS n FROM ${ZL(i.tbl)}`);s=a[0].n}catch{}n[i.tbl]={dim:o,coltype:i.coltype,populated:s}}return n}finally{try{await t.end()}catch{}}}function zL({targetDim:e,schema:t}){let r=null,n={},i=0;for(let[s,a]of Object.entries(t||{}))a.dim!=null&&(r==null&&(r=a.dim),a.dim!==e&&a.populated>0&&(n[s]=a.populated,i+=a.populated));return{conflict:r!=null&&r!==e&&i>0,currentDim:r,targetDim:e,rowsAtRisk:n,totalAtRisk:i}}function XL(e){let t=/vector\((\d+)\)/i.exec(e||"");return t?Number(t[1]):null}function ZL(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`refusing to quote invalid identifier: ${e}`);return`"${e}"`}var T_,Au=f(()=>{T_=["fact","chunk","entity","embedding_cache"]});import{spawnSync as QL}from"node:child_process";function J(e,t,{input:r,timeout:n=2e4}={}){let i=QL(e,t,{encoding:"utf8",input:r,timeout:n});return{code:i.status??-1,out:(i.stdout||"").trim(),err:(i.stderr||i.error?.message||"").trim()}}var zs=f(()=>{});var O_={};v(O_,{LABEL:()=>to,MANAGER:()=>Mr,install:()=>ak,restart:()=>uk,start:()=>dk,status:()=>lk,stop:()=>pk,uninstall:()=>ck});import{writeFileSync as ek,existsSync as C_,unlinkSync as tk,mkdirSync as rk}from"node:fs";import{join as nk,dirname as ik}from"node:path";import{homedir as ok}from"node:os";function Cu(){return nk(ok(),"Library","LaunchAgents",`${to}.plist`)}function Tu(){return`gui/${process.getuid()}`}function oi(){return`${Tu()}/${to}`}function Xs(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function sk(){let e=cn(),t=Ft();return`<?xml version="1.0" encoding="UTF-8"?>
656
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
657
+ <plist version="1.0">
658
+ <dict>
659
+ <key>Label</key><string>${to}</string>
660
+ <key>ProgramArguments</key>
661
+ <array>
662
+ <string>${Xs(e)}</string>
663
+ <string>${Xs(t)}</string>
664
+ </array>
665
+ <key>RunAtLoad</key><true/>
666
+ <key>KeepAlive</key><true/>
667
+ <key>ProcessType</key><string>Background</string>
668
+ <key>StandardOutPath</key><string>${Xs(te)}</string>
669
+ <key>StandardErrorPath</key><string>${Xs(te)}</string>
670
+ <key>EnvironmentVariables</key>
671
+ <dict>
672
+ <key>SIGIL_SUPERVISED</key><string>1</string>
673
+ </dict>
674
+ </dict>
675
+ </plist>
676
+ `}function ak(){let e=Cu();rk(ik(e),{recursive:!0}),ek(e,sk(),"utf8");let t=J("launchctl",["bootstrap",Tu(),e]);if(t.code!==0&&(J("launchctl",["bootout",oi()]),t=J("launchctl",["bootstrap",Tu(),e]),t.code!==0)){let r=J("launchctl",["load","-w",e]);if(r.code!==0)throw new Error(`launchctl bootstrap/load failed: ${t.err||r.err||"unknown"}`)}return J("launchctl",["kickstart","-k",oi()]),{installed:!0,manager:Mr,unitPath:e}}function ck(){let e=Cu();if(J("launchctl",["bootout",oi()]),J("launchctl",["unload","-w",e]),C_(e))try{tk(e)}catch{}return{installed:!1,manager:Mr,unitPath:e}}function lk(){let e=Cu(),t=C_(e),r=J("launchctl",["list",to]).code===0;return{installed:t,loaded:r,running:r,manager:Mr,unitPath:e}}function uk(){return{ok:J("launchctl",["kickstart","-k",oi()]).code===0,manager:Mr}}function dk(){return{ok:J("launchctl",["kickstart",oi()]).code===0,manager:Mr}}function pk(){return{ok:J("launchctl",["bootout",oi()]).code===0,manager:Mr}}var to,Mr,R_=f(()=>{M();Ei();zs();to="live.airtribe.sigil",Mr="launchd"});var N_={};v(N_,{MANAGER:()=>Fr,UNIT:()=>Ct,install:()=>Sk,restart:()=>Ik,start:()=>vk,status:()=>xk,stop:()=>Ak,uninstall:()=>bk});import{writeFileSync as fk,existsSync as $_,unlinkSync as mk,mkdirSync as hk}from"node:fs";import{join as gk,dirname as yk}from"node:path";import{homedir as wk,userInfo as Ek}from"node:os";function Ou(){return gk(wk(),".config","systemd","user",Ct)}function _k(){let e=cn(),t=Ft();return`[Unit]
677
+ Description=Sigil memory daemon
678
+ After=network-online.target
679
+
680
+ [Service]
681
+ Type=simple
682
+ ExecStart=${e} ${t}
683
+ Restart=always
684
+ RestartSec=2
685
+ Environment=SIGIL_SUPERVISED=1
686
+ StandardOutput=append:${te}
687
+ StandardError=append:${te}
688
+
689
+ [Install]
690
+ WantedBy=default.target
691
+ `}function Ot(e){return J("systemctl",["--user",...e])}function Sk(){let e=Ou();hk(yk(e),{recursive:!0}),fk(e,_k(),"utf8"),Ot(["daemon-reload"]);let t=Ot(["enable","--now",Ct]);if(t.code!==0)throw new Error(`systemctl --user enable --now failed: ${t.err||"unknown"}`);return J("loginctl",["enable-linger",Ek().username]),{installed:!0,manager:Fr,unitPath:e}}function bk(){let e=Ou();if(Ot(["disable","--now",Ct]),$_(e))try{mk(e)}catch{}return Ot(["daemon-reload"]),{installed:!1,manager:Fr,unitPath:e}}function xk(){let e=Ou(),t=Ot(["is-enabled",Ct]).out==="enabled",r=Ot(["is-active",Ct]).out==="active";return{installed:$_(e)||t,loaded:t,running:r,manager:Fr,unitPath:e}}function Ik(){return{ok:Ot(["restart",Ct]).code===0,manager:Fr}}function vk(){return{ok:Ot(["start",Ct]).code===0,manager:Fr}}function Ak(){return{ok:Ot(["stop",Ct]).code===0,manager:Fr}}var Ct,Fr,D_=f(()=>{M();Ei();zs();Ct="sigil.service",Fr="systemd"});var L_={};v(L_,{MANAGER:()=>Br,TASK:()=>Be,install:()=>Ck,restart:()=>$k,start:()=>Nk,status:()=>Rk,stop:()=>Dk,uninstall:()=>Ok});function Tk(){return`\\"${cn()}\\" \\"${Ft()}\\"`}function Ck(){let e=J("schtasks",["/Create","/SC","ONLOGON","/TN",Be,"/TR",Tk(),"/RL","LIMITED","/F"]);if(e.code!==0)throw new Error(`schtasks /Create failed: ${e.err||"unknown"}`);return J("schtasks",["/Run","/TN",Be]),{installed:!0,manager:Br,unitPath:`Task Scheduler\\${Be}`}}function Ok(){return J("schtasks",["/Delete","/TN",Be,"/F"]),{installed:!1,manager:Br,unitPath:`Task Scheduler\\${Be}`}}function Rk(){let e=J("schtasks",["/Query","/TN",Be]),t=e.code===0,r=t&&/Running/i.test(e.out);return{installed:t,loaded:t,running:r,manager:Br,unitPath:`Task Scheduler\\${Be}`}}function $k(){return J("schtasks",["/End","/TN",Be]),{ok:J("schtasks",["/Run","/TN",Be]).code===0,manager:Br}}function Nk(){return{ok:J("schtasks",["/Run","/TN",Be]).code===0,manager:Br}}function Dk(){return{ok:J("schtasks",["/End","/TN",Be]).code===0,manager:Br}}var Be,Br,k_=f(()=>{Ei();zs();Be="Sigil",Br="schtasks"});var ku={};v(ku,{installService:()=>$u,installServiceUnit:()=>Zs,isServiceInstalled:()=>Fk,platformSupported:()=>Ru,restartService:()=>Lu,serviceStatus:()=>no,startService:()=>Nu,stopService:()=>Du,uninstallService:()=>ro});import{readFileSync as Lk}from"node:fs";import{setTimeout as kk}from"node:timers/promises";function P_(){switch(process.platform){case"darwin":return()=>Promise.resolve().then(()=>(R_(),O_));case"linux":return()=>Promise.resolve().then(()=>(D_(),N_));case"win32":return()=>Promise.resolve().then(()=>(k_(),L_));default:return null}}async function Hr(){let e=P_();if(!e)throw new le({errorCode:"SUPERVISOR_UNSUPPORTED_PLATFORM",message:`no always-up backend for platform "${process.platform}"`});return e()}function Ru(){return P_()!==null}function Pk(){try{let e=JSON.parse(Lk(on,"utf8"));return{...e,ageMs:typeof e.ts=="number"?Date.now()-e.ts:null}}catch{return null}}async function Mk(){let{readPidFile:e,isPidAlive:t}=await Promise.resolve().then(()=>(an(),ep)),r=await e();if(!r||!t(r))return;try{process.kill(r,"SIGTERM")}catch{}let n=Date.now()+5e3;for(;Date.now()<n&&t(r);)await kk(50);if(t(r))try{process.kill(r,"SIGKILL")}catch{}}async function Zs(){let e=await Hr();try{return e.install()}catch(t){throw new le({errorCode:"SUPERVISOR_INSTALL_FAILED",message:t.message})}}async function $u(){return await Mk(),Zs()}async function ro(){return(await Hr()).uninstall()}async function Nu(){return(await Hr()).start()}async function Du(){return(await Hr()).stop()}async function Lu(){return(await Hr()).restart()}async function no(){let e;try{e=(await Hr()).status()}catch{e={installed:!1,running:!1,manager:null,unitPath:null,unsupported:!0}}return{platform:process.platform,supervisor:e,heartbeat:Pk()}}async function Fk(){try{return(await Hr()).status().installed}catch{return!1}}var io=f(()=>{pn();M()});function M_(e){e.register("onboardingState",async()=>{let t=qs(),r=JSON.stringify(t),n=await Iu(t);return JSON.stringify(n)!==r&&eo(n),{...Js(n),machine:n}}),e.register("onboardingAdvance",async(t={})=>{let r=xu(qs(),{step:t.step,status:t.status,data:t.data,error:t.error});return eo(r),{...Js(r),machine:r}}),e.register("onboardingReset",async()=>{let t=eo(ii());return cr({SIGIL_SETUP_COMPLETE:null}),{...Js(t),machine:t}}),e.register("listLlmProviders",async()=>({providers:Ys})),e.register("listEmbeddingProviders",async()=>({providers:ni})),e.register("configureLlm",async t=>{let r=Ys.find(i=>i.id===t.id);if(!r){let i=new Error(`unknown llm provider: ${t.id}`);throw i.code="invalid_params",i}let n={...r.env};for(let i of r.fields)i.optional&&!t[i.name]||(n[i.name]=t[i.name]);return cr(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("configureEmbedding",async t=>{let r=ni.find(i=>i.id===t.id);if(!r){let i=new Error(`unknown embedding provider: ${t.id}`);throw i.code="invalid_params",i}let n={...r.env};for(let i of r.fields)i.optional&&!t[i.name]||i.sharedWith==="llm"&&!t[i.name]&&gt()[i.name]||(n[i.name]=t[i.name]);return cr(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("inspectEmbeddingCompat",async(t={})=>{let r=t.id?ni.find(o=>o.id===t.id):null,n=Number(t.targetDim??r?.env?.EMBEDDING_DIMENSIONS??0);if(!n){let o=new Error("inspectEmbeddingCompat: need a provider id or targetDim");throw o.code="invalid_params",o}let i;try{if(t.url){let{buildUrlConnection:o}=await Promise.resolve().then(()=>(_r(),up));i=o(t.url)}else if(t.host){let{buildLocalConnection:o}=await Promise.resolve().then(()=>(hn(),Vp));i=o({db:{host:t.host,port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}else{let{default:o}=await Promise.resolve().then(()=>($(),re)),{selectDriver:s}=await Promise.resolve().then(()=>(xi(),Wo));i=s(o).connection}}catch(o){let{diagnoseError:s}=await Promise.resolve().then(()=>(Oe(),ut)),a=s(o);return{ok:!1,error:a.humanMessage,kind:a.kind,fixHint:a.fixHint}}try{let{inspectSchemaDims:o,diagnoseConflict:s}=await Promise.resolve().then(()=>(Au(),vu)),a=await o(i);return{ok:!0,...s({targetDim:n,schema:a}),schema:a}}catch(o){let{diagnoseError:s}=await Promise.resolve().then(()=>(Oe(),ut)),a=s(o);return{ok:!1,error:a.humanMessage,kind:a.kind,fixHint:a.fixHint}}}),e.register("wipeEmbeddingData",async(t={})=>{if(t.confirm!==!0){let r=new Error("wipeEmbeddingData: refusing without confirm:true");throw r.code="invalid_params",r}try{let{default:r}=await Promise.resolve().then(()=>(N(),j)),{EMBEDDING_TABLES:n}=await Promise.resolve().then(()=>(Au(),vu));return await r.raw(`TRUNCATE ${n.join(", ")} RESTART IDENTITY CASCADE`),{ok:!0,truncated:n}}catch(r){let{diagnoseError:n}=await Promise.resolve().then(()=>(Oe(),ut)),i=n(r);return{ok:!1,error:i.humanMessage,kind:i.kind,fixHint:i.fixHint}}}),e.register("markOnboardingComplete",async(t={})=>{cr({SIGIL_SETUP_COMPLETE:"true"});try{let n=await Iu(qs());eo(xu(n,{step:"FINISH",status:"DONE"}))}catch{}let r=!1;if(t.installService)try{let{installServiceUnit:n}=await Promise.resolve().then(()=>(io(),ku));await n(),r=!0}catch{}return setTimeout(()=>process.exit(0),250),{ok:!0,restarting:!0,serviceInstalled:r}}),e.register("restartDaemon",async()=>(setTimeout(()=>process.exit(0),250),{ok:!0,restarting:!0})),e.register("testLlm",async()=>{try{let{resetDetection:t,detectProvider:r}=await Promise.resolve().then(()=>(Sr(),Ai)),{readEnvRaw:n}=await Promise.resolve().then(()=>(ri(),g_)),i=n();for(let c of["LLM_PROVIDER","OPENAI_API_KEY","ANTHROPIC_API_KEY","OPENROUTER_API_KEY","LLM_OPENROUTER_MODEL","LLM_OPENAI_MODEL","LLM_OLLAMA_HOST","LLM_OLLAMA_MODEL","LLM_CLI_MODEL"])i[c]&&(process.env[c]=i[c]);t();let o=await r(),{prompt:s}=await Promise.resolve().then(()=>(Xe(),_f)),a=await s("Reply with the single word: ok",{caller:"onboarding-test"});return{ok:!0,response:String(a).slice(0,200),provider:o}}catch(t){return{ok:!1,error:t.message,kind:"llm"}}}),e.register("testEmbedding",async()=>{try{let{embed:t}=await Promise.resolve().then(()=>(jt(),Jo)),r=await t("Sigil onboarding test");return!Array.isArray(r)||r.length===0?{ok:!1,error:"The embedder returned an empty vector.",kind:"other"}:{ok:!0,dim:r.length}}catch(t){let{diagnoseError:r}=await Promise.resolve().then(()=>(Oe(),ut)),n=r(t);return{ok:!1,error:n.humanMessage,kind:n.kind,fixHint:n.fixHint}}})}var F_=f(()=>{ri();_u();A_()});var G_={};v(G_,{detect:()=>Gk,install:()=>jk,mergeHooks:()=>U_,meta:()=>Uk,uninstall:()=>Vk,verify:()=>Wk,writeImportLine:()=>H_});import{join as Rt}from"node:path";import{homedir as Bk}from"node:os";import{existsSync as lr}from"node:fs";import{fileURLToPath as Hk}from"node:url";import{dirname as Qs}from"node:path";async function Gk(){return lr(oo)}async function H_({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(oo,{recursive:!0});let r=`@${Tt}`,n="";if(lr(Ue)&&(n=await t.readFile(Ue,"utf8")),n.includes(r))return{action:"skip",path:Ue,detail:"already imports sigil CLAUDE.md"};let i=n.trim()?`
692
+ `:"",o=`${n}${i}${r}
693
+ `;return{action:(await se(Ue,o,{dryRun:e})).action,path:Ue,detail:n?"+1 @import line":"new file"}}async function U_({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let u=await t.readFile(He,"utf8");r=JSON.parse(u)}catch{}let n=Rt(B_,"src","hooks"),i=Rt(B_,"dist","hooks"),o=lr(i)?i:n,s={UserPromptSubmit:{hooks:[{type:"command",command:`node ${Rt(o,"user-prompt-submit.js")}`,timeout:10,statusMessage:"Searching memory..."}]},PostToolUse:{matcher:"Edit|Write|Bash",hooks:[{type:"command",command:`node ${Rt(o,"post-tool-use.js")}`,timeout:10,async:!0}]},Stop:{hooks:[{type:"command",command:`node ${Rt(o,"stop.js")}`,timeout:30,async:!0}]},SessionEnd:{hooks:[{type:"command",command:`node ${Rt(o,"session-end.js")}`,timeout:10,async:!0}]}},a=lr(He);r.hooks=r.hooks||{};let c=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],l=u=>typeof u=="string"&&c.some(m=>u.endsWith(m)||u.includes(`/${m}`));for(let[u,m]of Object.entries(s)){let y=(r.hooks[u]||[]).filter(w=>!w.hooks?.some(b=>l(b.command)));r.hooks[u]=[...y,m]}e||await t.mkdir(oo,{recursive:!0});let d=JSON.stringify(r,null,2);return{action:(await se(He,d,{dryRun:e})).action,path:He,detail:a?"+UserPromptSubmit, +PostToolUse, +Stop, +SessionEnd hooks (other settings preserved)":"new settings.json with sigil hooks"}}async function jk({dryRun:e=!1}={}){let t=[],r=await Eu({dryRun:e});r&&t.push({action:r.action,path:r.path,detail:`${r.bytes??0} bytes`});let n=await H_({dryRun:e});n&&t.push(n);let i=await U_({dryRun:e});return i&&t.push(i),{actions:t}}async function Wk(){let e=await import("node:fs/promises"),t=`@${Tt}`;if(!lr(Ue))return{installed:!1,reason:"~/.claude/CLAUDE.md missing \u2014 run `sigil init`"};if(!(await e.readFile(Ue,"utf8")).includes(t))return{installed:!1,reason:"@import line missing from ~/.claude/CLAUDE.md"};if(!lr(He))return{installed:!1,reason:"~/.claude/settings.json missing \u2014 hooks not registered"};let n;try{n=JSON.parse(await e.readFile(He,"utf8"))}catch{return{installed:!1,reason:"~/.claude/settings.json is not valid JSON"}}let i=n.hooks||{},s=["UserPromptSubmit","PostToolUse","Stop","SessionEnd"].filter(a=>!(i[a]||[]).some(l=>l.hooks?.some(d=>typeof d.command=="string"&&(d.command.includes("user-prompt-submit.js")||d.command.includes("post-tool-use.js")||d.command.includes("stop.js")||d.command.includes("session-end.js")))));return s.length?{installed:!1,reason:`hooks missing: ${s.join(", ")}`}:{installed:!0}}async function Vk({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(lr(Ue)){let n=`@${Tt}`,i=await t.readFile(Ue,"utf8"),o=new RegExp(`^${n.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}\\s*\\n?`,"gm"),s=i.replace(o,"");if(s!==i){let a=await se(Ue,s,{dryRun:e});r.push({action:a.action,path:Ue,detail:"-1 @import line"})}else r.push({action:"skip",path:Ue,detail:"@import not present"})}if(lr(He)){let n;try{n=JSON.parse(await t.readFile(He,"utf8"))}catch{return r.push({action:"skip",path:He,detail:"invalid JSON \u2014 not touched"}),{actions:r}}let i=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],o=a=>typeof a=="string"&&i.some(c=>a.endsWith(c)||a.includes(`/${c}`)),s=!1;for(let a of Object.keys(n.hooks||{})){let c=n.hooks[a],l=c.filter(d=>!d.hooks?.some(p=>o(p.command)));l.length!==c.length&&(s=!0,l.length===0?delete n.hooks[a]:n.hooks[a]=l)}if(s){let a=await se(He,JSON.stringify(n,null,2),{dryRun:e});r.push({action:a.action,path:He,detail:"sigil hooks removed (other entries preserved)"})}else r.push({action:"skip",path:He,detail:"no sigil hooks to remove"})}return{actions:r}}var oo,Ue,He,B_,Uk,j_=f(()=>{Pr();ti();oo=Rt(Bk(),".claude"),Ue=Rt(oo,"CLAUDE.md"),He=Rt(oo,"settings.json"),B_=Qs(Qs(Qs(Qs(Hk(import.meta.url))))),Uk={id:"claude-code",label:"Claude Code",hint:"hooks + @import \u2014 full auto-injection"}});var J_={};v(J_,{detect:()=>zk,install:()=>Zk,meta:()=>Jk,resolveServerPath:()=>K_,uninstall:()=>eP,verify:()=>Qk,writeMcpEntry:()=>Y_,writeRulesFile:()=>q_});import{join as Gr,dirname as so}from"node:path";import{homedir as V_}from"node:os";import{existsSync as jr}from"node:fs";import{fileURLToPath as Kk}from"node:url";async function zk(){return jr(ea)}function K_(){let e=Gr(W_,"dist","server.js"),t=Gr(W_,"src","server.js");return jr(e)?e:t}async function Y_({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Ge,"utf8");r=JSON.parse(o)}catch{}let n=jr(Ge);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[K_(),"--mcp"],env:{DOTENV_CONFIG_PATH:qk}},e||await t.mkdir(ea,{recursive:!0}),{action:(await se(Ge,JSON.stringify(r,null,2),{dryRun:e})).action,path:Ge,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}function Xk(){return["---","description: Sigil persistent memory \u2014 consult before answering, save in batches","alwaysApply: true","---",""].join(`
694
+ `)+ar()}async function q_({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(so(Ur),{recursive:!0});let r=await se(Ur,Xk(),{dryRun:e});return{action:r.action,path:Ur,detail:`${r.bytes??0} bytes, alwaysApply=true`}}async function Zk({dryRun:e=!1}={}){let t=[],r=await Y_({dryRun:e});r&&t.push(r);let n=await q_({dryRun:e});return n&&t.push(n),{actions:t}}async function Qk(){let e=await import("node:fs/promises");if(!jr(Ge))return{installed:!1,reason:"~/.cursor/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(Ge,"utf8"))}catch{return{installed:!1,reason:"~/.cursor/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?jr(Ur)?{installed:!0}:{installed:!1,reason:"~/.cursor/rules/sigil.mdc missing"}:{installed:!1,reason:"sigil entry missing from ~/.cursor/mcp.json"}}async function eP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(jr(Ge)){let n;try{n=JSON.parse(await t.readFile(Ge,"utf8"))}catch{return r.push({action:"skip",path:Ge,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let i=await se(Ge,JSON.stringify(n,null,2),{dryRun:e});r.push({action:i.action,path:Ge,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:Ge,detail:"sigil entry not present"})}return jr(Ur)&&(e||await t.unlink(Ur),r.push({action:"delete",path:Ur,detail:"sigil rules file removed"})),{actions:r}}var ea,Ge,Ur,Yk,qk,W_,Jk,z_=f(()=>{Pr();ti();ea=Gr(V_(),".cursor"),Ge=Gr(ea,"mcp.json"),Ur=Gr(ea,"rules","sigil.mdc"),Yk=Gr(V_(),".sigil"),qk=Gr(Yk,".env"),W_=so(so(so(so(Kk(import.meta.url))))),Jk={id:"cursor",label:"Cursor",hint:"global MCP + always-applied rule (no native hooks)"}});var Z_=we((x4,X_)=>{"use strict";var Wr=class e extends Error{constructor(t,r,n){super("[ParserError] "+t,r,n),this.name="ParserError",this.code="ParserError",Error.captureStackTrace&&Error.captureStackTrace(this,e)}},ta=class{constructor(t){this.parser=t,this.buf="",this.returned=null,this.result=null,this.resultTable=null,this.resultArr=null}},ao=class{constructor(){this.pos=0,this.col=0,this.line=0,this.obj={},this.ctx=this.obj,this.stack=[],this._buf="",this.char=null,this.ii=0,this.state=new ta(this.parseStart)}parse(t){if(t.length===0||t.length==null)return;this._buf=String(t),this.ii=-1,this.char=-1;let r;for(;r===!1||this.nextChar();)r=this.runOne();this._buf=null}nextChar(){return this.char===10&&(++this.line,this.col=-1),++this.ii,this.char=this._buf.codePointAt(this.ii),++this.pos,++this.col,this.haveBuffer()}haveBuffer(){return this.ii<this._buf.length}runOne(){return this.state.parser.call(this,this.state.returned)}finish(){this.char=1114112;let t;do t=this.state.parser,this.runOne();while(this.state.parser!==t);return this.ctx=null,this.state=null,this._buf=null,this.obj}next(t){if(typeof t!="function")throw new Wr("Tried to set state to non-existent state: "+JSON.stringify(t));this.state.parser=t}goto(t){return this.next(t),this.runOne()}call(t,r){r&&this.next(r),this.stack.push(this.state),this.state=new ta(t)}callNow(t,r){return this.call(t,r),this.runOne()}return(t){if(this.stack.length===0)throw this.error(new Wr("Stack underflow"));t===void 0&&(t=this.state.buf),this.state=this.stack.pop(),this.state.returned=t}returnNow(t){return this.return(t),this.runOne()}consume(){if(this.char===1114112)throw this.error(new Wr("Unexpected end-of-buffer"));this.state.buf+=this._buf[this.ii]}error(t){return t.line=this.line,t.col=this.col,t.pos=this.pos,t}parseStart(){throw new Wr("Must declare a parseStart method")}};ao.END=1114112;ao.Error=Wr;X_.exports=ao});var eS=we((I4,Q_)=>{"use strict";Q_.exports=e=>{let t=new Date(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var ra=we((v4,tS)=>{"use strict";tS.exports=(e,t)=>{for(t=String(t);t.length<e;)t="0"+t;return t}});var nS=we((A4,rS)=>{"use strict";var si=ra(),Pu=class extends Date{constructor(t){super(t+"Z"),this.isFloating=!0}toISOString(){let t=`${this.getUTCFullYear()}-${si(2,this.getUTCMonth()+1)}-${si(2,this.getUTCDate())}`,r=`${si(2,this.getUTCHours())}:${si(2,this.getUTCMinutes())}:${si(2,this.getUTCSeconds())}.${si(3,this.getUTCMilliseconds())}`;return`${t}T${r}`}};rS.exports=e=>{let t=new Pu(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var sS=we((T4,oS)=>{"use strict";var iS=ra(),tP=global.Date,Mu=class extends tP{constructor(t){super(t),this.isDate=!0}toISOString(){return`${this.getUTCFullYear()}-${iS(2,this.getUTCMonth()+1)}-${iS(2,this.getUTCDate())}`}};oS.exports=e=>{let t=new Mu(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var cS=we((C4,aS)=>{"use strict";var na=ra(),Fu=class extends Date{constructor(t){super(`0000-01-01T${t}Z`),this.isTime=!0}toISOString(){return`${na(2,this.getUTCHours())}:${na(2,this.getUTCMinutes())}:${na(2,this.getUTCSeconds())}.${na(3,this.getUTCMilliseconds())}`}};aS.exports=e=>{let t=new Fu(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var ia=we((exports,module)=>{"use strict";module.exports=makeParserClass(Z_());module.exports.makeParserClass=makeParserClass;var TomlError=class e extends Error{constructor(t){super(t),this.name="TomlError",Error.captureStackTrace&&Error.captureStackTrace(this,e),this.fromTOML=!0,this.wrapped=null}};TomlError.wrap=e=>{let t=new TomlError(e.message);return t.code=e.code,t.wrapped=e,t};module.exports.TomlError=TomlError;var createDateTime=eS(),createDateTimeFloat=nS(),createDate=sS(),createTime=cS(),CTRL_I=9,CTRL_J=10,CTRL_M=13,CTRL_CHAR_BOUNDARY=31,CHAR_SP=32,CHAR_QUOT=34,CHAR_NUM=35,CHAR_APOS=39,CHAR_PLUS=43,CHAR_COMMA=44,CHAR_HYPHEN=45,CHAR_PERIOD=46,CHAR_0=48,CHAR_1=49,CHAR_7=55,CHAR_9=57,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_A=65,CHAR_E=69,CHAR_F=70,CHAR_T=84,CHAR_U=85,CHAR_Z=90,CHAR_LOWBAR=95,CHAR_a=97,CHAR_b=98,CHAR_e=101,CHAR_f=102,CHAR_i=105,CHAR_l=108,CHAR_n=110,CHAR_o=111,CHAR_r=114,CHAR_s=115,CHAR_t=116,CHAR_u=117,CHAR_x=120,CHAR_z=122,CHAR_LCUB=123,CHAR_RCUB=125,CHAR_LSQB=91,CHAR_BSOL=92,CHAR_RSQB=93,CHAR_DEL=127,SURROGATE_FIRST=55296,SURROGATE_LAST=57343,escapes={[CHAR_b]:"\b",[CHAR_t]:" ",[CHAR_n]:`
695
+ `,[CHAR_f]:"\f",[CHAR_r]:"\r",[CHAR_QUOT]:'"',[CHAR_BSOL]:"\\"};function isDigit(e){return e>=CHAR_0&&e<=CHAR_9}function isHexit(e){return e>=CHAR_A&&e<=CHAR_F||e>=CHAR_a&&e<=CHAR_f||e>=CHAR_0&&e<=CHAR_9}function isBit(e){return e===CHAR_1||e===CHAR_0}function isOctit(e){return e>=CHAR_0&&e<=CHAR_7}function isAlphaNumQuoteHyphen(e){return e>=CHAR_A&&e<=CHAR_Z||e>=CHAR_a&&e<=CHAR_z||e>=CHAR_0&&e<=CHAR_9||e===CHAR_APOS||e===CHAR_QUOT||e===CHAR_LOWBAR||e===CHAR_HYPHEN}function isAlphaNumHyphen(e){return e>=CHAR_A&&e<=CHAR_Z||e>=CHAR_a&&e<=CHAR_z||e>=CHAR_0&&e<=CHAR_9||e===CHAR_LOWBAR||e===CHAR_HYPHEN}var _type=Symbol("type"),_declared=Symbol("declared"),hasOwnProperty=Object.prototype.hasOwnProperty,defineProperty=Object.defineProperty,descriptor={configurable:!0,enumerable:!0,writable:!0,value:void 0};function hasKey(e,t){return hasOwnProperty.call(e,t)?!0:(t==="__proto__"&&defineProperty(e,"__proto__",descriptor),!1)}var INLINE_TABLE=Symbol("inline-table");function InlineTable(){return Object.defineProperties({},{[_type]:{value:INLINE_TABLE}})}function isInlineTable(e){return e===null||typeof e!="object"?!1:e[_type]===INLINE_TABLE}var TABLE=Symbol("table");function Table(){return Object.defineProperties({},{[_type]:{value:TABLE},[_declared]:{value:!1,writable:!0}})}function isTable(e){return e===null||typeof e!="object"?!1:e[_type]===TABLE}var _contentType=Symbol("content-type"),INLINE_LIST=Symbol("inline-list");function InlineList(e){return Object.defineProperties([],{[_type]:{value:INLINE_LIST},[_contentType]:{value:e}})}function isInlineList(e){return e===null||typeof e!="object"?!1:e[_type]===INLINE_LIST}var LIST=Symbol("list");function List(){return Object.defineProperties([],{[_type]:{value:LIST}})}function isList(e){return e===null||typeof e!="object"?!1:e[_type]===LIST}var _custom;try{let utilInspect=eval("require('util').inspect");_custom=utilInspect.custom}catch(e){}var _inspect=_custom||"inspect",BoxedBigInt=class{constructor(t){try{this.value=global.BigInt.asIntN(64,t)}catch{this.value=null}Object.defineProperty(this,_type,{value:INTEGER})}isNaN(){return this.value===null}toString(){return String(this.value)}[_inspect](){return`[BigInt: ${this.toString()}]}`}valueOf(){return this.value}},INTEGER=Symbol("integer");function Integer(e){let t=Number(e);return Object.is(t,-0)&&(t=0),global.BigInt&&!Number.isSafeInteger(t)?new BoxedBigInt(e):Object.defineProperties(new Number(t),{isNaN:{value:function(){return isNaN(this)}},[_type]:{value:INTEGER},[_inspect]:{value:()=>`[Integer: ${e}]`}})}function isInteger(e){return e===null||typeof e!="object"?!1:e[_type]===INTEGER}var FLOAT=Symbol("float");function Float(e){return Object.defineProperties(new Number(e),{[_type]:{value:FLOAT},[_inspect]:{value:()=>`[Float: ${e}]`}})}function isFloat(e){return e===null||typeof e!="object"?!1:e[_type]===FLOAT}function tomlType(e){let t=typeof e;if(t==="object"){if(e===null)return"null";if(e instanceof Date)return"datetime";if(_type in e)switch(e[_type]){case INLINE_TABLE:return"inline-table";case INLINE_LIST:return"inline-list";case TABLE:return"table";case LIST:return"list";case FLOAT:return"float";case INTEGER:return"integer"}}return t}function makeParserClass(e){class t extends e{constructor(){super(),this.ctx=this.obj=Table()}atEndOfWord(){return this.char===CHAR_NUM||this.char===CTRL_I||this.char===CHAR_SP||this.atEndOfLine()}atEndOfLine(){return this.char===e.END||this.char===CTRL_J||this.char===CTRL_M}parseStart(){if(this.char===e.END)return null;if(this.char===CHAR_LSQB)return this.call(this.parseTableOrList);if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(isAlphaNumQuoteHyphen(this.char))return this.callNow(this.parseAssignStatement);throw this.error(new TomlError(`Unknown character "${this.char}"`))}parseWhitespaceToEOL(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(this.char===CHAR_NUM)return this.goto(this.parseComment);if(this.char===e.END||this.char===CTRL_J)return this.return();throw this.error(new TomlError("Unexpected character, expected only whitespace or comments till end of line"))}parseAssignStatement(){return this.callNow(this.parseAssign,this.recordAssignStatement)}recordAssignStatement(n){let i=this.ctx,o=n.key.pop();for(let s of n.key){if(hasKey(i,s)&&(!isTable(i[s])||i[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));i=i[s]=i[s]||Table()}if(hasKey(i,o))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?i[o]=n.value.valueOf():i[o]=n.value,this.goto(this.parseWhitespaceToEOL)}parseAssign(){return this.callNow(this.parseKeyword,this.recordAssignKeyword)}recordAssignKeyword(n){return this.state.resultTable?this.state.resultTable.push(n):this.state.resultTable=[n],this.goto(this.parseAssignKeywordPreDot)}parseAssignKeywordPreDot(){if(this.char===CHAR_PERIOD)return this.next(this.parseAssignKeywordPostDot);if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.goto(this.parseAssignEqual)}parseAssignKeywordPostDot(){if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.callNow(this.parseKeyword,this.recordAssignKeyword)}parseAssignEqual(){if(this.char===CHAR_EQUALS)return this.next(this.parseAssignPreValue);throw this.error(new TomlError('Invalid character, expected "="'))}parseAssignPreValue(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseValue,this.recordAssignValue)}recordAssignValue(n){return this.returnNow({key:this.state.resultTable,value:n})}parseComment(){do if(this.char===e.END||this.char===CTRL_J)return this.return();while(this.nextChar())}parseTableOrList(){if(this.char===CHAR_LSQB)this.next(this.parseList);else return this.goto(this.parseTable)}parseTable(){return this.ctx=this.obj,this.goto(this.parseTableNext)}parseTableNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseTableMore)}parseTableMore(n){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,n)&&(!isTable(this.ctx[n])||this.ctx[n][_declared]))throw this.error(new TomlError("Can't redefine existing key"));return this.ctx=this.ctx[n]=this.ctx[n]||Table(),this.ctx[_declared]=!0,this.next(this.parseWhitespaceToEOL)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,n))this.ctx=this.ctx[n]=Table();else if(isTable(this.ctx[n]))this.ctx=this.ctx[n];else if(isList(this.ctx[n]))this.ctx=this.ctx[n][this.ctx[n].length-1];else throw this.error(new TomlError("Can't redefine existing key"));return this.next(this.parseTableNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseList(){return this.ctx=this.obj,this.goto(this.parseListNext)}parseListNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseListMore)}parseListMore(n){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,n)||(this.ctx[n]=List()),isInlineList(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline array"));if(isList(this.ctx[n])){let i=Table();this.ctx[n].push(i),this.ctx=i}else throw this.error(new TomlError("Can't redefine an existing key"));return this.next(this.parseListEnd)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,n))this.ctx=this.ctx[n]=Table();else{if(isInlineList(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline array"));if(isInlineTable(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline table"));if(isList(this.ctx[n]))this.ctx=this.ctx[n][this.ctx[n].length-1];else if(isTable(this.ctx[n]))this.ctx=this.ctx[n];else throw this.error(new TomlError("Can't redefine an existing key"))}return this.next(this.parseListNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseListEnd(n){if(this.char===CHAR_RSQB)return this.next(this.parseWhitespaceToEOL);throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseValue(){if(this.char===e.END)throw this.error(new TomlError("Key without value"));if(this.char===CHAR_QUOT)return this.next(this.parseDoubleString);if(this.char===CHAR_APOS)return this.next(this.parseSingleString);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)return this.goto(this.parseNumberSign);if(this.char===CHAR_i)return this.next(this.parseInf);if(this.char===CHAR_n)return this.next(this.parseNan);if(isDigit(this.char))return this.goto(this.parseNumberOrDateTime);if(this.char===CHAR_t||this.char===CHAR_f)return this.goto(this.parseBoolean);if(this.char===CHAR_LSQB)return this.call(this.parseInlineList,this.recordValue);if(this.char===CHAR_LCUB)return this.call(this.parseInlineTable,this.recordValue);throw this.error(new TomlError("Unexpected character, expecting string, number, datetime, boolean, inline array or inline table"))}recordValue(n){return this.returnNow(n)}parseInf(){if(this.char===CHAR_n)return this.next(this.parseInf2);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseInf2(){if(this.char===CHAR_f)return this.state.buf==="-"?this.return(-1/0):this.return(1/0);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseNan(){if(this.char===CHAR_a)return this.next(this.parseNan2);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseNan2(){if(this.char===CHAR_n)return this.return(NaN);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseKeyword(){return this.char===CHAR_QUOT?this.next(this.parseBasicString):this.char===CHAR_APOS?this.next(this.parseLiteralString):this.goto(this.parseBareKey)}parseBareKey(){do{if(this.char===e.END)throw this.error(new TomlError("Key ended without value"));if(isAlphaNumHyphen(this.char))this.consume();else{if(this.state.buf.length===0)throw this.error(new TomlError("Empty bare keys are not allowed"));return this.returnNow()}}while(this.nextChar())}parseSingleString(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiStringMaybe):this.goto(this.parseLiteralString)}parseLiteralString(){do{if(this.char===CHAR_APOS)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}parseLiteralMultiStringMaybe(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiString):this.returnNow()}parseLiteralMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseLiteralMultiStringContent):this.goto(this.parseLiteralMultiStringContent)}parseLiteralMultiStringContent(){do{if(this.char===CHAR_APOS)return this.next(this.parseLiteralMultiEnd);if(this.char===e.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}parseLiteralMultiEnd(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiEnd2):(this.state.buf+="'",this.goto(this.parseLiteralMultiStringContent))}parseLiteralMultiEnd2(){return this.char===CHAR_APOS?this.return():(this.state.buf+="''",this.goto(this.parseLiteralMultiStringContent))}parseDoubleString(){return this.char===CHAR_QUOT?this.next(this.parseMultiStringMaybe):this.goto(this.parseBasicString)}parseBasicString(){do{if(this.char===CHAR_BSOL)return this.call(this.parseEscape,this.recordEscapeReplacement);if(this.char===CHAR_QUOT)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}recordEscapeReplacement(n){return this.state.buf+=n,this.goto(this.parseBasicString)}parseMultiStringMaybe(){return this.char===CHAR_QUOT?this.next(this.parseMultiString):this.returnNow()}parseMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseMultiStringContent):this.goto(this.parseMultiStringContent)}parseMultiStringContent(){do{if(this.char===CHAR_BSOL)return this.call(this.parseMultiEscape,this.recordMultiEscapeReplacement);if(this.char===CHAR_QUOT)return this.next(this.parseMultiEnd);if(this.char===e.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}errorControlCharInString(){let n="\\u00";return this.char<16&&(n+="0"),n+=this.char.toString(16),this.error(new TomlError(`Control characters (codes < 0x1f and 0x7f) are not allowed in strings, use ${n} instead`))}recordMultiEscapeReplacement(n){return this.state.buf+=n,this.goto(this.parseMultiStringContent)}parseMultiEnd(){return this.char===CHAR_QUOT?this.next(this.parseMultiEnd2):(this.state.buf+='"',this.goto(this.parseMultiStringContent))}parseMultiEnd2(){return this.char===CHAR_QUOT?this.return():(this.state.buf+='""',this.goto(this.parseMultiStringContent))}parseMultiEscape(){return this.char===CTRL_M||this.char===CTRL_J?this.next(this.parseMultiTrim):this.char===CHAR_SP||this.char===CTRL_I?this.next(this.parsePreMultiTrim):this.goto(this.parseEscape)}parsePreMultiTrim(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CTRL_M||this.char===CTRL_J)return this.next(this.parseMultiTrim);throw this.error(new TomlError("Can't escape whitespace"))}parseMultiTrim(){return this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M?null:this.returnNow()}parseEscape(){if(this.char in escapes)return this.return(escapes[this.char]);if(this.char===CHAR_u)return this.call(this.parseSmallUnicode,this.parseUnicodeReturn);if(this.char===CHAR_U)return this.call(this.parseLargeUnicode,this.parseUnicodeReturn);throw this.error(new TomlError("Unknown escape character: "+this.char))}parseUnicodeReturn(n){try{let i=parseInt(n,16);if(i>=SURROGATE_FIRST&&i<=SURROGATE_LAST)throw this.error(new TomlError("Invalid unicode, character in range 0xD800 - 0xDFFF is reserved"));return this.returnNow(String.fromCodePoint(i))}catch(i){throw this.error(TomlError.wrap(i))}}parseSmallUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=4)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseLargeUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=8)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseNumberSign(){return this.consume(),this.next(this.parseMaybeSignedInfOrNan)}parseMaybeSignedInfOrNan(){return this.char===CHAR_i?this.next(this.parseInf):this.char===CHAR_n?this.next(this.parseNan):this.callNow(this.parseNoUnder,this.parseNumberIntegerStart)}parseNumberIntegerStart(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberIntegerExponentOrDecimal)):this.goto(this.parseNumberInteger)}parseNumberIntegerExponentOrDecimal(){return this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Integer(this.state.buf))}parseNumberInteger(){if(isDigit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder);if(this.char===CHAR_E||this.char===CHAR_e)return this.consume(),this.next(this.parseNumberExponentSign);if(this.char===CHAR_PERIOD)return this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseNoUnder(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD||this.char===CHAR_E||this.char===CHAR_e)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNoUnderHexOctBinLiteral(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNumberFloat(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberFloat);if(isDigit(this.char))this.consume();else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Float(this.state.buf))}parseNumberExponentSign(){if(isDigit(this.char))return this.goto(this.parseNumberExponent);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.call(this.parseNoUnder,this.parseNumberExponent);else throw this.error(new TomlError("Unexpected character, expected -, + or digit"))}parseNumberExponent(){if(isDigit(this.char))this.consume();else return this.char===CHAR_LOWBAR?this.call(this.parseNoUnder):this.returnNow(Float(this.state.buf))}parseNumberOrDateTime(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberBaseOrDateTime)):this.goto(this.parseNumberOrDateTimeOnly)}parseNumberOrDateTimeOnly(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberInteger);if(isDigit(this.char))this.consume(),this.state.buf.length>4&&this.next(this.parseNumberInteger);else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_HYPHEN?this.goto(this.parseDateTime):this.char===CHAR_COLON?this.goto(this.parseOnlyTimeHour):this.returnNow(Integer(this.state.buf))}parseDateTimeOnly(){if(this.state.buf.length<4){if(isDigit(this.char))return this.consume();if(this.char===CHAR_COLON)return this.goto(this.parseOnlyTimeHour);throw this.error(new TomlError("Expected digit while parsing year part of a date"))}else{if(this.char===CHAR_HYPHEN)return this.goto(this.parseDateTime);throw this.error(new TomlError("Expected hyphen (-) while parsing year part of date"))}}parseNumberBaseOrDateTime(){return this.char===CHAR_b?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerBin)):this.char===CHAR_o?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerOct)):this.char===CHAR_x?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerHex)):this.char===CHAR_PERIOD?this.goto(this.parseNumberInteger):isDigit(this.char)?this.goto(this.parseDateTimeOnly):this.returnNow(Integer(this.state.buf))}parseIntegerHex(){if(isHexit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseIntegerOct(){if(isOctit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseIntegerBin(){if(isBit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseDateTime(){if(this.state.buf.length<4)throw this.error(new TomlError("Years less than 1000 must be zero padded to four characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseDateMonth)}parseDateMonth(){if(this.char===CHAR_HYPHEN){if(this.state.buf.length<2)throw this.error(new TomlError("Months less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseDateDay)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseDateDay(){if(this.char===CHAR_T||this.char===CHAR_SP){if(this.state.buf.length<2)throw this.error(new TomlError("Days less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseStartTimeHour)}else{if(this.atEndOfWord())return this.returnNow(createDate(this.state.result+"-"+this.state.buf));if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}}parseStartTimeHour(){return this.atEndOfWord()?this.returnNow(createDate(this.state.result)):this.goto(this.parseTimeHour)}parseTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result+="T"+this.state.buf,this.state.buf="",this.next(this.parseTimeMin)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeSec);throw this.error(new TomlError("Incomplete datetime"))}}parseTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeZoneOrFraction)}else throw this.error(new TomlError("Incomplete datetime"))}parseOnlyTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeMin)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeSec);throw this.error(new TomlError("Incomplete time"))}}parseOnlyTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.next(this.parseOnlyTimeFractionMaybe)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeFractionMaybe(){if(this.state.result+=":"+this.state.buf,this.char===CHAR_PERIOD)this.state.buf="",this.next(this.parseOnlyTimeFraction);else return this.return(createTime(this.state.result))}parseOnlyTimeFraction(){if(isDigit(this.char))this.consume();else if(this.atEndOfWord()){if(this.state.buf.length===0)throw this.error(new TomlError("Expected digit in milliseconds"));return this.returnNow(createTime(this.state.result+"."+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}parseTimeZoneOrFraction(){if(this.char===CHAR_PERIOD)this.consume(),this.next(this.parseDateTimeFraction);else if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}parseDateTimeFraction(){if(isDigit(this.char))this.consume();else{if(this.state.buf.length===1)throw this.error(new TomlError("Expected digit in milliseconds"));if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}}parseTimeZoneHour(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.next(this.parseTimeZoneSep)}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseTimeZoneSep(){if(this.char===CHAR_COLON)this.consume(),this.next(this.parseTimeZoneMin);else throw this.error(new TomlError("Unexpected character in datetime, expected colon"))}parseTimeZoneMin(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.return(createDateTime(this.state.result+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseBoolean(){if(this.char===CHAR_t)return this.consume(),this.next(this.parseTrue_r);if(this.char===CHAR_f)return this.consume(),this.next(this.parseFalse_a)}parseTrue_r(){if(this.char===CHAR_r)return this.consume(),this.next(this.parseTrue_u);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_u(){if(this.char===CHAR_u)return this.consume(),this.next(this.parseTrue_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_e(){if(this.char===CHAR_e)return this.return(!0);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_a(){if(this.char===CHAR_a)return this.consume(),this.next(this.parseFalse_l);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_l(){if(this.char===CHAR_l)return this.consume(),this.next(this.parseFalse_s);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_s(){if(this.char===CHAR_s)return this.consume(),this.next(this.parseFalse_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_e(){if(this.char===CHAR_e)return this.return(!1);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseInlineList(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===e.END)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_NUM?this.call(this.parseComment):this.char===CHAR_RSQB?this.return(this.state.resultArr||InlineList()):this.callNow(this.parseValue,this.recordInlineListValue)}recordInlineListValue(n){if(this.state.resultArr){let i=this.state.resultArr[_contentType],o=tomlType(n);if(i!==o)throw this.error(new TomlError(`Inline lists must be a single type, not a mix of ${i} and ${o}`))}else this.state.resultArr=InlineList(tomlType(n));return isFloat(n)||isInteger(n)?this.state.resultArr.push(n.valueOf()):this.state.resultArr.push(n),this.goto(this.parseInlineListNext)}parseInlineListNext(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CHAR_COMMA)return this.next(this.parseInlineList);if(this.char===CHAR_RSQB)return this.goto(this.parseInlineList);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}parseInlineTable(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===e.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_RCUB?this.return(this.state.resultTable||InlineTable()):(this.state.resultTable||(this.state.resultTable=InlineTable()),this.callNow(this.parseAssign,this.recordInlineTableValue))}recordInlineTableValue(n){let i=this.state.resultTable,o=n.key.pop();for(let s of n.key){if(hasKey(i,s)&&(!isTable(i[s])||i[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));i=i[s]=i[s]||Table()}if(hasKey(i,o))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?i[o]=n.value.valueOf():i[o]=n.value,this.goto(this.parseInlineTableNext)}parseInlineTableNext(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===e.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));if(this.char===CHAR_COMMA)return this.next(this.parseInlineTable);if(this.char===CHAR_RCUB)return this.goto(this.parseInlineTable);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}}return t}});var oa=we((O4,lS)=>{"use strict";lS.exports=rP;function rP(e,t){if(e.pos==null||e.line==null)return e;let r=e.message;if(r+=` at row ${e.line+1}, col ${e.col+1}, pos ${e.pos}:
696
+ `,t&&t.split){let n=t.split(/\n/),i=String(Math.min(n.length,e.line+3)).length,o=" ";for(;o.length<i;)o+=" ";for(let s=Math.max(0,e.line-1);s<Math.min(n.length,e.line+2);++s){let a=String(s+1);if(a.length<i&&(a=" "+a),e.line===s){r+=a+"> "+n[s]+`
697
+ `,r+=o+" ";for(let c=0;c<e.col;++c)r+=" ";r+=`^
698
+ `}else r+=a+": "+n[s]+`
699
+ `}}return e.message=r+`
700
+ `,e}});var dS=we((R4,uS)=>{"use strict";uS.exports=oP;var nP=ia(),iP=oa();function oP(e){global.Buffer&&global.Buffer.isBuffer(e)&&(e=e.toString("utf8"));let t=new nP;try{return t.parse(e),t.finish()}catch(r){throw iP(r,e)}}});var mS=we(($4,fS)=>{"use strict";fS.exports=aP;var sP=ia(),pS=oa();function aP(e,t){t||(t={});let r=0,n=t.blocksize||40960,i=new sP;return new Promise((s,a)=>{setImmediate(o,r,n,s,a)});function o(s,a,c,l){if(s>=e.length)try{return c(i.finish())}catch(d){return l(pS(d,e))}try{i.parse(e.slice(s,s+a)),setImmediate(o,s+a,a,c,l)}catch(d){l(pS(d,e))}}}});var yS=we((N4,gS)=>{"use strict";gS.exports=lP;var cP=oI("stream"),hS=ia();function lP(e){return e?uP(e):dP(e)}function uP(e){let t=new hS;return e.setEncoding("utf8"),new Promise((r,n)=>{let i,o=!1,s=!1;function a(){if(o=!0,!i)try{r(t.finish())}catch(d){n(d)}}function c(d){s=!0,n(d)}e.once("end",a),e.once("error",c),l();function l(){i=!0;let d;for(;(d=e.read())!==null;)try{t.parse(d)}catch(p){return c(p)}if(i=!1,o)return a();s||e.once("readable",l)}})}function dP(){let e=new hS;return new cP.Transform({objectMode:!0,transform(t,r,n){try{e.parse(t.toString(r))}catch(i){this.emit("error",i)}n()},flush(t){try{this.push(e.finish())}catch(r){this.emit("error",r)}t()}})}});var wS=we((D4,co)=>{"use strict";co.exports=dS();co.exports.async=mS();co.exports.stream=yS();co.exports.prettyError=oa()});var AS=we((L4,Uu)=>{"use strict";Uu.exports=pP;Uu.exports.value=Hu;function pP(e){if(e===null)throw Vr("null");if(e===void 0)throw Vr("undefined");if(typeof e!="object")throw Vr(typeof e);if(typeof e.toJSON=="function"&&(e=e.toJSON()),e==null)return null;let t=Te(e);if(t!=="table")throw Vr(t);return Bu("","",e)}function Vr(e){return new Error("Can only stringify objects, not "+e)}function fP(){return new Error("Array values can't have mixed types")}function ES(e){return Object.keys(e).filter(t=>_S(e[t]))}function mP(e){return Object.keys(e).filter(t=>!_S(e[t]))}function sa(e){let t=Array.isArray(e)?[]:Object.prototype.hasOwnProperty.call(e,"__proto__")?{["__proto__"]:void 0}:{};for(let r of Object.keys(e))e[r]&&typeof e[r].toJSON=="function"&&!("toISOString"in e[r])?t[r]=e[r].toJSON():t[r]=e[r];return t}function Bu(e,t,r){r=sa(r);var n,i;n=ES(r),i=mP(r);var o=[],s=t||"";n.forEach(c=>{var l=Te(r[c]);l!=="undefined"&&l!=="null"&&o.push(s+aa(c)+" = "+xS(r[c],!0))}),o.length>0&&o.push("");var a=e&&n.length>0?t+" ":"";return i.forEach(c=>{o.push(vP(e,a,c,r[c]))}),o.join(`
701
+ `)}function _S(e){switch(Te(e)){case"undefined":case"null":case"integer":case"nan":case"float":case"boolean":case"string":case"datetime":return!0;case"array":return e.length===0||Te(e[0])!=="table";case"table":return Object.keys(e).length===0;default:return!1}}function Te(e){return e===void 0?"undefined":e===null?"null":typeof e=="bigint"||Number.isInteger(e)&&!Object.is(e,-0)?"integer":typeof e=="number"?"float":typeof e=="boolean"?"boolean":typeof e=="string"?"string":"toISOString"in e?isNaN(e)?"undefined":"datetime":Array.isArray(e)?"array":"table"}function aa(e){var t=String(e);return/^[-A-Za-z0-9_]+$/.test(t)?t:SS(t)}function SS(e){return'"'+bS(e).replace(/"/g,'\\"')+'"'}function hP(e){return"'"+e+"'"}function gP(e,t){for(;t.length<e;)t="0"+t;return t}function bS(e){return e.replace(/\\/g,"\\\\").replace(/[\b]/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/([\u0000-\u001f\u007f])/,t=>"\\u"+gP(4,t.codePointAt(0).toString(16)))}function yP(e){let t=e.split(/\n/).map(r=>bS(r).replace(/"(?="")/g,'\\"')).join(`
702
+ `);return t.slice(-1)==='"'&&(t+=`\\
703
+ `),`"""
704
+ `+t+'"""'}function xS(e,t){let r=Te(e);return r==="string"&&(t&&/\n/.test(e)?r="string-multiline":!/[\b\t\n\f\r']/.test(e)&&/"/.test(e)&&(r="string-literal")),Hu(e,r)}function Hu(e,t){switch(t||(t=Te(e)),t){case"string-multiline":return yP(e);case"string":return SS(e);case"string-literal":return hP(e);case"integer":return IS(e);case"float":return wP(e);case"boolean":return EP(e);case"datetime":return _P(e);case"array":return xP(e.filter(r=>Te(r)!=="null"&&Te(r)!=="undefined"&&Te(r)!=="nan"));case"table":return IP(e);default:throw Vr(t)}}function IS(e){return String(e).replace(/\B(?=(\d{3})+(?!\d))/g,"_")}function wP(e){if(e===1/0)return"inf";if(e===-1/0)return"-inf";if(Object.is(e,NaN))return"nan";if(Object.is(e,-0))return"-0.0";var t=String(e).split("."),r=t[0],n=t[1]||0;return IS(r)+"."+n}function EP(e){return String(e)}function _P(e){return e.toISOString()}function SP(e){return e==="float"||e==="integer"}function bP(e){var t=Te(e[0]);return e.every(r=>Te(r)===t)?t:e.every(r=>SP(Te(r)))?"float":"mixed"}function vS(e){let t=bP(e);if(t==="mixed")throw fP();return t}function xP(e){e=sa(e);let t=vS(e);var r="[",n=e.map(i=>Hu(i,t));return n.join(", ").length>60||/\n/.test(n)?r+=`
705
+ `+n.join(`,
706
+ `)+`
707
+ `:r+=" "+n.join(", ")+(n.length>0?" ":""),r+"]"}function IP(e){e=sa(e);var t=[];return Object.keys(e).forEach(r=>{t.push(aa(r)+" = "+xS(e[r],!1))}),"{ "+t.join(", ")+(t.length>0?" ":"")+"}"}function vP(e,t,r,n){var i=Te(n);if(i==="array")return AP(e,t,r,n);if(i==="table")return TP(e,t,r,n);throw Vr(i)}function AP(e,t,r,n){n=sa(n),vS(n);var i=Te(n[0]);if(i!=="table")throw Vr(i);var o=e+aa(r),s="";return n.forEach(a=>{s.length>0&&(s+=`
708
+ `),s+=t+"[["+o+`]]
709
+ `,s+=Bu(o+".",t,a)}),s}function TP(e,t,r,n){var i=e+aa(r),o="";return ES(n).length>0&&(o+=t+"["+i+`]
710
+ `),o+Bu(i+".",t,n)}});var TS=we(Gu=>{"use strict";Gu.parse=wS();Gu.stringify=AS()});var DS={};v(DS,{detect:()=>$P,install:()=>DP,meta:()=>RP,resolveServerPath:()=>RS,uninstall:()=>kP,verify:()=>LP,writeAgentsFile:()=>NS,writeMcpEntry:()=>$S});import{join as ai,dirname as ca}from"node:path";import{homedir as OS}from"node:os";import{existsSync as ur}from"node:fs";import{fileURLToPath as CP}from"node:url";async function $P(){return ur(lo)}function RS(){let e=ai(CS,"dist","server.js"),t=ai(CS,"src","server.js");return ur(e)?e:t}async function $S({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(je,"utf8");r=ci.default.parse(o)}catch{}let n=ur(je);return r.mcp_servers=r.mcp_servers||{},r.mcp_servers.sigil={command:process.execPath,args:[RS(),"--mcp"],env:{DOTENV_CONFIG_PATH:OP}},e||await t.mkdir(lo,{recursive:!0}),{action:(await se(je,ci.default.stringify(r),{dryRun:e})).action,path:je,detail:n?"+[mcp_servers.sigil] (other keys preserved)":"new config.toml with sigil MCP entry"}}function NP(){return[la,ar(),li].join(`
711
+ `)}async function NS({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(lo,{recursive:!0});let r="";ur(We)&&(r=await t.readFile(We,"utf8"));let n=NP(),i,o,s=r.indexOf(la),a=r.indexOf(li);if(s!==-1&&a!==-1&&a>s){let l=r.slice(0,s),d=r.slice(a+li.length);i=`${l}${n}${d}`,o="sigil block replaced (other content preserved)"}else if(!r.trim())i=`${n}
712
+ `,o="new AGENTS.md with sigil block";else{let l=r.endsWith(`
713
+ `)?`
714
+ `:`
715
+
716
+ `;i=`${r}${l}${n}
717
+ `,o="appended sigil block (existing content preserved)"}return i===r?{action:"skip",path:We,detail:"block already up to date"}:{action:(await se(We,i,{dryRun:e})).action,path:We,detail:o}}async function DP({dryRun:e=!1}={}){let t=[],r=await $S({dryRun:e});r&&t.push(r);let n=await NS({dryRun:e});return n&&t.push(n),{actions:t}}async function LP(){let e=await import("node:fs/promises");if(!ur(je))return{installed:!1,reason:"~/.codex/config.toml missing"};let t;try{t=ci.default.parse(await e.readFile(je,"utf8"))}catch(n){return{installed:!1,reason:`~/.codex/config.toml unparseable: ${n.message}`}}if(!t.mcp_servers?.sigil)return{installed:!1,reason:"[mcp_servers.sigil] missing from ~/.codex/config.toml"};if(!ur(We))return{installed:!1,reason:"~/.codex/AGENTS.md missing"};let r=await e.readFile(We,"utf8");return!r.includes(la)||!r.includes(li)?{installed:!1,reason:"sigil block markers missing from ~/.codex/AGENTS.md"}:{installed:!0}}async function kP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(ur(je)){let n;try{n=ci.default.parse(await t.readFile(je,"utf8"))}catch(i){return r.push({action:"skip",path:je,detail:`unparseable \u2014 not touched: ${i.message}`}),{actions:r}}if(n.mcp_servers?.sigil){delete n.mcp_servers.sigil,Object.keys(n.mcp_servers).length===0&&delete n.mcp_servers;let i=await se(je,ci.default.stringify(n),{dryRun:e});r.push({action:i.action,path:je,detail:"-[mcp_servers.sigil]"})}else r.push({action:"skip",path:je,detail:"[mcp_servers.sigil] not present"})}if(ur(We)){let n=await t.readFile(We,"utf8"),i=n.indexOf(la),o=n.indexOf(li);if(i!==-1&&o!==-1&&o>i){let s=n.slice(0,i).replace(/\n+$/,""),a=n.slice(o+li.length).replace(/^\n+/,""),c=s&&a?`${s}
718
+
719
+ ${a}`:s||a,l=await se(We,c.endsWith(`
720
+ `)?c:`${c}
721
+ `,{dryRun:e});r.push({action:l.action,path:We,detail:"sigil block removed (other content preserved)"})}else r.push({action:"skip",path:We,detail:"sigil block not present"})}return{actions:r}}var ci,lo,je,We,OP,CS,la,li,RP,LS=f(()=>{ci=Wa(TS(),1);Pr();ti();lo=ai(OS(),".codex"),je=ai(lo,"config.toml"),We=ai(lo,"AGENTS.md"),OP=ai(OS(),".sigil",".env"),CS=ca(ca(ca(ca(CP(import.meta.url))))),la="<!-- BEGIN sigil -->",li="<!-- END sigil -->",RP={id:"codex-cli",label:"Codex CLI",hint:"TOML config + AGENTS.md (no native hooks)"}});var HS={};v(HS,{detect:()=>BP,install:()=>HP,meta:()=>FP,resolveServerPath:()=>MS,uninstall:()=>GP,verify:()=>UP,writeMcpEntry:()=>FS,writeSteeringFile:()=>BS});import{join as di,dirname as ui}from"node:path";import{homedir as PS}from"node:os";import{existsSync as Yr}from"node:fs";import{fileURLToPath as PP}from"node:url";async function BP(){return Yr(ju)}function MS(){let e=di(kS,"dist","server.js"),t=di(kS,"src","server.js");return Yr(e)?e:t}async function FS({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Ne,"utf8");r=JSON.parse(o)}catch{}let n=Yr(Ne);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[MS(),"--mcp"],env:{DOTENV_CONFIG_PATH:MP}},e||await t.mkdir(ui(Ne),{recursive:!0}),{action:(await se(Ne,JSON.stringify(r,null,2),{dryRun:e})).action,path:Ne,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}async function BS({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(ui(Kr),{recursive:!0});let r=await se(Kr,ar(),{dryRun:e});return{action:r.action,path:Kr,detail:`${r.bytes??0} bytes, steering (always-on)`}}async function HP({dryRun:e=!1}={}){let t=[],r=await FS({dryRun:e});r&&t.push(r);let n=await BS({dryRun:e});return n&&t.push(n),{actions:t}}async function UP(){let e=await import("node:fs/promises");if(!Yr(Ne))return{installed:!1,reason:"~/.kiro/settings/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(Ne,"utf8"))}catch{return{installed:!1,reason:"~/.kiro/settings/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?Yr(Kr)?{installed:!0}:{installed:!1,reason:"~/.kiro/steering/sigil.md missing"}:{installed:!1,reason:"sigil entry missing from ~/.kiro/settings/mcp.json"}}async function GP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Yr(Ne)){let n;try{n=JSON.parse(await t.readFile(Ne,"utf8"))}catch{return r.push({action:"skip",path:Ne,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let i=await se(Ne,JSON.stringify(n,null,2),{dryRun:e});r.push({action:i.action,path:Ne,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:Ne,detail:"sigil entry not present"})}return Yr(Kr)&&(e||await t.unlink(Kr),r.push({action:"delete",path:Kr,detail:"sigil steering file removed"})),{actions:r}}var ju,Ne,Kr,MP,kS,FP,US=f(()=>{Pr();ti();ju=di(PS(),".kiro"),Ne=di(ju,"settings","mcp.json"),Kr=di(ju,"steering","sigil.md"),MP=di(PS(),".sigil",".env"),kS=ui(ui(ui(ui(PP(import.meta.url))))),FP={id:"kiro",label:"Kiro",hint:"MCP + steering file (steering auto-applies)"}});var WS={};v(WS,{detect:()=>qP,install:()=>XP,meta:()=>YP,setMemoryProviderInYaml:()=>Vu,uninstall:()=>ZP,verify:()=>QP});import{join as qr,dirname as uo}from"node:path";import{homedir as jP}from"node:os";import{existsSync as yt}from"node:fs";import{fileURLToPath as WP}from"node:url";async function qP(){return yt(jS)}function Vu(e,t){let r=e.split(`
722
+ `),n=!1,i=!1;for(let o=0;o<r.length;o++){let s=r[o];if(/^[A-Za-z_][\w-]*:\s*$/.test(s)||/^[A-Za-z_][\w-]*:\s/.test(s)){n=/^memory:\s*$/.test(s);continue}if(!n)continue;let a=s.match(/^(\s+provider:\s*)(['"]?)([^'"\n]*)\2(\s*(#.*)?)$/);if(a){let[,c,,l,d]=a;if(l===t)return{content:e,changed:!1};r[o]=`${c}'${t}'${d}`,i=!0;break}}return{content:r.join(`
723
+ `),changed:i}}async function JP({dryRun:e}){let t=await import("node:fs/promises");if(!yt(Wu))throw new Error(`Plugin source missing at ${Wu} \u2014 is this Sigil install complete? \`integrations/hermes/plugin/\` must ship with the package.`);return e?{action:yt(Ve)?"modify":"create"}:(await t.mkdir(uo(Ve),{recursive:!0}),yt(Ve)&&await t.rm(Ve,{recursive:!0,force:!0}),await t.cp(Wu,Ve,{recursive:!0}),{action:"create"})}async function zP({dryRun:e,value:t}){let r=await import("node:fs/promises");if(!yt(ot))return{action:"skip",detail:"config.yaml not present \u2014 set memory.provider manually"};let n=await r.readFile(ot,"utf8"),{content:i,changed:o}=Vu(n,t);return o?(e||await r.writeFile(ot,i,"utf8"),{action:"modify",detail:`memory.provider \u2192 '${t}'`}):{action:"skip",detail:`memory.provider already '${t}'`}}async function XP({dryRun:e=!1}={}){let t=[],r=await JP({dryRun:e});t.push({action:r.action,path:Ve,detail:"plugin tree (__init__.py, plugin.yaml, README.md)"});let n=await zP({dryRun:e,value:"sigil"});return t.push({action:n.action,path:ot,detail:n.detail}),{actions:t}}async function ZP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(yt(Ve)?(e||await t.rm(Ve,{recursive:!0,force:!0}),r.push({action:"delete",path:Ve,detail:"plugin directory removed"})):r.push({action:"skip",path:Ve,detail:"plugin not present"}),yt(ot)){let n=await t.readFile(ot,"utf8"),i=n.match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),s=(i?i[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];if(s==="sigil"){let{content:a,changed:c}=Vu(n,"");c&&!e&&await t.writeFile(ot,a,"utf8"),r.push({action:"modify",path:ot,detail:"memory.provider \u2192 '' (sigil cleared)"})}else r.push({action:"skip",path:ot,detail:`memory.provider is '${s??""}' (not sigil) \u2014 not touched`})}return{actions:r}}async function QP(){let e=await import("node:fs/promises");if(!yt(Ve))return{installed:!1,reason:"plugin missing at ~/.hermes/hermes-agent/plugins/memory/sigil/"};if(!yt(qr(Ve,"__init__.py")))return{installed:!1,reason:"plugin dir present but __init__.py missing"};if(!yt(ot))return{installed:!1,reason:"~/.hermes/config.yaml missing"};let r=(await e.readFile(ot,"utf8")).match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),i=(r?r[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];return i!=="sigil"?{installed:!1,reason:`memory.provider in config.yaml is '${i??""}' (expected 'sigil')`}:{installed:!0}}var GS,VP,jS,Ve,ot,KP,Wu,YP,VS=f(()=>{GS=qr(jP(),".hermes"),VP=qr(GS,"hermes-agent"),jS=qr(VP,"plugins","memory"),Ve=qr(jS,"sigil"),ot=qr(GS,"config.yaml"),KP=uo(uo(uo(uo(WP(import.meta.url))))),Wu=qr(KP,"integrations","hermes","plugin"),YP={id:"hermes",label:"Hermes",hint:"Python memory-provider plugin + config.yaml flip"}});var da={};v(da,{listClients:()=>ua});async function ua(){return await Promise.all(Object.entries(eM).map(async([t,r])=>{let n=await r();if(!n.meta||typeof n.detect!="function"||typeof n.install!="function"||typeof n.uninstall!="function"||typeof n.verify!="function")throw new Error(`Client "${t}" is missing the install contract \u2014 expected exports: meta, detect, install, uninstall, verify`);return{...n.meta,detect:n.detect,install:n.install,uninstall:n.uninstall,verify:n.verify}}))}var eM,po=f(()=>{eM={"claude-code":()=>Promise.resolve().then(()=>(j_(),G_)),cursor:()=>Promise.resolve().then(()=>(z_(),J_)),"codex-cli":()=>Promise.resolve().then(()=>(LS(),DS)),kiro:()=>Promise.resolve().then(()=>(US(),HS)),hermes:()=>Promise.resolve().then(()=>(VS(),WS))}});function tM(e,t){return t?"connected":e?"available":"unavailable"}async function KS(e){let r=(await ua()).find(n=>n.id===e);if(!r)throw new le({errorCode:"VALIDATION_ERROR",message:`unknown connector: ${e}`});return r}function YS(e){e.register("listConnectors",async()=>{let t=await ua();return{connectors:await Promise.all(t.map(async n=>{let[i,o]=await Promise.all([Promise.resolve().then(()=>n.detect()).catch(()=>!1),Promise.resolve().then(()=>n.verify()).catch(a=>({installed:!1,reason:a?.message}))]),s=!!o?.installed;return{id:n.id,label:n.label,hint:n.hint,detected:!!i,installed:s,status:tM(!!i,s),reason:o?.reason||null}}))}}),e.register("connectConnector",async(t={})=>{let r=await KS(t.id),n=[];try{n=(await r.install({dryRun:!1}))?.actions||[]}catch(o){throw new le({errorCode:"CONNECTOR_INSTALL_FAILED",message:o?.message,data:{id:r.id}})}let i=await Promise.resolve().then(()=>r.verify()).catch(o=>({installed:!1,reason:o?.message}));if(!i?.installed)throw new le({errorCode:"CONNECTOR_VERIFY_FAILED",hint:i?.reason||void 0,data:{id:r.id,reason:i?.reason||null}});return{ok:!0,id:r.id,status:"connected",actions:n}}),e.register("disconnectConnector",async(t={})=>{let r=await KS(t.id),n=[];try{n=(await r.uninstall({dryRun:!1}))?.actions||[]}catch(i){throw new le({errorCode:"CONNECTOR_INSTALL_FAILED",message:i?.message,data:{id:r.id}})}return{ok:!0,id:r.id,status:"available",actions:n}})}var qS=f(()=>{po();pn()});var XS={};v(XS,{CONTAINER:()=>Ke,IMAGE:()=>Ku,VOLUME:()=>Yu,detectDocker:()=>mo,ensureLocalPostgresRunning:()=>lM,provisionLocalPostgres:()=>qu,removeLocalPostgres:()=>dM,stopLocalPostgres:()=>uM});import{spawn as rM}from"node:child_process";import{randomBytes as nM}from"node:crypto";import iM from"node:net";function st(e,t,{timeout:r=15e3,input:n}={}){return new Promise(i=>{let o;try{o=rM(e,t,{stdio:["pipe","pipe","pipe"]})}catch(l){i({code:-1,out:"",err:l.message,spawnError:!0});return}let s="",a="",c=setTimeout(()=>{try{o.kill("SIGKILL")}catch{}},r);o.stdout.on("data",l=>{s+=l}),o.stderr.on("data",l=>{a+=l}),o.on("error",l=>{clearTimeout(c),i({code:-1,out:s,err:l.message,spawnError:!0})}),o.on("close",l=>{clearTimeout(c),i({code:l,out:s.trim(),err:a.trim()})}),n!=null&&(o.stdin.write(n),o.stdin.end())})}async function mo({refresh:e=!1}={}){if(pa&&!e)return pa;let t=await st("docker",["version","--format","{{.Server.Version}}"],{timeout:8e3});return pa=t.code===0&&!t.spawnError?{available:!0,version:t.out||"unknown",reason:null}:{available:!1,version:null,reason:t.spawnError?"docker not found on PATH":t.err||"docker daemon not responding"},pa}async function zS(){let e=await st("docker",["inspect","-f","{{.State.Running}}",Ke],{timeout:8e3});return e.code!==0?{exists:!1,running:!1}:{exists:!0,running:e.out==="true"}}async function oM(){let e=await st("docker",["port",Ke,"5432/tcp"],{timeout:8e3});if(e.code!==0)return null;let t=e.out.match(/:(\d+)\s*$/m);return t?Number(t[1]):null}function sM(e){return new Promise(t=>{let r=iM.createServer();r.once("error",()=>t(!1)),r.once("listening",()=>r.close(()=>t(!0))),r.listen(e,"127.0.0.1")})}async function aM(e=5432){for(let t=e;t<e+25;t++)if(await sM(t))return t;return e}function JS(){return nM(18).toString("base64url")}async function fo(e,t){let r=await st("docker",["exec","-i",Ke,"psql","-v","ON_ERROR_STOP=1","-U","postgres","-d",e],{input:t,timeout:2e4});if(r.code!==0)throw new Error(`psql(${e}) failed: ${r.err||r.out||`exit ${r.code}`}`);return r.out}async function cM({deadlineMs:e=3e4}={}){let t=Date.now(),r="timed out";for(;Date.now()-t<e;){let n=await st("docker",["exec",Ke,"pg_isready","-U","postgres"],{timeout:5e3});if(n.code===0)return;r=n.err||n.out||r,await new Promise(i=>setTimeout(i,700))}throw new Error(`Postgres did not become ready in ${e}ms: ${r}`)}async function qu({env:e=gt()}={}){let t=await mo();if(!t.available){let c=new Error(t.reason||"Docker is not available");throw c.dockerUnavailable=!0,c}let r=await zS(),n,i=JS();if(r.exists){if(!r.running){let c=await st("docker",["start",Ke],{timeout:15e3});if(c.code!==0)throw new Error(`failed to start existing ${Ke}: ${c.err}`)}n=await oM()||5432}else{n=await aM(5432);let c=JS(),l=await st("docker",["run","-d","--name",Ke,"--restart","unless-stopped","-e",`POSTGRES_PASSWORD=${c}`,"-e",`POSTGRES_DB=${pi}`,"-v",`${Yu}:/var/lib/postgresql/data`,"-p",`${n}:5432`,Ku],{timeout:6e4});if(l.code!==0)throw new Error(`docker run failed: ${l.err||l.out}`)}await cM(),(await fo("postgres",`SELECT 1 FROM pg_database WHERE datname='${pi}'`)).includes("1")||await fo("postgres",`CREATE DATABASE ${pi}`),await fo("postgres",`DO $$ BEGIN
724
+ IF EXISTS (SELECT FROM pg_roles WHERE rolname='${dr}') THEN
725
+ ALTER ROLE ${dr} WITH LOGIN PASSWORD '${i}';
726
+ ELSE
727
+ CREATE ROLE ${dr} WITH LOGIN PASSWORD '${i}';
728
+ END IF;
729
+ END $$;`),await fo("postgres",`GRANT ALL PRIVILEGES ON DATABASE ${pi} TO ${dr}`),await fo(pi,`GRANT ALL ON SCHEMA public TO ${dr};
730
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${dr};
731
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${dr};
732
+ CREATE EXTENSION IF NOT EXISTS vector;`);let s=`postgres://${dr}:${encodeURIComponent(i)}@localhost:${n}/${pi}`,a=await Si(s);if(!a.ok)throw new Error(`provisioned container did not accept a TCP connection (${a.stage}): ${a.error}`);return{url:s,port:n,container:Ke,image:Ku,reused:r.exists,pgvector:a.pgvector}}async function lM(e=gt()){try{let t=e.SIGIL_DATABASE_URL||"";if(!/@localhost:|@127\.0\.0\.1:/.test(t))return{started:!1,reason:"not a local url"};if(!(await mo()).available)return{started:!1,reason:"docker unavailable"};let n=await zS();if(!n.exists)return{started:!1,reason:"no sigil-postgres container"};if(n.running)return{started:!1,reason:"already running"};let i=await st("docker",["start",Ke],{timeout:15e3});return i.code===0?{started:!0}:{started:!1,reason:i.err}}catch(t){return{started:!1,reason:t.message}}}async function uM(){return st("docker",["stop",Ke],{timeout:2e4})}async function dM({deleteVolume:e=!1}={}){await st("docker",["rm","-f",Ke],{timeout:2e4}),e&&await st("docker",["volume","rm",Yu],{timeout:15e3})}var Ke,Yu,Ku,pi,dr,pa,Ju=f(()=>{Oe();ri();Ke="sigil-postgres",Yu="sigil-pgdata",Ku="pgvector/pgvector:pg16",pi="sigil",dr="sigil_app";pa=null});import pM from"knex";async function fM(e){let t=pM({client:"pg",connection:Me(e),pool:{min:1,max:2}});try{let[r,n]=await t.migrate.latest({directory:St});return{batchNo:r,ran:n}}finally{await t.destroy()}}function ZS(e){e.register("dbDockerAvailable",async()=>mo()),e.register("dbProvisionDocker",async()=>{let t;try{t=await qu()}catch(n){throw n?.dockerUnavailable?new le({errorCode:"DOCKER_UNAVAILABLE",message:n.message}):new le({errorCode:"DOCKER_PROVISION_FAILED",message:n?.message})}cr({SIGIL_DATABASE_URL:t.url,SIGIL_DB_TYPE:"postgres",SIGIL_DB_HOST:null,SIGIL_DB_PORT:null,SIGIL_DB_NAME:null,SIGIL_DB_USER:null,SIGIL_DB_PASSWORD:null});let r;try{r=await fM(t.url)}catch(n){let{diagnoseError:i}=await Promise.resolve().then(()=>(Oe(),ut));throw fp(i(n),{data:{stage:"migrate",container:t.container}})}return{ok:!0,url:t.url,port:t.port,container:t.container,image:t.image,reused:t.reused,pgvector:t.pgvector,migrationsRan:r.ran.length,migrationBatch:r.batchNo}})}var QS=f(()=>{M();ri();pn();_r();Ju()});function eb(e){e.register("serviceStatus",async()=>({...await no(),db:dc?.()??null})),e.register("serviceInstall",async()=>{let t=await Zs();return setTimeout(()=>process.exit(0),400),{ok:!0,handingOff:!0,...t}}),e.register("serviceUninstall",async()=>({ok:!0,...await ro()}))}var tb=f(()=>{io();fn()});import{existsSync as rb}from"node:fs";import{readFile as nb,writeFile as mM,mkdir as hM}from"node:fs/promises";import{dirname as gM}from"node:path";function ob(e){e.register("readEnv",async()=>{let t=rb(_e)?await nb(_e,"utf8"):"",r=wM(t),n={};for(let[i,o]of Object.entries(r))yM.test(i)?n[i]={masked:!0,hasValue:!!o}:n[i]={masked:!1,value:o};return{path:_e,entries:n}}),e.register("writeEnv",async t=>{let r=t.patch||{};if(typeof r!="object"||Array.isArray(r)){let s=new Error("writeEnv: params.patch must be an object");throw s.code="invalid_params",s}let n=rb(_e)?await nb(_e,"utf8"):"",i=EM(n,r);await hM(gM(_e),{recursive:!0}),await mM(_e,i,"utf8");let o=["SIGIL_MODE","SIGIL_MASTER_NODE_ID","SIGIL_NETWORK_ENABLED"];if(Object.keys(r).some(s=>o.includes(s)))try{let{resetMemoryClient:s}=await Promise.resolve().then(()=>(Zi(),Xi));s()}catch{}return{ok:!0,path:_e,patchedKeys:Object.keys(r)}})}function wM(e){let t={};for(let r of e.split(`
733
+ `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let i=n[1],o=n[2].trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),t[i]=o}return t}function EM(e,t){let r=new Set,i=e.split(`
734
+ `).map(s=>{let a=s.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=/i);if(!a)return s;let c=a[1];if(!(c in t))return s;r.add(c);let l=t[c];return l==null?null:`${c}=${ib(l)}`}).filter(s=>s!==null);for(let[s,a]of Object.entries(t))r.has(s)||a===null||a===void 0||i.push(`${s}=${ib(a)}`);let o=i.join(`
658
735
  `);return o.endsWith(`
659
736
  `)||(o+=`
660
- `),o}function c_(e){let t=String(e);return/[\s#"'$]/.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}var eD,u_=f(()=>{B();eD=/(KEY|PASSWORD|TOKEN|SECRET)$/i});function d_(e){e.register("nodeInfo",async()=>{let{default:t}=await Promise.resolve().then(()=>(R(),X));if(!t.network.enabled)return{enabled:!1,mode:t.network.mode};let{getNodeInfo:r}=await Promise.resolve().then(()=>(yt(),Kt));try{let n=await r();return{enabled:!0,mode:t.network.mode,...n}}catch(n){return{enabled:!0,mode:t.network.mode,error:n.message}}})}var p_=f(()=>{});var Ii={};T(Ii,{MANIFEST_VERSION:()=>Tl,produceManifest:()=>aD,verifyManifest:()=>cD});import{createHash as nD}from"node:crypto";import{readFile as iD,readdir as f_}from"node:fs/promises";import{existsSync as m_,readFileSync as oD}from"node:fs";import{join as Al}from"node:path";function sD(){if(vi)return vi;try{vi=JSON.parse(oD(Al(ge,"package.json"),"utf8")).version}catch{vi="unknown"}return vi}async function aD(){let e=await lD(Al(ge,"prompts")),t=await uD();return{v:Tl,producedAt:new Date().toISOString(),sigilVersion:sD(),schema:{migrationVersion:t,requiredExtensions:["vector"]},embedding:{provider:E.embedding.provider||null,model:E.embedding.model||null,dimensions:Number(E.embedding.dimensions)||null,normalization:"l2",maxInputTokens:8192},chunker:{...Sd},prompts:e,memory:{skipThreshold:E.memory.skipThreshold,ambiguousThreshold:E.memory.ambiguousThreshold,minFactSimilarity:E.memory.minFactSimilarity}}}function cD(e,t){let r=[],n=[];if(!t||t.v!==Tl)return r.push(`manifest version mismatch (local v${e.v} vs remote v${t?.v??"?"})`),{ok:!1,errors:r,warnings:n};for(let i of["provider","model","dimensions"])e.embedding[i]!==t.embedding[i]&&r.push(`embedding.${i}: local=${e.embedding[i]} vs remote=${t.embedding[i]}`);for(let i of["version","size","overlap"])e.chunker[i]!==t.chunker[i]&&r.push(`chunker.${i}: local=${e.chunker[i]} vs remote=${t.chunker[i]}`);e.schema.migrationVersion!==t.schema.migrationVersion&&r.push(`schema.migrationVersion: local=${e.schema.migrationVersion} vs remote=${t.schema.migrationVersion} (run \`sigil migrate\` on this device, or upgrade master)`),Math.abs(e.memory.skipThreshold-t.memory.skipThreshold)>.01&&r.push(`memory.skipThreshold differs: local=${e.memory.skipThreshold} vs remote=${t.memory.skipThreshold}`),Math.abs(e.memory.ambiguousThreshold-t.memory.ambiguousThreshold)>.05&&n.push(`memory.ambiguousThreshold drift: local=${e.memory.ambiguousThreshold} vs remote=${t.memory.ambiguousThreshold}`);for(let i of Object.keys(e.prompts))t.prompts[i]&&e.prompts[i]!==t.prompts[i]&&n.push(`prompt "${i}" differs (new ingests will produce different facts)`);return e.sigilVersion!==t.sigilVersion&&n.push(`sigil version drift: local=${e.sigilVersion} vs remote=${t.sigilVersion}`),{ok:r.length===0,errors:r,warnings:n}}async function lD(e){let t={};if(!m_(e))return t;let r=await f_(e);for(let n of r){if(!n.endsWith(".md"))continue;let i=await iD(Al(e,n),"utf8");t[n.replace(/\.md$/,"")]=dD(i)}return t}async function uD(){if(!m_(ir))return null;let t=(await f_(ir)).filter(r=>/^\d{14}_.+\.cjs$/.test(r)).map(r=>r.replace(/_.+\.cjs$/,"")).sort();return t[t.length-1]??null}function dD(e){return nD("sha256").update(e,"utf8").digest("hex")}var Tl,vi,Ai=f(()=>{B();R();ga();Tl=1});var $l={};T($l,{PAIR_ALPN:()=>h_,createPairAcceptor:()=>fD,hashCode:()=>os,joinMaster:()=>hD});import{createHash as pD}from"node:crypto";function fD({log:e}){return async function(r,n){if(r){e(`pair: accept err: ${r.message}`);return}let i="<unknown>";try{i=n.remoteNodeId().toString();let o=await n.acceptBi(),s=await o.recv.readToEnd(g_),a=JSON.parse(s.toString()),c=await mD(a,i);await o.send.writeAll(Buffer.from(JSON.stringify(c))),await o.send.finish(),c.ok?(_e.emit("pair.consumed",{nodeId:i,deviceName:a.name}),e(`pair: registered ${a.name} (${i.slice(0,12)}\u2026)`)):(_e.emit("pair.rejected",{nodeId:i,code:c.error?.code}),e(`pair: rejected ${i.slice(0,12)}\u2026 (${c.error?.code})`))}catch(o){e(`pair: handler err from ${i.slice(0,12)}\u2026: ${o.message}`),_e.emit("pair.error",{nodeId:i,message:o.message})}}}async function mD(e,t){if(!e||e.v!==Cl)return Ti("unsupported_version",`expected v=${Cl}`);if(typeof e.code!="string"||!e.code)return Ti("invalid_request","missing code");if(typeof e.name!="string"||!e.name)return Ti("invalid_request","missing name");if(typeof e.nodeId!="string"||e.nodeId.toLowerCase()!==t.toLowerCase())return Ti("invalid_request","nodeId claim does not match transport identity");let{default:r}=await Promise.resolve().then(()=>(D(),G)),{getNodeInfo:n}=await Promise.resolve().then(()=>(yt(),Kt)),i=os(e.code),o;try{o=await r.transaction(async l=>{let d=await l("pairing_code").where({code_hash:i}).forUpdate().first();if(!d)return{ok:!1,error:{code:"invalid_code",message:"pairing code not recognised"}};if(d.consumedByDeviceId)return{ok:!1,error:{code:"already_consumed",message:"pairing code was already used"}};if(new Date(d.expiresAt)<new Date)return{ok:!1,error:{code:"expired",message:"pairing code has expired"}};let p={hostname:e.hostname||null,sigilVersion:e.sigilVersion||null},[u]=await l("device").insert({node_id:t,name:e.name,role:d.role,namespaces:d.namespaces,active:!0,last_seen_at:l.fn.now(),meta:JSON.stringify(p)}).onConflict("node_id").merge({name:e.name,role:d.role,namespaces:d.namespaces,active:!0,last_seen_at:l.fn.now(),meta:JSON.stringify({...p,repairedAt:new Date().toISOString()})}).returning(["id"]);return await l("pairing_code").where({id:d.id}).update({consumed_by_device_id:u.id,consumed_at:l.fn.now()}),{ok:!0,device:{id:u.id,role:d.role,namespaces:d.namespaces}}})}catch(l){return Ti("transaction_failed",l.message)}if(!o.ok)return o;let s=null;try{s=(await n()).nodeId}catch{}let{produceManifest:a}=await Promise.resolve().then(()=>(Ai(),Ii)),c=await a();return{ok:!0,device:o.device,masterNodeId:s,manifest:c}}function Ti(e,t){return{ok:!1,error:{code:e,message:t}}}function os(e){return pD("sha256").update(e,"utf8").digest("hex")}async function hD({masterAddr:e,code:t,name:r,sigilVersion:n}){let{dial:i,getEndpoint:o}=await Promise.resolve().then(()=>(yt(),Kt)),{hostname:s}=await import("node:os"),a=await i(e,h_),c=await o(),l=await a.openBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:Cl,code:t,name:r,nodeId:c.nodeId(),hostname:s(),sigilVersion:n||null}))),await l.send.finish();let d=await l.recv.readToEnd(g_);return JSON.parse(d.toString())}var h_,g_,Cl,ss=f(()=>{Gr();h_="sigil/pair/1",g_=64*1024,Cl=1});import{randomBytes as gD}from"node:crypto";function y_(e){e.register("pair.create",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=(t.name||"").trim();if(!n){let p=new Error("pair.create: params.name required");throw p.code="invalid_params",p}let i=t.role||"writer";if(!["reader","writer","admin"].includes(i)){let p=new Error(`pair.create: invalid role "${i}"`);throw p.code="invalid_params",p}let o=Array.isArray(t.namespaces)?t.namespaces:[],s=Number.isFinite(t.ttlSeconds)?t.ttlSeconds:yD,a=new Date(Date.now()+s*1e3);r("pairing_code").whereNull("consumed_by_device_id").where("expires_at","<",new Date(Date.now()-24*3600*1e3)).del().catch(()=>{});let c=wD();await r("pairing_code").insert({code_hash:os(c),name:n,role:i,namespaces:o,expires_at:a});let{getNodeInfo:l}=await Promise.resolve().then(()=>(yt(),Kt)),d=null;try{d=(await l()).nodeId}catch{}return{code:c,expiresAt:a.toISOString(),name:n,role:i,namespaces:o,masterNodeId:d}}),e.register("pair.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Math.min(Math.max(Number(t.limit)||50,1),200),i=Math.max(Number(t.offset)||0,0),o=await r("pairing_code").leftJoin("device","pairing_code.consumed_by_device_id","device.id").select("pairing_code.id","pairing_code.name","pairing_code.role","pairing_code.namespaces","pairing_code.expires_at","pairing_code.consumed_at","pairing_code.created_at","device.name as consumed_by_name","device.node_id as consumed_by_node_id").orderBy("pairing_code.created_at","desc").limit(n).offset(i);return{limit:n,offset:i,codes:o.map(s=>({id:s.id,name:s.name,role:s.role,namespaces:s.namespaces,expiresAt:s.expiresAt,consumedAt:s.consumedAt,consumedBy:s.consumedByName?{name:s.consumedByName,nodeId:s.consumedByNodeId}:null,expired:new Date(s.expiresAt)<new Date}))}}),e.register("pair.sweep",async()=>{let{default:t}=await Promise.resolve().then(()=>(D(),G)),r=new Date(Date.now()-24*3600*1e3);return{deleted:await t("pairing_code").whereNull("consumed_by_device_id").where("expires_at","<",r).del()}}),e.register("pair.revoke",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Number(t.id);if(!Number.isFinite(n)){let o=new Error("pair.revoke: params.id required");throw o.code="invalid_params",o}return{deleted:await r("pairing_code").where({id:n}).del()}})}function wD(){let e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=gD(8),r="";for(let n=0;n<8;n++)r+=e[t[n]%e.length];return`SIGIL-${r.slice(0,4)}-${r.slice(4,8)}`}var yD,w_=f(()=>{ss();yD=600});function __(e){e.register("mode",async()=>{let{default:t}=await Promise.resolve().then(()=>(R(),X)),{getMemoryClient:r}=await Promise.resolve().then(()=>(xi(),bi)),n="unknown",i=null;try{n=(await r()).kind}catch(o){i=o.message}return{mode:t.network.mode,networkEnabled:t.network.enabled,masterNodeId:t.network.masterNodeId,memoryClient:n,memoryClientError:i}})}var E_=f(()=>{});function b_(e){e.register("manifest.get",async()=>{let{produceManifest:t}=await Promise.resolve().then(()=>(Ai(),Ii));return t()}),e.register("manifest.verify",async t=>{let{produceManifest:r,verifyManifest:n}=await Promise.resolve().then(()=>(Ai(),Ii)),i=await r();return n(i,t.remote)})}var x_=f(()=>{});function v_(e){e.register("device.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Math.min(Math.max(Number(t.limit)||100,1),500),i=Math.max(Number(t.offset)||0,0),o=await r("device").select("id","node_id","name","role","namespaces","active","meta","last_seen_at","created_at","revoked_reason").orderBy("created_at","desc").limit(n).offset(i);return{limit:n,offset:i,devices:o.map(s=>({id:s.id,nodeId:s.nodeId,name:s.name,role:s.role,namespaces:s.namespaces,active:s.active,revokedReason:s.revokedReason??null,reactivatable:s.active||s.revokedReason!=="compromised",lastSeenAt:s.lastSeenAt,createdAt:s.createdAt,meta:s.meta}))}}),e.register("device.revoke",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Number(t.id);if(!Number.isFinite(n)){let a=new Error("device.revoke: params.id required");throw a.code="invalid_params",a}let i=t.reason||"paused";if(!S_.has(i)){let a=new Error(`device.revoke: reason must be one of ${[...S_].join(", ")}`);throw a.code="invalid_params",a}let o=await r("device").where({id:n}).first(),s=await r("device").where({id:n}).update({active:!1,revoked_reason:i});if(s>0&&o){let{default:a}=await Promise.resolve().then(()=>(Gr(),rd));a.emit("device.revoked",{deviceId:o.id,nodeId:o.nodeId,reason:i})}return{revoked:s>0,reason:i}}),e.register("device.activate",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Number(t.id);if(!Number.isFinite(n)){let s=new Error("device.activate: params.id required");throw s.code="invalid_params",s}let i=await r("device").where({id:n}).first();if(!i)return{activated:!1,notFound:!0};if(i.revokedReason==="compromised"){let s=new Error(`device ${n} ("${i.name}") was revoked as compromised. Re-activation is blocked \u2014 the device must re-pair with a fresh code.`);throw s.code="compromised",s}return{activated:await r("device").where({id:n}).update({active:!0,revoked_reason:null})>0}})}var S_,I_=f(()=>{S_=new Set(["paused","compromised"])});function A_(e){e.register("trace.list",async(t={})=>{let{listTraces:r}=await Promise.resolve().then(()=>(Wt(),jt));return{traces:await r({kind:t.kind||null,namespace:t.namespace||null,before:t.before||null,limit:t.limit??50})}}),e.register("trace.get",async(t={})=>{if(!t.uid){let i=new Error("trace.get: params.uid is required");throw i.code="invalid_params",i}let{getTrace:r}=await Promise.resolve().then(()=>(Wt(),jt));return{trace:await r(t.uid)}}),e.register("trace.clear",async()=>{let{clearTraces:t}=await Promise.resolve().then(()=>(Wt(),jt));return t()})}var T_=f(()=>{});function C_(e,{startedAt:t}){ud(e,{startedAt:t}),Iy(e),Jy(e),Xy(e),Qy(e),iw(e),sw(e),cw(e),uw(e),pw(e),_w(e),bw(e),Sw(e),Kw(e),zw(e),Zw(e),e_(e),i_(e),l_(e),d_(e),y_(e),__(e),b_(e),v_(e),A_(e)}var $_=f(()=>{dd();Ay();zy();Zy();ew();ow();aw();lw();dw();fw();Ew();xw();vw();Yw();Xw();Qw();t_();o_();u_();p_();w_();E_();x_();I_();T_()});var O_={};T(O_,{installLiteProxy:()=>bD});async function bD({registry:e,log:t}){let{getMemoryClient:r}=await Promise.resolve().then(()=>(xi(),bi)),n=0,i=0;for(let o of _D)e.replace(o,async s=>(await r()).call(o,s))&&n++;for(let o of ED)e.replace(o,()=>{let a=new Error(`"${o}" is not available on a lite-follower device. Run on the master device.`);throw a.code="not_on_follower",a})&&i++;t(`lite-follower: ${n} methods proxied, ${i} forbidden, rest local`)}var _D,ED,R_=f(()=>{_D=new Set(["search","searchEntity","traverseGraph","getFactContext","getEntityContext","getPod","listPods","listFacts","status","refreshContext.fetch","refreshContext.explain","remember","forgetFact","ingestDoc"]),ED=new Set(["pair.create","pair.list","pair.revoke","pair.sweep","device.list","device.revoke","device.activate","runMigrations","testDbConnection"])});var L_={};T(L_,{startDaemon:()=>D_});import{createWriteStream as xD}from"node:fs";import{appendFile as SD}from"node:fs/promises";async function D_({foreground:e=!1}={}){delete process.env.SIGIL_AGENT,await Hu();let t=await Hr();t&&(process.stderr.write(`[sigild] already running (pid ${t})
661
- `),process.exit(0));let r=ID();r(`starting (pid ${process.pid}, node ${process.version})`),await Mu();let n=Xu();ca(n),C_(n,{startedAt:N_});let i=await ed({registry:n,log:r}),{default:o}=await Promise.resolve().then(()=>(R(),X));o.network.mode!=="lite-follower"&&vD(r);let s=null;if(o.http.enabled)try{s=await sd({registry:n,log:r,config:o})}catch(c){r(`http server failed to start: ${c.message}`)}let a=!1;if(o.network.enabled)try{if(o.network.mode==="master"){let{registerProtocol:d}=await Promise.resolve().then(()=>(yt(),Kt)),{PAIR_ALPN:p,createPairAcceptor:u}=await Promise.resolve().then(()=>(ss(),$l)),{RPC_ALPN:m,createRpcAcceptor:g}=await Promise.resolve().then(()=>(yl(),kw));d(p,u({log:r})),d(m,g({registry:n,log:r})),r(`registered accept handlers: ${p}, ${m}`)}let{getNodeInfo:c}=await Promise.resolve().then(()=>(yt(),Kt)),l=await c();a=!0,r(`iroh node up: ${l.nodeId}`),l.relayUrl&&r(`iroh relay: ${l.relayUrl}`)}catch(c){r(`iroh failed to start: ${c.message}`)}else r(`iroh disabled (SIGIL_MODE=${o.network.mode})`);if(o.network.mode==="lite-follower")try{let{installLiteProxy:c}=await Promise.resolve().then(()=>(R_(),O_));await c({registry:n,log:r})}catch(c){r(`lite-proxy install failed: ${c.message}`)}Fu(async c=>{if(r(`received ${c}, shutting down`),await i.close(),s&&await s.close(),a)try{let{shutdownEndpoint:l}=await Promise.resolve().then(()=>(yt(),Kt));await l()}catch(l){r(`iroh shutdown failed: ${l.message}`)}try{let{default:l}=await Promise.resolve().then(()=>(D(),G));await l.destroy()}catch(l){r(`pool destroy failed: ${l.message}`)}await ea(),ua(),r("stopped")}),r(`ready in ${Date.now()-N_}ms \u2014 ${n.list().length} methods registered`),e&&process.stdout.write(`sigild ready
662
- `)}async function vD(e){try{let{default:t}=await Promise.resolve().then(()=>(D(),G)),{setDbHealth:r}=await Promise.resolve().then(()=>(Kn(),da));try{await t.raw("SELECT 1"),r({healthy:!0,error:null,checkedAt:Date.now()})}catch(n){r({healthy:!1,error:n.message,checkedAt:Date.now()}),e(`DB UNREACHABLE: ${n.message} \u2014 memory operations will fail until Postgres is back`)}}catch{}}function ID(){let e;try{e=xD(pe,{flags:"a"})}catch{}return t=>{let r=`[${new Date().toISOString()}] ${t}
663
- `;e?e.write(r):process.stderr.write(r)}}var N_,k_=f(()=>{B();Vn();Zu();Kn();td();ld();$_();N_=Date.now();import.meta.url===`file://${process.argv[1]}`&&D_({foreground:!0}).catch(async e=>{try{await SD(pe,`[fatal] ${e.stack||e.message}
737
+ `),o}function ib(e){let t=String(e);return/[\s#"'$]/.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}var yM,sb=f(()=>{M();yM=/(KEY|PASSWORD|TOKEN|SECRET)$/i});function ab(e){e.register("nodeInfo",async()=>{let{default:t}=await Promise.resolve().then(()=>($(),re));if(!t.network.enabled)return{enabled:!1,mode:t.network.mode};let{getNodeInfo:r}=await Promise.resolve().then(()=>(At(),or));try{let n=await r();return{enabled:!0,mode:t.network.mode,...n}}catch(n){return{enabled:!0,mode:t.network.mode,error:n.message}}})}var cb=f(()=>{});var go={};v(go,{MANIFEST_VERSION:()=>Xu,produceManifest:()=>IM,verifyManifest:()=>vM});import{createHash as _M}from"node:crypto";import{readFile as SM,readdir as lb}from"node:fs/promises";import{existsSync as ub,readFileSync as bM}from"node:fs";import{join as zu}from"node:path";function xM(){if(ho)return ho;try{ho=JSON.parse(bM(zu(Ee,"package.json"),"utf8")).version}catch{ho="unknown"}return ho}async function IM(){let e=await AM(zu(Ee,"prompts")),t=await TM();return{v:Xu,producedAt:new Date().toISOString(),sigilVersion:xM(),schema:{migrationVersion:t,requiredExtensions:["vector"]},embedding:{provider:_.embedding.provider||null,model:_.embedding.model||null,dimensions:Number(_.embedding.dimensions)||null,normalization:"l2",maxInputTokens:8192},chunker:{...Up},prompts:e,memory:{skipThreshold:_.memory.skipThreshold,ambiguousThreshold:_.memory.ambiguousThreshold,minFactSimilarity:_.memory.minFactSimilarity}}}function vM(e,t){let r=[],n=[];if(!t||t.v!==Xu)return r.push(`manifest version mismatch (local v${e.v} vs remote v${t?.v??"?"})`),{ok:!1,errors:r,warnings:n};for(let i of["provider","model","dimensions"])e.embedding[i]!==t.embedding[i]&&r.push(`embedding.${i}: local=${e.embedding[i]} vs remote=${t.embedding[i]}`);for(let i of["version","size","overlap"])e.chunker[i]!==t.chunker[i]&&r.push(`chunker.${i}: local=${e.chunker[i]} vs remote=${t.chunker[i]}`);e.schema.migrationVersion!==t.schema.migrationVersion&&r.push(`schema.migrationVersion: local=${e.schema.migrationVersion} vs remote=${t.schema.migrationVersion} (run \`sigil migrate\` on this device, or upgrade master)`),Math.abs(e.memory.skipThreshold-t.memory.skipThreshold)>.01&&r.push(`memory.skipThreshold differs: local=${e.memory.skipThreshold} vs remote=${t.memory.skipThreshold}`),Math.abs(e.memory.ambiguousThreshold-t.memory.ambiguousThreshold)>.05&&n.push(`memory.ambiguousThreshold drift: local=${e.memory.ambiguousThreshold} vs remote=${t.memory.ambiguousThreshold}`);for(let i of Object.keys(e.prompts))t.prompts[i]&&e.prompts[i]!==t.prompts[i]&&n.push(`prompt "${i}" differs (new ingests will produce different facts)`);return e.sigilVersion!==t.sigilVersion&&n.push(`sigil version drift: local=${e.sigilVersion} vs remote=${t.sigilVersion}`),{ok:r.length===0,errors:r,warnings:n}}async function AM(e){let t={};if(!ub(e))return t;let r=await lb(e);for(let n of r){if(!n.endsWith(".md"))continue;let i=await SM(zu(e,n),"utf8");t[n.replace(/\.md$/,"")]=CM(i)}return t}async function TM(){if(!ub(St))return null;let t=(await lb(St)).filter(r=>/^\d{14}_.+\.cjs$/.test(r)).map(r=>r.replace(/_.+\.cjs$/,"")).sort();return t[t.length-1]??null}function CM(e){return _M("sha256").update(e,"utf8").digest("hex")}var Xu,ho,yo=f(()=>{M();$();yc();Xu=1});var Qu={};v(Qu,{PAIR_ALPN:()=>db,createPairAcceptor:()=>RM,hashCode:()=>fa,joinMaster:()=>NM});import{createHash as OM}from"node:crypto";function RM({log:e}){return async function(r,n){if(r){e(`pair: accept err: ${r.message}`);return}let i="<unknown>";try{i=n.remoteNodeId().toString();let o=await n.acceptBi(),s=await o.recv.readToEnd(pb),a=JSON.parse(s.toString()),c=await $M(a,i);await o.send.writeAll(Buffer.from(JSON.stringify(c))),await o.send.finish(),c.ok?(be.emit("pair.consumed",{nodeId:i,deviceName:a.name}),e(`pair: registered ${a.name} (${i.slice(0,12)}\u2026)`)):(be.emit("pair.rejected",{nodeId:i,code:c.error?.code}),e(`pair: rejected ${i.slice(0,12)}\u2026 (${c.error?.code})`))}catch(o){e(`pair: handler err from ${i.slice(0,12)}\u2026: ${o.message}`),be.emit("pair.error",{nodeId:i,message:o.message})}}}async function $M(e,t){if(!e||e.v!==Zu)return wo("unsupported_version",`expected v=${Zu}`);if(typeof e.code!="string"||!e.code)return wo("invalid_request","missing code");if(typeof e.name!="string"||!e.name)return wo("invalid_request","missing name");if(typeof e.nodeId!="string"||e.nodeId.toLowerCase()!==t.toLowerCase())return wo("invalid_request","nodeId claim does not match transport identity");let{default:r}=await Promise.resolve().then(()=>(N(),j)),{getNodeInfo:n}=await Promise.resolve().then(()=>(At(),or)),i=fa(e.code),o;try{o=await r.transaction(async l=>{let d=await l("pairing_code").where({code_hash:i}).forUpdate().first();if(!d)return{ok:!1,error:{code:"invalid_code",message:"pairing code not recognised"}};if(d.consumedByDeviceId)return{ok:!1,error:{code:"already_consumed",message:"pairing code was already used"}};if(new Date(d.expiresAt)<new Date)return{ok:!1,error:{code:"expired",message:"pairing code has expired"}};let p={hostname:e.hostname||null,sigilVersion:e.sigilVersion||null},[u]=await l("device").insert({node_id:t,name:e.name,role:d.role,namespaces:d.namespaces,active:!0,last_seen_at:l.fn.now(),meta:JSON.stringify(p)}).onConflict("node_id").merge({name:e.name,role:d.role,namespaces:d.namespaces,active:!0,last_seen_at:l.fn.now(),meta:JSON.stringify({...p,repairedAt:new Date().toISOString()})}).returning(["id"]);return await l("pairing_code").where({id:d.id}).update({consumed_by_device_id:u.id,consumed_at:l.fn.now()}),{ok:!0,device:{id:u.id,role:d.role,namespaces:d.namespaces}}})}catch(l){return wo("transaction_failed",l.message)}if(!o.ok)return o;let s=null;try{s=(await n()).nodeId}catch{}let{produceManifest:a}=await Promise.resolve().then(()=>(yo(),go)),c=await a();return{ok:!0,device:o.device,masterNodeId:s,manifest:c}}function wo(e,t){return{ok:!1,error:{code:e,message:t}}}function fa(e){return OM("sha256").update(e,"utf8").digest("hex")}async function NM({masterAddr:e,code:t,name:r,sigilVersion:n}){let{dial:i,getEndpoint:o}=await Promise.resolve().then(()=>(At(),or)),{hostname:s}=await import("node:os"),a=await i(e,db),c=await o(),l=await a.openBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:Zu,code:t,name:r,nodeId:c.nodeId(),hostname:s(),sigilVersion:n||null}))),await l.send.finish();let d=await l.recv.readToEnd(pb);return JSON.parse(d.toString())}var db,pb,Zu,ma=f(()=>{mn();db="sigil/pair/1",pb=64*1024,Zu=1});import{randomBytes as DM}from"node:crypto";function fb(e){e.register("pair.create",async t=>{let{default:r}=await Promise.resolve().then(()=>(N(),j)),n=(t.name||"").trim();if(!n){let p=new Error("pair.create: params.name required");throw p.code="invalid_params",p}let i=t.role||"writer";if(!["reader","writer","admin"].includes(i)){let p=new Error(`pair.create: invalid role "${i}"`);throw p.code="invalid_params",p}let o=Array.isArray(t.namespaces)?t.namespaces:[],s=Number.isFinite(t.ttlSeconds)?t.ttlSeconds:LM,a=new Date(Date.now()+s*1e3);r("pairing_code").whereNull("consumed_by_device_id").where("expires_at","<",new Date(Date.now()-24*3600*1e3)).del().catch(()=>{});let c=kM();await r("pairing_code").insert({code_hash:fa(c),name:n,role:i,namespaces:o,expires_at:a});let{getNodeInfo:l}=await Promise.resolve().then(()=>(At(),or)),d=null;try{d=(await l()).nodeId}catch{}return{code:c,expiresAt:a.toISOString(),name:n,role:i,namespaces:o,masterNodeId:d}}),e.register("pair.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(N(),j)),n=Math.min(Math.max(Number(t.limit)||50,1),200),i=Math.max(Number(t.offset)||0,0),o=await r("pairing_code").leftJoin("device","pairing_code.consumed_by_device_id","device.id").select("pairing_code.id","pairing_code.name","pairing_code.role","pairing_code.namespaces","pairing_code.expires_at","pairing_code.consumed_at","pairing_code.created_at","device.name as consumed_by_name","device.node_id as consumed_by_node_id").orderBy("pairing_code.created_at","desc").limit(n).offset(i);return{limit:n,offset:i,codes:o.map(s=>({id:s.id,name:s.name,role:s.role,namespaces:s.namespaces,expiresAt:s.expiresAt,consumedAt:s.consumedAt,consumedBy:s.consumedByName?{name:s.consumedByName,nodeId:s.consumedByNodeId}:null,expired:new Date(s.expiresAt)<new Date}))}}),e.register("pair.sweep",async()=>{let{default:t}=await Promise.resolve().then(()=>(N(),j)),r=new Date(Date.now()-24*3600*1e3);return{deleted:await t("pairing_code").whereNull("consumed_by_device_id").where("expires_at","<",r).del()}}),e.register("pair.revoke",async t=>{let{default:r}=await Promise.resolve().then(()=>(N(),j)),n=Number(t.id);if(!Number.isFinite(n)){let o=new Error("pair.revoke: params.id required");throw o.code="invalid_params",o}return{deleted:await r("pairing_code").where({id:n}).del()}})}function kM(){let e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=DM(8),r="";for(let n=0;n<8;n++)r+=e[t[n]%e.length];return`SIGIL-${r.slice(0,4)}-${r.slice(4,8)}`}var LM,mb=f(()=>{ma();LM=600});function hb(e){e.register("mode",async()=>{let{default:t}=await Promise.resolve().then(()=>($(),re)),{getMemoryClient:r}=await Promise.resolve().then(()=>(Zi(),Xi)),n="unknown",i=null;try{n=(await r()).kind}catch(o){i=o.message}return{mode:t.network.mode,networkEnabled:t.network.enabled,masterNodeId:t.network.masterNodeId,memoryClient:n,memoryClientError:i}})}var gb=f(()=>{});function yb(e){e.register("manifest.get",async()=>{let{produceManifest:t}=await Promise.resolve().then(()=>(yo(),go));return t()}),e.register("manifest.verify",async t=>{let{produceManifest:r,verifyManifest:n}=await Promise.resolve().then(()=>(yo(),go)),i=await r();return n(i,t.remote)})}var wb=f(()=>{});function _b(e){e.register("device.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(N(),j)),n=Math.min(Math.max(Number(t.limit)||100,1),500),i=Math.max(Number(t.offset)||0,0),o=await r("device").select("id","node_id","name","role","namespaces","active","meta","last_seen_at","created_at","revoked_reason").orderBy("created_at","desc").limit(n).offset(i);return{limit:n,offset:i,devices:o.map(s=>({id:s.id,nodeId:s.nodeId,name:s.name,role:s.role,namespaces:s.namespaces,active:s.active,revokedReason:s.revokedReason??null,reactivatable:s.active||s.revokedReason!=="compromised",lastSeenAt:s.lastSeenAt,createdAt:s.createdAt,meta:s.meta}))}}),e.register("device.revoke",async t=>{let{default:r}=await Promise.resolve().then(()=>(N(),j)),n=Number(t.id);if(!Number.isFinite(n)){let a=new Error("device.revoke: params.id required");throw a.code="invalid_params",a}let i=t.reason||"paused";if(!Eb.has(i)){let a=new Error(`device.revoke: reason must be one of ${[...Eb].join(", ")}`);throw a.code="invalid_params",a}let o=await r("device").where({id:n}).first(),s=await r("device").where({id:n}).update({active:!1,revoked_reason:i});if(s>0&&o){let{default:a}=await Promise.resolve().then(()=>(mn(),_p));a.emit("device.revoked",{deviceId:o.id,nodeId:o.nodeId,reason:i})}return{revoked:s>0,reason:i}}),e.register("device.activate",async t=>{let{default:r}=await Promise.resolve().then(()=>(N(),j)),n=Number(t.id);if(!Number.isFinite(n)){let s=new Error("device.activate: params.id required");throw s.code="invalid_params",s}let i=await r("device").where({id:n}).first();if(!i)return{activated:!1,notFound:!0};if(i.revokedReason==="compromised"){let s=new Error(`device ${n} ("${i.name}") was revoked as compromised. Re-activation is blocked \u2014 the device must re-pair with a fresh code.`);throw s.code="compromised",s}return{activated:await r("device").where({id:n}).update({active:!0,revoked_reason:null})>0}})}var Eb,Sb=f(()=>{Eb=new Set(["paused","compromised"])});function bb(e){e.register("trace.list",async(t={})=>{let{listTraces:r}=await Promise.resolve().then(()=>(nr(),rr));return{traces:await r({kind:t.kind||null,namespace:t.namespace||null,before:t.before||null,limit:t.limit??50})}}),e.register("trace.get",async(t={})=>{if(!t.uid){let i=new Error("trace.get: params.uid is required");throw i.code="invalid_params",i}let{getTrace:r}=await Promise.resolve().then(()=>(nr(),rr));return{trace:await r(t.uid)}}),e.register("trace.clear",async()=>{let{clearTraces:t}=await Promise.resolve().then(()=>(nr(),rr));return t()})}var xb=f(()=>{});function Ib(e,{startedAt:t}){Cp(e,{startedAt:t}),Uw(e),dE(e),fE(e),hE(e),_E(e),bE(e),IE(e),AE(e),CE(e),kE(e),ME(e),BE(e),c_(e),u_(e),p_(e),m_(e),M_(e),YS(e),ZS(e),eb(e),ob(e),ab(e),fb(e),hb(e),yb(e),_b(e),bb(e)}var vb=f(()=>{Op();Gw();pE();mE();gE();SE();xE();vE();TE();OE();PE();FE();HE();l_();d_();f_();h_();F_();qS();QS();tb();sb();cb();mb();gb();wb();Sb();xb()});var Ab={};v(Ab,{installLiteProxy:()=>FM});async function FM({registry:e,log:t}){let{getMemoryClient:r}=await Promise.resolve().then(()=>(Zi(),Xi)),n=0,i=0;for(let o of PM)e.replace(o,async s=>(await r()).call(o,s))&&n++;for(let o of MM)e.replace(o,()=>{let a=new Error(`"${o}" is not available on a lite-follower device. Run on the master device.`);throw a.code="not_on_follower",a})&&i++;t(`lite-follower: ${n} methods proxied, ${i} forbidden, rest local`)}var PM,MM,Tb=f(()=>{PM=new Set(["search","searchEntity","traverseGraph","getFactContext","getEntityContext","getPod","listPods","listFacts","status","refreshContext.fetch","refreshContext.explain","remember","forgetFact","ingestDoc"]),MM=new Set(["pair.create","pair.list","pair.revoke","pair.sweep","device.list","device.revoke","device.activate","runMigrations","testDbConnection"])});var Ob={};v(Ob,{startDaemon:()=>Cb});import{createWriteStream as BM,writeFileSync as HM,rmSync as UM}from"node:fs";import{appendFile as GM}from"node:fs/promises";async function Cb({foreground:e=!1}={}){delete process.env.SIGIL_AGENT,await Za();let t=await Er();t&&(process.stderr.write(`[sigild] already running (pid ${t})
738
+ `),process.exit(0));let r=VM();r(`starting (pid ${process.pid}, node ${process.version})`),await za();let n=hp();cc(n),Ib(n,{startedAt:ed});let i=await wp({registry:n,log:r}),{default:o}=await Promise.resolve().then(()=>($(),re));if(o.network.mode!=="lite-follower"){try{let{ensureLocalPostgresRunning:p}=await Promise.resolve().then(()=>(Ju(),XS));(await p()).started&&r("started local sigil-postgres container")}catch{}WM(r)}let s=null;if(o.http.enabled)try{s=await Ip({registry:n,log:r,config:o})}catch(p){r(`http server failed to start: ${p.message}`)}let a=!1;if(o.network.enabled)try{if(o.network.mode==="master"){let{registerProtocol:m}=await Promise.resolve().then(()=>(At(),or)),{PAIR_ALPN:h,createPairAcceptor:y}=await Promise.resolve().then(()=>(ma(),Qu)),{RPC_ALPN:w,createRpcAcceptor:b}=await Promise.resolve().then(()=>(yu(),XE));m(h,y({log:r})),m(w,b({registry:n,log:r})),r(`registered accept handlers: ${h}, ${w}`)}let{getNodeInfo:p}=await Promise.resolve().then(()=>(At(),or)),u=await p();a=!0,r(`iroh node up: ${u.nodeId}`),u.relayUrl&&r(`iroh relay: ${u.relayUrl}`)}catch(p){r(`iroh failed to start: ${p.message}`)}else r(`iroh disabled (SIGIL_MODE=${o.network.mode})`);if(o.network.mode==="lite-follower")try{let{installLiteProxy:p}=await Promise.resolve().then(()=>(Tb(),Ab));await p({registry:n,log:r})}catch(p){r(`lite-proxy install failed: ${p.message}`)}let c=await jM(),l=()=>{try{HM(on,JSON.stringify({pid:process.pid,version:c,node:process.version,startedAt:ed,ts:Date.now(),supervised:process.env.SIGIL_SUPERVISED==="1"}),"utf8")}catch{}};l();let d=setInterval(l,15e3);d.unref(),Xa(async p=>{r(`received ${p}, shutting down`),clearInterval(d);try{UM(on,{force:!0})}catch{}if(await i.close(),s&&await s.close(),a)try{let{shutdownEndpoint:u}=await Promise.resolve().then(()=>(At(),or));await u()}catch(u){r(`iroh shutdown failed: ${u.message}`)}try{let{default:u}=await Promise.resolve().then(()=>(N(),j));await u.destroy()}catch(u){r(`pool destroy failed: ${u.message}`)}await Ro(),uc(),r("stopped")}),r(`ready in ${Date.now()-ed}ms \u2014 ${n.list().length} methods registered`),e&&process.stdout.write(`sigild ready
739
+ `)}async function jM(){try{let{readFile:e}=await import("node:fs/promises"),{join:t}=await import("node:path"),{PKG_ROOT:r}=await Promise.resolve().then(()=>(M(),Oo));return JSON.parse(await e(t(r,"package.json"),"utf8")).version}catch{return"unknown"}}async function WM(e){try{let{default:t}=await Promise.resolve().then(()=>(N(),j)),{setDbHealth:r}=await Promise.resolve().then(()=>(fn(),pc));try{await t.raw("SELECT 1"),r({healthy:!0,error:null,checkedAt:Date.now()})}catch(n){r({healthy:!1,error:n.message,checkedAt:Date.now()}),e(`DB UNREACHABLE: ${n.message} \u2014 memory operations will fail until Postgres is back`)}}catch{}}function VM(){let e;try{e=BM(te,{flags:"a"})}catch{}return t=>{let r=`[${new Date().toISOString()}] ${t}
740
+ `;e?e.write(r):process.stderr.write(r)}}var ed,Rb=f(()=>{M();an();gp();fn();Ep();Tp();vb();ed=Date.now();import.meta.url===`file://${process.argv[1]}`&&Cb({foreground:!0}).catch(async e=>{try{await GM(te,`[fatal] ${e.stack||e.message}
664
741
  `)}catch{}process.stderr.write(`[sigild] fatal: ${e.message}
665
- `),process.exit(1)})});var G_={};T(G_,{runDaemon:()=>TD});import{existsSync as AD,createReadStream as P_}from"node:fs";import{stat as M_}from"node:fs/promises";import{setTimeout as Ol}from"node:timers/promises";async function TD(e){let[t,...r]=e;if(!t||t==="--help"||t==="-h"){console.log(F_);return}switch(t){case"start":return B_(r);case"stop":return U_(r);case"status":return CD(r);case"restart":return await U_(r),await Ol(200),B_(r);case"logs":return $D(r);case"open":return H_({launch:!0});case"url":return H_({launch:!1});default:console.error(`Unknown subcommand: daemon ${t}
666
- `),console.log(F_),process.exit(1)}}async function H_({launch:e}){let t=await Tt({quiet:!0});await t.call("ping",{}),await t.close();let{default:r}=await Promise.resolve().then(()=>(R(),X)),{getGuiToken:n}=await Promise.resolve().then(()=>(Ki(),oa)),i=await n(),o=`http://${r.http.host}:${r.http.port}/?t=${i}`;if(console.log(o),!e)return;let s=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open",{spawn:a}=await import("node:child_process");a(s,[o],{detached:!0,stdio:"ignore"}).unref()}async function B_(e){let t=e.includes("--foreground")||e.includes("-f"),r=await Hr();if(r){console.log(`sigild already running (pid ${r})`);return}if(t){let{startDaemon:n}=await Promise.resolve().then(()=>(k_(),L_));await n({foreground:!0});return}await Tt({quiet:!0}).then(async n=>{let{data:i}=await n.call("ping",{});await n.close(),console.log(`sigild started (pid ${i.pid}, version ${i.version})`)})}async function U_(){let e=await ji();if(!e||!Fr(e)){console.log("sigild is not running");return}try{process.kill(e,"SIGTERM")}catch(r){console.error(`failed to signal pid ${e}: ${r.message}`),process.exit(1)}let t=Date.now()+5e3;for(;Date.now()<t&&Fr(e);)await Ol(50);if(Fr(e)){console.error(`sigild (pid ${e}) did not exit within 5s \u2014 sending SIGKILL`);try{process.kill(e,"SIGKILL")}catch{}}console.log("sigild stopped")}async function CD(){let e=await ji();if(!e||!Fr(e)){console.log("sigild: not running");return}try{let t=await Br({timeoutMs:2e3}),{data:r}=await t.call("ping",{});await t.close(),console.log("sigild: running"),console.log(` pid ${r.pid}`),console.log(` version ${r.version}`),console.log(` node ${r.node}`),console.log(` uptime ${Yu(r.uptimeMs)}`),console.log(` socket ${we}`)}catch(t){console.log(`sigild: pid ${e} alive but socket unresponsive (${t.message})`),process.exit(1)}}async function $D(e){let t=e.includes("--follow")||e.includes("-f");if(!AD(pe)){console.log(`(no log file yet at ${pe})`);return}if(await new Promise((n,i)=>{let o=P_(pe,{encoding:"utf8"});o.on("data",s=>process.stdout.write(s)),o.on("end",n),o.on("error",i)}),!t)return;let r=(await M_(pe)).size;for(;;){await Ol(250);let n=await M_(pe).catch(()=>null);if(!n||n.size===r)continue;let i=P_(pe,{encoding:"utf8",start:r,end:n.size-1});i.on("data",o=>process.stdout.write(o)),await new Promise((o,s)=>{i.on("end",o),i.on("error",s)}),r=n.size}}var F_,j_=f(()=>{B();Vn();na();Ne();qu();F_=`sigil daemon \u2014 control the Sigil daemon
742
+ `),process.exit(1)})});var Mb={};v(Mb,{runDaemon:()=>YM});import{existsSync as KM,createReadStream as $b}from"node:fs";import{stat as Nb}from"node:fs/promises";import{setTimeout as td}from"node:timers/promises";async function YM(e){let[t,...r]=e;if(!t||t==="--help"||t==="-h"){console.log(Db);return}switch(t){case"start":return kb(r);case"stop":return Pb(r);case"status":return qM(r);case"restart":return await Pb(r),await td(200),kb(r);case"logs":return JM(r);case"open":return Lb({launch:!0});case"url":return Lb({launch:!1});default:console.error(`Unknown subcommand: daemon ${t}
743
+ `),console.log(Db),process.exit(1)}}async function Lb({launch:e}){let t=await Bt({quiet:!0});await t.call("ping",{}),await t.close();let{default:r}=await Promise.resolve().then(()=>($(),re)),{getGuiToken:n}=await Promise.resolve().then(()=>(Lo(),rc)),i=await n(),o=`http://${r.http.host}:${r.http.port}/?t=${i}`;if(console.log(o),!e)return;let s=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open",{spawn:a}=await import("node:child_process");a(s,[o],{detached:!0,stdio:"ignore"}).unref()}async function kb(e){let t=e.includes("--foreground")||e.includes("-f"),r=await Er();if(r){console.log(`sigild already running (pid ${r})`);return}if(t){let{startDaemon:n}=await Promise.resolve().then(()=>(Rb(),Ob));await n({foreground:!0});return}await Bt({quiet:!0}).then(async n=>{let{data:i}=await n.call("ping",{});await n.close(),console.log(`sigild started (pid ${i.pid}, version ${i.version})`)})}async function Pb(){let e=await wi();if(!e||!wr(e)){console.log("sigild is not running");return}try{let{isServiceInstalled:r}=await Promise.resolve().then(()=>(io(),ku));if(await r()){console.log("sigild is managed by the always-up service \u2014 it will auto-restart after a stop."),console.log("To keep it down, run: sigil service stop (re-enable with `sigil service start`)");return}}catch{}try{process.kill(e,"SIGTERM")}catch(r){console.error(`failed to signal pid ${e}: ${r.message}`),process.exit(1)}let t=Date.now()+5e3;for(;Date.now()<t&&wr(e);)await td(50);if(wr(e)){console.error(`sigild (pid ${e}) did not exit within 5s \u2014 sending SIGKILL`);try{process.kill(e,"SIGKILL")}catch{}}console.log("sigild stopped")}async function qM(){let e=await wi();if(!e||!wr(e)){console.log("sigild: not running");return}try{let t=await ln({timeoutMs:2e3}),{data:r}=await t.call("ping",{});await t.close(),console.log("sigild: running"),console.log(` pid ${r.pid}`),console.log(` version ${r.version}`),console.log(` node ${r.node}`),console.log(` uptime ${ko(r.uptimeMs)}`),console.log(` socket ${Se}`)}catch(t){console.log(`sigild: pid ${e} alive but socket unresponsive (${t.message})`),process.exit(1)}}async function JM(e){let t=e.includes("--follow")||e.includes("-f");if(!KM(te)){console.log(`(no log file yet at ${te})`);return}if(await new Promise((n,i)=>{let o=$b(te,{encoding:"utf8"});o.on("data",s=>process.stdout.write(s)),o.on("end",n),o.on("error",i)}),!t)return;let r=(await Nb(te)).size;for(;;){await td(250);let n=await Nb(te).catch(()=>null);if(!n||n.size===r)continue;let i=$b(te,{encoding:"utf8",start:r,end:n.size-1});i.on("data",o=>process.stdout.write(o)),await new Promise((o,s)=>{i.on("end",o),i.on("error",s)}),r=n.size}}var Db,Fb=f(()=>{M();an();tc();Pe();nc();Db=`sigil daemon \u2014 control the Sigil daemon
667
744
 
668
745
  Usage:
669
746
  sigil daemon start [--foreground]
@@ -679,10 +756,22 @@ every CLI verb, MCP client, and hook on this machine. It auto-starts on
679
756
  first use; you only need these commands for explicit lifecycle control.
680
757
 
681
758
  Files:
682
- ${we} Unix socket
683
- ${It} PID file
684
- ${pe} Append-only log`});function as(e){let t={};for(let r=0;r<e.length;r++){let n=e[r];if(!n.startsWith("--"))continue;if(n.includes("=")){let[s,a]=n.slice(2).split(/=(.+)/);t[s]=a;continue}let i=n.slice(2),o=e[r+1];t[i]=o&&!o.startsWith("--")?e[++r]:!0}return t}var Rl=f(()=>{});var V_={};T(V_,{runPair:()=>OD});async function OD(e){let[t,...r]=e;if(!t||t==="--help"||t==="-h"){console.log(W_);return}switch(t){case"create":return RD(r);case"list":return ND(r);case"revoke":return DD(r);default:console.error(`Unknown subcommand: pair ${t}
685
- `),console.log(W_),process.exit(1)}}async function RD(e){let t=as(e);t.name||(console.error("pair create: --name <device-name> is required"),process.exit(1));let r=await Tt();try{let{data:n}=await r.call("pair.create",{name:t.name,role:t.role||"writer",namespaces:t.ns?t.ns.split(",").map(i=>i.trim()).filter(Boolean):[],ttlSeconds:t.ttl?Number(t.ttl):void 0});console.log(`Pairing code created \u2014 share this with "${n.name}":`),console.log(""),console.log(` code: ${n.code}`),console.log(` master nodeId: ${n.masterNodeId||"(iroh not running)"}`),console.log(` role: ${n.role}`),console.log(` namespaces: ${n.namespaces.length?n.namespaces.join(", "):"(all)"}`),console.log(` expires at: ${n.expiresAt}`),console.log(""),console.log("On the joining device, run:"),console.log(` sigil join ${n.masterNodeId||"<master-node-id>"} ${n.code} --name ${n.name}`)}finally{await r.close()}}async function ND(){let e=await Tt();try{let{data:t}=await e.call("pair.list",{});if(!t.codes.length){console.log("No pairing codes outstanding.");return}for(let r of t.codes){let n=r.consumedBy?`consumed by ${r.consumedBy.name} (${r.consumedBy.nodeId.slice(0,12)}\u2026)`:r.expired?"EXPIRED":"pending";console.log(`${r.id} ${r.name} ${r.role} ${n} expires=${r.expiresAt}`)}}finally{await e.close()}}async function DD(e){let t=e[0];t||(console.error("pair revoke <id>"),process.exit(1));let r=await Tt();try{let{data:n}=await r.call("pair.revoke",{id:Number(t)});console.log(n.deleted?`Revoked pairing code ${t}.`:`No pairing code with id=${t}.`)}finally{await r.close()}}var W_,K_=f(()=>{Ne();Rl();W_=`sigil pair \u2014 create and manage device pairing codes
759
+ ${Se} Unix socket
760
+ ${Pt} PID file
761
+ ${te} Append-only log`});var Hb={};v(Hb,{runService:()=>zM});async function zM(e){let[t]=e;if(!t||t==="--help"||t==="-h"){console.log(Bb);return}switch(!Ru()&&t!=="status"&&(console.error(`No always-up backend for platform "${process.platform}". Sigil still auto-starts on first use.`),process.exit(1)),t){case"install":return XM();case"uninstall":return ZM();case"status":return QM();case"start":return rd(Nu,"started");case"stop":return rd(Du,"stopped");case"restart":return rd(Lu,"restarted");default:console.error(`Unknown subcommand: service ${t}
762
+ `),console.log(Bb),process.exit(1)}}async function XM(){try{let e=await $u();console.log(`Sigil service installed (${e.manager}).`),console.log(` unit ${e.unitPath}`),console.log(" Sigil will now start on login and restart automatically if it crashes.")}catch(e){console.error(`service install failed: ${e.message}`),process.exit(1)}}async function ZM(){let e=await ro();console.log(`Sigil service removed (${e.manager}). Sigil still auto-starts on first use.`)}async function rd(e,t){let r=await e();r.ok?console.log(`Sigil service ${t} (${r.manager}).`):(console.error(`service ${t} failed (${r.manager}).`),process.exit(1))}async function QM(){let{platform:e,supervisor:t,heartbeat:r}=await no();if(console.log(`platform ${e}`),t.unsupported?console.log("service unsupported on this platform (auto-spawn only)"):(console.log(`service ${t.installed?"installed":"not installed"} (${t.manager})`),console.log(` ${t.running?"loaded/running":"not loaded"}`),t.unitPath&&console.log(` unit ${t.unitPath}`)),r){let n=r.ageMs==null?"\u2014":`${Math.round(r.ageMs/1e3)}s ago`;console.log(`daemon pid ${r.pid} \xB7 v${r.version} \xB7 up ${ko(Date.now()-r.startedAt)}`),console.log(`heartbeat ${n}${r.supervised?" \xB7 supervised":""}`)}else console.log("daemon no heartbeat (not running)")}var Bb,Ub=f(()=>{io();nc();Bb=`sigil service \u2014 keep Sigil always running
763
+
764
+ Usage:
765
+ sigil service install Install + start the OS service (always-up)
766
+ sigil service uninstall Remove the OS service
767
+ sigil service status Show service + heartbeat status
768
+ sigil service start
769
+ sigil service stop
770
+ sigil service restart
771
+
772
+ Backend: launchd (macOS) \xB7 systemd --user (Linux) \xB7 Scheduled Task (Windows).
773
+ Once installed, Sigil starts at login and is auto-restarted if it crashes.`});function ha(e){let t={};for(let r=0;r<e.length;r++){let n=e[r];if(!n.startsWith("--"))continue;if(n.includes("=")){let[s,a]=n.slice(2).split(/=(.+)/);t[s]=a;continue}let i=n.slice(2),o=e[r+1];t[i]=o&&!o.startsWith("--")?e[++r]:!0}return t}var nd=f(()=>{});var jb={};v(jb,{runPair:()=>e1});async function e1(e){let[t,...r]=e;if(!t||t==="--help"||t==="-h"){console.log(Gb);return}switch(t){case"create":return t1(r);case"list":return r1(r);case"revoke":return n1(r);default:console.error(`Unknown subcommand: pair ${t}
774
+ `),console.log(Gb),process.exit(1)}}async function t1(e){let t=ha(e);t.name||(console.error("pair create: --name <device-name> is required"),process.exit(1));let r=await Bt();try{let{data:n}=await r.call("pair.create",{name:t.name,role:t.role||"writer",namespaces:t.ns?t.ns.split(",").map(i=>i.trim()).filter(Boolean):[],ttlSeconds:t.ttl?Number(t.ttl):void 0});console.log(`Pairing code created \u2014 share this with "${n.name}":`),console.log(""),console.log(` code: ${n.code}`),console.log(` master nodeId: ${n.masterNodeId||"(iroh not running)"}`),console.log(` role: ${n.role}`),console.log(` namespaces: ${n.namespaces.length?n.namespaces.join(", "):"(all)"}`),console.log(` expires at: ${n.expiresAt}`),console.log(""),console.log("On the joining device, run:"),console.log(` sigil join ${n.masterNodeId||"<master-node-id>"} ${n.code} --name ${n.name}`)}finally{await r.close()}}async function r1(){let e=await Bt();try{let{data:t}=await e.call("pair.list",{});if(!t.codes.length){console.log("No pairing codes outstanding.");return}for(let r of t.codes){let n=r.consumedBy?`consumed by ${r.consumedBy.name} (${r.consumedBy.nodeId.slice(0,12)}\u2026)`:r.expired?"EXPIRED":"pending";console.log(`${r.id} ${r.name} ${r.role} ${n} expires=${r.expiresAt}`)}}finally{await e.close()}}async function n1(e){let t=e[0];t||(console.error("pair revoke <id>"),process.exit(1));let r=await Bt();try{let{data:n}=await r.call("pair.revoke",{id:Number(t)});console.log(n.deleted?`Revoked pairing code ${t}.`:`No pairing code with id=${t}.`)}finally{await r.close()}}var Gb,Wb=f(()=>{Pe();nd();Gb=`sigil pair \u2014 create and manage device pairing codes
686
775
 
687
776
  Usage:
688
777
  sigil pair create --name <device-name> [--role <role>] [--ns ns1,ns2] [--ttl <seconds>]
@@ -695,11 +784,11 @@ Roles:
695
784
  admin \u2014 full access including device management
696
785
 
697
786
  The plaintext code is printed once at creation time and never stored.
698
- Hand it to the device you want to pair, along with the master node id.`});var Y_={};T(Y_,{runJoin:()=>FD});import{hostname as LD}from"node:os";import{readFileSync as kD}from"node:fs";import{join as PD}from"node:path";async function FD(e){if(!e.length||e.includes("--help")||e.includes("-h")){console.log(MD);return}let t=e.filter(u=>!u.startsWith("--"));t.length<2&&(console.error("Usage: sigil join <master-node-id> <pairing-code> [options]"),process.exit(1));let[r,n]=t,i=as(e),o=i.name||LD(),s=i.addresses?i.addresses.split(",").map(u=>u.trim()):void 0,a=i.relay||void 0,c=!!i.lite;(process.env.SIGIL_MODE===void 0||process.env.SIGIL_MODE==="solo")&&(process.env.SIGIL_MODE=c?"lite-follower":"follower",process.env.SIGIL_NETWORK_ENABLED="true");let{joinMaster:l}=await Promise.resolve().then(()=>(ss(),$l)),d=HD();console.log(`[sigil] joining master ${r.slice(0,12)}\u2026`);let p=await l({masterAddr:{nodeId:r,relayUrl:a,addresses:s},code:n,name:o,sigilVersion:d});if(p.ok||(console.error(`Pairing rejected: ${p.error?.code} \u2014 ${p.error?.message}`),process.exit(1)),console.log("\u2713 paired successfully"),console.log(` device id: ${p.device.id}`),console.log(` role: ${p.device.role}`),console.log(` namespaces: ${(p.device.namespaces||[]).join(", ")||"(all)"}`),console.log(` master nodeId: ${p.masterNodeId}`),p.manifest){let{produceManifest:u,verifyManifest:m}=await Promise.resolve().then(()=>(Ai(),Ii)),g=await u(),y=m(g,p.manifest);if(y.warnings.length){console.log(`
787
+ Hand it to the device you want to pair, along with the master node id.`});var Vb={};v(Vb,{runJoin:()=>c1});import{hostname as i1}from"node:os";import{readFileSync as o1}from"node:fs";import{join as s1}from"node:path";async function c1(e){if(!e.length||e.includes("--help")||e.includes("-h")){console.log(a1);return}let t=e.filter(u=>!u.startsWith("--"));t.length<2&&(console.error("Usage: sigil join <master-node-id> <pairing-code> [options]"),process.exit(1));let[r,n]=t,i=ha(e),o=i.name||i1(),s=i.addresses?i.addresses.split(",").map(u=>u.trim()):void 0,a=i.relay||void 0,c=!!i.lite;(process.env.SIGIL_MODE===void 0||process.env.SIGIL_MODE==="solo")&&(process.env.SIGIL_MODE=c?"lite-follower":"follower",process.env.SIGIL_NETWORK_ENABLED="true");let{joinMaster:l}=await Promise.resolve().then(()=>(ma(),Qu)),d=l1();console.log(`[sigil] joining master ${r.slice(0,12)}\u2026`);let p=await l({masterAddr:{nodeId:r,relayUrl:a,addresses:s},code:n,name:o,sigilVersion:d});if(p.ok||(console.error(`Pairing rejected: ${p.error?.code} \u2014 ${p.error?.message}`),process.exit(1)),console.log("\u2713 paired successfully"),console.log(` device id: ${p.device.id}`),console.log(` role: ${p.device.role}`),console.log(` namespaces: ${(p.device.namespaces||[]).join(", ")||"(all)"}`),console.log(` master nodeId: ${p.masterNodeId}`),p.manifest){let{produceManifest:u,verifyManifest:m}=await Promise.resolve().then(()=>(yo(),go)),h=await u(),y=m(h,p.manifest);if(y.warnings.length){console.log(`
699
788
  Manifest warnings:`);for(let w of y.warnings)console.log(` \u26A0 ${w}`)}if(y.ok)console.log("\u2713 schema manifest matches master");else{console.error(`
700
789
  Manifest errors:`);for(let w of y.errors)console.error(` \u2717 ${w}`);c?(console.error(`
701
790
  Proceeding as lite-follower \u2014 manifest drift OK because lite-follower`),console.error("devices never store facts locally.")):(console.error(`
702
- Follower mode requires a matching manifest. Either align the config on`),console.error("this device (embedding model/dim, chunker, migrations) or join as a"),console.error("lite-follower (which never stores facts locally): retry with --lite"),process.exit(1))}}try{let{connectOrStartDaemon:u}=await Promise.resolve().then(()=>(Ne(),nt)),m=await u({quiet:!0});await m.call("writeEnv",{patch:{SIGIL_MODE:c?"lite-follower":"follower",SIGIL_MASTER_NODE_ID:p.masterNodeId,SIGIL_NETWORK_ENABLED:"true"}}),await m.close(),console.log("\u2713 updated ~/.sigil/.env (SIGIL_MODE, SIGIL_MASTER_NODE_ID)")}catch(u){console.error(`(warning: failed to persist mode to .env: ${u.message})`)}}function HD(){try{return JSON.parse(kD(PD(ge,"package.json"),"utf8")).version}catch{return"unknown"}}var MD,q_=f(()=>{B();Rl();MD=`sigil join \u2014 pair this device with a Sigil master
791
+ Follower mode requires a matching manifest. Either align the config on`),console.error("this device (embedding model/dim, chunker, migrations) or join as a"),console.error("lite-follower (which never stores facts locally): retry with --lite"),process.exit(1))}}try{let{connectOrStartDaemon:u}=await Promise.resolve().then(()=>(Pe(),lt)),m=await u({quiet:!0});await m.call("writeEnv",{patch:{SIGIL_MODE:c?"lite-follower":"follower",SIGIL_MASTER_NODE_ID:p.masterNodeId,SIGIL_NETWORK_ENABLED:"true"}}),await m.close(),console.log("\u2713 updated ~/.sigil/.env (SIGIL_MODE, SIGIL_MASTER_NODE_ID)")}catch(u){console.error(`(warning: failed to persist mode to .env: ${u.message})`)}}function l1(){try{return JSON.parse(o1(s1(Ee,"package.json"),"utf8")).version}catch{return"unknown"}}var a1,Kb=f(()=>{M();nd();a1=`sigil join \u2014 pair this device with a Sigil master
703
792
 
704
793
  Usage:
705
794
  sigil join <master-node-id> <pairing-code> [--name <name>]
@@ -708,222 +797,190 @@ Usage:
708
797
  [--lite]
709
798
 
710
799
  The master prints both the node id and the pairing code when you run
711
- \`sigil pair create\` on it.`});var Nl={};T(Nl,{validateConfig:()=>Z_,validateConfigDeep:()=>BD});function Z_(){let e=[];return UD(e),GD(e),jD(e),e}async function BD(){let e=Z_();if(E.db.type==="postgres"&&!e.some(t=>t.code.startsWith("DB_")))try{await(await Promise.resolve().then(()=>(D(),G))).default.raw("SELECT 1")}catch(t){e.push({level:"fail",code:"DB_UNREACHABLE",message:`Postgres at ${E.db.host}:${E.db.port}/${E.db.database} unreachable: ${t.message.split(`
712
- `)[0]}`,fix:"Start Postgres (e.g. `docker start sigil-pg` or your equivalent) and verify SIGIL_DB_HOST/PORT/NAME/USER/PASSWORD in ~/.sigil/.env"})}return e}function UD(e){let{provider:t,model:r}=E.embedding;if(t&&r){let n=Object.keys(J_).find(i=>J_[i].some(o=>o.test(r)));n&&n!==t&&e.push({level:"fail",code:"EMBEDDING_PROVIDER_MODEL_MISMATCH",message:`EMBEDDING_PROVIDER=${t} but EMBEDDING_MODEL=${r} is a ${n} model.`,fix:WD(t,r,n)})}if(t&&X_[t]){let n=X_[t];E.embedding[n]||e.push({level:"fail",code:"EMBEDDING_PROVIDER_MISSING_KEY",message:`EMBEDDING_PROVIDER=${t} but no ${cs(n)} found.`,fix:`Set ${cs(n)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}}function GD(e){let{provider:t}=E.llm;if(t&&z_[t]){let r=z_[t];E.llm[r]||e.push({level:"fail",code:"LLM_PROVIDER_MISSING_KEY",message:`LLM_PROVIDER=${t} but no ${cs(r)} found.`,fix:`Set ${cs(r)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}t==="openrouter"&&E.llm.openrouterModel&&(E.llm.openrouterModel.includes("/")||e.push({level:"warn",code:"OPENROUTER_MODEL_FORMAT",message:`LLM_OPENROUTER_MODEL=${E.llm.openrouterModel} doesn't look like vendor/model format.`,fix:'Use format like "anthropic/claude-haiku-4-5" or "google/gemini-2.5-flash".'}))}function jD(e){E.db.type==="postgres"&&(!E.db.host||!E.db.database||!E.db.user)&&e.push({level:"fail",code:"DB_CONFIG_INCOMPLETE",message:"SIGIL_DB_TYPE=postgres but host/database/user missing.",fix:"Set SIGIL_DB_HOST, SIGIL_DB_NAME, SIGIL_DB_USER, SIGIL_DB_PASSWORD in ~/.sigil/.env. Run `sigil init` for an interactive setup."})}function cs(e){return{openaiApiKey:"OPENAI_API_KEY",apiKey:"ANTHROPIC_API_KEY",openrouterApiKey:"OPENROUTER_API_KEY",voyageApiKey:"VOYAGE_API_KEY"}[e]||e}function WD(e,t,r){let n={voyage:"voyage-3.5, voyage-3-large, voyage-code-3.5",openai:"text-embedding-3-large, text-embedding-3-small",ollama:"nomic-embed-text, mxbai-embed-large"}[e]||"(see provider docs)";return`Either set EMBEDDING_PROVIDER=${r} (matches your current model), or change EMBEDDING_MODEL to one of: ${n}`}var J_,z_,X_,Dl=f(()=>{R();J_={voyage:[/^voyage-/],openai:[/^text-embedding-/],ollama:[/^nomic-embed/,/^mxbai-embed/,/^all-minilm/,/^bge-/,/^snowflake-/,/^granite-embedding/]},z_={openai:"openaiApiKey",anthropic:"apiKey",openrouter:"openrouterApiKey"},X_={openai:"openaiApiKey",voyage:"voyageApiKey",openrouter:"openrouterApiKey"}});var Ci={};T(Ci,{HOOK_ERROR_LOG:()=>ls,LAST_CLEAN_DOCTOR_PATH:()=>us,clearLastCleanDoctor:()=>QD,failClosedOnBadConfig:()=>JD,getUnackedErrorCount:()=>XD,markDoctorClean:()=>ZD,readRecentHookErrors:()=>zD,recordHookError:()=>Q_});import{appendFile as VD,readFile as Ll,writeFile as KD,unlink as YD}from"node:fs/promises";import{createHash as qD}from"node:crypto";async function Q_(e,t,r=null){try{let n={ts:new Date().toISOString(),hook:e,error:gn(t?.message||String(t)),input_hash:r?eL(r):null};await VD(ls,JSON.stringify(n)+`
713
- `,"utf8")}catch{}}async function JD(e,t=null){try{let{validateConfig:r}=await Promise.resolve().then(()=>(Dl(),Nl)),n=r().filter(i=>i.level==="fail");if(n.length===0)return!1;for(let i of n){let o=new Error(`${i.code}: ${i.message} \u2014 fix: ${i.fix}`);await Q_(e,o,t)}return!0}catch{return!1}}async function zD(e=10){let t;try{t=await Ll(ls,"utf8")}catch{return[]}let r=t.split(`
714
- `).filter(Boolean),n=[];for(let i of r.slice(-e))try{n.push(JSON.parse(i))}catch{}return n}async function XD(){let e=0;try{let n=await Ll(us,"utf8");e=new Date(n.trim()).getTime()}catch{}let t;try{t=await Ll(ls,"utf8")}catch{return 0}let r=0;for(let n of t.split(`
715
- `))if(n.trim())try{let i=JSON.parse(n);(i.ts?new Date(i.ts).getTime():0)>e&&(r+=1)}catch{}return r}async function ZD(){try{await KD(us,new Date().toISOString(),"utf8")}catch{}}async function QD(){try{await YD(us)}catch{}}function eL(e){try{let t=typeof e=="string"?e:JSON.stringify(e);return qD("sha256").update(t).digest("hex").slice(0,12)}catch{return null}}var ls,us,$i=f(()=>{B();Uo();ls=Js,us=zs});var eE,tE,rE,nE=f(()=>{eE=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let r=0;for(e.lastIndex=0;e.test(t);)r+=1;return t.length-r}})(),tE=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,rE=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141});var tL,rL,iE,nL,oE,iL,oL,sL,sE,aE,cE=f(()=>{nE();tL=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,rL=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,iE=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,nL=/\t{1,1000}/y,oE=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),iL=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,oL=new RegExp("\\p{M}+","gu"),sL={limit:1/0,ellipsis:""},sE=(e,t={},r={})=>{let n=t.limit??1/0,i=t.ellipsis??"",o=t?.ellipsisWidth??(i?sE(i,sL,r).width:0),s=0,a=r.controlWidth??0,c=r.tabWidth??8,l=r.emojiWidth??2,d=2,p=r.regularWidth??1,u=r.wideWidth??d,m=[[iL,p],[tL,s],[rL,a],[nL,c],[oE,l],[iE,u]],g=0,y=0,w=e.length,x=0,b=!1,A=w,v=Math.max(0,n-o),S=0,C=0,O=0,M=0;e:for(;;){if(C>S||y>=w&&y>g){let F=e.slice(S,C)||e.slice(g,y);x=0;for(let q of F.replaceAll(oL,"")){let P=q.codePointAt(0)||0;if(tE(P)?M=d:rE(P)?M=u:M=p,O+M>v&&(A=Math.min(A,Math.max(S,g)+x)),O+M>n){b=!0;break e}x+=q.length,O+=M}S=C=0}if(y>=w)break e;for(let F=0,q=m.length;F<q;F++){let[P,Q]=m[F];if(P.lastIndex=y,P.test(e)){if(x=P===iE?eE(e.slice(y,P.lastIndex)):P===oE?1:P.lastIndex-y,M=x*Q,O+M>v&&(A=Math.min(A,y+Math.floor((v-O)/Q))),O+M>n){b=!0;break e}O+=M,S=g,C=y,y=g=P.lastIndex;continue e}}y+=1}return{width:b?v:O,index:b?A:w,truncated:b,ellipsed:b&&n>=o}},aE=sE});var aL,cL,se,kl=f(()=>{cE();aL={limit:1/0,ellipsis:"",ellipsisWidth:0},cL=(e,t={})=>aE(e,aL,t).width,se=cL});function et(e,t,r){return String(e).normalize().split(fL).map(n=>pL(n,t,r)).join(`
716
- `)}var ds,fE,lL,Ml,mE,uL,hE,Fl,lE,uE,dE,pE,Pl,dL,pL,fL,Hl=f(()=>{kl();ds="\x1B",fE="\x9B",lL=39,Ml="\x07",mE="[",uL="]",hE="m",Fl=`${uL}8;;`,lE=new RegExp(`(?:\\${mE}(?<code>\\d+)m|\\${Fl}(?<uri>.*)${Ml})`,"y"),uE=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},dE=e=>`${ds}${mE}${e}${hE}`,pE=e=>`${ds}${Fl}${e}${Ml}`,Pl=(e,t,r)=>{let n=t[Symbol.iterator](),i=!1,o=!1,s=e.at(-1),a=s===void 0?0:se(s),c=n.next(),l=n.next(),d=0;for(;!c.done;){let p=c.value,u=se(p);a+u<=r?e[e.length-1]+=p:(e.push(p),a=0),(p===ds||p===fE)&&(i=!0,o=t.startsWith(Fl,d+1)),i?o?p===Ml&&(i=!1,o=!1):p===hE&&(i=!1):(a+=u,a===r&&!l.done&&(e.push(""),a=0)),c=l,l=n.next(),d+=p.length}s=e.at(-1),!a&&s!==void 0&&s.length&&e.length>1&&(e[e.length-2]+=e.pop())},dL=e=>{let t=e.split(" "),r=t.length;for(;r&&!se(t[r-1]);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},pL=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=e.split(" "),a=[""],c=0;for(let p=0;p<s.length;p++){let u=s[p];if(r.trim!==!1){let g=a.at(-1)??"",y=g.trimStart();g.length!==y.length&&(a[a.length-1]=y,c=se(y))}p!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c||r.trim===!1)&&(a[a.length-1]+=" ",c++));let m=se(u);if(r.hard&&m>t){let g=t-c,y=1+Math.floor((m-g-1)/t);Math.floor((m-1)/t)<y&&a.push(""),Pl(a,u,t),c=se(a.at(-1)??"");continue}if(c+m>t&&c&&m){if(r.wordWrap===!1&&c<t){Pl(a,u,t),c=se(a.at(-1)??"");continue}a.push(""),c=0}if(c+m>t&&r.wordWrap===!1){Pl(a,u,t),c=se(a.at(-1)??"");continue}a[a.length-1]+=u,c+=m}r.trim!==!1&&(a=a.map(p=>dL(p)));let l=a.join(`
717
- `),d=!1;for(let p=0;p<l.length;p++){let u=l[p];if(n+=u,d)d=!1;else if(d=u>="\uD800"&&u<="\uDBFF",d)continue;if(u===ds||u===fE){lE.lastIndex=p+1;let g=lE.exec(l)?.groups;if(g?.code!==void 0){let y=Number.parseFloat(g.code);i=y===lL?void 0:y}else g?.uri!==void 0&&(o=g.uri.length===0?void 0:g.uri)}if(l[p+1]===`
718
- `){o&&(n+=pE(""));let m=i?uE(i):void 0;i&&m&&(n+=dE(m))}else u===`
719
- `&&(i&&uE(i)&&(n+=dE(i)),o&&(n+=pE(o)))}return n},fL=/\r?\n/});var Ul=he((zJ,gE)=>{"use strict";var Bl={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let r="";return e<0?r+=`\x1B[${-e}D`:e>0&&(r+=`\x1B[${e}C`),t<0?r+=`\x1B[${-t}A`:t>0&&(r+=`\x1B[${t}B`),r},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},mL={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},hL={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let r=0;r<e;r++)t+=this.line+(r<e-1?Bl.up():"");return e&&(t+=Bl.left),t}};gE.exports={cursor:Bl,scroll:mL,erase:hL,beep:"\x07"}});import{styleText as Dn}from"node:util";import{stdout as Vl,stdin as EE}from"node:process";import*as zt from"node:readline";import gL from"node:readline";import{ReadStream as yE}from"node:tty";function _t(e,t,r){if(!r.some(s=>!s.disabled))return e;let n=e+t,i=Math.max(r.length-1,0),o=n<0?i:n>i?0:n;return r[o].disabled?_t(o,t<0?-1:1,r):o}function ps(e,t,r,n){let i=n.split(`
720
- `),o=0,s=e;for(let c of i){if(s<=c.length)break;s-=c.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+r)),s=Math.min(s,i[o].length)+t;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let a=0;for(let c=0;c<o;c++)a+=i[c].length+1;return a+s}function bE(e){if(e.aliases!==void 0){let t=e.aliases;for(let r in t){if(!Object.hasOwn(t,r))continue;let n=t[r];L.actions.has(n)&&(L.aliases.has(r)||L.aliases.set(r,n))}}if(e.messages!==void 0){let t=e.messages;t.cancel!==void 0&&(L.messages.cancel=t.cancel),t.error!==void 0&&(L.messages.error=t.error)}if(e.withGuide!==void 0&&(L.withGuide=e.withGuide!==!1),e.date!==void 0){let t=e.date;t.monthNames!==void 0&&(L.date.monthNames=[...t.monthNames]),t.messages!==void 0&&(t.messages.required!==void 0&&(L.date.messages.required=t.messages.required),t.messages.invalidMonth!==void 0&&(L.date.messages.invalidMonth=t.messages.invalidMonth),t.messages.invalidDay!==void 0&&(L.date.messages.invalidDay=t.messages.invalidDay),t.messages.afterMin!==void 0&&(L.date.messages.afterMin=t.messages.afterMin),t.messages.beforeMax!==void 0&&(L.date.messages.beforeMax=t.messages.beforeMax))}}function Kl(e,t){if(typeof e=="string")return L.aliases.get(e)===t;for(let r of e)if(r!==void 0&&Kl(r,t))return!0;return!1}function _L(e,t){if(e===t)return;let r=e.split(`
800
+ \`sigil pair create\` on it.`});var id={};v(id,{validateConfig:()=>zb,validateConfigDeep:()=>u1});function zb(){let e=[];return d1(e),p1(e),f1(e),e}async function u1(){let e=zb();if(_.db.type==="postgres"&&!e.some(t=>t.code.startsWith("DB_")))try{await(await Promise.resolve().then(()=>(N(),j))).default.raw("SELECT 1")}catch(t){e.push({level:"fail",code:"DB_UNREACHABLE",message:`Postgres at ${_.db.host}:${_.db.port}/${_.db.database} unreachable: ${t.message.split(`
801
+ `)[0]}`,fix:"Start Postgres (e.g. `docker start sigil-pg` or your equivalent) and verify SIGIL_DB_HOST/PORT/NAME/USER/PASSWORD in ~/.sigil/.env"})}return e}function d1(e){let{provider:t,model:r}=_.embedding;if(t&&r){let n=Object.keys(Yb).find(i=>Yb[i].some(o=>o.test(r)));n&&n!==t&&e.push({level:"fail",code:"EMBEDDING_PROVIDER_MODEL_MISMATCH",message:`EMBEDDING_PROVIDER=${t} but EMBEDDING_MODEL=${r} is a ${n} model.`,fix:m1(t,r,n)})}if(t&&Jb[t]){let n=Jb[t];_.embedding[n]||e.push({level:"fail",code:"EMBEDDING_PROVIDER_MISSING_KEY",message:`EMBEDDING_PROVIDER=${t} but no ${ga(n)} found.`,fix:`Set ${ga(n)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}}function p1(e){let{provider:t}=_.llm;if(t&&qb[t]){let r=qb[t];_.llm[r]||e.push({level:"fail",code:"LLM_PROVIDER_MISSING_KEY",message:`LLM_PROVIDER=${t} but no ${ga(r)} found.`,fix:`Set ${ga(r)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}t==="openrouter"&&_.llm.openrouterModel&&(_.llm.openrouterModel.includes("/")||e.push({level:"warn",code:"OPENROUTER_MODEL_FORMAT",message:`LLM_OPENROUTER_MODEL=${_.llm.openrouterModel} doesn't look like vendor/model format.`,fix:'Use format like "anthropic/claude-haiku-4-5" or "google/gemini-2.5-flash".'}))}function f1(e){_.db.type==="postgres"&&(!_.db.host||!_.db.database||!_.db.user)&&e.push({level:"fail",code:"DB_CONFIG_INCOMPLETE",message:"SIGIL_DB_TYPE=postgres but host/database/user missing.",fix:"Set SIGIL_DB_HOST, SIGIL_DB_NAME, SIGIL_DB_USER, SIGIL_DB_PASSWORD in ~/.sigil/.env. Run `sigil init` for an interactive setup."})}function ga(e){return{openaiApiKey:"OPENAI_API_KEY",apiKey:"ANTHROPIC_API_KEY",openrouterApiKey:"OPENROUTER_API_KEY",voyageApiKey:"VOYAGE_API_KEY"}[e]||e}function m1(e,t,r){let n={voyage:"voyage-3.5, voyage-3-large, voyage-code-3.5",openai:"text-embedding-3-large, text-embedding-3-small",ollama:"nomic-embed-text, mxbai-embed-large"}[e]||"(see provider docs)";return`Either set EMBEDDING_PROVIDER=${r} (matches your current model), or change EMBEDDING_MODEL to one of: ${n}`}var Yb,qb,Jb,od=f(()=>{$();Yb={voyage:[/^voyage-/],openai:[/^text-embedding-/],ollama:[/^nomic-embed/,/^mxbai-embed/,/^all-minilm/,/^bge-/,/^snowflake-/,/^granite-embedding/]},qb={openai:"openaiApiKey",anthropic:"apiKey",openrouter:"openrouterApiKey"},Jb={openai:"openaiApiKey",voyage:"voyageApiKey",openrouter:"openrouterApiKey"}});var Eo={};v(Eo,{HOOK_ERROR_LOG:()=>ya,LAST_CLEAN_DOCTOR_PATH:()=>wa,clearLastCleanDoctor:()=>x1,failClosedOnBadConfig:()=>E1,getUnackedErrorCount:()=>S1,markDoctorClean:()=>b1,readRecentHookErrors:()=>_1,recordHookError:()=>Xb});import{appendFile as h1,readFile as sd,writeFile as g1,unlink as y1}from"node:fs/promises";import{createHash as w1}from"node:crypto";async function Xb(e,t,r=null){try{let n={ts:new Date().toISOString(),hook:e,error:Bn(t?.message||String(t)),input_hash:r?I1(r):null};await h1(ya,JSON.stringify(n)+`
802
+ `,"utf8")}catch{}}async function E1(e,t=null){try{let{validateConfig:r}=await Promise.resolve().then(()=>(od(),id)),n=r().filter(i=>i.level==="fail");if(n.length===0)return!1;for(let i of n){let o=new Error(`${i.code}: ${i.message} \u2014 fix: ${i.fix}`);await Xb(e,o,t)}return!0}catch{return!1}}async function _1(e=10){let t;try{t=await sd(ya,"utf8")}catch{return[]}let r=t.split(`
803
+ `).filter(Boolean),n=[];for(let i of r.slice(-e))try{n.push(JSON.parse(i))}catch{}return n}async function S1(){let e=0;try{let n=await sd(wa,"utf8");e=new Date(n.trim()).getTime()}catch{}let t;try{t=await sd(ya,"utf8")}catch{return 0}let r=0;for(let n of t.split(`
804
+ `))if(n.trim())try{let i=JSON.parse(n);(i.ts?new Date(i.ts).getTime():0)>e&&(r+=1)}catch{}return r}async function b1(){try{await g1(wa,new Date().toISOString(),"utf8")}catch{}}async function x1(){try{await y1(wa)}catch{}}function I1(e){try{let t=typeof e=="string"?e:JSON.stringify(e);return w1("sha256").update(t).digest("hex").slice(0,12)}catch{return null}}var ya,wa,_o=f(()=>{M();Rs();ya=Ka,wa=Ya});var Zb,Qb,ex,tx=f(()=>{Zb=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let r=0;for(e.lastIndex=0;e.test(t);)r+=1;return t.length-r}})(),Qb=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,ex=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141});var v1,A1,rx,T1,nx,C1,O1,R1,ix,ox,sx=f(()=>{tx();v1=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,A1=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,rx=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,T1=/\t{1,1000}/y,nx=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),C1=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,O1=new RegExp("\\p{M}+","gu"),R1={limit:1/0,ellipsis:""},ix=(e,t={},r={})=>{let n=t.limit??1/0,i=t.ellipsis??"",o=t?.ellipsisWidth??(i?ix(i,R1,r).width:0),s=0,a=r.controlWidth??0,c=r.tabWidth??8,l=r.emojiWidth??2,d=2,p=r.regularWidth??1,u=r.wideWidth??d,m=[[C1,p],[v1,s],[A1,a],[T1,c],[nx,l],[rx,u]],h=0,y=0,w=e.length,b=0,S=!1,T=w,I=Math.max(0,n-o),x=0,C=0,R=0,F=0;e:for(;;){if(C>x||y>=w&&y>h){let B=e.slice(x,C)||e.slice(h,y);b=0;for(let z of B.replaceAll(O1,"")){let P=z.codePointAt(0)||0;if(Qb(P)?F=d:ex(P)?F=u:F=p,R+F>I&&(T=Math.min(T,Math.max(x,h)+b)),R+F>n){S=!0;break e}b+=z.length,R+=F}x=C=0}if(y>=w)break e;for(let B=0,z=m.length;B<z;B++){let[P,ie]=m[B];if(P.lastIndex=y,P.test(e)){if(b=P===rx?Zb(e.slice(y,P.lastIndex)):P===nx?1:P.lastIndex-y,F=b*ie,R+F>I&&(T=Math.min(T,y+Math.floor((I-R)/ie))),R+F>n){S=!0;break e}R+=F,x=h,C=y,y=h=P.lastIndex;continue e}}y+=1}return{width:S?I:R,index:S?T:w,truncated:S,ellipsed:S&&n>=o}},ox=ix});var $1,N1,ue,ad=f(()=>{sx();$1={limit:1/0,ellipsis:"",ellipsisWidth:0},N1=(e,t={})=>ox(e,$1,t).width,ue=N1});function at(e,t,r){return String(e).normalize().split(M1).map(n=>P1(n,t,r)).join(`
805
+ `)}var Ea,dx,D1,ld,px,L1,fx,ud,ax,cx,lx,ux,cd,k1,P1,M1,dd=f(()=>{ad();Ea="\x1B",dx="\x9B",D1=39,ld="\x07",px="[",L1="]",fx="m",ud=`${L1}8;;`,ax=new RegExp(`(?:\\${px}(?<code>\\d+)m|\\${ud}(?<uri>.*)${ld})`,"y"),cx=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},lx=e=>`${Ea}${px}${e}${fx}`,ux=e=>`${Ea}${ud}${e}${ld}`,cd=(e,t,r)=>{let n=t[Symbol.iterator](),i=!1,o=!1,s=e.at(-1),a=s===void 0?0:ue(s),c=n.next(),l=n.next(),d=0;for(;!c.done;){let p=c.value,u=ue(p);a+u<=r?e[e.length-1]+=p:(e.push(p),a=0),(p===Ea||p===dx)&&(i=!0,o=t.startsWith(ud,d+1)),i?o?p===ld&&(i=!1,o=!1):p===fx&&(i=!1):(a+=u,a===r&&!l.done&&(e.push(""),a=0)),c=l,l=n.next(),d+=p.length}s=e.at(-1),!a&&s!==void 0&&s.length&&e.length>1&&(e[e.length-2]+=e.pop())},k1=e=>{let t=e.split(" "),r=t.length;for(;r&&!ue(t[r-1]);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},P1=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=e.split(" "),a=[""],c=0;for(let p=0;p<s.length;p++){let u=s[p];if(r.trim!==!1){let h=a.at(-1)??"",y=h.trimStart();h.length!==y.length&&(a[a.length-1]=y,c=ue(y))}p!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c||r.trim===!1)&&(a[a.length-1]+=" ",c++));let m=ue(u);if(r.hard&&m>t){let h=t-c,y=1+Math.floor((m-h-1)/t);Math.floor((m-1)/t)<y&&a.push(""),cd(a,u,t),c=ue(a.at(-1)??"");continue}if(c+m>t&&c&&m){if(r.wordWrap===!1&&c<t){cd(a,u,t),c=ue(a.at(-1)??"");continue}a.push(""),c=0}if(c+m>t&&r.wordWrap===!1){cd(a,u,t),c=ue(a.at(-1)??"");continue}a[a.length-1]+=u,c+=m}r.trim!==!1&&(a=a.map(p=>k1(p)));let l=a.join(`
806
+ `),d=!1;for(let p=0;p<l.length;p++){let u=l[p];if(n+=u,d)d=!1;else if(d=u>="\uD800"&&u<="\uDBFF",d)continue;if(u===Ea||u===dx){ax.lastIndex=p+1;let h=ax.exec(l)?.groups;if(h?.code!==void 0){let y=Number.parseFloat(h.code);i=y===D1?void 0:y}else h?.uri!==void 0&&(o=h.uri.length===0?void 0:h.uri)}if(l[p+1]===`
807
+ `){o&&(n+=ux(""));let m=i?cx(i):void 0;i&&m&&(n+=lx(m))}else u===`
808
+ `&&(i&&cx(i)&&(n+=lx(i)),o&&(n+=ux(o)))}return n},M1=/\r?\n/});var fd=we((Z6,mx)=>{"use strict";var pd={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let r="";return e<0?r+=`\x1B[${-e}D`:e>0&&(r+=`\x1B[${e}C`),t<0?r+=`\x1B[${-t}A`:t>0&&(r+=`\x1B[${t}B`),r},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},F1={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},B1={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let r=0;r<e;r++)t+=this.line+(r<e-1?pd.up():"");return e&&(t+=pd.left),t}};mx.exports={cursor:pd,scroll:F1,erase:B1,beep:"\x07"}});import{styleText as fi}from"node:util";import{stdout as yd,stdin as wx}from"node:process";import*as pr from"node:readline";import H1 from"node:readline";import{ReadStream as hx}from"node:tty";function $t(e,t,r){if(!r.some(s=>!s.disabled))return e;let n=e+t,i=Math.max(r.length-1,0),o=n<0?i:n>i?0:n;return r[o].disabled?$t(o,t<0?-1:1,r):o}function _a(e,t,r,n){let i=n.split(`
809
+ `),o=0,s=e;for(let c of i){if(s<=c.length)break;s-=c.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+r)),s=Math.min(s,i[o].length)+t;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let a=0;for(let c=0;c<o;c++)a+=i[c].length+1;return a+s}function Ex(e){if(e.aliases!==void 0){let t=e.aliases;for(let r in t){if(!Object.hasOwn(t,r))continue;let n=t[r];D.actions.has(n)&&(D.aliases.has(r)||D.aliases.set(r,n))}}if(e.messages!==void 0){let t=e.messages;t.cancel!==void 0&&(D.messages.cancel=t.cancel),t.error!==void 0&&(D.messages.error=t.error)}if(e.withGuide!==void 0&&(D.withGuide=e.withGuide!==!1),e.date!==void 0){let t=e.date;t.monthNames!==void 0&&(D.date.monthNames=[...t.monthNames]),t.messages!==void 0&&(t.messages.required!==void 0&&(D.date.messages.required=t.messages.required),t.messages.invalidMonth!==void 0&&(D.date.messages.invalidMonth=t.messages.invalidMonth),t.messages.invalidDay!==void 0&&(D.date.messages.invalidDay=t.messages.invalidDay),t.messages.afterMin!==void 0&&(D.date.messages.afterMin=t.messages.afterMin),t.messages.beforeMax!==void 0&&(D.date.messages.beforeMax=t.messages.beforeMax))}}function wd(e,t){if(typeof e=="string")return D.aliases.get(e)===t;for(let r of e)if(r!==void 0&&wd(r,t))return!0;return!1}function j1(e,t){if(e===t)return;let r=e.split(`
721
810
  `),n=t.split(`
722
- `),i=Math.max(r.length,n.length),o=[];for(let s=0;s<i;s++)r[s]!==n[s]&&o.push(s);return{lines:o,numLinesBefore:r.length,numLinesAfter:n.length,numLines:i}}function Ss(e){return e===jl}function fs(e,t){let r=e;r.isTTY&&r.setRawMode(t)}function xE({input:e=EE,output:t=Vl,overwrite:r=!0,hideCursor:n=!0}={}){let i=zt.createInterface({input:e,output:t,prompt:"",tabSize:1});zt.emitKeypressEvents(e,i),e instanceof yE&&e.isTTY&&e.setRawMode(!0);let o=(s,{name:a,sequence:c})=>{let l=String(s);if(Kl([l,a,c],"cancel")){n&&t.write(me.cursor.show),process.exit(0);return}if(!r)return;zt.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{zt.clearLine(t,1,()=>{e.once("keypress",o)})})};return n&&t.write(me.cursor.hide),e.once("keypress",o),()=>{e.off("keypress",o),n&&t.write(me.cursor.show),e instanceof yE&&e.isTTY&&!EL&&e.setRawMode(!1),i.terminal=!1,i.close()}}function re(e,t,r,n=r,i=r,o){let s=Er(e??Vl);return et(t,s-r.length,{hard:!0,trim:!1}).split(`
811
+ `),i=Math.max(r.length,n.length),o=[];for(let s=0;s<i;s++)r[s]!==n[s]&&o.push(s);return{lines:o,numLinesBefore:r.length,numLinesAfter:n.length,numLines:i}}function $a(e){return e===hd}function Sa(e,t){let r=e;r.isTTY&&r.setRawMode(t)}function _x({input:e=wx,output:t=yd,overwrite:r=!0,hideCursor:n=!0}={}){let i=pr.createInterface({input:e,output:t,prompt:"",tabSize:1});pr.emitKeypressEvents(e,i),e instanceof hx&&e.isTTY&&e.setRawMode(!0);let o=(s,{name:a,sequence:c})=>{let l=String(s);if(wd([l,a,c],"cancel")){n&&t.write(ge.cursor.show),process.exit(0);return}if(!r)return;pr.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{pr.clearLine(t,1,()=>{e.once("keypress",o)})})};return n&&t.write(ge.cursor.hide),e.once("keypress",o),()=>{e.off("keypress",o),n&&t.write(ge.cursor.show),e instanceof hx&&e.isTTY&&!W1&&e.setRawMode(!1),i.terminal=!1,i.close()}}function ae(e,t,r,n=r,i=r,o){let s=Jr(e??yd);return at(t,s-r.length,{hard:!0,trim:!1}).split(`
723
812
  `).map((a,c,l)=>{let d=o?o(a,c):a;return c===0?`${n}${d}`:c===l.length-1?`${i}${d}`:`${r}${d}`}).join(`
724
- `)}function bL(e,t){if(e===void 0||t.length===0)return 0;let r=t.findIndex(n=>n.value===e);return r!==-1?r:0}function xL(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function SL(e,t){if(t)return e?t:t[0]}function wE(e){return[...e].map(t=>vL[t])}function IL(e){let t=new Intl.DateTimeFormat(e,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2e3,0,15)),r=[],n="/";for(let i of t)i.type==="literal"?n=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&r.push({type:i.type,len:i.type==="year"?4:2});return{segments:r,separator:n}}function Gl(e){return Number.parseInt((e||"0").replace(/_/g,"0"),10)||0}function ms(e){return{year:Gl(e.year),month:Gl(e.month),day:Gl(e.day)}}function Wl(e,t){return new Date(e||2001,t||1,0).getDate()}function SE(e){let{year:t,month:r,day:n}=ms(e);if(!t||t<0||t>9999||!r||r<1||r>12||!n||n<1)return;let i=new Date(Date.UTC(t,r-1,n));if(!(i.getUTCFullYear()!==t||i.getUTCMonth()!==r-1||i.getUTCDate()!==n))return{year:t,month:r,day:n}}function _E(e){let t=SE(e);return t?new Date(Date.UTC(t.year,t.month-1,t.day)):void 0}function AL(e,t,r,n){let i=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null,o=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null;return e==="year"?{min:i?.year??1,max:o?.year??9999}:e==="month"?{min:i&&t.year===i.year?i.month:1,max:o&&t.year===o.year?o.month:12}:{min:i&&t.year===i.year&&t.month===i.month?i.day:1,max:o&&t.year===o.year&&t.month===o.month?o.day:Wl(t.year,t.month)}}var me,yL,wL,L,EL,jl,Er,Yl,dt,ql,hs,vL,gs,ys,ws,vE,_s,Es,bs,xs,Jl=f(()=>{Hl();me=Ys(Ul(),1);yL=["up","down","left","right","space","enter","cancel"],wL=["January","February","March","April","May","June","July","August","September","October","November","December"],L={actions:new Set(yL),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...wL],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};EL=globalThis.process.platform.startsWith("win"),jl=Symbol("clack:cancel");Er=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Yl=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;dt=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:r=EE,output:n=Vl,render:i,signal:o,...s}=e;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=o,this.input=r,this.output=n}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let r=this._subscribers.get(e)??[];r.push(t),this._subscribers.set(e,r)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let r=this._subscribers.get(e)??[],n=[];for(let i of r)i.cb(...t),i.once&&n.push(()=>r.splice(r.indexOf(i),1));for(let i of n)i()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(jl);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=gL.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),fs(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(me.cursor.show),this.output.off("resize",this.render),fs(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(me.cursor.show),this.output.off("resize",this.render),fs(this.input,!1),e(jl)})})}_isActionKey(e,t){return e===" "}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&L.aliases.has(t.name)&&this.emit("cursor",L.aliases.get(t.name)),L.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"&&this._shouldSubmit(e,t)){if(this.opts.validate){let r=this.opts.validate(this.value);r&&(this.error=r instanceof Error?r.message:r,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Kl([e,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
725
- `),fs(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=et(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
726
- `).length-1;this.output.write(me.cursor.move(-999,e*-1))}render(){let e=et(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(me.cursor.hide);else{let t=_L(this._prevFrame,e),r=Yl(this.output);if(this.restoreCursor(),t){let n=Math.max(0,t.numLinesAfter-r),i=Math.max(0,t.numLinesBefore-r),o=t.lines.find(s=>s>=n);if(o===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(me.cursor.move(0,o-i)),this.output.write(me.erase.lines(1));let s=e.split(`
727
- `);this.output.write(s[o]),this._prevFrame=e,this.output.write(me.cursor.move(0,s.length-o-1));return}else if(t.lines.length>1){if(n<i)o=n;else{let a=o-i;a>0&&this.output.write(me.cursor.move(0,a))}this.output.write(me.erase.down());let s=e.split(`
813
+ `)}function V1(e,t){if(e===void 0||t.length===0)return 0;let r=t.findIndex(n=>n.value===e);return r!==-1?r:0}function K1(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function Y1(e,t){if(t)return e?t:t[0]}function gx(e){return[...e].map(t=>q1[t])}function J1(e){let t=new Intl.DateTimeFormat(e,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2e3,0,15)),r=[],n="/";for(let i of t)i.type==="literal"?n=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&r.push({type:i.type,len:i.type==="year"?4:2});return{segments:r,separator:n}}function md(e){return Number.parseInt((e||"0").replace(/_/g,"0"),10)||0}function ba(e){return{year:md(e.year),month:md(e.month),day:md(e.day)}}function gd(e,t){return new Date(e||2001,t||1,0).getDate()}function Sx(e){let{year:t,month:r,day:n}=ba(e);if(!t||t<0||t>9999||!r||r<1||r>12||!n||n<1)return;let i=new Date(Date.UTC(t,r-1,n));if(!(i.getUTCFullYear()!==t||i.getUTCMonth()!==r-1||i.getUTCDate()!==n))return{year:t,month:r,day:n}}function yx(e){let t=Sx(e);return t?new Date(Date.UTC(t.year,t.month-1,t.day)):void 0}function z1(e,t,r,n){let i=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null,o=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null;return e==="year"?{min:i?.year??1,max:o?.year??9999}:e==="month"?{min:i&&t.year===i.year?i.month:1,max:o&&t.year===o.year?o.month:12}:{min:i&&t.year===i.year&&t.month===i.month?i.day:1,max:o&&t.year===o.year&&t.month===o.month?o.day:gd(t.year,t.month)}}var ge,U1,G1,D,W1,hd,Jr,Ed,wt,_d,xa,q1,Ia,va,Aa,bx,Ta,Ca,Oa,Ra,Sd=f(()=>{dd();ge=Wa(fd(),1);U1=["up","down","left","right","space","enter","cancel"],G1=["January","February","March","April","May","June","July","August","September","October","November","December"],D={actions:new Set(U1),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...G1],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};W1=globalThis.process.platform.startsWith("win"),hd=Symbol("clack:cancel");Jr=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Ed=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;wt=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:r=wx,output:n=yd,render:i,signal:o,...s}=e;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=o,this.input=r,this.output=n}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let r=this._subscribers.get(e)??[];r.push(t),this._subscribers.set(e,r)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let r=this._subscribers.get(e)??[],n=[];for(let i of r)i.cb(...t),i.once&&n.push(()=>r.splice(r.indexOf(i),1));for(let i of n)i()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(hd);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=H1.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),Sa(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(ge.cursor.show),this.output.off("resize",this.render),Sa(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(ge.cursor.show),this.output.off("resize",this.render),Sa(this.input,!1),e(hd)})})}_isActionKey(e,t){return e===" "}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&D.aliases.has(t.name)&&this.emit("cursor",D.aliases.get(t.name)),D.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"&&this._shouldSubmit(e,t)){if(this.opts.validate){let r=this.opts.validate(this.value);r&&(this.error=r instanceof Error?r.message:r,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}wd([e,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
814
+ `),Sa(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=at(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
815
+ `).length-1;this.output.write(ge.cursor.move(-999,e*-1))}render(){let e=at(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(ge.cursor.hide);else{let t=j1(this._prevFrame,e),r=Ed(this.output);if(this.restoreCursor(),t){let n=Math.max(0,t.numLinesAfter-r),i=Math.max(0,t.numLinesBefore-r),o=t.lines.find(s=>s>=n);if(o===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(ge.cursor.move(0,o-i)),this.output.write(ge.erase.lines(1));let s=e.split(`
816
+ `);this.output.write(s[o]),this._prevFrame=e,this.output.write(ge.cursor.move(0,s.length-o-1));return}else if(t.lines.length>1){if(n<i)o=n;else{let a=o-i;a>0&&this.output.write(ge.cursor.move(0,a))}this.output.write(ge.erase.down());let s=e.split(`
728
817
  `).slice(o);this.output.write(s.join(`
729
- `)),this._prevFrame=e;return}}this.output.write(me.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};ql=class extends dt{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#t=0;#n="";#e;#o;#a;get cursor(){return this.#t}get userInputWithCursor(){if(!this.userInput)return Dn(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let e=this.userInput.slice(0,this._cursor),[t,...r]=this.userInput.slice(this._cursor);return`${e}${Dn("inverse",t)}${r.join("")}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(e){super(e),this.#o=e.options,this.#a=e.placeholder;let t=this.options;this.filteredOptions=[...t],this.multiple=e.multiple===!0,this.#e=typeof e.options=="function"?e.filter:e.filter??xL;let r;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?r=e.initialValue:r=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0].value]),r)for(let n of r){let i=t.findIndex(o=>o.value===n);i!==-1&&(this.toggleSelected(n),this.#t=i)}this.focusedValue=this.options[this.#t]?.value,this.on("key",(n,i)=>this.#r(n,i)),this.on("userInput",n=>this.#i(n))}_isActionKey(e,t){return e===" "||this.multiple&&this.isNavigating&&t.name==="space"&&e!==void 0&&e!==""}#r(e,t){let r=t.name==="up",n=t.name==="down",i=t.name==="return",o=this.userInput===""||this.userInput===" ",s=this.#a,a=this.options,c=s!==void 0&&s!==""&&a.some(l=>!l.disabled&&(this.#e?this.#e(s,l):!0));if(t.name==="tab"&&o&&c){this.userInput===" "&&this._clearUserInput(),this._setUserInput(s,!0),this.isNavigating=!1;return}r||n?(this.#t=_t(this.#t,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#t]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):i?this.value=SL(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(t.name==="tab"||this.isNavigating&&t.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter(t=>t!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#i(e){if(e!==this.#n){this.#n=e;let t=this.options;e&&this.#e?this.filteredOptions=t.filter(i=>this.#e?.(e,i)):this.filteredOptions=[...t];let r=bL(this.focusedValue,this.filteredOptions);this.#t=_t(r,0,this.filteredOptions);let n=this.filteredOptions[this.#t];n&&!n.disabled?this.focusedValue=n.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},hs=class extends dt{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(me.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},vL={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};gs=class extends dt{#t;#n;#e;#o;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#e}}get segments(){return this.#t}get separator(){return this.#n}get formattedValue(){return this.#d(this.#e)}#d(t){return this.#t.map(r=>t[r.type]).join(this.#n)}#c(){this._setUserInput(this.#d(this.#e)),this._setValue(_E(this.#e)??void 0)}constructor(t){let r=t.format?{segments:wE(t.format),separator:t.separator??"/"}:IL(t.locale),n=t.separator??r.separator,i=t.format?wE(t.format):r.segments,o=t.initialValue??t.defaultValue,s=o?{year:String(o.getUTCFullYear()).padStart(4,"0"),month:String(o.getUTCMonth()+1).padStart(2,"0"),day:String(o.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=i.map(c=>s[c.type]).join(n);super({...t,initialUserInput:a},!1),this.#t=i,this.#n=n,this.#e=s,this.#o=t.minDate,this.#a=t.maxDate,this.#c(),this.on("cursor",c=>this.#m(c)),this.on("key",(c,l)=>this.#h(c,l)),this.on("finalize",()=>this.#g(t))}#l(){let t=Math.max(0,Math.min(this.#r.segmentIndex,this.#t.length-1)),r=this.#t[t];if(r)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,r.len-1)),{segment:r,index:t}}#u(t){this.inlineError="",this.#s=null;let r=this.#l();r&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#t.length-1,r.index+t)),this.#r.positionInSegment=0,this.#i=!0)}#p(t){let r=this.#l();if(!r)return;let{segment:n}=r,i=this.#e[n.type],o=!i||i.replace(/_/g,"")==="",s=Number.parseInt((i||"0").replace(/_/g,"0"),10)||0,a=AL(n.type,ms(this.#e),this.#o,this.#a),c;o?c=t===1?a.min:a.max:c=Math.max(Math.min(a.max,s+t),a.min),this.#e={...this.#e,[n.type]:c.toString().padStart(n.len,"0")},this.#i=!0,this.#s=null,this.#c()}#m(t){if(t)switch(t){case"right":return this.#u(1);case"left":return this.#u(-1);case"up":return this.#p(1);case"down":return this.#p(-1)}}#h(t,r){if(r?.name==="backspace"||r?.sequence==="\x7F"||r?.sequence==="\b"||t==="\x7F"||t==="\b"){this.inlineError="";let n=this.#l();if(!n)return;if(!this.#e[n.segment.type].replace(/_/g,"")){this.#u(-1);return}this.#e[n.segment.type]="_".repeat(n.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(r?.name==="tab"){this.inlineError="";let n=this.#l();if(!n)return;let i=r.shift?-1:1,o=n.index+i;o>=0&&o<this.#t.length&&(this.#r.segmentIndex=o,this.#r.positionInSegment=0,this.#i=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#l();if(!n)return;let{segment:i}=n,o=!this.#e[i.type].replace(/_/g,"");if(this.#i&&this.#s!==null&&!o){let m=this.#s+t,g={...this.#e,[i.type]:m},y=this.#f(g,i);if(y){this.inlineError=y,this.#s=null,this.#i=!1;return}this.inlineError="",this.#e[i.type]=m,this.#s=null,this.#i=!1,this.#c(),n.index<this.#t.length-1&&(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!o&&(this.#e[i.type]="_".repeat(i.len),this.#r.positionInSegment=0),this.#i=!1,this.#s=null;let s=this.#e[i.type],a=s.indexOf("_"),c=a>=0?a:Math.min(this.#r.positionInSegment,i.len-1);if(c<0||c>=i.len)return;let l=s.slice(0,c)+t+s.slice(c+1),d=!1;if(c===0&&s==="__"&&(i.type==="month"||i.type==="day")){let m=Number.parseInt(t,10);l=`0${t}`,d=m<=(i.type==="month"?1:2)}if(i.type==="year"&&(l=(s.replace(/_/g,"")+t).padStart(i.len,"_")),!l.includes("_")){let m={...this.#e,[i.type]:l},g=this.#f(m,i);if(g){this.inlineError=g;return}}this.inlineError="",this.#e[i.type]=l;let p=l.includes("_")?void 0:SE(this.#e);if(p){let{year:m,month:g}=p,y=Wl(m,g);this.#e={year:String(Math.max(0,Math.min(9999,m))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,g))).padStart(2,"0"),day:String(Math.max(1,Math.min(y,p.day))).padStart(2,"0")}}this.#c();let u=l.indexOf("_");d?(this.#i=!0,this.#s=t):u>=0?this.#r.positionInSegment=u:a>=0&&n.index<this.#t.length-1?(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(c+1,i.len-1)}}#f(t,r){let{month:n,day:i}=ms(t);if(r.type==="month"&&(n<0||n>12))return L.date.messages.invalidMonth;if(r.type==="day"&&(i<0||i>31))return L.date.messages.invalidDay(31,"any month")}#g(t){let{year:r,month:n,day:i}=ms(this.#e);if(r&&n&&i){let o=Wl(r,n);this.#e={...this.#e,day:String(Math.min(i,o)).padStart(2,"0")}}this.value=_E(this.#e)??t.defaultValue??void 0}},ys=class extends dt{options;cursor=0;#t;getGroupItems(t){return this.options.filter(r=>r.group===t)}isGroupSelected(t){let r=this.getGroupItems(t),n=this.value;return n===void 0?!1:r.every(i=>n.includes(i.value))}toggleValue(){let t=this.options[this.cursor];if(this.value===void 0&&(this.value=[]),t.group===!0){let r=t.value,n=this.getGroupItems(r);this.isGroupSelected(r)?this.value=this.value.filter(i=>n.findIndex(o=>o.value===i)===-1):this.value=[...this.value,...n.map(i=>i.value)],this.value=Array.from(new Set(this.value))}else{let r=this.value.includes(t.value);this.value=r?this.value.filter(n=>n!==t.value):[...this.value,t.value]}}constructor(t){super(t,!1);let{options:r}=t;this.#t=t.selectableGroups!==!1,this.options=Object.entries(r).flatMap(([n,i])=>[{value:n,group:!0,label:n},...i.map(o=>({...o,group:n}))]),this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:n})=>n===t.cursorAt),this.#t?0:1),this.on("cursor",n=>{switch(n){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#t&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#t&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},ws=class extends dt{#t=!1;#n;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}\u2588`;let r=t.slice(0,this.cursor),n=t[this.cursor],i=t.slice(this.cursor+1);return n===`
818
+ `)),this._prevFrame=e;return}}this.output.write(ge.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};_d=class extends wt{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#t=0;#n="";#e;#o;#a;get cursor(){return this.#t}get userInputWithCursor(){if(!this.userInput)return fi(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let e=this.userInput.slice(0,this._cursor),[t,...r]=this.userInput.slice(this._cursor);return`${e}${fi("inverse",t)}${r.join("")}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(e){super(e),this.#o=e.options,this.#a=e.placeholder;let t=this.options;this.filteredOptions=[...t],this.multiple=e.multiple===!0,this.#e=typeof e.options=="function"?e.filter:e.filter??K1;let r;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?r=e.initialValue:r=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0].value]),r)for(let n of r){let i=t.findIndex(o=>o.value===n);i!==-1&&(this.toggleSelected(n),this.#t=i)}this.focusedValue=this.options[this.#t]?.value,this.on("key",(n,i)=>this.#r(n,i)),this.on("userInput",n=>this.#i(n))}_isActionKey(e,t){return e===" "||this.multiple&&this.isNavigating&&t.name==="space"&&e!==void 0&&e!==""}#r(e,t){let r=t.name==="up",n=t.name==="down",i=t.name==="return",o=this.userInput===""||this.userInput===" ",s=this.#a,a=this.options,c=s!==void 0&&s!==""&&a.some(l=>!l.disabled&&(this.#e?this.#e(s,l):!0));if(t.name==="tab"&&o&&c){this.userInput===" "&&this._clearUserInput(),this._setUserInput(s,!0),this.isNavigating=!1;return}r||n?(this.#t=$t(this.#t,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#t]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):i?this.value=Y1(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(t.name==="tab"||this.isNavigating&&t.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter(t=>t!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#i(e){if(e!==this.#n){this.#n=e;let t=this.options;e&&this.#e?this.filteredOptions=t.filter(i=>this.#e?.(e,i)):this.filteredOptions=[...t];let r=V1(this.focusedValue,this.filteredOptions);this.#t=$t(r,0,this.filteredOptions);let n=this.filteredOptions[this.#t];n&&!n.disabled?this.focusedValue=n.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},xa=class extends wt{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(ge.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},q1={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};Ia=class extends wt{#t;#n;#e;#o;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#e}}get segments(){return this.#t}get separator(){return this.#n}get formattedValue(){return this.#d(this.#e)}#d(t){return this.#t.map(r=>t[r.type]).join(this.#n)}#c(){this._setUserInput(this.#d(this.#e)),this._setValue(yx(this.#e)??void 0)}constructor(t){let r=t.format?{segments:gx(t.format),separator:t.separator??"/"}:J1(t.locale),n=t.separator??r.separator,i=t.format?gx(t.format):r.segments,o=t.initialValue??t.defaultValue,s=o?{year:String(o.getUTCFullYear()).padStart(4,"0"),month:String(o.getUTCMonth()+1).padStart(2,"0"),day:String(o.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=i.map(c=>s[c.type]).join(n);super({...t,initialUserInput:a},!1),this.#t=i,this.#n=n,this.#e=s,this.#o=t.minDate,this.#a=t.maxDate,this.#c(),this.on("cursor",c=>this.#m(c)),this.on("key",(c,l)=>this.#h(c,l)),this.on("finalize",()=>this.#g(t))}#l(){let t=Math.max(0,Math.min(this.#r.segmentIndex,this.#t.length-1)),r=this.#t[t];if(r)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,r.len-1)),{segment:r,index:t}}#u(t){this.inlineError="",this.#s=null;let r=this.#l();r&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#t.length-1,r.index+t)),this.#r.positionInSegment=0,this.#i=!0)}#p(t){let r=this.#l();if(!r)return;let{segment:n}=r,i=this.#e[n.type],o=!i||i.replace(/_/g,"")==="",s=Number.parseInt((i||"0").replace(/_/g,"0"),10)||0,a=z1(n.type,ba(this.#e),this.#o,this.#a),c;o?c=t===1?a.min:a.max:c=Math.max(Math.min(a.max,s+t),a.min),this.#e={...this.#e,[n.type]:c.toString().padStart(n.len,"0")},this.#i=!0,this.#s=null,this.#c()}#m(t){if(t)switch(t){case"right":return this.#u(1);case"left":return this.#u(-1);case"up":return this.#p(1);case"down":return this.#p(-1)}}#h(t,r){if(r?.name==="backspace"||r?.sequence==="\x7F"||r?.sequence==="\b"||t==="\x7F"||t==="\b"){this.inlineError="";let n=this.#l();if(!n)return;if(!this.#e[n.segment.type].replace(/_/g,"")){this.#u(-1);return}this.#e[n.segment.type]="_".repeat(n.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(r?.name==="tab"){this.inlineError="";let n=this.#l();if(!n)return;let i=r.shift?-1:1,o=n.index+i;o>=0&&o<this.#t.length&&(this.#r.segmentIndex=o,this.#r.positionInSegment=0,this.#i=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#l();if(!n)return;let{segment:i}=n,o=!this.#e[i.type].replace(/_/g,"");if(this.#i&&this.#s!==null&&!o){let m=this.#s+t,h={...this.#e,[i.type]:m},y=this.#f(h,i);if(y){this.inlineError=y,this.#s=null,this.#i=!1;return}this.inlineError="",this.#e[i.type]=m,this.#s=null,this.#i=!1,this.#c(),n.index<this.#t.length-1&&(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!o&&(this.#e[i.type]="_".repeat(i.len),this.#r.positionInSegment=0),this.#i=!1,this.#s=null;let s=this.#e[i.type],a=s.indexOf("_"),c=a>=0?a:Math.min(this.#r.positionInSegment,i.len-1);if(c<0||c>=i.len)return;let l=s.slice(0,c)+t+s.slice(c+1),d=!1;if(c===0&&s==="__"&&(i.type==="month"||i.type==="day")){let m=Number.parseInt(t,10);l=`0${t}`,d=m<=(i.type==="month"?1:2)}if(i.type==="year"&&(l=(s.replace(/_/g,"")+t).padStart(i.len,"_")),!l.includes("_")){let m={...this.#e,[i.type]:l},h=this.#f(m,i);if(h){this.inlineError=h;return}}this.inlineError="",this.#e[i.type]=l;let p=l.includes("_")?void 0:Sx(this.#e);if(p){let{year:m,month:h}=p,y=gd(m,h);this.#e={year:String(Math.max(0,Math.min(9999,m))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(y,p.day))).padStart(2,"0")}}this.#c();let u=l.indexOf("_");d?(this.#i=!0,this.#s=t):u>=0?this.#r.positionInSegment=u:a>=0&&n.index<this.#t.length-1?(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(c+1,i.len-1)}}#f(t,r){let{month:n,day:i}=ba(t);if(r.type==="month"&&(n<0||n>12))return D.date.messages.invalidMonth;if(r.type==="day"&&(i<0||i>31))return D.date.messages.invalidDay(31,"any month")}#g(t){let{year:r,month:n,day:i}=ba(this.#e);if(r&&n&&i){let o=gd(r,n);this.#e={...this.#e,day:String(Math.min(i,o)).padStart(2,"0")}}this.value=yx(this.#e)??t.defaultValue??void 0}},va=class extends wt{options;cursor=0;#t;getGroupItems(t){return this.options.filter(r=>r.group===t)}isGroupSelected(t){let r=this.getGroupItems(t),n=this.value;return n===void 0?!1:r.every(i=>n.includes(i.value))}toggleValue(){let t=this.options[this.cursor];if(this.value===void 0&&(this.value=[]),t.group===!0){let r=t.value,n=this.getGroupItems(r);this.isGroupSelected(r)?this.value=this.value.filter(i=>n.findIndex(o=>o.value===i)===-1):this.value=[...this.value,...n.map(i=>i.value)],this.value=Array.from(new Set(this.value))}else{let r=this.value.includes(t.value);this.value=r?this.value.filter(n=>n!==t.value):[...this.value,t.value]}}constructor(t){super(t,!1);let{options:r}=t;this.#t=t.selectableGroups!==!1,this.options=Object.entries(r).flatMap(([n,i])=>[{value:n,group:!0,label:n},...i.map(o=>({...o,group:n}))]),this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:n})=>n===t.cursorAt),this.#t?0:1),this.on("cursor",n=>{switch(n){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#t&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#t&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},Aa=class extends wt{#t=!1;#n;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}\u2588`;let r=t.slice(0,this.cursor),n=t[this.cursor],i=t.slice(this.cursor+1);return n===`
730
819
  `?`${r}\u2588
731
- ${i}`:`${r}${Dn("inverse",n)}${i}`}get cursor(){return this._cursor}#e(t){if(this.userInput.length===0){this._setUserInput(t);return}this._setUserInput(this.userInput.slice(0,this.cursor)+t+this.userInput.slice(this.cursor))}#o(t){let r=this.value??"";switch(t){case"up":this._cursor=ps(this._cursor,0,-1,r);return;case"down":this._cursor=ps(this._cursor,0,1,r);return;case"left":this._cursor=ps(this._cursor,-1,0,r);return;case"right":this._cursor=ps(this._cursor,1,0,r);return}}_shouldSubmit(t,r){if(this.#n)return this.focused==="submit"?!0:(this.#e(`
820
+ ${i}`:`${r}${fi("inverse",n)}${i}`}get cursor(){return this._cursor}#e(t){if(this.userInput.length===0){this._setUserInput(t);return}this._setUserInput(this.userInput.slice(0,this.cursor)+t+this.userInput.slice(this.cursor))}#o(t){let r=this.value??"";switch(t){case"up":this._cursor=_a(this._cursor,0,-1,r);return;case"down":this._cursor=_a(this._cursor,0,1,r);return;case"left":this._cursor=_a(this._cursor,-1,0,r);return;case"right":this._cursor=_a(this._cursor,1,0,r);return}}_shouldSubmit(t,r){if(this.#n)return this.focused==="submit"?!0:(this.#e(`
732
821
  `),this._cursor++,!1);let n=this.#t;return this.#t=!0,n?(this.userInput[this.cursor-1]===`
733
822
  `&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#e(`
734
- `),this._cursor++,!1)}constructor(t){super(t,!1),this.#n=t.showSubmit??!1,this.on("key",(r,n)=>{if(n?.name&&L.actions.has(n.name)){this.#o(n.name);return}if(r===" "&&this.#n){this.focused=this.focused==="editor"?"submit":"editor";return}if(n?.name!=="return"){if(this.#t=!1,n?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(n?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}r&&(this.#n&&this.focused==="submit"&&(this.focused="editor"),this.#e(r??""),this._cursor++)}}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}},vE=class extends dt{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,t=this.value!==void 0&&this.value.length===e.length;this.value=t?[]:e.map(r=>r.value)}toggleInvert(){let e=this.value;if(!e)return;let t=this._enabledOptions.filter(r=>!e.includes(r.value));this.value=t.map(r=>r.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(t=>t!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let t=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),0);this.cursor=this.options[t].disabled?_t(t,1,this.options):t,this.on("key",r=>{r==="a"&&this.toggleAll(),r==="i"&&this.toggleInvert()}),this.on("cursor",r=>{switch(r){case"left":case"up":this.cursor=_t(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_t(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},_s=class extends dt{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let t=this.userInput;if(this.cursor>=t.length)return`${this.masked}${Dn(["inverse","hidden"],"_")}`;let r=this.masked,n=r.slice(0,this.cursor),i=r.slice(this.cursor);return`${n}${Dn("inverse",i[0])}${i.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:t,...r}){super(r),this._mask=t??"\u2022",this.on("userInput",n=>{this._setValue(n)})}},Es=class extends dt{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let r=this.options.findIndex(({value:i})=>i===t.initialValue),n=r===-1?0:r;this.cursor=this.options[n].disabled?_t(n,1,this.options):n,this.changeValue(),this.on("cursor",i=>{switch(i){case"left":case"up":this.cursor=_t(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_t(this.cursor,1,this.options);break}this.changeValue()})}},bs=class extends dt{options;cursor=0;constructor(t){super(t,!1),this.options=t.options;let r=t.caseSensitive===!0,n=this.options.map(({value:[i]})=>r?i:i?.toLowerCase());this.cursor=Math.max(n.indexOf(t.initialValue),0),this.on("key",(i,o)=>{if(!i)return;let s=r&&o.shift?i.toUpperCase():i;if(!n.includes(s))return;let a=this.options.find(({value:[c]})=>r?c===s:c?.toLowerCase()===i);a&&(this.value=a.value,this.state="submit",this.emit("submit"))})}},xs=class extends dt{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let r=t.slice(0,this.cursor),[n,...i]=t.slice(this.cursor);return`${r}${Dn("inverse",n)}${i.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}});var Cs={};T(Cs,{S_BAR:()=>I,S_BAR_END:()=>Z,S_BAR_END_RIGHT:()=>kE,S_BAR_H:()=>Ts,S_BAR_START:()=>eu,S_BAR_START_RIGHT:()=>LE,S_CHECKBOX_ACTIVE:()=>As,S_CHECKBOX_INACTIVE:()=>kn,S_CHECKBOX_SELECTED:()=>xr,S_CONNECT_LEFT:()=>ME,S_CORNER_BOTTOM_LEFT:()=>nu,S_CORNER_BOTTOM_RIGHT:()=>ru,S_CORNER_TOP_LEFT:()=>FE,S_CORNER_TOP_RIGHT:()=>tu,S_ERROR:()=>au,S_INFO:()=>iu,S_PASSWORD_MASK:()=>PE,S_RADIO_ACTIVE:()=>Ri,S_RADIO_INACTIVE:()=>Sr,S_STEP_ACTIVE:()=>DE,S_STEP_CANCEL:()=>Zl,S_STEP_ERROR:()=>Ql,S_STEP_SUBMIT:()=>vr,S_SUCCESS:()=>ou,S_WARN:()=>su,autocomplete:()=>BE,autocompleteMultiselect:()=>NL,box:()=>PL,cancel:()=>WL,confirm:()=>ML,date:()=>FL,group:()=>GL,groupMultiselect:()=>jL,intro:()=>VL,isCI:()=>Xl,isCancel:()=>Ss,isTTY:()=>NE,limitOptions:()=>Xt,log:()=>Ce,multiline:()=>YL,multiselect:()=>qL,note:()=>XL,outro:()=>KL,password:()=>ZL,path:()=>QL,progress:()=>tk,select:()=>rk,selectKey:()=>nk,settings:()=>L,spinner:()=>lu,stream:()=>br,symbol:()=>$e,symbolBar:()=>cu,taskLog:()=>sk,tasks:()=>ik,text:()=>ak,unicode:()=>Is,unicodeOr:()=>U,updateSettings:()=>bE});import{styleText as h,stripVTControlCharacters as zl}from"node:util";import Le from"node:process";import{existsSync as TL,lstatSync as IE,readdirSync as CL}from"node:fs";import{dirname as AE,join as $L}from"node:path";function OL(){return Le.platform!=="win32"?Le.env.TERM!=="linux":!!Le.env.CI||!!Le.env.WT_SESSION||!!Le.env.TERMINUS_SUBLIME||Le.env.ConEmuTask==="{cmd::Cmder}"||Le.env.TERM_PROGRAM==="Terminus-Sublime"||Le.env.TERM_PROGRAM==="vscode"||Le.env.TERM==="xterm-256color"||Le.env.TERM==="alacritty"||Le.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function CE(e){return e.label??String(e.value??"")}function HE(e,t){if(!e)return!0;let r=(t.label??String(t.value??"")).toLowerCase(),n=(t.hint??"").toLowerCase(),i=String(t.value).toLowerCase(),o=e.toLowerCase();return r.includes(o)||n.includes(o)||i.includes(o)}function RL(e,t){let r=[];for(let n of t)e.includes(n.value)&&r.push(n);return r}function $E(e,t,r,n){let i=r,o=r;return n==="center"?i=Math.floor((t-e)/2):n==="right"&&(i=t-e-r),o=t-i-e,[i,o]}function HL(e,t){let r=e.segmentValues,n=e.segmentCursor;if(t==="submit"||t==="cancel")return e.formattedValue;let i=h("gray",e.separator);return e.segments.map((o,s)=>{let a=s===n.segmentIndex&&!["submit","cancel"].includes(t),c=UL[o.type];return BL(r[o.type],{isActive:a,label:c})}).join(i)}function BL(e,t){let r=!e||e.replace(/_/g,"")==="";return t.isActive?h("inverse",r?t.label:e.replace(/_/g," ")):r?h("dim",t.label):e.replace(/_/g,h("dim"," "))}function tk({style:e="heavy",max:t=100,size:r=40,...n}={}){let i=lu(n),o=0,s="",a=Math.max(1,t),c=Math.max(1,r),l=m=>{switch(m){case"initial":case"active":return g=>h("magenta",g);case"error":case"cancel":return g=>h("red",g);case"submit":return g=>h("green",g);default:return g=>h("magenta",g)}},d=(m,g)=>{let y=Math.floor(o/a*c);return`${l(m)(OE[e].repeat(y))}${h("dim",OE[e].repeat(c-y))} ${g}`},p=(m="")=>{s=m,i.start(d("initial",m))},u=(m=1,g)=>{o=Math.min(a,m+o),i.message(d("active",g??s)),s=g??s};return{start:p,stop:i.stop,cancel:i.cancel,error:i.error,clear:i.clear,advance:u,isCancelled:i.isCancelled,message:m=>u(0,m)}}var Ln,Is,Xl,NE,U,DE,Zl,Ql,vr,eu,I,Z,LE,kE,Ri,Sr,As,xr,kn,PE,Ts,tu,ME,ru,nu,FE,iu,ou,su,au,$e,cu,TE,Xt,BE,NL,DL,LL,kL,PL,ML,FL,UL,GL,jL,Ce,WL,VL,KL,YL,Oi,qL,JL,zL,XL,ZL,QL,ek,lu,OE,vs,rk,nk,RE,br,ik,ok,sk,ak,$s=f(()=>{Jl();Jl();Hl();kl();Ln=Ys(Ul(),1);Is=OL(),Xl=()=>process.env.CI==="true",NE=e=>e.isTTY===!0,U=(e,t)=>Is?e:t,DE=U("\u25C6","*"),Zl=U("\u25A0","x"),Ql=U("\u25B2","x"),vr=U("\u25C7","o"),eu=U("\u250C","T"),I=U("\u2502","|"),Z=U("\u2514","\u2014"),LE=U("\u2510","T"),kE=U("\u2518","\u2014"),Ri=U("\u25CF",">"),Sr=U("\u25CB"," "),As=U("\u25FB","[\u2022]"),xr=U("\u25FC","[+]"),kn=U("\u25FB","[ ]"),PE=U("\u25AA","\u2022"),Ts=U("\u2500","-"),tu=U("\u256E","+"),ME=U("\u251C","+"),ru=U("\u256F","+"),nu=U("\u2570","+"),FE=U("\u256D","+"),iu=U("\u25CF","\u2022"),ou=U("\u25C6","*"),su=U("\u25B2","!"),au=U("\u25A0","x"),$e=e=>{switch(e){case"initial":case"active":return h("cyan",DE);case"cancel":return h("red",Zl);case"error":return h("yellow",Ql);case"submit":return h("green",vr)}},cu=e=>{switch(e){case"initial":case"active":return h("cyan",I);case"cancel":return h("red",I);case"error":return h("yellow",I);case"submit":return h("green",I)}},TE=(e,t,r,n,i,o=!1)=>{let s=t,a=0;if(o)for(let c=n-1;c>=r&&(s-=e[c].length,a++,!(s<=i));c--);else for(let c=r;c<n&&(s-=e[c].length,a++,!(s<=i));c++);return{lineCount:s,removals:a}},Xt=({cursor:e,options:t,style:r,output:n=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let a=Er(n)-o,c=Yl(n),l=h("dim","..."),d=Math.max(c-s,0),p=Math.max(Math.min(i,d),5),u=0;e>=p-3&&(u=Math.max(Math.min(e-p+3,t.length-p),0));let m=p<t.length&&u>0,g=p<t.length&&u+p<t.length,y=Math.min(u+p,t.length),w=[],x=0;m&&x++,g&&x++;let b=u+(m?1:0),A=y-(g?1:0);for(let S=b;S<A;S++){let C=et(r(t[S],S===e),a,{hard:!0,trim:!1}).split(`
735
- `);w.push(C),x+=C.length}if(x>d){let S=0,C=0,O=x,M=e-b,F=d,q=()=>TE(w,O,0,M,F),P=()=>TE(w,O,M+1,w.length,F,!0);m?({lineCount:O,removals:S}=q(),O>F&&(g||(F-=1),{lineCount:O,removals:C}=P())):(g||(F-=1),{lineCount:O,removals:C}=P(),O>F&&(F-=1,{lineCount:O,removals:S}=q())),S>0&&(m=!0,w.splice(0,S)),C>0&&(g=!0,w.splice(w.length-C,C))}let v=[];m&&v.push(l);for(let S of w)for(let C of S)v.push(C);return g&&v.push(l),v};BE=e=>new ql({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,placeholder:e.placeholder,filter:e.filter??((t,r)=>HE(t,r)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??L.withGuide,r=t?[`${h("gray",I)}`,`${$e(this.state)} ${e.message}`]:[`${$e(this.state)} ${e.message}`],n=this.userInput,i=this.options,o=e.placeholder,s=n===""&&o!==void 0,a=(c,l)=>{let d=CE(c),p=c.hint&&c.value===this.focusedValue?h("dim",` (${c.hint})`):"";switch(l){case"active":return`${h("green",Ri)} ${d}${p}`;case"inactive":return`${h("dim",Sr)} ${h("dim",d)}`;case"disabled":return`${h("gray",Sr)} ${h(["strikethrough","gray"],d)}`}};switch(this.state){case"submit":{let c=RL(this.selectedValues,i),l=c.length>0?` ${h("dim",c.map(CE).join(", "))}`:"",d=t?h("gray",I):"";return`${r.join(`
823
+ `),this._cursor++,!1)}constructor(t){super(t,!1),this.#n=t.showSubmit??!1,this.on("key",(r,n)=>{if(n?.name&&D.actions.has(n.name)){this.#o(n.name);return}if(r===" "&&this.#n){this.focused=this.focused==="editor"?"submit":"editor";return}if(n?.name!=="return"){if(this.#t=!1,n?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(n?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}r&&(this.#n&&this.focused==="submit"&&(this.focused="editor"),this.#e(r??""),this._cursor++)}}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}},bx=class extends wt{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,t=this.value!==void 0&&this.value.length===e.length;this.value=t?[]:e.map(r=>r.value)}toggleInvert(){let e=this.value;if(!e)return;let t=this._enabledOptions.filter(r=>!e.includes(r.value));this.value=t.map(r=>r.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(t=>t!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let t=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),0);this.cursor=this.options[t].disabled?$t(t,1,this.options):t,this.on("key",r=>{r==="a"&&this.toggleAll(),r==="i"&&this.toggleInvert()}),this.on("cursor",r=>{switch(r){case"left":case"up":this.cursor=$t(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=$t(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Ta=class extends wt{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let t=this.userInput;if(this.cursor>=t.length)return`${this.masked}${fi(["inverse","hidden"],"_")}`;let r=this.masked,n=r.slice(0,this.cursor),i=r.slice(this.cursor);return`${n}${fi("inverse",i[0])}${i.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:t,...r}){super(r),this._mask=t??"\u2022",this.on("userInput",n=>{this._setValue(n)})}},Ca=class extends wt{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let r=this.options.findIndex(({value:i})=>i===t.initialValue),n=r===-1?0:r;this.cursor=this.options[n].disabled?$t(n,1,this.options):n,this.changeValue(),this.on("cursor",i=>{switch(i){case"left":case"up":this.cursor=$t(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=$t(this.cursor,1,this.options);break}this.changeValue()})}},Oa=class extends wt{options;cursor=0;constructor(t){super(t,!1),this.options=t.options;let r=t.caseSensitive===!0,n=this.options.map(({value:[i]})=>r?i:i?.toLowerCase());this.cursor=Math.max(n.indexOf(t.initialValue),0),this.on("key",(i,o)=>{if(!i)return;let s=r&&o.shift?i.toUpperCase():i;if(!n.includes(s))return;let a=this.options.find(({value:[c]})=>r?c===s:c?.toLowerCase()===i);a&&(this.value=a.value,this.state="submit",this.emit("submit"))})}},Ra=class extends wt{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let r=t.slice(0,this.cursor),[n,...i]=t.slice(this.cursor);return`${r}${fi("inverse",n)}${i.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}});var Pa={};v(Pa,{S_BAR:()=>A,S_BAR_END:()=>ne,S_BAR_END_RIGHT:()=>Dx,S_BAR_H:()=>ka,S_BAR_START:()=>Ad,S_BAR_START_RIGHT:()=>Nx,S_CHECKBOX_ACTIVE:()=>La,S_CHECKBOX_INACTIVE:()=>hi,S_CHECKBOX_SELECTED:()=>Xr,S_CONNECT_LEFT:()=>kx,S_CORNER_BOTTOM_LEFT:()=>Od,S_CORNER_BOTTOM_RIGHT:()=>Cd,S_CORNER_TOP_LEFT:()=>Px,S_CORNER_TOP_RIGHT:()=>Td,S_ERROR:()=>Dd,S_INFO:()=>Rd,S_PASSWORD_MASK:()=>Lx,S_RADIO_ACTIVE:()=>bo,S_RADIO_INACTIVE:()=>Zr,S_STEP_ACTIVE:()=>$x,S_STEP_CANCEL:()=>Id,S_STEP_ERROR:()=>vd,S_STEP_SUBMIT:()=>Qr,S_SUCCESS:()=>$d,S_WARN:()=>Nd,autocomplete:()=>Fx,autocompleteMultiselect:()=>rF,box:()=>sF,cancel:()=>mF,confirm:()=>aF,date:()=>cF,group:()=>pF,groupMultiselect:()=>fF,intro:()=>hF,isCI:()=>xd,isCancel:()=>$a,isTTY:()=>Rx,limitOptions:()=>fr,log:()=>De,multiline:()=>yF,multiselect:()=>wF,note:()=>SF,outro:()=>gF,password:()=>bF,path:()=>xF,progress:()=>vF,select:()=>AF,selectKey:()=>TF,settings:()=>D,spinner:()=>kd,stream:()=>zr,symbol:()=>Le,symbolBar:()=>Ld,taskLog:()=>RF,tasks:()=>CF,text:()=>$F,unicode:()=>Da,unicodeOr:()=>G,updateSettings:()=>Ex});import{styleText as g,stripVTControlCharacters as bd}from"node:util";import Ye from"node:process";import{existsSync as X1,lstatSync as xx,readdirSync as Z1}from"node:fs";import{dirname as Ix,join as Q1}from"node:path";function eF(){return Ye.platform!=="win32"?Ye.env.TERM!=="linux":!!Ye.env.CI||!!Ye.env.WT_SESSION||!!Ye.env.TERMINUS_SUBLIME||Ye.env.ConEmuTask==="{cmd::Cmder}"||Ye.env.TERM_PROGRAM==="Terminus-Sublime"||Ye.env.TERM_PROGRAM==="vscode"||Ye.env.TERM==="xterm-256color"||Ye.env.TERM==="alacritty"||Ye.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function Ax(e){return e.label??String(e.value??"")}function Mx(e,t){if(!e)return!0;let r=(t.label??String(t.value??"")).toLowerCase(),n=(t.hint??"").toLowerCase(),i=String(t.value).toLowerCase(),o=e.toLowerCase();return r.includes(o)||n.includes(o)||i.includes(o)}function tF(e,t){let r=[];for(let n of t)e.includes(n.value)&&r.push(n);return r}function Tx(e,t,r,n){let i=r,o=r;return n==="center"?i=Math.floor((t-e)/2):n==="right"&&(i=t-e-r),o=t-i-e,[i,o]}function lF(e,t){let r=e.segmentValues,n=e.segmentCursor;if(t==="submit"||t==="cancel")return e.formattedValue;let i=g("gray",e.separator);return e.segments.map((o,s)=>{let a=s===n.segmentIndex&&!["submit","cancel"].includes(t),c=dF[o.type];return uF(r[o.type],{isActive:a,label:c})}).join(i)}function uF(e,t){let r=!e||e.replace(/_/g,"")==="";return t.isActive?g("inverse",r?t.label:e.replace(/_/g," ")):r?g("dim",t.label):e.replace(/_/g,g("dim"," "))}function vF({style:e="heavy",max:t=100,size:r=40,...n}={}){let i=kd(n),o=0,s="",a=Math.max(1,t),c=Math.max(1,r),l=m=>{switch(m){case"initial":case"active":return h=>g("magenta",h);case"error":case"cancel":return h=>g("red",h);case"submit":return h=>g("green",h);default:return h=>g("magenta",h)}},d=(m,h)=>{let y=Math.floor(o/a*c);return`${l(m)(Cx[e].repeat(y))}${g("dim",Cx[e].repeat(c-y))} ${h}`},p=(m="")=>{s=m,i.start(d("initial",m))},u=(m=1,h)=>{o=Math.min(a,m+o),i.message(d("active",h??s)),s=h??s};return{start:p,stop:i.stop,cancel:i.cancel,error:i.error,clear:i.clear,advance:u,isCancelled:i.isCancelled,message:m=>u(0,m)}}var mi,Da,xd,Rx,G,$x,Id,vd,Qr,Ad,A,ne,Nx,Dx,bo,Zr,La,Xr,hi,Lx,ka,Td,kx,Cd,Od,Px,Rd,$d,Nd,Dd,Le,Ld,vx,fr,Fx,rF,nF,iF,oF,sF,aF,cF,dF,pF,fF,De,mF,hF,gF,yF,So,wF,EF,_F,SF,bF,xF,IF,kd,Cx,Na,AF,TF,Ox,zr,CF,OF,RF,$F,Ma=f(()=>{Sd();Sd();dd();ad();mi=Wa(fd(),1);Da=eF(),xd=()=>process.env.CI==="true",Rx=e=>e.isTTY===!0,G=(e,t)=>Da?e:t,$x=G("\u25C6","*"),Id=G("\u25A0","x"),vd=G("\u25B2","x"),Qr=G("\u25C7","o"),Ad=G("\u250C","T"),A=G("\u2502","|"),ne=G("\u2514","\u2014"),Nx=G("\u2510","T"),Dx=G("\u2518","\u2014"),bo=G("\u25CF",">"),Zr=G("\u25CB"," "),La=G("\u25FB","[\u2022]"),Xr=G("\u25FC","[+]"),hi=G("\u25FB","[ ]"),Lx=G("\u25AA","\u2022"),ka=G("\u2500","-"),Td=G("\u256E","+"),kx=G("\u251C","+"),Cd=G("\u256F","+"),Od=G("\u2570","+"),Px=G("\u256D","+"),Rd=G("\u25CF","\u2022"),$d=G("\u25C6","*"),Nd=G("\u25B2","!"),Dd=G("\u25A0","x"),Le=e=>{switch(e){case"initial":case"active":return g("cyan",$x);case"cancel":return g("red",Id);case"error":return g("yellow",vd);case"submit":return g("green",Qr)}},Ld=e=>{switch(e){case"initial":case"active":return g("cyan",A);case"cancel":return g("red",A);case"error":return g("yellow",A);case"submit":return g("green",A)}},vx=(e,t,r,n,i,o=!1)=>{let s=t,a=0;if(o)for(let c=n-1;c>=r&&(s-=e[c].length,a++,!(s<=i));c--);else for(let c=r;c<n&&(s-=e[c].length,a++,!(s<=i));c++);return{lineCount:s,removals:a}},fr=({cursor:e,options:t,style:r,output:n=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let a=Jr(n)-o,c=Ed(n),l=g("dim","..."),d=Math.max(c-s,0),p=Math.max(Math.min(i,d),5),u=0;e>=p-3&&(u=Math.max(Math.min(e-p+3,t.length-p),0));let m=p<t.length&&u>0,h=p<t.length&&u+p<t.length,y=Math.min(u+p,t.length),w=[],b=0;m&&b++,h&&b++;let S=u+(m?1:0),T=y-(h?1:0);for(let x=S;x<T;x++){let C=at(r(t[x],x===e),a,{hard:!0,trim:!1}).split(`
824
+ `);w.push(C),b+=C.length}if(b>d){let x=0,C=0,R=b,F=e-S,B=d,z=()=>vx(w,R,0,F,B),P=()=>vx(w,R,F+1,w.length,B,!0);m?({lineCount:R,removals:x}=z(),R>B&&(h||(B-=1),{lineCount:R,removals:C}=P())):(h||(B-=1),{lineCount:R,removals:C}=P(),R>B&&(B-=1,{lineCount:R,removals:x}=z())),x>0&&(m=!0,w.splice(0,x)),C>0&&(h=!0,w.splice(w.length-C,C))}let I=[];m&&I.push(l);for(let x of w)for(let C of x)I.push(C);return h&&I.push(l),I};Fx=e=>new _d({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,placeholder:e.placeholder,filter:e.filter??((t,r)=>Mx(t,r)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??D.withGuide,r=t?[`${g("gray",A)}`,`${Le(this.state)} ${e.message}`]:[`${Le(this.state)} ${e.message}`],n=this.userInput,i=this.options,o=e.placeholder,s=n===""&&o!==void 0,a=(c,l)=>{let d=Ax(c),p=c.hint&&c.value===this.focusedValue?g("dim",` (${c.hint})`):"";switch(l){case"active":return`${g("green",bo)} ${d}${p}`;case"inactive":return`${g("dim",Zr)} ${g("dim",d)}`;case"disabled":return`${g("gray",Zr)} ${g(["strikethrough","gray"],d)}`}};switch(this.state){case"submit":{let c=tF(this.selectedValues,i),l=c.length>0?` ${g("dim",c.map(Ax).join(", "))}`:"",d=t?g("gray",A):"";return`${r.join(`
736
825
  `)}
737
- ${d}${l}`}case"cancel":{let c=n?` ${h(["strikethrough","dim"],n)}`:"",l=t?h("gray",I):"";return`${r.join(`
826
+ ${d}${l}`}case"cancel":{let c=n?` ${g(["strikethrough","dim"],n)}`:"",l=t?g("gray",A):"";return`${r.join(`
738
827
  `)}
739
- ${l}${c}`}default:{let c=this.state==="error"?"yellow":"cyan",l=t?`${h(c,I)} `:"",d=t?h(c,Z):"",p="";if(this.isNavigating||s){let b=s?o:n;p=b!==""?` ${h("dim",b)}`:""}else p=` ${this.userInputWithCursor}`;let u=this.filteredOptions.length!==i.length?h("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",m=this.filteredOptions.length===0&&n?[`${l}${h("yellow","No matches found")}`]:[],g=this.state==="error"?[`${l}${h("yellow",this.error)}`]:[];t&&r.push(`${l.trimEnd()}`),r.push(`${l}${h("dim","Search:")}${p}${u}`,...m,...g);let y=[`${h("dim","\u2191/\u2193")} to select`,`${h("dim","Enter:")} confirm`,`${h("dim","Type:")} to search`],w=[`${l}${y.join(" \u2022 ")}`,d],x=this.filteredOptions.length===0?[]:Xt({cursor:this.cursor,options:this.filteredOptions,columnPadding:t?3:0,rowPadding:r.length+w.length,style:(b,A)=>a(b,b.disabled?"disabled":A?"active":"inactive"),maxItems:e.maxItems,output:e.output});return[...r,...x.map(b=>`${l}${b}`),...w].join(`
740
- `)}}}}).prompt(),NL=e=>{let t=(n,i,o,s)=>{let a=o.includes(n.value),c=n.label??String(n.value??""),l=n.hint&&s!==void 0&&n.value===s?h("dim",` (${n.hint})`):"",d=a?h("green",xr):h("dim",kn);return n.disabled?`${h("gray",kn)} ${h(["strikethrough","gray"],c)}`:i?`${d} ${c}${l}`:`${d} ${h("dim",c)}`},r=new ql({options:e.options,multiple:!0,placeholder:e.placeholder,filter:e.filter??((n,i)=>HE(n,i)),validate:()=>{if(e.required&&r.selectedValues.length===0)return"Please select at least one item"},initialValue:e.initialValues,signal:e.signal,input:e.input,output:e.output,render(){let n=e.withGuide??L.withGuide,i=`${n?`${h("gray",I)}
741
- `:""}${$e(this.state)} ${e.message}
742
- `,o=this.userInput,s=e.placeholder,a=o===""&&s!==void 0,c=this.isNavigating||a?h("dim",a?s:o):this.userInputWithCursor,l=this.options,d=this.filteredOptions.length!==l.length?h("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${i}${n?`${h("gray",I)} `:""}${h("dim",`${this.selectedValues.length} items selected`)}`;case"cancel":return`${i}${n?`${h("gray",I)} `:""}${h(["strikethrough","dim"],o)}`;default:{let p=this.state==="error"?"yellow":"cyan",u=n?`${h(p,I)} `:"",m=n?h(p,Z):"",g=[`${h("dim","\u2191/\u2193")} to navigate`,`${h("dim",this.isNavigating?"Space/Tab:":"Tab:")} select`,`${h("dim","Enter:")} confirm`,`${h("dim","Type:")} to search`],y=this.filteredOptions.length===0&&o?[`${u}${h("yellow","No matches found")}`]:[],w=this.state==="error"?[`${u}${h("yellow",this.error)}`]:[],x=[...`${i}${n?h(p,I):""}`.split(`
743
- `),`${u}${h("dim","Search:")} ${c}${d}`,...y,...w],b=[`${u}${g.join(" \u2022 ")}`,m],A=Xt({cursor:this.cursor,options:this.filteredOptions,style:(v,S)=>t(v,S,this.selectedValues,this.focusedValue),maxItems:e.maxItems,output:e.output,rowPadding:x.length+b.length});return[...x,...A.map(v=>`${u}${v}`),...b].join(`
744
- `)}}}});return r.prompt()},DL=[FE,tu,nu,ru],LL=[eu,LE,Z,kE];kL=e=>e,PL=(e="",t="",r)=>{let n=r?.output??process.stdout,i=Er(n),o=2,s=r?.titlePadding??1,a=r?.contentPadding??2,c=r?.width===void 0||r.width==="auto"?1:Math.min(1,r.width),l=r?.withGuide??L.withGuide?`${I} `:"",d=r?.formatBorder??kL,p=(r?.rounded?DL:LL).map(d),u=d(Ts),m=d(I),g=se(l),y=se(t),w=i-g,x=Math.floor(i*c)-g;if(r?.width==="auto"){let F=e.split(`
745
- `),q=y+s*2;for(let Q of F){let ae=se(Q)+a*2;ae>q&&(q=ae)}let P=q+o;P<x&&(x=P)}x%2!==0&&(x<w?x++:x--);let b=x-o,A=b-s*2,v=y>A?`${t.slice(0,A-3)}...`:t,[S,C]=$E(se(v),b,s,r?.titleAlign),O=et(e,b-a*2,{hard:!0,trim:!1});n.write(`${l}${p[0]}${u.repeat(S)}${v}${u.repeat(C)}${p[1]}
746
- `);let M=O.split(`
747
- `);for(let F of M){let[q,P]=$E(se(F),b,a,r?.contentAlign);n.write(`${l}${m}${" ".repeat(q)}${F}${" ".repeat(P)}${m}
748
- `)}n.write(`${l}${p[2]}${u.repeat(b)}${p[3]}
749
- `)},ML=e=>{let t=e.active??"Yes",r=e.inactive??"No";return new hs({active:t,inactive:r,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let n=e.withGuide??L.withGuide,i=`${$e(this.state)} `,o=n?`${h("gray",I)} `:"",s=re(e.output,e.message,o,i),a=`${n?`${h("gray",I)}
828
+ ${l}${c}`}default:{let c=this.state==="error"?"yellow":"cyan",l=t?`${g(c,A)} `:"",d=t?g(c,ne):"",p="";if(this.isNavigating||s){let S=s?o:n;p=S!==""?` ${g("dim",S)}`:""}else p=` ${this.userInputWithCursor}`;let u=this.filteredOptions.length!==i.length?g("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",m=this.filteredOptions.length===0&&n?[`${l}${g("yellow","No matches found")}`]:[],h=this.state==="error"?[`${l}${g("yellow",this.error)}`]:[];t&&r.push(`${l.trimEnd()}`),r.push(`${l}${g("dim","Search:")}${p}${u}`,...m,...h);let y=[`${g("dim","\u2191/\u2193")} to select`,`${g("dim","Enter:")} confirm`,`${g("dim","Type:")} to search`],w=[`${l}${y.join(" \u2022 ")}`,d],b=this.filteredOptions.length===0?[]:fr({cursor:this.cursor,options:this.filteredOptions,columnPadding:t?3:0,rowPadding:r.length+w.length,style:(S,T)=>a(S,S.disabled?"disabled":T?"active":"inactive"),maxItems:e.maxItems,output:e.output});return[...r,...b.map(S=>`${l}${S}`),...w].join(`
829
+ `)}}}}).prompt(),rF=e=>{let t=(n,i,o,s)=>{let a=o.includes(n.value),c=n.label??String(n.value??""),l=n.hint&&s!==void 0&&n.value===s?g("dim",` (${n.hint})`):"",d=a?g("green",Xr):g("dim",hi);return n.disabled?`${g("gray",hi)} ${g(["strikethrough","gray"],c)}`:i?`${d} ${c}${l}`:`${d} ${g("dim",c)}`},r=new _d({options:e.options,multiple:!0,placeholder:e.placeholder,filter:e.filter??((n,i)=>Mx(n,i)),validate:()=>{if(e.required&&r.selectedValues.length===0)return"Please select at least one item"},initialValue:e.initialValues,signal:e.signal,input:e.input,output:e.output,render(){let n=e.withGuide??D.withGuide,i=`${n?`${g("gray",A)}
830
+ `:""}${Le(this.state)} ${e.message}
831
+ `,o=this.userInput,s=e.placeholder,a=o===""&&s!==void 0,c=this.isNavigating||a?g("dim",a?s:o):this.userInputWithCursor,l=this.options,d=this.filteredOptions.length!==l.length?g("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${i}${n?`${g("gray",A)} `:""}${g("dim",`${this.selectedValues.length} items selected`)}`;case"cancel":return`${i}${n?`${g("gray",A)} `:""}${g(["strikethrough","dim"],o)}`;default:{let p=this.state==="error"?"yellow":"cyan",u=n?`${g(p,A)} `:"",m=n?g(p,ne):"",h=[`${g("dim","\u2191/\u2193")} to navigate`,`${g("dim",this.isNavigating?"Space/Tab:":"Tab:")} select`,`${g("dim","Enter:")} confirm`,`${g("dim","Type:")} to search`],y=this.filteredOptions.length===0&&o?[`${u}${g("yellow","No matches found")}`]:[],w=this.state==="error"?[`${u}${g("yellow",this.error)}`]:[],b=[...`${i}${n?g(p,A):""}`.split(`
832
+ `),`${u}${g("dim","Search:")} ${c}${d}`,...y,...w],S=[`${u}${h.join(" \u2022 ")}`,m],T=fr({cursor:this.cursor,options:this.filteredOptions,style:(I,x)=>t(I,x,this.selectedValues,this.focusedValue),maxItems:e.maxItems,output:e.output,rowPadding:b.length+S.length});return[...b,...T.map(I=>`${u}${I}`),...S].join(`
833
+ `)}}}});return r.prompt()},nF=[Px,Td,Od,Cd],iF=[Ad,Nx,ne,Dx];oF=e=>e,sF=(e="",t="",r)=>{let n=r?.output??process.stdout,i=Jr(n),o=2,s=r?.titlePadding??1,a=r?.contentPadding??2,c=r?.width===void 0||r.width==="auto"?1:Math.min(1,r.width),l=r?.withGuide??D.withGuide?`${A} `:"",d=r?.formatBorder??oF,p=(r?.rounded?nF:iF).map(d),u=d(ka),m=d(A),h=ue(l),y=ue(t),w=i-h,b=Math.floor(i*c)-h;if(r?.width==="auto"){let B=e.split(`
834
+ `),z=y+s*2;for(let ie of B){let de=ue(ie)+a*2;de>z&&(z=de)}let P=z+o;P<b&&(b=P)}b%2!==0&&(b<w?b++:b--);let S=b-o,T=S-s*2,I=y>T?`${t.slice(0,T-3)}...`:t,[x,C]=Tx(ue(I),S,s,r?.titleAlign),R=at(e,S-a*2,{hard:!0,trim:!1});n.write(`${l}${p[0]}${u.repeat(x)}${I}${u.repeat(C)}${p[1]}
835
+ `);let F=R.split(`
836
+ `);for(let B of F){let[z,P]=Tx(ue(B),S,a,r?.contentAlign);n.write(`${l}${m}${" ".repeat(z)}${B}${" ".repeat(P)}${m}
837
+ `)}n.write(`${l}${p[2]}${u.repeat(S)}${p[3]}
838
+ `)},aF=e=>{let t=e.active??"Yes",r=e.inactive??"No";return new xa({active:t,inactive:r,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let n=e.withGuide??D.withGuide,i=`${Le(this.state)} `,o=n?`${g("gray",A)} `:"",s=ae(e.output,e.message,o,i),a=`${n?`${g("gray",A)}
750
839
  `:""}${s}
751
- `,c=this.value?t:r;switch(this.state){case"submit":{let l=n?`${h("gray",I)} `:"";return`${a}${l}${h("dim",c)}`}case"cancel":{let l=n?`${h("gray",I)} `:"";return`${a}${l}${h(["strikethrough","dim"],c)}${n?`
752
- ${h("gray",I)}`:""}`}default:{let l=n?`${h("cyan",I)} `:"",d=n?h("cyan",Z):"";return`${a}${l}${this.value?`${h("green",Ri)} ${t}`:`${h("dim",Sr)} ${h("dim",t)}`}${e.vertical?n?`
753
- ${h("cyan",I)} `:`
754
- `:` ${h("dim","/")} `}${this.value?`${h("dim",Sr)} ${h("dim",r)}`:`${h("green",Ri)} ${r}`}
840
+ `,c=this.value?t:r;switch(this.state){case"submit":{let l=n?`${g("gray",A)} `:"";return`${a}${l}${g("dim",c)}`}case"cancel":{let l=n?`${g("gray",A)} `:"";return`${a}${l}${g(["strikethrough","dim"],c)}${n?`
841
+ ${g("gray",A)}`:""}`}default:{let l=n?`${g("cyan",A)} `:"",d=n?g("cyan",ne):"";return`${a}${l}${this.value?`${g("green",bo)} ${t}`:`${g("dim",Zr)} ${g("dim",t)}`}${e.vertical?n?`
842
+ ${g("cyan",A)} `:`
843
+ `:` ${g("dim","/")} `}${this.value?`${g("dim",Zr)} ${g("dim",r)}`:`${g("green",bo)} ${r}`}
755
844
  ${d}
756
- `}}}}).prompt()},FL=e=>{let t=e.validate;return new gs({...e,validate(r){if(r===void 0)return e.defaultValue!==void 0?void 0:t?t(r):L.date.messages.required;let n=i=>i.toISOString().slice(0,10);if(e.minDate&&n(r)<n(e.minDate))return L.date.messages.afterMin(e.minDate);if(e.maxDate&&n(r)>n(e.maxDate))return L.date.messages.beforeMax(e.maxDate);if(t)return t(r)},render(){let r=(e?.withGuide??L.withGuide)!==!1,n=`${`${r?`${h("gray",I)}
757
- `:""}${$e(this.state)} `}${e.message}
758
- `,i=this.state!=="initial"?this.state:"active",o=HL(this,i),s=this.value instanceof Date?this.formattedValue:"";switch(this.state){case"error":{let a=this.error?` ${h("yellow",this.error)}`:"",c=r?`${h("yellow",I)} `:"",l=r?h("yellow",Z):"";return`${n.trim()}
845
+ `}}}}).prompt()},cF=e=>{let t=e.validate;return new Ia({...e,validate(r){if(r===void 0)return e.defaultValue!==void 0?void 0:t?t(r):D.date.messages.required;let n=i=>i.toISOString().slice(0,10);if(e.minDate&&n(r)<n(e.minDate))return D.date.messages.afterMin(e.minDate);if(e.maxDate&&n(r)>n(e.maxDate))return D.date.messages.beforeMax(e.maxDate);if(t)return t(r)},render(){let r=(e?.withGuide??D.withGuide)!==!1,n=`${`${r?`${g("gray",A)}
846
+ `:""}${Le(this.state)} `}${e.message}
847
+ `,i=this.state!=="initial"?this.state:"active",o=lF(this,i),s=this.value instanceof Date?this.formattedValue:"";switch(this.state){case"error":{let a=this.error?` ${g("yellow",this.error)}`:"",c=r?`${g("yellow",A)} `:"",l=r?g("yellow",ne):"";return`${n.trim()}
759
848
  ${c}${o}
760
849
  ${l}${a}
761
- `}case"submit":{let a=s?` ${h("dim",s)}`:"",c=r?h("gray",I):"";return`${n}${c}${a}`}case"cancel":{let a=s?` ${h(["strikethrough","dim"],s)}`:"",c=r?h("gray",I):"";return`${n}${c}${a}${s.trim()?`
762
- ${c}`:""}`}default:{let a=r?`${h("cyan",I)} `:"",c=r?h("cyan",Z):"",l=r?`${h("cyan",I)} `:"",d=this.inlineError?`
763
- ${l}${h("yellow",this.inlineError)}`:"";return`${n}${a}${o}${d}
850
+ `}case"submit":{let a=s?` ${g("dim",s)}`:"",c=r?g("gray",A):"";return`${n}${c}${a}`}case"cancel":{let a=s?` ${g(["strikethrough","dim"],s)}`:"",c=r?g("gray",A):"";return`${n}${c}${a}${s.trim()?`
851
+ ${c}`:""}`}default:{let a=r?`${g("cyan",A)} `:"",c=r?g("cyan",ne):"",l=r?`${g("cyan",A)} `:"",d=this.inlineError?`
852
+ ${l}${g("yellow",this.inlineError)}`:"";return`${n}${a}${o}${d}
764
853
  ${c}
765
- `}}}}).prompt()};UL={year:"yyyy",month:"mm",day:"dd"},GL=async(e,t)=>{let r={},n=Object.keys(e);for(let i of n){let o=e[i],s=await o({results:r})?.catch(a=>{throw a});if(typeof t?.onCancel=="function"&&Ss(s)){r[i]="canceled",t.onCancel({results:r});continue}r[i]=s}return r},jL=e=>{let{selectableGroups:t=!0,groupSpacing:r=0}=e,n=(o,s,a=[])=>{let c=o.label??String(o.value),l=typeof o.group=="string",d=l&&(a[a.indexOf(o)+1]??{group:!0}),p=l&&d&&d.group===!0,u="",m="";l&&(t?(u=p?`${Z} `:`${I} `,m=p?" ":`${I} `):u=" ");let g="";if(r>0&&!l&&(g=`
766
- `.repeat(r)),s==="active")return re(e.output,`${c}${o.hint?` ${h("dim",`(${o.hint})`)}`:""}`,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${h("cyan",As)} `,`${g}${h("dim",m)} `);if(s==="group-active")return re(e.output,c,`${g}${u} `,`${g}${u}${h("cyan",As)} `,`${g}${m} `,w=>h("dim",w));if(s==="group-active-selected")return re(e.output,c,`${g}${u} `,`${g}${u}${h("green",xr)} `,`${g}${m} `,w=>h("dim",w));if(s==="selected"){let w=l||t?h("green",xr):"";return re(e.output,`${c}${o.hint?` (${o.hint})`:""}`,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${w} `,`${g}${h("dim",m)} `,x=>h("dim",x))}if(s==="cancelled")return`${h(["strikethrough","dim"],c)}`;if(s==="active-selected")return re(e.output,`${c}${o.hint?` ${h("dim",`(${o.hint})`)}`:""}`,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${h("green",xr)} `,`${g}${h("dim",m)} `);if(s==="submitted")return`${h("dim",c)}`;let y=l||t?h("dim",kn):"";return re(e.output,c,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${y} `,`${g}${h("dim",m)} `,w=>h("dim",w))},i=e.required??!0;return new ys({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:i,cursorAt:e.cursorAt,selectableGroups:t,validate(o){if(i&&(o===void 0||o.length===0))return`Please select at least one option.
767
- ${h("reset",h("dim",`Press ${h(["gray","bgWhite","inverse"]," space ")} to select, ${h("gray",h(["bgWhite","inverse"]," enter "))} to submit`))}`},render(){let o=e.withGuide??L.withGuide,s=`${o?`${h("gray",I)}
768
- `:""}${$e(this.state)} ${e.message}
769
- `,a=this.value??[],c=(l,d)=>{let p=this.options,u=a.includes(l.value)||l.group===!0&&this.isGroupSelected(`${l.value}`);return!d&&typeof l.group=="string"&&this.options[this.cursor].value===l.group?n(l,u?"group-active-selected":"group-active",p):d&&u?n(l,"active-selected",p):u?n(l,"selected",p):n(l,d?"active":"inactive",p)};switch(this.state){case"submit":{let l=this.options.filter(({value:p})=>a.includes(p)).map(p=>n(p,"submitted")),d=l.length===0?"":` ${l.join(h("dim",", "))}`;return`${s}${o?h("gray",I):""}${d}`}case"cancel":{let l=this.options.filter(({value:d})=>a.includes(d)).map(d=>n(d,"cancelled")).join(h("dim",", "));return`${s}${o?`${h("gray",I)} `:""}${l.trim()?`${l}${o?`
770
- ${h("gray",I)}`:""}`:""}`}case"error":{let l=o?`${h("yellow",I)} `:"",d=this.error.split(`
771
- `).map((g,y)=>y===0?`${o?`${h("yellow",Z)} `:""}${h("yellow",g)}`:` ${g}`).join(`
854
+ `}}}}).prompt()};dF={year:"yyyy",month:"mm",day:"dd"},pF=async(e,t)=>{let r={},n=Object.keys(e);for(let i of n){let o=e[i],s=await o({results:r})?.catch(a=>{throw a});if(typeof t?.onCancel=="function"&&$a(s)){r[i]="canceled",t.onCancel({results:r});continue}r[i]=s}return r},fF=e=>{let{selectableGroups:t=!0,groupSpacing:r=0}=e,n=(o,s,a=[])=>{let c=o.label??String(o.value),l=typeof o.group=="string",d=l&&(a[a.indexOf(o)+1]??{group:!0}),p=l&&d&&d.group===!0,u="",m="";l&&(t?(u=p?`${ne} `:`${A} `,m=p?" ":`${A} `):u=" ");let h="";if(r>0&&!l&&(h=`
855
+ `.repeat(r)),s==="active")return ae(e.output,`${c}${o.hint?` ${g("dim",`(${o.hint})`)}`:""}`,`${h}${g("dim",u)} `,`${h}${g("dim",u)}${g("cyan",La)} `,`${h}${g("dim",m)} `);if(s==="group-active")return ae(e.output,c,`${h}${u} `,`${h}${u}${g("cyan",La)} `,`${h}${m} `,w=>g("dim",w));if(s==="group-active-selected")return ae(e.output,c,`${h}${u} `,`${h}${u}${g("green",Xr)} `,`${h}${m} `,w=>g("dim",w));if(s==="selected"){let w=l||t?g("green",Xr):"";return ae(e.output,`${c}${o.hint?` (${o.hint})`:""}`,`${h}${g("dim",u)} `,`${h}${g("dim",u)}${w} `,`${h}${g("dim",m)} `,b=>g("dim",b))}if(s==="cancelled")return`${g(["strikethrough","dim"],c)}`;if(s==="active-selected")return ae(e.output,`${c}${o.hint?` ${g("dim",`(${o.hint})`)}`:""}`,`${h}${g("dim",u)} `,`${h}${g("dim",u)}${g("green",Xr)} `,`${h}${g("dim",m)} `);if(s==="submitted")return`${g("dim",c)}`;let y=l||t?g("dim",hi):"";return ae(e.output,c,`${h}${g("dim",u)} `,`${h}${g("dim",u)}${y} `,`${h}${g("dim",m)} `,w=>g("dim",w))},i=e.required??!0;return new va({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:i,cursorAt:e.cursorAt,selectableGroups:t,validate(o){if(i&&(o===void 0||o.length===0))return`Please select at least one option.
856
+ ${g("reset",g("dim",`Press ${g(["gray","bgWhite","inverse"]," space ")} to select, ${g("gray",g(["bgWhite","inverse"]," enter "))} to submit`))}`},render(){let o=e.withGuide??D.withGuide,s=`${o?`${g("gray",A)}
857
+ `:""}${Le(this.state)} ${e.message}
858
+ `,a=this.value??[],c=(l,d)=>{let p=this.options,u=a.includes(l.value)||l.group===!0&&this.isGroupSelected(`${l.value}`);return!d&&typeof l.group=="string"&&this.options[this.cursor].value===l.group?n(l,u?"group-active-selected":"group-active",p):d&&u?n(l,"active-selected",p):u?n(l,"selected",p):n(l,d?"active":"inactive",p)};switch(this.state){case"submit":{let l=this.options.filter(({value:p})=>a.includes(p)).map(p=>n(p,"submitted")),d=l.length===0?"":` ${l.join(g("dim",", "))}`;return`${s}${o?g("gray",A):""}${d}`}case"cancel":{let l=this.options.filter(({value:d})=>a.includes(d)).map(d=>n(d,"cancelled")).join(g("dim",", "));return`${s}${o?`${g("gray",A)} `:""}${l.trim()?`${l}${o?`
859
+ ${g("gray",A)}`:""}`:""}`}case"error":{let l=o?`${g("yellow",A)} `:"",d=this.error.split(`
860
+ `).map((h,y)=>y===0?`${o?`${g("yellow",ne)} `:""}${g("yellow",h)}`:` ${h}`).join(`
772
861
  `),p=s.split(`
773
862
  `).length,u=d.split(`
774
- `).length+1,m=Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:p+u,style:c}).join(`
863
+ `).length+1,m=fr({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:p+u,style:c}).join(`
775
864
  ${l}`);return`${s}${l}${m}
776
865
  ${d}
777
- `}default:{let l=o?`${h("cyan",I)} `:"",d=s.split(`
778
- `).length,p=(o?1:0)+1,u=Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:d+p,style:c}).join(`
866
+ `}default:{let l=o?`${g("cyan",A)} `:"",d=s.split(`
867
+ `).length,p=(o?1:0)+1,u=fr({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:d+p,style:c}).join(`
779
868
  ${l}`);return`${s}${l}${u}
780
- ${o?h("cyan",Z):""}
781
- `}}}}).prompt()},Ce={message:(e=[],{symbol:t=h("gray",I),secondarySymbol:r=h("gray",I),output:n=process.stdout,spacing:i=1,withGuide:o}={})=>{let s=[],a=o??L.withGuide,c=a?r:"",l=a?`${t} `:"",d=a?`${r} `:"";for(let u=0;u<i;u++)s.push(c);let p=Array.isArray(e)?e:e.split(`
782
- `);if(p.length>0){let[u,...m]=p;u.length>0?s.push(`${l}${u}`):s.push(a?t:"");for(let g of m)g.length>0?s.push(`${d}${g}`):s.push(a?r:"")}n.write(`${s.join(`
869
+ ${o?g("cyan",ne):""}
870
+ `}}}}).prompt()},De={message:(e=[],{symbol:t=g("gray",A),secondarySymbol:r=g("gray",A),output:n=process.stdout,spacing:i=1,withGuide:o}={})=>{let s=[],a=o??D.withGuide,c=a?r:"",l=a?`${t} `:"",d=a?`${r} `:"";for(let u=0;u<i;u++)s.push(c);let p=Array.isArray(e)?e:e.split(`
871
+ `);if(p.length>0){let[u,...m]=p;u.length>0?s.push(`${l}${u}`):s.push(a?t:"");for(let h of m)h.length>0?s.push(`${d}${h}`):s.push(a?r:"")}n.write(`${s.join(`
783
872
  `)}
784
- `)},info:(e,t)=>{Ce.message(e,{...t,symbol:h("blue",iu)})},success:(e,t)=>{Ce.message(e,{...t,symbol:h("green",ou)})},step:(e,t)=>{Ce.message(e,{...t,symbol:h("green",vr)})},warn:(e,t)=>{Ce.message(e,{...t,symbol:h("yellow",su)})},warning:(e,t)=>{Ce.warn(e,t)},error:(e,t)=>{Ce.message(e,{...t,symbol:h("red",au)})}},WL=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??L.withGuide?`${h("gray",Z)} `:"";r.write(`${n}${h("red",e)}
785
-
786
- `)},VL=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??L.withGuide?`${h("gray",eu)} `:"";r.write(`${n}${e}
787
- `)},KL=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??L.withGuide?`${h("gray",I)}
788
- ${h("gray",Z)} `:"";r.write(`${n}${e}
789
-
790
- `)},YL=e=>new ws({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,showSubmit:e.showSubmit,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??L.withGuide,r=`${`${t?`${h("gray",I)}
791
- `:""}${$e(this.state)} `}${e.message}
792
- `,n=e.placeholder?h("inverse",e.placeholder[0])+h("dim",e.placeholder.slice(1)):h(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:n,o=this.value??"",s=e.showSubmit?`
793
- ${h(this.focused==="submit"?"cyan":"dim","[ submit ]")}`:"";switch(this.state){case"error":{let a=`${h("yellow",I)} `,c=t?re(e.output,i,a,void 0):i,l=h("yellow",Z);return`${r}${c}
794
- ${l} ${h("yellow",this.error)}${s}
795
- `}case"submit":{let a=`${h("gray",I)} `,c=t?re(e.output,o,a,void 0,void 0,l=>h("dim",l)):o?h("dim",o):"";return`${r}${c}`}case"cancel":{let a=`${h("gray",I)} `,c=t?re(e.output,o,a,void 0,void 0,l=>h(["strikethrough","dim"],l)):o?h(["strikethrough","dim"],o):"";return`${r}${c}`}default:{let a=t?`${h("cyan",I)} `:"",c=t?h("cyan",Z):"",l=t?re(e.output,i,a):i;return`${r}${l}
873
+ `)},info:(e,t)=>{De.message(e,{...t,symbol:g("blue",Rd)})},success:(e,t)=>{De.message(e,{...t,symbol:g("green",$d)})},step:(e,t)=>{De.message(e,{...t,symbol:g("green",Qr)})},warn:(e,t)=>{De.message(e,{...t,symbol:g("yellow",Nd)})},warning:(e,t)=>{De.warn(e,t)},error:(e,t)=>{De.message(e,{...t,symbol:g("red",Dd)})}},mF=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??D.withGuide?`${g("gray",ne)} `:"";r.write(`${n}${g("red",e)}
874
+
875
+ `)},hF=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??D.withGuide?`${g("gray",Ad)} `:"";r.write(`${n}${e}
876
+ `)},gF=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??D.withGuide?`${g("gray",A)}
877
+ ${g("gray",ne)} `:"";r.write(`${n}${e}
878
+
879
+ `)},yF=e=>new Aa({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,showSubmit:e.showSubmit,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??D.withGuide,r=`${`${t?`${g("gray",A)}
880
+ `:""}${Le(this.state)} `}${e.message}
881
+ `,n=e.placeholder?g("inverse",e.placeholder[0])+g("dim",e.placeholder.slice(1)):g(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:n,o=this.value??"",s=e.showSubmit?`
882
+ ${g(this.focused==="submit"?"cyan":"dim","[ submit ]")}`:"";switch(this.state){case"error":{let a=`${g("yellow",A)} `,c=t?ae(e.output,i,a,void 0):i,l=g("yellow",ne);return`${r}${c}
883
+ ${l} ${g("yellow",this.error)}${s}
884
+ `}case"submit":{let a=`${g("gray",A)} `,c=t?ae(e.output,o,a,void 0,void 0,l=>g("dim",l)):o?g("dim",o):"";return`${r}${c}`}case"cancel":{let a=`${g("gray",A)} `,c=t?ae(e.output,o,a,void 0,void 0,l=>g(["strikethrough","dim"],l)):o?g(["strikethrough","dim"],o):"";return`${r}${c}`}default:{let a=t?`${g("cyan",A)} `:"",c=t?g("cyan",ne):"",l=t?ae(e.output,i,a):i;return`${r}${l}
796
885
  ${c}${s}
797
- `}}}}).prompt(),Oi=(e,t)=>e.split(`
886
+ `}}}}).prompt(),So=(e,t)=>e.split(`
798
887
  `).map(r=>t(r)).join(`
799
- `),qL=e=>{let t=(n,i)=>{let o=n.label??String(n.value);return i==="disabled"?`${h("gray",kn)} ${Oi(o,s=>h(["strikethrough","gray"],s))}${n.hint?` ${h("dim",`(${n.hint??"disabled"})`)}`:""}`:i==="active"?`${h("cyan",As)} ${o}${n.hint?` ${h("dim",`(${n.hint})`)}`:""}`:i==="selected"?`${h("green",xr)} ${Oi(o,s=>h("dim",s))}${n.hint?` ${h("dim",`(${n.hint})`)}`:""}`:i==="cancelled"?`${Oi(o,s=>h(["strikethrough","dim"],s))}`:i==="active-selected"?`${h("green",xr)} ${o}${n.hint?` ${h("dim",`(${n.hint})`)}`:""}`:i==="submitted"?`${Oi(o,s=>h("dim",s))}`:`${h("dim",kn)} ${Oi(o,s=>h("dim",s))}`},r=e.required??!0;return new vE({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:r,cursorAt:e.cursorAt,validate(n){if(r&&(n===void 0||n.length===0))return`Please select at least one option.
800
- ${h("reset",h("dim",`Press ${h(["gray","bgWhite","inverse"]," space ")} to select, ${h("gray",h("bgWhite",h("inverse"," enter ")))} to submit`))}`},render(){let n=e.withGuide??L.withGuide,i=re(e.output,e.message,n?`${cu(this.state)} `:"",`${$e(this.state)} `),o=`${n?`${h("gray",I)}
888
+ `),wF=e=>{let t=(n,i)=>{let o=n.label??String(n.value);return i==="disabled"?`${g("gray",hi)} ${So(o,s=>g(["strikethrough","gray"],s))}${n.hint?` ${g("dim",`(${n.hint??"disabled"})`)}`:""}`:i==="active"?`${g("cyan",La)} ${o}${n.hint?` ${g("dim",`(${n.hint})`)}`:""}`:i==="selected"?`${g("green",Xr)} ${So(o,s=>g("dim",s))}${n.hint?` ${g("dim",`(${n.hint})`)}`:""}`:i==="cancelled"?`${So(o,s=>g(["strikethrough","dim"],s))}`:i==="active-selected"?`${g("green",Xr)} ${o}${n.hint?` ${g("dim",`(${n.hint})`)}`:""}`:i==="submitted"?`${So(o,s=>g("dim",s))}`:`${g("dim",hi)} ${So(o,s=>g("dim",s))}`},r=e.required??!0;return new bx({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:r,cursorAt:e.cursorAt,validate(n){if(r&&(n===void 0||n.length===0))return`Please select at least one option.
889
+ ${g("reset",g("dim",`Press ${g(["gray","bgWhite","inverse"]," space ")} to select, ${g("gray",g("bgWhite",g("inverse"," enter ")))} to submit`))}`},render(){let n=e.withGuide??D.withGuide,i=ae(e.output,e.message,n?`${Ld(this.state)} `:"",`${Le(this.state)} `),o=`${n?`${g("gray",A)}
801
890
  `:""}${i}
802
- `,s=this.value??[],a=(c,l)=>{if(c.disabled)return t(c,"disabled");let d=s.includes(c.value);return l&&d?t(c,"active-selected"):d?t(c,"selected"):t(c,l?"active":"inactive")};switch(this.state){case"submit":{let c=this.options.filter(({value:d})=>s.includes(d)).map(d=>t(d,"submitted")).join(h("dim",", "))||h("dim","none"),l=re(e.output,c,n?`${h("gray",I)} `:"");return`${o}${l}`}case"cancel":{let c=this.options.filter(({value:d})=>s.includes(d)).map(d=>t(d,"cancelled")).join(h("dim",", "));if(c.trim()==="")return`${o}${h("gray",I)}`;let l=re(e.output,c,n?`${h("gray",I)} `:"");return`${o}${l}${n?`
803
- ${h("gray",I)}`:""}`}case"error":{let c=n?`${h("yellow",I)} `:"",l=this.error.split(`
804
- `).map((u,m)=>m===0?`${n?`${h("yellow",Z)} `:""}${h("yellow",u)}`:` ${u}`).join(`
891
+ `,s=this.value??[],a=(c,l)=>{if(c.disabled)return t(c,"disabled");let d=s.includes(c.value);return l&&d?t(c,"active-selected"):d?t(c,"selected"):t(c,l?"active":"inactive")};switch(this.state){case"submit":{let c=this.options.filter(({value:d})=>s.includes(d)).map(d=>t(d,"submitted")).join(g("dim",", "))||g("dim","none"),l=ae(e.output,c,n?`${g("gray",A)} `:"");return`${o}${l}`}case"cancel":{let c=this.options.filter(({value:d})=>s.includes(d)).map(d=>t(d,"cancelled")).join(g("dim",", "));if(c.trim()==="")return`${o}${g("gray",A)}`;let l=ae(e.output,c,n?`${g("gray",A)} `:"");return`${o}${l}${n?`
892
+ ${g("gray",A)}`:""}`}case"error":{let c=n?`${g("yellow",A)} `:"",l=this.error.split(`
893
+ `).map((u,m)=>m===0?`${n?`${g("yellow",ne)} `:""}${g("yellow",u)}`:` ${u}`).join(`
805
894
  `),d=o.split(`
806
895
  `).length,p=l.split(`
807
- `).length+1;return`${o}${c}${Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:d+p,style:a}).join(`
896
+ `).length+1;return`${o}${c}${fr({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:d+p,style:a}).join(`
808
897
  ${c}`)}
809
898
  ${l}
810
- `}default:{let c=n?`${h("cyan",I)} `:"",l=o.split(`
811
- `).length,d=n?2:1;return`${o}${c}${Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:l+d,style:a}).join(`
899
+ `}default:{let c=n?`${g("cyan",A)} `:"",l=o.split(`
900
+ `).length,d=n?2:1;return`${o}${c}${fr({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:l+d,style:a}).join(`
812
901
  ${c}`)}
813
- ${n?h("cyan",Z):""}
814
- `}}}}).prompt()},JL=e=>h("dim",e),zL=(e,t,r)=>{let n={hard:!0,trim:!1},i=et(e,t,n).split(`
815
- `),o=i.reduce((c,l)=>Math.max(se(l),c),0),s=i.map(r).reduce((c,l)=>Math.max(se(l),c),0),a=t-(s-o);return et(e,a,n)},XL=(e="",t="",r)=>{let n=r?.output??Le.stdout,i=r?.withGuide??L.withGuide,o=r?.format??JL,s=["",...zL(e,Er(n)-6,o).split(`
816
- `).map(o),""],a=se(t),c=Math.max(s.reduce((u,m)=>{let g=se(m);return g>u?g:u},0),a)+2,l=s.map(u=>`${h("gray",I)} ${u}${" ".repeat(c-se(u))}${h("gray",I)}`).join(`
817
- `),d=i?`${h("gray",I)}
818
- `:"",p=i?ME:nu;n.write(`${d}${h("green",vr)} ${h("reset",t)} ${h("gray",Ts.repeat(Math.max(c-a-1,1))+tu)}
902
+ ${n?g("cyan",ne):""}
903
+ `}}}}).prompt()},EF=e=>g("dim",e),_F=(e,t,r)=>{let n={hard:!0,trim:!1},i=at(e,t,n).split(`
904
+ `),o=i.reduce((c,l)=>Math.max(ue(l),c),0),s=i.map(r).reduce((c,l)=>Math.max(ue(l),c),0),a=t-(s-o);return at(e,a,n)},SF=(e="",t="",r)=>{let n=r?.output??Ye.stdout,i=r?.withGuide??D.withGuide,o=r?.format??EF,s=["",..._F(e,Jr(n)-6,o).split(`
905
+ `).map(o),""],a=ue(t),c=Math.max(s.reduce((u,m)=>{let h=ue(m);return h>u?h:u},0),a)+2,l=s.map(u=>`${g("gray",A)} ${u}${" ".repeat(c-ue(u))}${g("gray",A)}`).join(`
906
+ `),d=i?`${g("gray",A)}
907
+ `:"",p=i?kx:Od;n.write(`${d}${g("green",Qr)} ${g("reset",t)} ${g("gray",ka.repeat(Math.max(c-a-1,1))+Td)}
819
908
  ${l}
820
- ${h("gray",p+Ts.repeat(c+2)+ru)}
821
- `)},ZL=e=>new _s({validate:e.validate,mask:e.mask??PE,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??L.withGuide,r=`${t?`${h("gray",I)}
822
- `:""}${$e(this.state)} ${e.message}
823
- `,n=this.userInputWithCursor,i=this.masked;switch(this.state){case"error":{let o=t?`${h("yellow",I)} `:"",s=t?`${h("yellow",Z)} `:"",a=i??"";return e.clearOnError&&this.clear(),`${r.trim()}
909
+ ${g("gray",p+ka.repeat(c+2)+Cd)}
910
+ `)},bF=e=>new Ta({validate:e.validate,mask:e.mask??Lx,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??D.withGuide,r=`${t?`${g("gray",A)}
911
+ `:""}${Le(this.state)} ${e.message}
912
+ `,n=this.userInputWithCursor,i=this.masked;switch(this.state){case"error":{let o=t?`${g("yellow",A)} `:"",s=t?`${g("yellow",ne)} `:"",a=i??"";return e.clearOnError&&this.clear(),`${r.trim()}
824
913
  ${o}${a}
825
- ${s}${h("yellow",this.error)}
826
- `}case"submit":{let o=t?`${h("gray",I)} `:"",s=i?h("dim",i):"";return`${r}${o}${s}`}case"cancel":{let o=t?`${h("gray",I)} `:"",s=i?h(["strikethrough","dim"],i):"";return`${r}${o}${s}${i&&t?`
827
- ${h("gray",I)}`:""}`}default:{let o=t?`${h("cyan",I)} `:"",s=t?h("cyan",Z):"";return`${r}${o}${n}
914
+ ${s}${g("yellow",this.error)}
915
+ `}case"submit":{let o=t?`${g("gray",A)} `:"",s=i?g("dim",i):"";return`${r}${o}${s}`}case"cancel":{let o=t?`${g("gray",A)} `:"",s=i?g(["strikethrough","dim"],i):"";return`${r}${o}${s}${i&&t?`
916
+ ${g("gray",A)}`:""}`}default:{let o=t?`${g("cyan",A)} `:"",s=t?g("cyan",ne):"";return`${r}${o}${n}
828
917
  ${s}
829
- `}}}}).prompt(),QL=e=>{let t=e.validate;return BE({...e,initialUserInput:e.initialValue??e.root??process.cwd(),maxItems:5,validate(r){if(!Array.isArray(r)){if(!r)return"Please select a path";if(t)return t(r)}},options(){let r=this.userInput;if(r==="")return[];try{let n;TL(r)?IE(r).isDirectory()&&(!e.directory||r.endsWith("/"))?n=r:n=AE(r):n=AE(r);let i=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return CL(n).map(o=>{let s=$L(n,o),a=IE(s);return{name:o,path:s,isDirectory:a.isDirectory()}}).filter(({path:o,isDirectory:s})=>o.startsWith(i)&&(s||!e.directory)).map(o=>({value:o.path}))}catch{return[]}}})},ek=e=>h("magenta",e),lu=({indicator:e="dots",onCancel:t,output:r=process.stdout,cancelMessage:n,errorMessage:i,frames:o=Is?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:s=Is?80:120,signal:a,...c}={})=>{let l=Xl(),d,p,u=!1,m=!1,g="",y,w=performance.now(),x=Er(r),b=c?.styleFrame??ek,A=N=>{let W=N>1?i??L.messages.error:n??L.messages.cancel;m=N===1,u&&(ae(W,N),m&&typeof t=="function"&&t())},v=()=>A(2),S=()=>A(1),C=()=>{process.on("uncaughtExceptionMonitor",v),process.on("unhandledRejection",v),process.on("SIGINT",S),process.on("SIGTERM",S),process.on("exit",A),a&&a.addEventListener("abort",S)},O=()=>{process.removeListener("uncaughtExceptionMonitor",v),process.removeListener("unhandledRejection",v),process.removeListener("SIGINT",S),process.removeListener("SIGTERM",S),process.removeListener("exit",A),a&&a.removeEventListener("abort",S)},M=()=>{if(y===void 0)return;l&&r.write(`
830
- `);let N=et(y,x,{hard:!0,trim:!1}).split(`
831
- `);N.length>1&&r.write(Ln.cursor.up(N.length-1)),r.write(Ln.cursor.to(0)),r.write(Ln.erase.down())},F=N=>N.replace(/\.+$/,""),q=N=>{let W=(performance.now()-N)/1e3,ne=Math.floor(W/60),ie=Math.floor(W%60);return ne>0?`[${ne}m ${ie}s]`:`[${ie}s]`},P=c.withGuide??L.withGuide,Q=(N="")=>{u=!0,d=xE({output:r}),g=F(N),w=performance.now(),P&&r.write(`${h("gray",I)}
832
- `);let W=0,ne=0;C(),p=setInterval(()=>{if(l&&g===y)return;M(),y=g;let ie=b(o[W]),de;if(l)de=`${ie} ${g}...`;else if(e==="timer")de=`${ie} ${g} ${q(w)}`;else{let Gn=".".repeat(Math.floor(ne)).slice(0,3);de=`${ie} ${g}${Gn}`}let Ue=et(de,x,{hard:!0,trim:!1});r.write(Ue),W=W+1<o.length?W+1:0,ne=ne<4?ne+.125:0},s)},ae=(N="",W=0,ne=!1)=>{if(!u)return;u=!1,clearInterval(p),M();let ie=W===0?h("green",vr):W===1?h("red",Zl):h("red",Ql);g=N??g,ne||(e==="timer"?r.write(`${ie} ${g} ${q(w)}
833
- `):r.write(`${ie} ${g}
834
- `)),O(),d()};return{start:Q,stop:(N="")=>ae(N,0),message:(N="")=>{g=F(N??g)},cancel:(N="")=>ae(N,1),error:(N="")=>ae(N,2),clear:()=>ae("",0,!0),get isCancelled(){return m}}},OE={light:U("\u2500","-"),heavy:U("\u2501","="),block:U("\u2588","#")};vs=(e,t)=>e.includes(`
918
+ `}}}}).prompt(),xF=e=>{let t=e.validate;return Fx({...e,initialUserInput:e.initialValue??e.root??process.cwd(),maxItems:5,validate(r){if(!Array.isArray(r)){if(!r)return"Please select a path";if(t)return t(r)}},options(){let r=this.userInput;if(r==="")return[];try{let n;X1(r)?xx(r).isDirectory()&&(!e.directory||r.endsWith("/"))?n=r:n=Ix(r):n=Ix(r);let i=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return Z1(n).map(o=>{let s=Q1(n,o),a=xx(s);return{name:o,path:s,isDirectory:a.isDirectory()}}).filter(({path:o,isDirectory:s})=>o.startsWith(i)&&(s||!e.directory)).map(o=>({value:o.path}))}catch{return[]}}})},IF=e=>g("magenta",e),kd=({indicator:e="dots",onCancel:t,output:r=process.stdout,cancelMessage:n,errorMessage:i,frames:o=Da?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:s=Da?80:120,signal:a,...c}={})=>{let l=xd(),d,p,u=!1,m=!1,h="",y,w=performance.now(),b=Jr(r),S=c?.styleFrame??IF,T=L=>{let oe=L>1?i??D.messages.error:n??D.messages.cancel;m=L===1,u&&(de(oe,L),m&&typeof t=="function"&&t())},I=()=>T(2),x=()=>T(1),C=()=>{process.on("uncaughtExceptionMonitor",I),process.on("unhandledRejection",I),process.on("SIGINT",x),process.on("SIGTERM",x),process.on("exit",T),a&&a.addEventListener("abort",x)},R=()=>{process.removeListener("uncaughtExceptionMonitor",I),process.removeListener("unhandledRejection",I),process.removeListener("SIGINT",x),process.removeListener("SIGTERM",x),process.removeListener("exit",T),a&&a.removeEventListener("abort",x)},F=()=>{if(y===void 0)return;l&&r.write(`
919
+ `);let L=at(y,b,{hard:!0,trim:!1}).split(`
920
+ `);L.length>1&&r.write(mi.cursor.up(L.length-1)),r.write(mi.cursor.to(0)),r.write(mi.erase.down())},B=L=>L.replace(/\.+$/,""),z=L=>{let oe=(performance.now()-L)/1e3,H=Math.floor(oe/60),q=Math.floor(oe%60);return H>0?`[${H}m ${q}s]`:`[${q}s]`},P=c.withGuide??D.withGuide,ie=(L="")=>{u=!0,d=_x({output:r}),h=B(L),w=performance.now(),P&&r.write(`${g("gray",A)}
921
+ `);let oe=0,H=0;C(),p=setInterval(()=>{if(l&&h===y)return;F(),y=h;let q=S(o[oe]),ye;if(l)ye=`${q} ${h}...`;else if(e==="timer")ye=`${q} ${h} ${z(w)}`;else{let Et=".".repeat(Math.floor(H)).slice(0,3);ye=`${q} ${h}${Et}`}let Fa=at(ye,b,{hard:!0,trim:!1});r.write(Fa),oe=oe+1<o.length?oe+1:0,H=H<4?H+.125:0},s)},de=(L="",oe=0,H=!1)=>{if(!u)return;u=!1,clearInterval(p),F();let q=oe===0?g("green",Qr):oe===1?g("red",Id):g("red",vd);h=L??h,H||(e==="timer"?r.write(`${q} ${h} ${z(w)}
922
+ `):r.write(`${q} ${h}
923
+ `)),R(),d()};return{start:ie,stop:(L="")=>de(L,0),message:(L="")=>{h=B(L??h)},cancel:(L="")=>de(L,1),error:(L="")=>de(L,2),clear:()=>de("",0,!0),get isCancelled(){return m}}},Cx={light:G("\u2500","-"),heavy:G("\u2501","="),block:G("\u2588","#")};Na=(e,t)=>e.includes(`
835
924
  `)?e.split(`
836
925
  `).map(r=>t(r)).join(`
837
- `):t(e),rk=e=>{let t=(r,n)=>{let i=r.label??String(r.value);switch(n){case"disabled":return`${h("gray",Sr)} ${vs(i,o=>h("gray",o))}${r.hint?` ${h("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${vs(i,o=>h("dim",o))}`;case"active":return`${h("green",Ri)} ${i}${r.hint?` ${h("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${vs(i,o=>h(["strikethrough","dim"],o))}`;default:return`${h("dim",Sr)} ${vs(i,o=>h("dim",o))}`}};return new Es({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let r=e.withGuide??L.withGuide,n=`${$e(this.state)} `,i=`${cu(this.state)} `,o=re(e.output,e.message,i,n),s=`${r?`${h("gray",I)}
926
+ `):t(e),AF=e=>{let t=(r,n)=>{let i=r.label??String(r.value);switch(n){case"disabled":return`${g("gray",Zr)} ${Na(i,o=>g("gray",o))}${r.hint?` ${g("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${Na(i,o=>g("dim",o))}`;case"active":return`${g("green",bo)} ${i}${r.hint?` ${g("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${Na(i,o=>g(["strikethrough","dim"],o))}`;default:return`${g("dim",Zr)} ${Na(i,o=>g("dim",o))}`}};return new Ca({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let r=e.withGuide??D.withGuide,n=`${Le(this.state)} `,i=`${Ld(this.state)} `,o=ae(e.output,e.message,i,n),s=`${r?`${g("gray",A)}
838
927
  `:""}${o}
839
- `;switch(this.state){case"submit":{let a=r?`${h("gray",I)} `:"",c=re(e.output,t(this.options[this.cursor],"selected"),a);return`${s}${c}`}case"cancel":{let a=r?`${h("gray",I)} `:"",c=re(e.output,t(this.options[this.cursor],"cancelled"),a);return`${s}${c}${r?`
840
- ${h("gray",I)}`:""}`}default:{let a=r?`${h("cyan",I)} `:"",c=r?h("cyan",Z):"",l=s.split(`
841
- `).length,d=r?2:1;return`${s}${a}${Xt({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:l+d,style:(p,u)=>t(p,p.disabled?"disabled":u?"active":"inactive")}).join(`
928
+ `;switch(this.state){case"submit":{let a=r?`${g("gray",A)} `:"",c=ae(e.output,t(this.options[this.cursor],"selected"),a);return`${s}${c}`}case"cancel":{let a=r?`${g("gray",A)} `:"",c=ae(e.output,t(this.options[this.cursor],"cancelled"),a);return`${s}${c}${r?`
929
+ ${g("gray",A)}`:""}`}default:{let a=r?`${g("cyan",A)} `:"",c=r?g("cyan",ne):"",l=s.split(`
930
+ `).length,d=r?2:1;return`${s}${a}${fr({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:l+d,style:(p,u)=>t(p,p.disabled?"disabled":u?"active":"inactive")}).join(`
842
931
  ${a}`)}
843
932
  ${c}
844
- `}}}}).prompt()},nk=e=>{let t=(r,n="inactive")=>{let i=r.label??String(r.value);return n==="selected"?`${h("dim",i)}`:n==="cancelled"?`${h(["strikethrough","dim"],i)}`:n==="active"?`${h(["bgCyan","gray"],` ${r.value} `)} ${i}${r.hint?` ${h("dim",`(${r.hint})`)}`:""}`:`${h(["gray","bgWhite","inverse"],` ${r.value} `)} ${i}${r.hint?` ${h("dim",`(${r.hint})`)}`:""}`};return new bs({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,caseSensitive:e.caseSensitive,render(){let r=e.withGuide??L.withGuide,n=`${r?`${h("gray",I)}
845
- `:""}${$e(this.state)} ${e.message}
846
- `;switch(this.state){case"submit":{let i=r?`${h("gray",I)} `:"",o=this.options.find(a=>a.value===this.value)??e.options[0],s=re(e.output,t(o,"selected"),i);return`${n}${s}`}case"cancel":{let i=r?`${h("gray",I)} `:"",o=re(e.output,t(this.options[0],"cancelled"),i);return`${n}${o}${r?`
847
- ${h("gray",I)}`:""}`}default:{let i=r?`${h("cyan",I)} `:"",o=r?h("cyan",Z):"",s=this.options.map((a,c)=>re(e.output,t(a,c===this.cursor?"active":"inactive"),i)).join(`
933
+ `}}}}).prompt()},TF=e=>{let t=(r,n="inactive")=>{let i=r.label??String(r.value);return n==="selected"?`${g("dim",i)}`:n==="cancelled"?`${g(["strikethrough","dim"],i)}`:n==="active"?`${g(["bgCyan","gray"],` ${r.value} `)} ${i}${r.hint?` ${g("dim",`(${r.hint})`)}`:""}`:`${g(["gray","bgWhite","inverse"],` ${r.value} `)} ${i}${r.hint?` ${g("dim",`(${r.hint})`)}`:""}`};return new Oa({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,caseSensitive:e.caseSensitive,render(){let r=e.withGuide??D.withGuide,n=`${r?`${g("gray",A)}
934
+ `:""}${Le(this.state)} ${e.message}
935
+ `;switch(this.state){case"submit":{let i=r?`${g("gray",A)} `:"",o=this.options.find(a=>a.value===this.value)??e.options[0],s=ae(e.output,t(o,"selected"),i);return`${n}${s}`}case"cancel":{let i=r?`${g("gray",A)} `:"",o=ae(e.output,t(this.options[0],"cancelled"),i);return`${n}${o}${r?`
936
+ ${g("gray",A)}`:""}`}default:{let i=r?`${g("cyan",A)} `:"",o=r?g("cyan",ne):"",s=this.options.map((a,c)=>ae(e.output,t(a,c===this.cursor?"active":"inactive"),i)).join(`
848
937
  `);return`${n}${s}
849
938
  ${o}
850
- `}}}}).prompt()},RE=`${h("gray",I)} `,br={message:async(e,{symbol:t=h("gray",I)}={})=>{process.stdout.write(`${h("gray",I)}
939
+ `}}}}).prompt()},Ox=`${g("gray",A)} `,zr={message:async(e,{symbol:t=g("gray",A)}={})=>{process.stdout.write(`${g("gray",A)}
851
940
  ${t} `);let r=3;for await(let n of e){n=n.replace(/\n/g,`
852
- ${RE}`),n.includes(`
853
- `)&&(r=3+zl(n.slice(n.lastIndexOf(`
854
- `))).length);let i=zl(n).length;r+i<process.stdout.columns?(r+=i,process.stdout.write(n)):(process.stdout.write(`
855
- ${RE}${n.trimStart()}`),r=3+zl(n.trimStart()).length)}process.stdout.write(`
856
- `)},info:e=>br.message(e,{symbol:h("blue",iu)}),success:e=>br.message(e,{symbol:h("green",ou)}),step:e=>br.message(e,{symbol:h("green",vr)}),warn:e=>br.message(e,{symbol:h("yellow",su)}),warning:e=>br.warn(e),error:e=>br.message(e,{symbol:h("red",au)})},ik=async(e,t)=>{for(let r of e){if(r.enabled===!1)continue;let n=lu(t);n.start(r.title);let i=await r.task(n.message);n.stop(i||r.title)}},ok=e=>e.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),sk=e=>{let t=e.output??process.stdout,r=Er(t),n=h("gray",I),i=e.spacing??1,o=3,s=e.retainLog===!0,a=!Xl()&&NE(t);t.write(`${n}
857
- `),t.write(`${h("green",vr)} ${e.title}
941
+ ${Ox}`),n.includes(`
942
+ `)&&(r=3+bd(n.slice(n.lastIndexOf(`
943
+ `))).length);let i=bd(n).length;r+i<process.stdout.columns?(r+=i,process.stdout.write(n)):(process.stdout.write(`
944
+ ${Ox}${n.trimStart()}`),r=3+bd(n.trimStart()).length)}process.stdout.write(`
945
+ `)},info:e=>zr.message(e,{symbol:g("blue",Rd)}),success:e=>zr.message(e,{symbol:g("green",$d)}),step:e=>zr.message(e,{symbol:g("green",Qr)}),warn:e=>zr.message(e,{symbol:g("yellow",Nd)}),warning:e=>zr.warn(e),error:e=>zr.message(e,{symbol:g("red",Dd)})},CF=async(e,t)=>{for(let r of e){if(r.enabled===!1)continue;let n=kd(t);n.start(r.title);let i=await r.task(n.message);n.stop(i||r.title)}},OF=e=>e.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),RF=e=>{let t=e.output??process.stdout,r=Jr(t),n=g("gray",A),i=e.spacing??1,o=3,s=e.retainLog===!0,a=!xd()&&Rx(t);t.write(`${n}
946
+ `),t.write(`${g("green",Qr)} ${e.title}
858
947
  `);for(let w=0;w<i;w++)t.write(`${n}
859
- `);let c=[{value:"",full:""}],l=!1,d=w=>{if(c.length===0)return;let x=0;w&&(x+=i+2);for(let b of c){let{value:A,result:v}=b,S=v?.message??A;if(S.length===0)continue;v===void 0&&b.header!==void 0&&b.header!==""&&(S+=`
860
- ${b.header}`);let C=S.split(`
861
- `).reduce((O,M)=>M===""?O+1:O+Math.ceil((M.length+o)/r),0);x+=C}x>0&&(x+=1,t.write(Ln.erase.lines(x)))},p=(w,x,b)=>{let A=b?`${w.full}
862
- ${w.value}`:w.value;w.header!==void 0&&w.header!==""&&Ce.message(w.header.split(`
863
- `).map(v=>h("bold",v)),{output:t,secondarySymbol:n,symbol:n,spacing:0}),Ce.message(A.split(`
864
- `).map(v=>h("dim",v)),{output:t,secondarySymbol:n,symbol:n,spacing:x??i})},u=()=>{for(let w of c){let{header:x,value:b,full:A}=w;(x===void 0||x.length===0)&&b.length===0||p(w,void 0,s===!0&&A.length>0)}},m=(w,x,b)=>{if(d(!1),(b?.raw!==!0||!l)&&w.value!==""&&(w.value+=`
865
- `),w.value+=ok(x),l=b?.raw===!0,e.limit!==void 0){let A=w.value.split(`
866
- `),v=A.length-e.limit;if(v>0){let S=A.splice(0,v);s&&(w.full+=(w.full===""?"":`
867
- `)+S.join(`
868
- `))}w.value=A.join(`
869
- `)}a&&g()},g=()=>{for(let w of c)w.result?w.result.status==="error"?Ce.error(w.result.message,{output:t,secondarySymbol:n,spacing:0}):Ce.success(w.result.message,{output:t,secondarySymbol:n,spacing:0}):w.value!==""&&p(w,0)},y=(w,x)=>{d(!1),w.result=x,a&&g()};return{message(w,x){m(c[0],w,x)},group(w){let x={header:w,value:"",full:""};return c.push(x),{message(b,A){m(x,b,A)},error(b){y(x,{status:"error",message:b})},success(b){y(x,{status:"success",message:b})}}},error(w,x){d(!0),Ce.error(w,{output:t,secondarySymbol:n,spacing:1}),x?.showLog!==!1&&u(),c.splice(1,c.length-1),c[0].value="",c[0].full=""},success(w,x){d(!0),Ce.success(w,{output:t,secondarySymbol:n,spacing:1}),x?.showLog===!0&&u(),c.splice(1,c.length-1),c[0].value="",c[0].full=""}}},ak=e=>new xs({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??L.withGuide,r=`${`${t?`${h("gray",I)}
870
- `:""}${$e(this.state)} `}${e.message}
871
- `,n=e.placeholder?h("inverse",e.placeholder[0])+h("dim",e.placeholder.slice(1)):h(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:n,o=this.value??"";switch(this.state){case"error":{let s=this.error?` ${h("yellow",this.error)}`:"",a=t?`${h("yellow",I)} `:"",c=t?h("yellow",Z):"";return`${r.trim()}
948
+ `);let c=[{value:"",full:""}],l=!1,d=w=>{if(c.length===0)return;let b=0;w&&(b+=i+2);for(let S of c){let{value:T,result:I}=S,x=I?.message??T;if(x.length===0)continue;I===void 0&&S.header!==void 0&&S.header!==""&&(x+=`
949
+ ${S.header}`);let C=x.split(`
950
+ `).reduce((R,F)=>F===""?R+1:R+Math.ceil((F.length+o)/r),0);b+=C}b>0&&(b+=1,t.write(mi.erase.lines(b)))},p=(w,b,S)=>{let T=S?`${w.full}
951
+ ${w.value}`:w.value;w.header!==void 0&&w.header!==""&&De.message(w.header.split(`
952
+ `).map(I=>g("bold",I)),{output:t,secondarySymbol:n,symbol:n,spacing:0}),De.message(T.split(`
953
+ `).map(I=>g("dim",I)),{output:t,secondarySymbol:n,symbol:n,spacing:b??i})},u=()=>{for(let w of c){let{header:b,value:S,full:T}=w;(b===void 0||b.length===0)&&S.length===0||p(w,void 0,s===!0&&T.length>0)}},m=(w,b,S)=>{if(d(!1),(S?.raw!==!0||!l)&&w.value!==""&&(w.value+=`
954
+ `),w.value+=OF(b),l=S?.raw===!0,e.limit!==void 0){let T=w.value.split(`
955
+ `),I=T.length-e.limit;if(I>0){let x=T.splice(0,I);s&&(w.full+=(w.full===""?"":`
956
+ `)+x.join(`
957
+ `))}w.value=T.join(`
958
+ `)}a&&h()},h=()=>{for(let w of c)w.result?w.result.status==="error"?De.error(w.result.message,{output:t,secondarySymbol:n,spacing:0}):De.success(w.result.message,{output:t,secondarySymbol:n,spacing:0}):w.value!==""&&p(w,0)},y=(w,b)=>{d(!1),w.result=b,a&&h()};return{message(w,b){m(c[0],w,b)},group(w){let b={header:w,value:"",full:""};return c.push(b),{message(S,T){m(b,S,T)},error(S){y(b,{status:"error",message:S})},success(S){y(b,{status:"success",message:S})}}},error(w,b){d(!0),De.error(w,{output:t,secondarySymbol:n,spacing:1}),b?.showLog!==!1&&u(),c.splice(1,c.length-1),c[0].value="",c[0].full=""},success(w,b){d(!0),De.success(w,{output:t,secondarySymbol:n,spacing:1}),b?.showLog===!0&&u(),c.splice(1,c.length-1),c[0].value="",c[0].full=""}}},$F=e=>new Ra({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??D.withGuide,r=`${`${t?`${g("gray",A)}
959
+ `:""}${Le(this.state)} `}${e.message}
960
+ `,n=e.placeholder?g("inverse",e.placeholder[0])+g("dim",e.placeholder.slice(1)):g(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:n,o=this.value??"";switch(this.state){case"error":{let s=this.error?` ${g("yellow",this.error)}`:"",a=t?`${g("yellow",A)} `:"",c=t?g("yellow",ne):"";return`${r.trim()}
872
961
  ${a}${i}
873
962
  ${c}${s}
874
- `}case"submit":{let s=o?` ${h("dim",o)}`:"",a=t?h("gray",I):"";return`${r}${a}${s}`}case"cancel":{let s=o?` ${h(["strikethrough","dim"],o)}`:"",a=t?h("gray",I):"";return`${r}${a}${s}${o.trim()?`
875
- ${a}`:""}`}default:{let s=t?`${h("cyan",I)} `:"",a=t?h("cyan",Z):"";return`${r}${s}${i}
963
+ `}case"submit":{let s=o?` ${g("dim",o)}`:"",a=t?g("gray",A):"";return`${r}${a}${s}`}case"cancel":{let s=o?` ${g(["strikethrough","dim"],o)}`:"",a=t?g("gray",A):"";return`${r}${a}${s}${o.trim()?`
964
+ ${a}`:""}`}default:{let s=t?`${g("cyan",A)} `:"",a=t?g("cyan",ne):"";return`${r}${s}${i}
876
965
  ${a}
877
- `}}}}).prompt()});var WE={};T(WE,{detect:()=>dk,install:()=>pk,mergeHooks:()=>jE,meta:()=>uk,uninstall:()=>mk,verify:()=>fk,writeImportLine:()=>GE});import{join as Et}from"node:path";import{homedir as ck}from"node:os";import{existsSync as Zt}from"node:fs";import{fileURLToPath as lk}from"node:url";import{dirname as Os}from"node:path";async function dk(){return Zt(Ni)}async function GE({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Ni,{recursive:!0});let r=`@${wt}`,n="";if(Zt(Pe)&&(n=await t.readFile(Pe,"utf8")),n.includes(r))return{action:"skip",path:Pe,detail:"already imports sigil CLAUDE.md"};let i=n.trim()?`
878
- `:"",o=`${n}${i}${r}
879
- `;return{action:(await te(Pe,o,{dryRun:e})).action,path:Pe,detail:n?"+1 @import line":"new file"}}async function jE({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let u=await t.readFile(ke,"utf8");r=JSON.parse(u)}catch{}let n=Et(UE,"src","hooks"),i=Et(UE,"dist","hooks"),o=Zt(i)?i:n,s={UserPromptSubmit:{hooks:[{type:"command",command:`node ${Et(o,"user-prompt-submit.js")}`,timeout:10,statusMessage:"Searching memory..."}]},PostToolUse:{matcher:"Edit|Write|Bash",hooks:[{type:"command",command:`node ${Et(o,"post-tool-use.js")}`,timeout:10,async:!0}]},Stop:{hooks:[{type:"command",command:`node ${Et(o,"stop.js")}`,timeout:30,async:!0}]},SessionEnd:{hooks:[{type:"command",command:`node ${Et(o,"session-end.js")}`,timeout:10,async:!0}]}},a=Zt(ke);r.hooks=r.hooks||{};let c=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],l=u=>typeof u=="string"&&c.some(m=>u.endsWith(m)||u.includes(`/${m}`));for(let[u,m]of Object.entries(s)){let y=(r.hooks[u]||[]).filter(w=>!w.hooks?.some(x=>l(x.command)));r.hooks[u]=[...y,m]}e||await t.mkdir(Ni,{recursive:!0});let d=JSON.stringify(r,null,2);return{action:(await te(ke,d,{dryRun:e})).action,path:ke,detail:a?"+UserPromptSubmit, +PostToolUse, +Stop, +SessionEnd hooks (other settings preserved)":"new settings.json with sigil hooks"}}async function pk({dryRun:e=!1}={}){let t=[],r=await _l({dryRun:e});r&&t.push({action:r.action,path:r.path,detail:`${r.bytes??0} bytes`});let n=await GE({dryRun:e});n&&t.push(n);let i=await jE({dryRun:e});return i&&t.push(i),{actions:t}}async function fk(){let e=await import("node:fs/promises"),t=`@${wt}`;if(!Zt(Pe))return{installed:!1,reason:"~/.claude/CLAUDE.md missing \u2014 run `sigil init`"};if(!(await e.readFile(Pe,"utf8")).includes(t))return{installed:!1,reason:"@import line missing from ~/.claude/CLAUDE.md"};if(!Zt(ke))return{installed:!1,reason:"~/.claude/settings.json missing \u2014 hooks not registered"};let n;try{n=JSON.parse(await e.readFile(ke,"utf8"))}catch{return{installed:!1,reason:"~/.claude/settings.json is not valid JSON"}}let i=n.hooks||{},s=["UserPromptSubmit","PostToolUse","Stop","SessionEnd"].filter(a=>!(i[a]||[]).some(l=>l.hooks?.some(d=>typeof d.command=="string"&&(d.command.includes("user-prompt-submit.js")||d.command.includes("post-tool-use.js")||d.command.includes("stop.js")||d.command.includes("session-end.js")))));return s.length?{installed:!1,reason:`hooks missing: ${s.join(", ")}`}:{installed:!0}}async function mk({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Zt(Pe)){let n=`@${wt}`,i=await t.readFile(Pe,"utf8"),o=new RegExp(`^${n.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}\\s*\\n?`,"gm"),s=i.replace(o,"");if(s!==i){let a=await te(Pe,s,{dryRun:e});r.push({action:a.action,path:Pe,detail:"-1 @import line"})}else r.push({action:"skip",path:Pe,detail:"@import not present"})}if(Zt(ke)){let n;try{n=JSON.parse(await t.readFile(ke,"utf8"))}catch{return r.push({action:"skip",path:ke,detail:"invalid JSON \u2014 not touched"}),{actions:r}}let i=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],o=a=>typeof a=="string"&&i.some(c=>a.endsWith(c)||a.includes(`/${c}`)),s=!1;for(let a of Object.keys(n.hooks||{})){let c=n.hooks[a],l=c.filter(d=>!d.hooks?.some(p=>o(p.command)));l.length!==c.length&&(s=!0,l.length===0?delete n.hooks[a]:n.hooks[a]=l)}if(s){let a=await te(ke,JSON.stringify(n,null,2),{dryRun:e});r.push({action:a.action,path:ke,detail:"sigil hooks removed (other entries preserved)"})}else r.push({action:"skip",path:ke,detail:"no sigil hooks to remove"})}return{actions:r}}var Ni,Pe,ke,UE,uk,VE=f(()=>{_r();Nn();Ni=Et(ck(),".claude"),Pe=Et(Ni,"CLAUDE.md"),ke=Et(Ni,"settings.json"),UE=Os(Os(Os(Os(lk(import.meta.url))))),uk={id:"claude-code",label:"Claude Code",hint:"hooks + @import \u2014 full auto-injection"}});var XE={};T(XE,{detect:()=>_k,install:()=>bk,meta:()=>wk,resolveServerPath:()=>qE,uninstall:()=>Sk,verify:()=>xk,writeMcpEntry:()=>JE,writeRulesFile:()=>zE});import{join as Ar,dirname as Di}from"node:path";import{homedir as YE}from"node:os";import{existsSync as Tr}from"node:fs";import{fileURLToPath as hk}from"node:url";async function _k(){return Tr(Rs)}function qE(){let e=Ar(KE,"dist","server.js"),t=Ar(KE,"src","server.js");return Tr(e)?e:t}async function JE({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Me,"utf8");r=JSON.parse(o)}catch{}let n=Tr(Me);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[qE(),"--mcp"],env:{DOTENV_CONFIG_PATH:yk}},e||await t.mkdir(Rs,{recursive:!0}),{action:(await te(Me,JSON.stringify(r,null,2),{dryRun:e})).action,path:Me,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}function Ek(){return["---","description: Sigil persistent memory \u2014 consult before answering, save in batches","alwaysApply: true","---",""].join(`
880
- `)+qt()}async function zE({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Di(Ir),{recursive:!0});let r=await te(Ir,Ek(),{dryRun:e});return{action:r.action,path:Ir,detail:`${r.bytes??0} bytes, alwaysApply=true`}}async function bk({dryRun:e=!1}={}){let t=[],r=await JE({dryRun:e});r&&t.push(r);let n=await zE({dryRun:e});return n&&t.push(n),{actions:t}}async function xk(){let e=await import("node:fs/promises");if(!Tr(Me))return{installed:!1,reason:"~/.cursor/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(Me,"utf8"))}catch{return{installed:!1,reason:"~/.cursor/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?Tr(Ir)?{installed:!0}:{installed:!1,reason:"~/.cursor/rules/sigil.mdc missing"}:{installed:!1,reason:"sigil entry missing from ~/.cursor/mcp.json"}}async function Sk({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Tr(Me)){let n;try{n=JSON.parse(await t.readFile(Me,"utf8"))}catch{return r.push({action:"skip",path:Me,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let i=await te(Me,JSON.stringify(n,null,2),{dryRun:e});r.push({action:i.action,path:Me,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:Me,detail:"sigil entry not present"})}return Tr(Ir)&&(e||await t.unlink(Ir),r.push({action:"delete",path:Ir,detail:"sigil rules file removed"})),{actions:r}}var Rs,Me,Ir,gk,yk,KE,wk,ZE=f(()=>{_r();Nn();Rs=Ar(YE(),".cursor"),Me=Ar(Rs,"mcp.json"),Ir=Ar(Rs,"rules","sigil.mdc"),gk=Ar(YE(),".sigil"),yk=Ar(gk,".env"),KE=Di(Di(Di(Di(hk(import.meta.url))))),wk={id:"cursor",label:"Cursor",hint:"global MCP + always-applied rule (no native hooks)"}});var eb=he((T3,QE)=>{"use strict";var Cr=class e extends Error{constructor(t,r,n){super("[ParserError] "+t,r,n),this.name="ParserError",this.code="ParserError",Error.captureStackTrace&&Error.captureStackTrace(this,e)}},Ns=class{constructor(t){this.parser=t,this.buf="",this.returned=null,this.result=null,this.resultTable=null,this.resultArr=null}},Li=class{constructor(){this.pos=0,this.col=0,this.line=0,this.obj={},this.ctx=this.obj,this.stack=[],this._buf="",this.char=null,this.ii=0,this.state=new Ns(this.parseStart)}parse(t){if(t.length===0||t.length==null)return;this._buf=String(t),this.ii=-1,this.char=-1;let r;for(;r===!1||this.nextChar();)r=this.runOne();this._buf=null}nextChar(){return this.char===10&&(++this.line,this.col=-1),++this.ii,this.char=this._buf.codePointAt(this.ii),++this.pos,++this.col,this.haveBuffer()}haveBuffer(){return this.ii<this._buf.length}runOne(){return this.state.parser.call(this,this.state.returned)}finish(){this.char=1114112;let t;do t=this.state.parser,this.runOne();while(this.state.parser!==t);return this.ctx=null,this.state=null,this._buf=null,this.obj}next(t){if(typeof t!="function")throw new Cr("Tried to set state to non-existent state: "+JSON.stringify(t));this.state.parser=t}goto(t){return this.next(t),this.runOne()}call(t,r){r&&this.next(r),this.stack.push(this.state),this.state=new Ns(t)}callNow(t,r){return this.call(t,r),this.runOne()}return(t){if(this.stack.length===0)throw this.error(new Cr("Stack underflow"));t===void 0&&(t=this.state.buf),this.state=this.stack.pop(),this.state.returned=t}returnNow(t){return this.return(t),this.runOne()}consume(){if(this.char===1114112)throw this.error(new Cr("Unexpected end-of-buffer"));this.state.buf+=this._buf[this.ii]}error(t){return t.line=this.line,t.col=this.col,t.pos=this.pos,t}parseStart(){throw new Cr("Must declare a parseStart method")}};Li.END=1114112;Li.Error=Cr;QE.exports=Li});var rb=he((C3,tb)=>{"use strict";tb.exports=e=>{let t=new Date(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Ds=he(($3,nb)=>{"use strict";nb.exports=(e,t)=>{for(t=String(t);t.length<e;)t="0"+t;return t}});var ob=he((O3,ib)=>{"use strict";var Pn=Ds(),uu=class extends Date{constructor(t){super(t+"Z"),this.isFloating=!0}toISOString(){let t=`${this.getUTCFullYear()}-${Pn(2,this.getUTCMonth()+1)}-${Pn(2,this.getUTCDate())}`,r=`${Pn(2,this.getUTCHours())}:${Pn(2,this.getUTCMinutes())}:${Pn(2,this.getUTCSeconds())}.${Pn(3,this.getUTCMilliseconds())}`;return`${t}T${r}`}};ib.exports=e=>{let t=new uu(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var cb=he((R3,ab)=>{"use strict";var sb=Ds(),vk=global.Date,du=class extends vk{constructor(t){super(t),this.isDate=!0}toISOString(){return`${this.getUTCFullYear()}-${sb(2,this.getUTCMonth()+1)}-${sb(2,this.getUTCDate())}`}};ab.exports=e=>{let t=new du(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var ub=he((N3,lb)=>{"use strict";var Ls=Ds(),pu=class extends Date{constructor(t){super(`0000-01-01T${t}Z`),this.isTime=!0}toISOString(){return`${Ls(2,this.getUTCHours())}:${Ls(2,this.getUTCMinutes())}:${Ls(2,this.getUTCSeconds())}.${Ls(3,this.getUTCMilliseconds())}`}};lb.exports=e=>{let t=new pu(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var ks=he((exports,module)=>{"use strict";module.exports=makeParserClass(eb());module.exports.makeParserClass=makeParserClass;var TomlError=class e extends Error{constructor(t){super(t),this.name="TomlError",Error.captureStackTrace&&Error.captureStackTrace(this,e),this.fromTOML=!0,this.wrapped=null}};TomlError.wrap=e=>{let t=new TomlError(e.message);return t.code=e.code,t.wrapped=e,t};module.exports.TomlError=TomlError;var createDateTime=rb(),createDateTimeFloat=ob(),createDate=cb(),createTime=ub(),CTRL_I=9,CTRL_J=10,CTRL_M=13,CTRL_CHAR_BOUNDARY=31,CHAR_SP=32,CHAR_QUOT=34,CHAR_NUM=35,CHAR_APOS=39,CHAR_PLUS=43,CHAR_COMMA=44,CHAR_HYPHEN=45,CHAR_PERIOD=46,CHAR_0=48,CHAR_1=49,CHAR_7=55,CHAR_9=57,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_A=65,CHAR_E=69,CHAR_F=70,CHAR_T=84,CHAR_U=85,CHAR_Z=90,CHAR_LOWBAR=95,CHAR_a=97,CHAR_b=98,CHAR_e=101,CHAR_f=102,CHAR_i=105,CHAR_l=108,CHAR_n=110,CHAR_o=111,CHAR_r=114,CHAR_s=115,CHAR_t=116,CHAR_u=117,CHAR_x=120,CHAR_z=122,CHAR_LCUB=123,CHAR_RCUB=125,CHAR_LSQB=91,CHAR_BSOL=92,CHAR_RSQB=93,CHAR_DEL=127,SURROGATE_FIRST=55296,SURROGATE_LAST=57343,escapes={[CHAR_b]:"\b",[CHAR_t]:" ",[CHAR_n]:`
881
- `,[CHAR_f]:"\f",[CHAR_r]:"\r",[CHAR_QUOT]:'"',[CHAR_BSOL]:"\\"};function isDigit(e){return e>=CHAR_0&&e<=CHAR_9}function isHexit(e){return e>=CHAR_A&&e<=CHAR_F||e>=CHAR_a&&e<=CHAR_f||e>=CHAR_0&&e<=CHAR_9}function isBit(e){return e===CHAR_1||e===CHAR_0}function isOctit(e){return e>=CHAR_0&&e<=CHAR_7}function isAlphaNumQuoteHyphen(e){return e>=CHAR_A&&e<=CHAR_Z||e>=CHAR_a&&e<=CHAR_z||e>=CHAR_0&&e<=CHAR_9||e===CHAR_APOS||e===CHAR_QUOT||e===CHAR_LOWBAR||e===CHAR_HYPHEN}function isAlphaNumHyphen(e){return e>=CHAR_A&&e<=CHAR_Z||e>=CHAR_a&&e<=CHAR_z||e>=CHAR_0&&e<=CHAR_9||e===CHAR_LOWBAR||e===CHAR_HYPHEN}var _type=Symbol("type"),_declared=Symbol("declared"),hasOwnProperty=Object.prototype.hasOwnProperty,defineProperty=Object.defineProperty,descriptor={configurable:!0,enumerable:!0,writable:!0,value:void 0};function hasKey(e,t){return hasOwnProperty.call(e,t)?!0:(t==="__proto__"&&defineProperty(e,"__proto__",descriptor),!1)}var INLINE_TABLE=Symbol("inline-table");function InlineTable(){return Object.defineProperties({},{[_type]:{value:INLINE_TABLE}})}function isInlineTable(e){return e===null||typeof e!="object"?!1:e[_type]===INLINE_TABLE}var TABLE=Symbol("table");function Table(){return Object.defineProperties({},{[_type]:{value:TABLE},[_declared]:{value:!1,writable:!0}})}function isTable(e){return e===null||typeof e!="object"?!1:e[_type]===TABLE}var _contentType=Symbol("content-type"),INLINE_LIST=Symbol("inline-list");function InlineList(e){return Object.defineProperties([],{[_type]:{value:INLINE_LIST},[_contentType]:{value:e}})}function isInlineList(e){return e===null||typeof e!="object"?!1:e[_type]===INLINE_LIST}var LIST=Symbol("list");function List(){return Object.defineProperties([],{[_type]:{value:LIST}})}function isList(e){return e===null||typeof e!="object"?!1:e[_type]===LIST}var _custom;try{let utilInspect=eval("require('util').inspect");_custom=utilInspect.custom}catch(e){}var _inspect=_custom||"inspect",BoxedBigInt=class{constructor(t){try{this.value=global.BigInt.asIntN(64,t)}catch{this.value=null}Object.defineProperty(this,_type,{value:INTEGER})}isNaN(){return this.value===null}toString(){return String(this.value)}[_inspect](){return`[BigInt: ${this.toString()}]}`}valueOf(){return this.value}},INTEGER=Symbol("integer");function Integer(e){let t=Number(e);return Object.is(t,-0)&&(t=0),global.BigInt&&!Number.isSafeInteger(t)?new BoxedBigInt(e):Object.defineProperties(new Number(t),{isNaN:{value:function(){return isNaN(this)}},[_type]:{value:INTEGER},[_inspect]:{value:()=>`[Integer: ${e}]`}})}function isInteger(e){return e===null||typeof e!="object"?!1:e[_type]===INTEGER}var FLOAT=Symbol("float");function Float(e){return Object.defineProperties(new Number(e),{[_type]:{value:FLOAT},[_inspect]:{value:()=>`[Float: ${e}]`}})}function isFloat(e){return e===null||typeof e!="object"?!1:e[_type]===FLOAT}function tomlType(e){let t=typeof e;if(t==="object"){if(e===null)return"null";if(e instanceof Date)return"datetime";if(_type in e)switch(e[_type]){case INLINE_TABLE:return"inline-table";case INLINE_LIST:return"inline-list";case TABLE:return"table";case LIST:return"list";case FLOAT:return"float";case INTEGER:return"integer"}}return t}function makeParserClass(e){class t extends e{constructor(){super(),this.ctx=this.obj=Table()}atEndOfWord(){return this.char===CHAR_NUM||this.char===CTRL_I||this.char===CHAR_SP||this.atEndOfLine()}atEndOfLine(){return this.char===e.END||this.char===CTRL_J||this.char===CTRL_M}parseStart(){if(this.char===e.END)return null;if(this.char===CHAR_LSQB)return this.call(this.parseTableOrList);if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(isAlphaNumQuoteHyphen(this.char))return this.callNow(this.parseAssignStatement);throw this.error(new TomlError(`Unknown character "${this.char}"`))}parseWhitespaceToEOL(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(this.char===CHAR_NUM)return this.goto(this.parseComment);if(this.char===e.END||this.char===CTRL_J)return this.return();throw this.error(new TomlError("Unexpected character, expected only whitespace or comments till end of line"))}parseAssignStatement(){return this.callNow(this.parseAssign,this.recordAssignStatement)}recordAssignStatement(n){let i=this.ctx,o=n.key.pop();for(let s of n.key){if(hasKey(i,s)&&(!isTable(i[s])||i[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));i=i[s]=i[s]||Table()}if(hasKey(i,o))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?i[o]=n.value.valueOf():i[o]=n.value,this.goto(this.parseWhitespaceToEOL)}parseAssign(){return this.callNow(this.parseKeyword,this.recordAssignKeyword)}recordAssignKeyword(n){return this.state.resultTable?this.state.resultTable.push(n):this.state.resultTable=[n],this.goto(this.parseAssignKeywordPreDot)}parseAssignKeywordPreDot(){if(this.char===CHAR_PERIOD)return this.next(this.parseAssignKeywordPostDot);if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.goto(this.parseAssignEqual)}parseAssignKeywordPostDot(){if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.callNow(this.parseKeyword,this.recordAssignKeyword)}parseAssignEqual(){if(this.char===CHAR_EQUALS)return this.next(this.parseAssignPreValue);throw this.error(new TomlError('Invalid character, expected "="'))}parseAssignPreValue(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseValue,this.recordAssignValue)}recordAssignValue(n){return this.returnNow({key:this.state.resultTable,value:n})}parseComment(){do if(this.char===e.END||this.char===CTRL_J)return this.return();while(this.nextChar())}parseTableOrList(){if(this.char===CHAR_LSQB)this.next(this.parseList);else return this.goto(this.parseTable)}parseTable(){return this.ctx=this.obj,this.goto(this.parseTableNext)}parseTableNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseTableMore)}parseTableMore(n){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,n)&&(!isTable(this.ctx[n])||this.ctx[n][_declared]))throw this.error(new TomlError("Can't redefine existing key"));return this.ctx=this.ctx[n]=this.ctx[n]||Table(),this.ctx[_declared]=!0,this.next(this.parseWhitespaceToEOL)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,n))this.ctx=this.ctx[n]=Table();else if(isTable(this.ctx[n]))this.ctx=this.ctx[n];else if(isList(this.ctx[n]))this.ctx=this.ctx[n][this.ctx[n].length-1];else throw this.error(new TomlError("Can't redefine existing key"));return this.next(this.parseTableNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseList(){return this.ctx=this.obj,this.goto(this.parseListNext)}parseListNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseListMore)}parseListMore(n){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,n)||(this.ctx[n]=List()),isInlineList(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline array"));if(isList(this.ctx[n])){let i=Table();this.ctx[n].push(i),this.ctx=i}else throw this.error(new TomlError("Can't redefine an existing key"));return this.next(this.parseListEnd)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,n))this.ctx=this.ctx[n]=Table();else{if(isInlineList(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline array"));if(isInlineTable(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline table"));if(isList(this.ctx[n]))this.ctx=this.ctx[n][this.ctx[n].length-1];else if(isTable(this.ctx[n]))this.ctx=this.ctx[n];else throw this.error(new TomlError("Can't redefine an existing key"))}return this.next(this.parseListNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseListEnd(n){if(this.char===CHAR_RSQB)return this.next(this.parseWhitespaceToEOL);throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseValue(){if(this.char===e.END)throw this.error(new TomlError("Key without value"));if(this.char===CHAR_QUOT)return this.next(this.parseDoubleString);if(this.char===CHAR_APOS)return this.next(this.parseSingleString);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)return this.goto(this.parseNumberSign);if(this.char===CHAR_i)return this.next(this.parseInf);if(this.char===CHAR_n)return this.next(this.parseNan);if(isDigit(this.char))return this.goto(this.parseNumberOrDateTime);if(this.char===CHAR_t||this.char===CHAR_f)return this.goto(this.parseBoolean);if(this.char===CHAR_LSQB)return this.call(this.parseInlineList,this.recordValue);if(this.char===CHAR_LCUB)return this.call(this.parseInlineTable,this.recordValue);throw this.error(new TomlError("Unexpected character, expecting string, number, datetime, boolean, inline array or inline table"))}recordValue(n){return this.returnNow(n)}parseInf(){if(this.char===CHAR_n)return this.next(this.parseInf2);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseInf2(){if(this.char===CHAR_f)return this.state.buf==="-"?this.return(-1/0):this.return(1/0);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseNan(){if(this.char===CHAR_a)return this.next(this.parseNan2);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseNan2(){if(this.char===CHAR_n)return this.return(NaN);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseKeyword(){return this.char===CHAR_QUOT?this.next(this.parseBasicString):this.char===CHAR_APOS?this.next(this.parseLiteralString):this.goto(this.parseBareKey)}parseBareKey(){do{if(this.char===e.END)throw this.error(new TomlError("Key ended without value"));if(isAlphaNumHyphen(this.char))this.consume();else{if(this.state.buf.length===0)throw this.error(new TomlError("Empty bare keys are not allowed"));return this.returnNow()}}while(this.nextChar())}parseSingleString(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiStringMaybe):this.goto(this.parseLiteralString)}parseLiteralString(){do{if(this.char===CHAR_APOS)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}parseLiteralMultiStringMaybe(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiString):this.returnNow()}parseLiteralMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseLiteralMultiStringContent):this.goto(this.parseLiteralMultiStringContent)}parseLiteralMultiStringContent(){do{if(this.char===CHAR_APOS)return this.next(this.parseLiteralMultiEnd);if(this.char===e.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}parseLiteralMultiEnd(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiEnd2):(this.state.buf+="'",this.goto(this.parseLiteralMultiStringContent))}parseLiteralMultiEnd2(){return this.char===CHAR_APOS?this.return():(this.state.buf+="''",this.goto(this.parseLiteralMultiStringContent))}parseDoubleString(){return this.char===CHAR_QUOT?this.next(this.parseMultiStringMaybe):this.goto(this.parseBasicString)}parseBasicString(){do{if(this.char===CHAR_BSOL)return this.call(this.parseEscape,this.recordEscapeReplacement);if(this.char===CHAR_QUOT)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}recordEscapeReplacement(n){return this.state.buf+=n,this.goto(this.parseBasicString)}parseMultiStringMaybe(){return this.char===CHAR_QUOT?this.next(this.parseMultiString):this.returnNow()}parseMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseMultiStringContent):this.goto(this.parseMultiStringContent)}parseMultiStringContent(){do{if(this.char===CHAR_BSOL)return this.call(this.parseMultiEscape,this.recordMultiEscapeReplacement);if(this.char===CHAR_QUOT)return this.next(this.parseMultiEnd);if(this.char===e.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}errorControlCharInString(){let n="\\u00";return this.char<16&&(n+="0"),n+=this.char.toString(16),this.error(new TomlError(`Control characters (codes < 0x1f and 0x7f) are not allowed in strings, use ${n} instead`))}recordMultiEscapeReplacement(n){return this.state.buf+=n,this.goto(this.parseMultiStringContent)}parseMultiEnd(){return this.char===CHAR_QUOT?this.next(this.parseMultiEnd2):(this.state.buf+='"',this.goto(this.parseMultiStringContent))}parseMultiEnd2(){return this.char===CHAR_QUOT?this.return():(this.state.buf+='""',this.goto(this.parseMultiStringContent))}parseMultiEscape(){return this.char===CTRL_M||this.char===CTRL_J?this.next(this.parseMultiTrim):this.char===CHAR_SP||this.char===CTRL_I?this.next(this.parsePreMultiTrim):this.goto(this.parseEscape)}parsePreMultiTrim(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CTRL_M||this.char===CTRL_J)return this.next(this.parseMultiTrim);throw this.error(new TomlError("Can't escape whitespace"))}parseMultiTrim(){return this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M?null:this.returnNow()}parseEscape(){if(this.char in escapes)return this.return(escapes[this.char]);if(this.char===CHAR_u)return this.call(this.parseSmallUnicode,this.parseUnicodeReturn);if(this.char===CHAR_U)return this.call(this.parseLargeUnicode,this.parseUnicodeReturn);throw this.error(new TomlError("Unknown escape character: "+this.char))}parseUnicodeReturn(n){try{let i=parseInt(n,16);if(i>=SURROGATE_FIRST&&i<=SURROGATE_LAST)throw this.error(new TomlError("Invalid unicode, character in range 0xD800 - 0xDFFF is reserved"));return this.returnNow(String.fromCodePoint(i))}catch(i){throw this.error(TomlError.wrap(i))}}parseSmallUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=4)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseLargeUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=8)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseNumberSign(){return this.consume(),this.next(this.parseMaybeSignedInfOrNan)}parseMaybeSignedInfOrNan(){return this.char===CHAR_i?this.next(this.parseInf):this.char===CHAR_n?this.next(this.parseNan):this.callNow(this.parseNoUnder,this.parseNumberIntegerStart)}parseNumberIntegerStart(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberIntegerExponentOrDecimal)):this.goto(this.parseNumberInteger)}parseNumberIntegerExponentOrDecimal(){return this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Integer(this.state.buf))}parseNumberInteger(){if(isDigit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder);if(this.char===CHAR_E||this.char===CHAR_e)return this.consume(),this.next(this.parseNumberExponentSign);if(this.char===CHAR_PERIOD)return this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseNoUnder(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD||this.char===CHAR_E||this.char===CHAR_e)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNoUnderHexOctBinLiteral(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNumberFloat(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberFloat);if(isDigit(this.char))this.consume();else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Float(this.state.buf))}parseNumberExponentSign(){if(isDigit(this.char))return this.goto(this.parseNumberExponent);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.call(this.parseNoUnder,this.parseNumberExponent);else throw this.error(new TomlError("Unexpected character, expected -, + or digit"))}parseNumberExponent(){if(isDigit(this.char))this.consume();else return this.char===CHAR_LOWBAR?this.call(this.parseNoUnder):this.returnNow(Float(this.state.buf))}parseNumberOrDateTime(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberBaseOrDateTime)):this.goto(this.parseNumberOrDateTimeOnly)}parseNumberOrDateTimeOnly(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberInteger);if(isDigit(this.char))this.consume(),this.state.buf.length>4&&this.next(this.parseNumberInteger);else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_HYPHEN?this.goto(this.parseDateTime):this.char===CHAR_COLON?this.goto(this.parseOnlyTimeHour):this.returnNow(Integer(this.state.buf))}parseDateTimeOnly(){if(this.state.buf.length<4){if(isDigit(this.char))return this.consume();if(this.char===CHAR_COLON)return this.goto(this.parseOnlyTimeHour);throw this.error(new TomlError("Expected digit while parsing year part of a date"))}else{if(this.char===CHAR_HYPHEN)return this.goto(this.parseDateTime);throw this.error(new TomlError("Expected hyphen (-) while parsing year part of date"))}}parseNumberBaseOrDateTime(){return this.char===CHAR_b?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerBin)):this.char===CHAR_o?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerOct)):this.char===CHAR_x?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerHex)):this.char===CHAR_PERIOD?this.goto(this.parseNumberInteger):isDigit(this.char)?this.goto(this.parseDateTimeOnly):this.returnNow(Integer(this.state.buf))}parseIntegerHex(){if(isHexit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseIntegerOct(){if(isOctit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseIntegerBin(){if(isBit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseDateTime(){if(this.state.buf.length<4)throw this.error(new TomlError("Years less than 1000 must be zero padded to four characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseDateMonth)}parseDateMonth(){if(this.char===CHAR_HYPHEN){if(this.state.buf.length<2)throw this.error(new TomlError("Months less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseDateDay)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseDateDay(){if(this.char===CHAR_T||this.char===CHAR_SP){if(this.state.buf.length<2)throw this.error(new TomlError("Days less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseStartTimeHour)}else{if(this.atEndOfWord())return this.returnNow(createDate(this.state.result+"-"+this.state.buf));if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}}parseStartTimeHour(){return this.atEndOfWord()?this.returnNow(createDate(this.state.result)):this.goto(this.parseTimeHour)}parseTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result+="T"+this.state.buf,this.state.buf="",this.next(this.parseTimeMin)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeSec);throw this.error(new TomlError("Incomplete datetime"))}}parseTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeZoneOrFraction)}else throw this.error(new TomlError("Incomplete datetime"))}parseOnlyTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeMin)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeSec);throw this.error(new TomlError("Incomplete time"))}}parseOnlyTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.next(this.parseOnlyTimeFractionMaybe)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeFractionMaybe(){if(this.state.result+=":"+this.state.buf,this.char===CHAR_PERIOD)this.state.buf="",this.next(this.parseOnlyTimeFraction);else return this.return(createTime(this.state.result))}parseOnlyTimeFraction(){if(isDigit(this.char))this.consume();else if(this.atEndOfWord()){if(this.state.buf.length===0)throw this.error(new TomlError("Expected digit in milliseconds"));return this.returnNow(createTime(this.state.result+"."+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}parseTimeZoneOrFraction(){if(this.char===CHAR_PERIOD)this.consume(),this.next(this.parseDateTimeFraction);else if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}parseDateTimeFraction(){if(isDigit(this.char))this.consume();else{if(this.state.buf.length===1)throw this.error(new TomlError("Expected digit in milliseconds"));if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}}parseTimeZoneHour(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.next(this.parseTimeZoneSep)}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseTimeZoneSep(){if(this.char===CHAR_COLON)this.consume(),this.next(this.parseTimeZoneMin);else throw this.error(new TomlError("Unexpected character in datetime, expected colon"))}parseTimeZoneMin(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.return(createDateTime(this.state.result+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseBoolean(){if(this.char===CHAR_t)return this.consume(),this.next(this.parseTrue_r);if(this.char===CHAR_f)return this.consume(),this.next(this.parseFalse_a)}parseTrue_r(){if(this.char===CHAR_r)return this.consume(),this.next(this.parseTrue_u);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_u(){if(this.char===CHAR_u)return this.consume(),this.next(this.parseTrue_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_e(){if(this.char===CHAR_e)return this.return(!0);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_a(){if(this.char===CHAR_a)return this.consume(),this.next(this.parseFalse_l);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_l(){if(this.char===CHAR_l)return this.consume(),this.next(this.parseFalse_s);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_s(){if(this.char===CHAR_s)return this.consume(),this.next(this.parseFalse_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_e(){if(this.char===CHAR_e)return this.return(!1);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseInlineList(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===e.END)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_NUM?this.call(this.parseComment):this.char===CHAR_RSQB?this.return(this.state.resultArr||InlineList()):this.callNow(this.parseValue,this.recordInlineListValue)}recordInlineListValue(n){if(this.state.resultArr){let i=this.state.resultArr[_contentType],o=tomlType(n);if(i!==o)throw this.error(new TomlError(`Inline lists must be a single type, not a mix of ${i} and ${o}`))}else this.state.resultArr=InlineList(tomlType(n));return isFloat(n)||isInteger(n)?this.state.resultArr.push(n.valueOf()):this.state.resultArr.push(n),this.goto(this.parseInlineListNext)}parseInlineListNext(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CHAR_COMMA)return this.next(this.parseInlineList);if(this.char===CHAR_RSQB)return this.goto(this.parseInlineList);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}parseInlineTable(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===e.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_RCUB?this.return(this.state.resultTable||InlineTable()):(this.state.resultTable||(this.state.resultTable=InlineTable()),this.callNow(this.parseAssign,this.recordInlineTableValue))}recordInlineTableValue(n){let i=this.state.resultTable,o=n.key.pop();for(let s of n.key){if(hasKey(i,s)&&(!isTable(i[s])||i[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));i=i[s]=i[s]||Table()}if(hasKey(i,o))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?i[o]=n.value.valueOf():i[o]=n.value,this.goto(this.parseInlineTableNext)}parseInlineTableNext(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===e.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));if(this.char===CHAR_COMMA)return this.next(this.parseInlineTable);if(this.char===CHAR_RCUB)return this.goto(this.parseInlineTable);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}}return t}});var Ps=he((D3,db)=>{"use strict";db.exports=Ik;function Ik(e,t){if(e.pos==null||e.line==null)return e;let r=e.message;if(r+=` at row ${e.line+1}, col ${e.col+1}, pos ${e.pos}:
882
- `,t&&t.split){let n=t.split(/\n/),i=String(Math.min(n.length,e.line+3)).length,o=" ";for(;o.length<i;)o+=" ";for(let s=Math.max(0,e.line-1);s<Math.min(n.length,e.line+2);++s){let a=String(s+1);if(a.length<i&&(a=" "+a),e.line===s){r+=a+"> "+n[s]+`
883
- `,r+=o+" ";for(let c=0;c<e.col;++c)r+=" ";r+=`^
884
- `}else r+=a+": "+n[s]+`
885
- `}}return e.message=r+`
886
- `,e}});var fb=he((L3,pb)=>{"use strict";pb.exports=Ck;var Ak=ks(),Tk=Ps();function Ck(e){global.Buffer&&global.Buffer.isBuffer(e)&&(e=e.toString("utf8"));let t=new Ak;try{return t.parse(e),t.finish()}catch(r){throw Tk(r,e)}}});var gb=he((k3,hb)=>{"use strict";hb.exports=Ok;var $k=ks(),mb=Ps();function Ok(e,t){t||(t={});let r=0,n=t.blocksize||40960,i=new $k;return new Promise((s,a)=>{setImmediate(o,r,n,s,a)});function o(s,a,c,l){if(s>=e.length)try{return c(i.finish())}catch(d){return l(mb(d,e))}try{i.parse(e.slice(s,s+a)),setImmediate(o,s+a,a,c,l)}catch(d){l(mb(d,e))}}}});var _b=he((P3,wb)=>{"use strict";wb.exports=Nk;var Rk=hx("stream"),yb=ks();function Nk(e){return e?Dk(e):Lk(e)}function Dk(e){let t=new yb;return e.setEncoding("utf8"),new Promise((r,n)=>{let i,o=!1,s=!1;function a(){if(o=!0,!i)try{r(t.finish())}catch(d){n(d)}}function c(d){s=!0,n(d)}e.once("end",a),e.once("error",c),l();function l(){i=!0;let d;for(;(d=e.read())!==null;)try{t.parse(d)}catch(p){return c(p)}if(i=!1,o)return a();s||e.once("readable",l)}})}function Lk(){let e=new yb;return new Rk.Transform({objectMode:!0,transform(t,r,n){try{e.parse(t.toString(r))}catch(i){this.emit("error",i)}n()},flush(t){try{this.push(e.finish())}catch(r){this.emit("error",r)}t()}})}});var Eb=he((M3,ki)=>{"use strict";ki.exports=fb();ki.exports.async=gb();ki.exports.stream=_b();ki.exports.prettyError=Ps()});var Cb=he((F3,hu)=>{"use strict";hu.exports=kk;hu.exports.value=mu;function kk(e){if(e===null)throw $r("null");if(e===void 0)throw $r("undefined");if(typeof e!="object")throw $r(typeof e);if(typeof e.toJSON=="function"&&(e=e.toJSON()),e==null)return null;let t=ve(e);if(t!=="table")throw $r(t);return fu("","",e)}function $r(e){return new Error("Can only stringify objects, not "+e)}function Pk(){return new Error("Array values can't have mixed types")}function bb(e){return Object.keys(e).filter(t=>xb(e[t]))}function Mk(e){return Object.keys(e).filter(t=>!xb(e[t]))}function Ms(e){let t=Array.isArray(e)?[]:Object.prototype.hasOwnProperty.call(e,"__proto__")?{["__proto__"]:void 0}:{};for(let r of Object.keys(e))e[r]&&typeof e[r].toJSON=="function"&&!("toISOString"in e[r])?t[r]=e[r].toJSON():t[r]=e[r];return t}function fu(e,t,r){r=Ms(r);var n,i;n=bb(r),i=Mk(r);var o=[],s=t||"";n.forEach(c=>{var l=ve(r[c]);l!=="undefined"&&l!=="null"&&o.push(s+Fs(c)+" = "+Ib(r[c],!0))}),o.length>0&&o.push("");var a=e&&n.length>0?t+" ":"";return i.forEach(c=>{o.push(qk(e,a,c,r[c]))}),o.join(`
887
- `)}function xb(e){switch(ve(e)){case"undefined":case"null":case"integer":case"nan":case"float":case"boolean":case"string":case"datetime":return!0;case"array":return e.length===0||ve(e[0])!=="table";case"table":return Object.keys(e).length===0;default:return!1}}function ve(e){return e===void 0?"undefined":e===null?"null":typeof e=="bigint"||Number.isInteger(e)&&!Object.is(e,-0)?"integer":typeof e=="number"?"float":typeof e=="boolean"?"boolean":typeof e=="string"?"string":"toISOString"in e?isNaN(e)?"undefined":"datetime":Array.isArray(e)?"array":"table"}function Fs(e){var t=String(e);return/^[-A-Za-z0-9_]+$/.test(t)?t:Sb(t)}function Sb(e){return'"'+vb(e).replace(/"/g,'\\"')+'"'}function Fk(e){return"'"+e+"'"}function Hk(e,t){for(;t.length<e;)t="0"+t;return t}function vb(e){return e.replace(/\\/g,"\\\\").replace(/[\b]/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/([\u0000-\u001f\u007f])/,t=>"\\u"+Hk(4,t.codePointAt(0).toString(16)))}function Bk(e){let t=e.split(/\n/).map(r=>vb(r).replace(/"(?="")/g,'\\"')).join(`
888
- `);return t.slice(-1)==='"'&&(t+=`\\
889
- `),`"""
890
- `+t+'"""'}function Ib(e,t){let r=ve(e);return r==="string"&&(t&&/\n/.test(e)?r="string-multiline":!/[\b\t\n\f\r']/.test(e)&&/"/.test(e)&&(r="string-literal")),mu(e,r)}function mu(e,t){switch(t||(t=ve(e)),t){case"string-multiline":return Bk(e);case"string":return Sb(e);case"string-literal":return Fk(e);case"integer":return Ab(e);case"float":return Uk(e);case"boolean":return Gk(e);case"datetime":return jk(e);case"array":return Kk(e.filter(r=>ve(r)!=="null"&&ve(r)!=="undefined"&&ve(r)!=="nan"));case"table":return Yk(e);default:throw $r(t)}}function Ab(e){return String(e).replace(/\B(?=(\d{3})+(?!\d))/g,"_")}function Uk(e){if(e===1/0)return"inf";if(e===-1/0)return"-inf";if(Object.is(e,NaN))return"nan";if(Object.is(e,-0))return"-0.0";var t=String(e).split("."),r=t[0],n=t[1]||0;return Ab(r)+"."+n}function Gk(e){return String(e)}function jk(e){return e.toISOString()}function Wk(e){return e==="float"||e==="integer"}function Vk(e){var t=ve(e[0]);return e.every(r=>ve(r)===t)?t:e.every(r=>Wk(ve(r)))?"float":"mixed"}function Tb(e){let t=Vk(e);if(t==="mixed")throw Pk();return t}function Kk(e){e=Ms(e);let t=Tb(e);var r="[",n=e.map(i=>mu(i,t));return n.join(", ").length>60||/\n/.test(n)?r+=`
891
- `+n.join(`,
892
- `)+`
893
- `:r+=" "+n.join(", ")+(n.length>0?" ":""),r+"]"}function Yk(e){e=Ms(e);var t=[];return Object.keys(e).forEach(r=>{t.push(Fs(r)+" = "+Ib(e[r],!1))}),"{ "+t.join(", ")+(t.length>0?" ":"")+"}"}function qk(e,t,r,n){var i=ve(n);if(i==="array")return Jk(e,t,r,n);if(i==="table")return zk(e,t,r,n);throw $r(i)}function Jk(e,t,r,n){n=Ms(n),Tb(n);var i=ve(n[0]);if(i!=="table")throw $r(i);var o=e+Fs(r),s="";return n.forEach(a=>{s.length>0&&(s+=`
894
- `),s+=t+"[["+o+`]]
895
- `,s+=fu(o+".",t,a)}),s}function zk(e,t,r,n){var i=e+Fs(r),o="";return bb(n).length>0&&(o+=t+"["+i+`]
896
- `),o+fu(i+".",t,n)}});var $b=he(gu=>{"use strict";gu.parse=Eb();gu.stringify=Cb()});var kb={};T(kb,{detect:()=>eP,install:()=>rP,meta:()=>Qk,resolveServerPath:()=>Nb,uninstall:()=>iP,verify:()=>nP,writeAgentsFile:()=>Lb,writeMcpEntry:()=>Db});import{join as Mn,dirname as Hs}from"node:path";import{homedir as Rb}from"node:os";import{existsSync as Qt}from"node:fs";import{fileURLToPath as Xk}from"node:url";async function eP(){return Qt(Pi)}function Nb(){let e=Mn(Ob,"dist","server.js"),t=Mn(Ob,"src","server.js");return Qt(e)?e:t}async function Db({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Fe,"utf8");r=Fn.default.parse(o)}catch{}let n=Qt(Fe);return r.mcp_servers=r.mcp_servers||{},r.mcp_servers.sigil={command:process.execPath,args:[Nb(),"--mcp"],env:{DOTENV_CONFIG_PATH:Zk}},e||await t.mkdir(Pi,{recursive:!0}),{action:(await te(Fe,Fn.default.stringify(r),{dryRun:e})).action,path:Fe,detail:n?"+[mcp_servers.sigil] (other keys preserved)":"new config.toml with sigil MCP entry"}}function tP(){return[Bs,qt(),Hn].join(`
897
- `)}async function Lb({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Pi,{recursive:!0});let r="";Qt(He)&&(r=await t.readFile(He,"utf8"));let n=tP(),i,o,s=r.indexOf(Bs),a=r.indexOf(Hn);if(s!==-1&&a!==-1&&a>s){let l=r.slice(0,s),d=r.slice(a+Hn.length);i=`${l}${n}${d}`,o="sigil block replaced (other content preserved)"}else if(!r.trim())i=`${n}
898
- `,o="new AGENTS.md with sigil block";else{let l=r.endsWith(`
899
- `)?`
900
- `:`
901
-
902
- `;i=`${r}${l}${n}
903
- `,o="appended sigil block (existing content preserved)"}return i===r?{action:"skip",path:He,detail:"block already up to date"}:{action:(await te(He,i,{dryRun:e})).action,path:He,detail:o}}async function rP({dryRun:e=!1}={}){let t=[],r=await Db({dryRun:e});r&&t.push(r);let n=await Lb({dryRun:e});return n&&t.push(n),{actions:t}}async function nP(){let e=await import("node:fs/promises");if(!Qt(Fe))return{installed:!1,reason:"~/.codex/config.toml missing"};let t;try{t=Fn.default.parse(await e.readFile(Fe,"utf8"))}catch(n){return{installed:!1,reason:`~/.codex/config.toml unparseable: ${n.message}`}}if(!t.mcp_servers?.sigil)return{installed:!1,reason:"[mcp_servers.sigil] missing from ~/.codex/config.toml"};if(!Qt(He))return{installed:!1,reason:"~/.codex/AGENTS.md missing"};let r=await e.readFile(He,"utf8");return!r.includes(Bs)||!r.includes(Hn)?{installed:!1,reason:"sigil block markers missing from ~/.codex/AGENTS.md"}:{installed:!0}}async function iP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Qt(Fe)){let n;try{n=Fn.default.parse(await t.readFile(Fe,"utf8"))}catch(i){return r.push({action:"skip",path:Fe,detail:`unparseable \u2014 not touched: ${i.message}`}),{actions:r}}if(n.mcp_servers?.sigil){delete n.mcp_servers.sigil,Object.keys(n.mcp_servers).length===0&&delete n.mcp_servers;let i=await te(Fe,Fn.default.stringify(n),{dryRun:e});r.push({action:i.action,path:Fe,detail:"-[mcp_servers.sigil]"})}else r.push({action:"skip",path:Fe,detail:"[mcp_servers.sigil] not present"})}if(Qt(He)){let n=await t.readFile(He,"utf8"),i=n.indexOf(Bs),o=n.indexOf(Hn);if(i!==-1&&o!==-1&&o>i){let s=n.slice(0,i).replace(/\n+$/,""),a=n.slice(o+Hn.length).replace(/^\n+/,""),c=s&&a?`${s}
904
-
905
- ${a}`:s||a,l=await te(He,c.endsWith(`
906
- `)?c:`${c}
907
- `,{dryRun:e});r.push({action:l.action,path:He,detail:"sigil block removed (other content preserved)"})}else r.push({action:"skip",path:He,detail:"sigil block not present"})}return{actions:r}}var Fn,Pi,Fe,He,Zk,Ob,Bs,Hn,Qk,Pb=f(()=>{Fn=Ys($b(),1);_r();Nn();Pi=Mn(Rb(),".codex"),Fe=Mn(Pi,"config.toml"),He=Mn(Pi,"AGENTS.md"),Zk=Mn(Rb(),".sigil",".env"),Ob=Hs(Hs(Hs(Hs(Xk(import.meta.url))))),Bs="<!-- BEGIN sigil -->",Hn="<!-- END sigil -->",Qk={id:"codex-cli",label:"Codex CLI",hint:"TOML config + AGENTS.md (no native hooks)"}});var Gb={};T(Gb,{detect:()=>cP,install:()=>lP,meta:()=>aP,resolveServerPath:()=>Hb,uninstall:()=>dP,verify:()=>uP,writeMcpEntry:()=>Bb,writeSteeringFile:()=>Ub});import{join as Un,dirname as Bn}from"node:path";import{homedir as Fb}from"node:os";import{existsSync as Rr}from"node:fs";import{fileURLToPath as oP}from"node:url";async function cP(){return Rr(yu)}function Hb(){let e=Un(Mb,"dist","server.js"),t=Un(Mb,"src","server.js");return Rr(e)?e:t}async function Bb({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Oe,"utf8");r=JSON.parse(o)}catch{}let n=Rr(Oe);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[Hb(),"--mcp"],env:{DOTENV_CONFIG_PATH:sP}},e||await t.mkdir(Bn(Oe),{recursive:!0}),{action:(await te(Oe,JSON.stringify(r,null,2),{dryRun:e})).action,path:Oe,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}async function Ub({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Bn(Or),{recursive:!0});let r=await te(Or,qt(),{dryRun:e});return{action:r.action,path:Or,detail:`${r.bytes??0} bytes, steering (always-on)`}}async function lP({dryRun:e=!1}={}){let t=[],r=await Bb({dryRun:e});r&&t.push(r);let n=await Ub({dryRun:e});return n&&t.push(n),{actions:t}}async function uP(){let e=await import("node:fs/promises");if(!Rr(Oe))return{installed:!1,reason:"~/.kiro/settings/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(Oe,"utf8"))}catch{return{installed:!1,reason:"~/.kiro/settings/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?Rr(Or)?{installed:!0}:{installed:!1,reason:"~/.kiro/steering/sigil.md missing"}:{installed:!1,reason:"sigil entry missing from ~/.kiro/settings/mcp.json"}}async function dP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Rr(Oe)){let n;try{n=JSON.parse(await t.readFile(Oe,"utf8"))}catch{return r.push({action:"skip",path:Oe,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let i=await te(Oe,JSON.stringify(n,null,2),{dryRun:e});r.push({action:i.action,path:Oe,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:Oe,detail:"sigil entry not present"})}return Rr(Or)&&(e||await t.unlink(Or),r.push({action:"delete",path:Or,detail:"sigil steering file removed"})),{actions:r}}var yu,Oe,Or,sP,Mb,aP,jb=f(()=>{_r();Nn();yu=Un(Fb(),".kiro"),Oe=Un(yu,"settings","mcp.json"),Or=Un(yu,"steering","sigil.md"),sP=Un(Fb(),".sigil",".env"),Mb=Bn(Bn(Bn(Bn(oP(import.meta.url))))),aP={id:"kiro",label:"Kiro",hint:"MCP + steering file (steering auto-applies)"}});var Kb={};T(Kb,{detect:()=>yP,install:()=>EP,meta:()=>gP,setMemoryProviderInYaml:()=>_u,uninstall:()=>bP,verify:()=>xP});import{join as Nr,dirname as Mi}from"node:path";import{homedir as pP}from"node:os";import{existsSync as pt}from"node:fs";import{fileURLToPath as fP}from"node:url";async function yP(){return pt(Vb)}function _u(e,t){let r=e.split(`
908
- `),n=!1,i=!1;for(let o=0;o<r.length;o++){let s=r[o];if(/^[A-Za-z_][\w-]*:\s*$/.test(s)||/^[A-Za-z_][\w-]*:\s/.test(s)){n=/^memory:\s*$/.test(s);continue}if(!n)continue;let a=s.match(/^(\s+provider:\s*)(['"]?)([^'"\n]*)\2(\s*(#.*)?)$/);if(a){let[,c,,l,d]=a;if(l===t)return{content:e,changed:!1};r[o]=`${c}'${t}'${d}`,i=!0;break}}return{content:r.join(`
909
- `),changed:i}}async function wP({dryRun:e}){let t=await import("node:fs/promises");if(!pt(wu))throw new Error(`Plugin source missing at ${wu} \u2014 is this Sigil install complete? \`integrations/hermes/plugin/\` must ship with the package.`);return e?{action:pt(Be)?"modify":"create"}:(await t.mkdir(Mi(Be),{recursive:!0}),pt(Be)&&await t.rm(Be,{recursive:!0,force:!0}),await t.cp(wu,Be,{recursive:!0}),{action:"create"})}async function _P({dryRun:e,value:t}){let r=await import("node:fs/promises");if(!pt(tt))return{action:"skip",detail:"config.yaml not present \u2014 set memory.provider manually"};let n=await r.readFile(tt,"utf8"),{content:i,changed:o}=_u(n,t);return o?(e||await r.writeFile(tt,i,"utf8"),{action:"modify",detail:`memory.provider \u2192 '${t}'`}):{action:"skip",detail:`memory.provider already '${t}'`}}async function EP({dryRun:e=!1}={}){let t=[],r=await wP({dryRun:e});t.push({action:r.action,path:Be,detail:"plugin tree (__init__.py, plugin.yaml, README.md)"});let n=await _P({dryRun:e,value:"sigil"});return t.push({action:n.action,path:tt,detail:n.detail}),{actions:t}}async function bP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(pt(Be)?(e||await t.rm(Be,{recursive:!0,force:!0}),r.push({action:"delete",path:Be,detail:"plugin directory removed"})):r.push({action:"skip",path:Be,detail:"plugin not present"}),pt(tt)){let n=await t.readFile(tt,"utf8"),i=n.match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),s=(i?i[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];if(s==="sigil"){let{content:a,changed:c}=_u(n,"");c&&!e&&await t.writeFile(tt,a,"utf8"),r.push({action:"modify",path:tt,detail:"memory.provider \u2192 '' (sigil cleared)"})}else r.push({action:"skip",path:tt,detail:`memory.provider is '${s??""}' (not sigil) \u2014 not touched`})}return{actions:r}}async function xP(){let e=await import("node:fs/promises");if(!pt(Be))return{installed:!1,reason:"plugin missing at ~/.hermes/hermes-agent/plugins/memory/sigil/"};if(!pt(Nr(Be,"__init__.py")))return{installed:!1,reason:"plugin dir present but __init__.py missing"};if(!pt(tt))return{installed:!1,reason:"~/.hermes/config.yaml missing"};let r=(await e.readFile(tt,"utf8")).match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),i=(r?r[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];return i!=="sigil"?{installed:!1,reason:`memory.provider in config.yaml is '${i??""}' (expected 'sigil')`}:{installed:!0}}var Wb,mP,Vb,Be,tt,hP,wu,gP,Yb=f(()=>{Wb=Nr(pP(),".hermes"),mP=Nr(Wb,"hermes-agent"),Vb=Nr(mP,"plugins","memory"),Be=Nr(Vb,"sigil"),tt=Nr(Wb,"config.yaml"),hP=Mi(Mi(Mi(Mi(fP(import.meta.url))))),wu=Nr(hP,"integrations","hermes","plugin"),gP={id:"hermes",label:"Hermes",hint:"Python memory-provider plugin + config.yaml flip"}});var Us={};T(Us,{listClients:()=>vP});async function vP(){return await Promise.all(Object.entries(SP).map(async([t,r])=>{let n=await r();if(!n.meta||typeof n.detect!="function"||typeof n.install!="function"||typeof n.uninstall!="function"||typeof n.verify!="function")throw new Error(`Client "${t}" is missing the install contract \u2014 expected exports: meta, detect, install, uninstall, verify`);return{...n.meta,detect:n.detect,install:n.install,uninstall:n.uninstall,verify:n.verify}}))}var SP,Gs=f(()=>{SP={"claude-code":()=>Promise.resolve().then(()=>(VE(),WE)),cursor:()=>Promise.resolve().then(()=>(ZE(),XE)),"codex-cli":()=>Promise.resolve().then(()=>(Pb(),kb)),kiro:()=>Promise.resolve().then(()=>(jb(),Gb)),hermes:()=>Promise.resolve().then(()=>(Yb(),Kb))}});var qb={};T(qb,{closeEditingWindows:()=>CP,getLifecycleStats:()=>$P,promoteFreshFacts:()=>TP});async function TP(){let{rows:e}=await _.raw(`
966
+ `}}}}).prompt()});var Bx={};v(Bx,{closeEditingWindows:()=>kF,getLifecycleStats:()=>PF,promoteFreshFacts:()=>LF});async function LF(){let{rows:e}=await E.raw(`
910
967
  UPDATE fact_lifecycle fl
911
968
  SET stage = 'stable',
912
969
  stage_entered_at = NOW()
913
970
  FROM fact f
914
971
  WHERE fl.fact_id = f.id
915
972
  AND fl.stage = 'fresh'
916
- AND fl.stage_entered_at < NOW() - INTERVAL '${IP} hours'
973
+ AND fl.stage_entered_at < NOW() - INTERVAL '${NF} hours'
917
974
  AND (f.importance = 'vital' OR fl.access_count > 0)
918
975
  RETURNING fl.fact_id
919
- `);return e.length}async function CP(){let{rows:e}=await _.raw(`
976
+ `);return e.length}async function kF(){let{rows:e}=await E.raw(`
920
977
  UPDATE fact_lifecycle
921
978
  SET stage = 'stable',
922
979
  stage_entered_at = NOW()
923
980
  WHERE stage = 'editing'
924
- AND stage_entered_at < NOW() - INTERVAL '${AP} minutes'
981
+ AND stage_entered_at < NOW() - INTERVAL '${DF} minutes'
925
982
  RETURNING fact_id
926
- `);return e.length}async function $P(){let e=await _("fact_lifecycle").select("stage").count({count:"*"}).groupBy("stage"),t={fresh:0,stable:0,editing:0};for(let r of e)t[r.stage]=Number(r.count);return t}var IP,AP,Jb=f(()=>{D();IP=1,AP=30});import{resolve as Zb,dirname as zb,join as ue}from"node:path";import{fileURLToPath as OP}from"node:url";import{homedir as bt}from"node:os";import{existsSync as xt}from"node:fs";import{execSync as Dr,spawn as RP}from"node:child_process";import{randomBytes as NP}from"node:crypto";import{config as Su}from"dotenv";var DP=zb(zb(OP(import.meta.url))),bu=Zb(process.cwd(),".env"),Eu=ue(bt(),".sigil",".env");xt(bu)&&Su({path:bu,quiet:!0});xt(Eu)&&Eu!==bu&&Su({path:Eu,quiet:!0});process.env.SIGIL_AGENT||(process.env.SIGIL_AGENT="cli");var[er,...LP]=process.argv.slice(2),Qb=`sigil \u2014 Persistent memory for your Claude sessions
983
+ `);return e.length}async function PF(){let e=await E("fact_lifecycle").select("stage").count({count:"*"}).groupBy("stage"),t={fresh:0,stable:0,editing:0};for(let r of e)t[r.stage]=Number(r.count);return t}var NF,DF,Hx=f(()=>{N();NF=1,DF=30});import{resolve as jx,dirname as Ux,join as me}from"node:path";import{fileURLToPath as MF}from"node:url";import{homedir as Nt}from"node:os";import{existsSync as Dt}from"node:fs";import{execSync as en,spawn as FF}from"node:child_process";import{randomBytes as BF}from"node:crypto";import{config as Bd}from"dotenv";var HF=Ux(Ux(MF(import.meta.url))),Md=jx(process.cwd(),".env"),Pd=me(Nt(),".sigil",".env");Dt(Md)&&Bd({path:Md,quiet:!0});Dt(Pd)&&Pd!==Md&&Bd({path:Pd,quiet:!0});process.env.SIGIL_AGENT||(process.env.SIGIL_AGENT="cli");var[mr,...UF]=process.argv.slice(2),Wx=`sigil \u2014 Persistent memory for your Claude sessions
927
984
 
928
985
  Usage:
929
986
  sigil <command> [options]
@@ -956,13 +1013,14 @@ Commands:
956
1013
  Options:
957
1014
  --help Show this help message
958
1015
 
959
- Run sigil <command> --help for command-specific options.`;(er==="--help"||er==="-h")&&(console.log(Qb),process.exit(0));er||(await kP(),process.exit(0));async function kP(){let{connectOrStartDaemon:e}=await Promise.resolve().then(()=>(Ne(),nt)),{getGuiToken:t}=await Promise.resolve().then(()=>(Ki(),oa));process.stderr.write(`[sigil] starting daemon\u2026
960
- `);let r=await e({quiet:!0}),{data:n}=await r.call("ping",{});await r.close();let{default:i}=await Promise.resolve().then(()=>(R(),X)),o=await t(),s=`http://${i.http.host}:${i.http.port}/?t=${o}`;console.log(""),console.log(" Sigil is running on this machine."),console.log(""),console.log(` PID: ${n.pid}`),console.log(` GUI: ${s}`),console.log(""),console.log(" Opening the dashboard in your browser\u2026"),console.log(" (Press Ctrl+C at any time. The daemon stays running.)"),console.log("");let a=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open",{spawn:c}=await import("node:child_process");try{c(a,[s],{detached:!0,stdio:"ignore"}).unref()}catch{}}var PP={init:tx,uninstall:BP,doctor:UP,remember:zP,ingest:eM,search:tM,context:rM,status:nM,facts:qP,forget:JP,namespace:jP,session:WP,pod:VP,export:GP,maintain:iM,migrate:oM,reset:sM,register:XP,why:lM,kind:uM,daemon:MP,pair:FP,join:HP};async function MP(e){let{runDaemon:t}=await Promise.resolve().then(()=>(j_(),G_));return t(e)}async function FP(e){let{runPair:t}=await Promise.resolve().then(()=>(K_(),V_));return t(e)}async function HP(e){let{runJoin:t}=await Promise.resolve().then(()=>(q_(),Y_));return t(e)}var ex=PP[er];ex||(console.error(`Unknown command: ${er}
961
- `),console.log(Qb),process.exit(1));if(er!=="doctor"&&er!=="export"&&er!=="register")try{let{getUnackedErrorCount:e}=await Promise.resolve().then(()=>($i(),Ci)),t=await e();t>0&&process.stderr.write(`\u26A0 Sigil: ${t} unacked hook error${t>1?"s":""} \u2014 run \`sigil doctor\` for details
962
- `)}catch{}try{await ex(LP)}catch(e){let t=e.message||String(e);((e.code||"")==="3D000"||/database .* does not exist/i.test(t))&&(console.error("Error: the Sigil database does not exist yet on this Postgres server."),console.error(""),console.error("Run `sigil init` \u2014 it will create the database, the sigil_app user, and"),console.error("install pgvector for you (one-shot, requires Postgres admin credentials)."),console.error(""),console.error("Underlying error: "+t.split(`
1016
+ Run sigil <command> --help for command-specific options.`;(mr==="--help"||mr==="-h")&&(console.log(Wx),process.exit(0));mr||(await GF(),process.exit(0));async function GF(){let{connectOrStartDaemon:e}=await Promise.resolve().then(()=>(Pe(),lt)),{getGuiToken:t}=await Promise.resolve().then(()=>(Lo(),rc)),{canOpenBrowser:r,openBrowser:n}=await Promise.resolve().then(()=>(ap(),sp));process.stderr.write(`[sigil] starting daemon\u2026
1017
+ `);let i=await e({quiet:!0}),{data:o}=await i.call("ping",{}),{default:s}=await Promise.resolve().then(()=>($(),re)),a=await t(),c=`http://${s.http.host}:${s.http.port}/?t=${a}`;if(!r()){let l=!1;try{l=(await i.call("onboardingState",{})).data?.setupComplete}catch{}return await i.close(),console.log(""),console.log(` Sigil is running on this machine (pid ${o.pid}).`),console.log(` GUI URL (open from a machine with a browser): ${c}`),l?void 0:(console.log(` No display detected \u2014 continuing setup in the terminal.
1018
+ `),Hd([]))}await i.close(),console.log(""),console.log(" Sigil is running on this machine."),console.log(""),console.log(` PID: ${o.pid}`),console.log(` GUI: ${c}`),console.log(""),console.log(" Opening the dashboard in your browser\u2026"),console.log(" (Press Ctrl+C at any time. The daemon stays running.)"),console.log(""),n(c)}var jF={init:Hd,uninstall:qF,doctor:JF,remember:iB,ingest:cB,search:lB,context:uB,status:dB,facts:rB,forget:nB,namespace:XF,session:ZF,pod:QF,export:zF,maintain:pB,migrate:fB,reset:mB,register:oB,why:yB,kind:wB,daemon:WF,service:VF,pair:KF,join:YF};async function WF(e){let{runDaemon:t}=await Promise.resolve().then(()=>(Fb(),Mb));return t(e)}async function VF(e){let{runService:t}=await Promise.resolve().then(()=>(Ub(),Hb));return t(e)}async function KF(e){let{runPair:t}=await Promise.resolve().then(()=>(Wb(),jb));return t(e)}async function YF(e){let{runJoin:t}=await Promise.resolve().then(()=>(Kb(),Vb));return t(e)}var Vx=jF[mr];Vx||(console.error(`Unknown command: ${mr}
1019
+ `),console.log(Wx),process.exit(1));if(mr!=="doctor"&&mr!=="export"&&mr!=="register")try{let{getUnackedErrorCount:e}=await Promise.resolve().then(()=>(_o(),Eo)),t=await e();t>0&&process.stderr.write(`\u26A0 Sigil: ${t} unacked hook error${t>1?"s":""} \u2014 run \`sigil doctor\` for details
1020
+ `)}catch{}try{await Vx(UF)}catch(e){let t=e.message||String(e);((e.code||"")==="3D000"||/database .* does not exist/i.test(t))&&(console.error("Error: the Sigil database does not exist yet on this Postgres server."),console.error(""),console.error("Run `sigil init` \u2014 it will create the database, the sigil_app user, and"),console.error("install pgvector for you (one-shot, requires Postgres admin credentials)."),console.error(""),console.error("Underlying error: "+t.split(`
963
1021
  `)[0]),process.exit(1)),/ECONNREFUSED|connection refused/i.test(t)&&(console.error("Error: Postgres is not reachable."),console.error(""),console.error("Sigil 0.10.0+ requires Postgres. Start your Postgres server first:"),console.error(" \u2022 Docker: docker run -d --name sigil-pg -p 5432:5432 -e POSTGRES_PASSWORD=\u2026 pgvector/pgvector:pg15"),console.error(" \u2022 brew: brew services start postgresql@15"),console.error(" \u2022 RDS / cloud: check the host/port in `grep SIGIL_DB_ ~/.sigil/.env`"),console.error(""),console.error("Underlying error: "+t.split(`
964
1022
  `)[0]),process.exit(1)),/password authentication failed/i.test(t)&&(console.error("Error: Postgres rejected the Sigil credentials."),console.error(""),console.error("Re-run `sigil init` to reset the password (it will use Postgres admin"),console.error("credentials once to update the sigil_app user), or edit ~/.sigil/.env manually."),console.error(""),console.error("Underlying error: "+t.split(`
965
- `)[0]),process.exit(1)),console.error(`Error: ${t}`),process.exit(1)}async function tx(e){(e.includes("--help")||e.includes("-h"))&&(console.log(`sigil init \u2014 Set up Sigil (DB, env, hooks, Claude integration)
1023
+ `)[0]),process.exit(1)),console.error(`Error: ${t}`),process.exit(1)}async function Hd(e){(e.includes("--help")||e.includes("-h"))&&(console.log(`sigil init \u2014 Set up Sigil (DB, env, hooks, Claude integration)
966
1024
 
967
1025
  Usage:
968
1026
  sigil init [--dry-run] [--url <postgres-url>]
@@ -989,35 +1047,35 @@ Files Sigil touches (originals are backed up to <path>.sigil.bak before write):
989
1047
  ~/.sigil/.env Sigil config + API keys + DB connection
990
1048
  ~/.sigil/CLAUDE.md Sigil instructions for Claude
991
1049
  ~/.claude/CLAUDE.md One @import line added (existing content preserved)
992
- ~/.claude/settings.json UserPromptSubmit + PostToolUse + Stop + SessionEnd hooks (merged)`),process.exit(0));let t=e.includes("--dry-run"),r=e.findIndex($=>$==="--url"||$.startsWith("--url=")),n=null;if(r!==-1){let $=e[r];n=$.includes("=")?$.split("=")[1]:e[r+1],n||(console.error("--url requires a Postgres connection string"),process.exit(1))}let i=await Promise.resolve().then(()=>($s(),Cs)),o=await import("node:fs/promises"),{safeWrite:s}=await Promise.resolve().then(()=>(_r(),Uw)),{intro:a,outro:c,select:l,multiselect:d,text:p,spinner:u,confirm:m,note:g,cancel:y,isCancel:w}=i,x=ue(bt(),".sigil"),b=ue(x,".env");a(t?"Sigil \u2014 DRY RUN (no files will be written)":"Sigil \u2014 persistent memory for Claude");let A=[],v=($,k,H)=>A.push({action:$,path:k,detail:H}),S=xu("ollama --version"),C={};if(xt(b)){let $=await o.readFile(b,"utf8");for(let k of $.split(`
993
- `)){let[H,...V]=k.split("=");H&&!H.startsWith("#")&&(C[H.trim()]=V.join("=").trim())}}let{listProvidersForSetup:O}=await Promise.resolve().then(()=>(Kr(),io)),M=await O(),F=await l({message:"LLM provider (for fact extraction and reasoning)",options:M.map(({id:$,label:k,hint:H})=>({value:$,label:k,hint:H})),initialValue:C.LLM_PROVIDER||"claude-cli"});w(F)&&(y("Setup cancelled."),process.exit(0));let P=await M.find($=>$.id===F).setup({existing:C,clack:i});P===null&&(y("Setup cancelled."),process.exit(0));let Q=P.env||{},ae=Q.OPENROUTER_API_KEY||C.OPENROUTER_API_KEY||"",N=await l({message:"Embedding provider (for semantic search)",options:[{value:"ollama",label:"Ollama",hint:"nomic-embed-text \u2014 free, runs locally"},{value:"openai",label:"OpenAI",hint:"text-embedding-3-large \u2014 requires API key"},{value:"openrouter",label:"OpenRouter",hint:"gateway \u2014 one key for LLM + embeddings; uses vendor/model names"}],initialValue:C.EMBEDDING_PROVIDER||(S?"ollama":ae?"openrouter":"openai")});w(N)&&(y("Setup cancelled."),process.exit(0));let W={ollama:{model:"nomic-embed-text",dimensions:768},openai:{model:"text-embedding-3-large",dimensions:1024},openrouter:{model:"openai/text-embedding-3-large",dimensions:1024}},ne=C.EMBEDDING_PROVIDER,ie=ne&&ne!==N,de,Ue;if(ie){de=W[N].model,Ue=W[N].dimensions;let $=Number(C.EMBEDDING_DIMENSIONS)||W[ne]?.dimensions;if($&&$!==Ue){g(`You're switching embedding provider from ${ne} (${$}d) to ${N} (${Ue}d).
1050
+ ~/.claude/settings.json UserPromptSubmit + PostToolUse + Stop + SessionEnd hooks (merged)`),process.exit(0));let t=e.includes("--dry-run"),r=e.findIndex(O=>O==="--url"||O.startsWith("--url=")),n=null;if(r!==-1){let O=e[r];n=O.includes("=")?O.split("=")[1]:e[r+1],n||(console.error("--url requires a Postgres connection string"),process.exit(1))}let i=await Promise.resolve().then(()=>(Ma(),Pa)),o=await import("node:fs/promises"),{safeWrite:s}=await Promise.resolve().then(()=>(Pr(),n_)),{intro:a,outro:c,select:l,multiselect:d,text:p,spinner:u,confirm:m,note:h,cancel:y,isCancel:w}=i,b=me(Nt(),".sigil"),S=me(b,".env");a(t?"Sigil \u2014 DRY RUN (no files will be written)":"Sigil \u2014 persistent memory for Claude");let T=[],I=(O,k,U)=>T.push({action:O,path:k,detail:U}),x=Fd("ollama --version"),C={};if(Dt(S)){let O=await o.readFile(S,"utf8");for(let k of O.split(`
1051
+ `)){let[U,...K]=k.split("=");U&&!U.startsWith("#")&&(C[U.trim()]=K.join("=").trim())}}let{listProvidersForSetup:R}=await Promise.resolve().then(()=>(Sr(),Ai)),F=await R(),B=await l({message:"LLM provider (for fact extraction and reasoning)",options:F.map(({id:O,label:k,hint:U})=>({value:O,label:k,hint:U})),initialValue:C.LLM_PROVIDER||"claude-cli"});w(B)&&(y("Setup cancelled."),process.exit(0));let P=await F.find(O=>O.id===B).setup({existing:C,clack:i});P===null&&(y("Setup cancelled."),process.exit(0));let ie=P.env||{},de=ie.OPENROUTER_API_KEY||C.OPENROUTER_API_KEY||"",{EMBEDDING_PROVIDERS:L,EMBEDDING_DEFAULTS:oe}=await Promise.resolve().then(()=>(_u(),y_)),H=await l({message:"Embedding provider (for semantic search)",options:L.map(O=>({value:O.id,label:O.label,hint:O.hint})),initialValue:C.EMBEDDING_PROVIDER||(x?"ollama":de?"openrouter":"openai")});w(H)&&(y("Setup cancelled."),process.exit(0));let q=oe,ye=C.EMBEDDING_PROVIDER,Fa=ye&&ye!==H,Et,_t;if(Fa){Et=q[H].model,_t=q[H].dimensions;let O=Number(C.EMBEDDING_DIMENSIONS)||q[ye]?.dimensions;if(O&&O!==_t){h(`You're switching embedding provider from ${ye} (${O}d) to ${H} (${_t}d).
994
1052
  Existing facts in your DB were embedded at the previous dimensions \u2014 they will become
995
1053
  unsearchable until re-ingested. To stay coherent without losing data, either:
996
- \u2022 keep ${ne} as your embedding provider, or
997
- \u2022 run \`sigil reset\` to wipe + re-ingest from scratch.`,"Dimension change ahead");let k=await m({message:`Continue with ${N} (${Ue}d)? Existing facts will become unsearchable.`,initialValue:!1});(w(k)||!k)&&(y("Setup cancelled \u2014 re-run sigil init and keep the prior embedding provider, or run sigil reset to wipe first."),process.exit(0))}}else de=C.EMBEDDING_MODEL||W[N].model,Ue=Number(C.EMBEDDING_DIMENSIONS)||W[N].dimensions;if(N==="openrouter"&&!ae){let $=await p({message:"OpenRouter API key (for embeddings) \u2014 get one at openrouter.ai/keys",placeholder:C.OPENROUTER_API_KEY?"(unchanged)":"sk-or-...",validate:k=>{if(!k&&!C.OPENROUTER_API_KEY)return"API key is required";if(k&&!k.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});w($)&&(y("Setup cancelled."),process.exit(0)),$&&(ae=$)}if(N==="ollama"){S||(g(`Ollama is not installed.
1054
+ \u2022 keep ${ye} as your embedding provider, or
1055
+ \u2022 run \`sigil reset\` to wipe + re-ingest from scratch.`,"Dimension change ahead");let k=await m({message:`Continue with ${H} (${_t}d)? Existing facts will become unsearchable.`,initialValue:!1});(w(k)||!k)&&(y("Setup cancelled \u2014 re-run sigil init and keep the prior embedding provider, or run sigil reset to wipe first."),process.exit(0))}}else Et=C.EMBEDDING_MODEL||q[H].model,_t=Number(C.EMBEDDING_DIMENSIONS)||q[H].dimensions;if(H==="openrouter"&&!de){let O=await p({message:"OpenRouter API key (for embeddings) \u2014 get one at openrouter.ai/keys",placeholder:C.OPENROUTER_API_KEY?"(unchanged)":"sk-or-...",validate:k=>{if(!k&&!C.OPENROUTER_API_KEY)return"API key is required";if(k&&!k.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});w(O)&&(y("Setup cancelled."),process.exit(0)),O&&(de=O)}if(H==="ollama"){x||(h(`Ollama is not installed.
998
1056
  Install from https://ollama.com then run: ollama pull nomic-embed-text
999
- Or re-run sigil init and choose OpenAI for embeddings.`,"Ollama not found"),y("Install Ollama then re-run sigil init."),process.exit(0));let $=C.OLLAMA_HOST||"http://localhost:11434";if(t)v("check",`ollama server @ ${$}`,"start in background if not running"),v("pull","ollama:nomic-embed-text","~270MB embedding model (if not already present)");else{let k=await ix($),H=null;if(!k){let oe=u();oe.start("Starting ollama serve in the background..."),H=dM(),k=await pM($,15e3),k?oe.stop(`Ollama server ready (pid ${H?.pid??"?"}, background)`):(oe.stop("Ollama server did not come up in time"),g("Sigil tried to start `ollama serve` in the background but it did not\nbecome reachable at "+$+" within 15s.\n\nOpen a new terminal, run `ollama serve`, then re-run `sigil init`.","Ollama server unreachable"),y("Start ollama serve manually then re-run sigil init."),process.exit(0))}if(!xu("ollama list 2>/dev/null | grep nomic-embed-text")){let oe=await m({message:"Pull nomic-embed-text embedding model now? (~270MB)"});if(w(oe)&&(y("Setup cancelled."),process.exit(0)),oe){let rt=u();rt.start("Pulling nomic-embed-text...");try{Dr("ollama pull nomic-embed-text",{stdio:"pipe"}),rt.stop("nomic-embed-text ready")}catch{rt.stop("Pull failed \u2014 run: ollama pull nomic-embed-text manually")}}}H&&H.unref()}}let Gn=await p({message:"Default namespace",placeholder:"default",initialValue:C.DEFAULT_NAMESPACE||"default",validate:$=>{if(!$.trim())return"Cannot be empty"}});w(Gn)&&(y("Setup cancelled."),process.exit(0));let Lr="local",St=null,ce=null,tr,rr,vt,kr,Fi;if(n)Lr="url",St=n;else if(C.SIGIL_DATABASE_URL&&!C.SIGIL_DB_HOST){let $=await l({message:"Database mode",options:[{value:"url",label:"Connection URL",hint:"keep current SIGIL_DATABASE_URL"},{value:"local",label:"Local Postgres install",hint:"discrete host/port/user/password"}],initialValue:"url"});w($)&&(y("Setup cancelled."),process.exit(0)),Lr=$}else{let $=await l({message:"Database mode",options:[{value:"local",label:"Local Postgres install",hint:"docker / brew / RDS host:port"},{value:"url",label:"Connection URL",hint:"Neon, Supabase, RDS, Render, \u2026"}],initialValue:(C.SIGIL_DB_HOST,"local")});w($)&&(y("Setup cancelled."),process.exit(0)),Lr=$}if(Lr==="url"){if(St||(St=await p({message:"Postgres connection URL",placeholder:C.SIGIL_DATABASE_URL||"postgres://user:pass@host.neon.tech/db",initialValue:C.SIGIL_DATABASE_URL||"",validate:$=>{if(!/^postgres(ql)?:\/\//i.test($||""))return"Must start with postgres:// or postgresql://"}}),w(St)&&(y("Setup cancelled."),process.exit(0))),!t){let{probeUrlConnection:$}=await Promise.resolve().then(()=>(Qe(),ut)),k=u();if(k.start("Probing connection URL..."),ce=await $(St),ce.ok||(k.stop(`Connection failed (${ce.stage}${ce.code?`: ${ce.code}`:""})`),y(`Could not connect: ${ce.error}
1000
- `+(ce.stage==="parse"?" Check the URL format (postgres://user:pass@host:port/db?sslmode=...)":"")+(ce.stage==="connect"?` Provider hint: ${ce.provider}. For Neon use the pooler URL.`:"")+(ce.stage==="query"?" Connection succeeded but a basic SELECT failed \u2014 check user privileges.":"")),process.exit(1)),ce.pgvector)k.stop(`Connected (${ce.provider}, ${ce.connectMs}ms) \u2014 pgvector \u2713`);else{k.stop(`Connected (${ce.provider}, ${ce.connectMs}ms) \u2014 pgvector NOT installed`);let H=await m({message:"pgvector extension is not installed on this database. Sigil cannot run without it. Continue anyway?",initialValue:!1});(w(H)||!H)&&(y(`Cancelled. Install pgvector on your database first:
1001
- `+(ce.provider==="neon"?" Neon: extensions are auto-enabled, but the role may need the right privileges":"")+(ce.provider.startsWith("supabase")?" Supabase: enable via Dashboard \u2192 Database \u2192 Extensions \u2192 vector":"")+(ce.provider==="aws-rds"?" RDS: add `vector` to the parameter group `shared_preload_libraries`":"")+`
1002
- Then re-run sigil init.`),process.exit(1))}}}else{let $=await p({message:"Postgres host",placeholder:C.SIGIL_DB_HOST||"localhost",initialValue:C.SIGIL_DB_HOST||"localhost"});w($)&&(y("Setup cancelled."),process.exit(0)),tr=$;let k=await p({message:"Postgres port",placeholder:C.SIGIL_DB_PORT||"5432",initialValue:C.SIGIL_DB_PORT||"5432",validate:rt=>{if(rt&&!/^\d+$/.test(rt))return"Port must be a number"}});w(k)&&(y("Setup cancelled."),process.exit(0)),rr=Number(k);let H=await p({message:"Sigil database name",placeholder:C.SIGIL_DB_NAME||"sigil",initialValue:C.SIGIL_DB_NAME||"sigil"});w(H)&&(y("Setup cancelled."),process.exit(0)),vt=H;let V=await p({message:"Sigil database user",placeholder:C.SIGIL_DB_USER||"sigil_app",initialValue:C.SIGIL_DB_USER||"sigil_app"});w(V)&&(y("Setup cancelled."),process.exit(0)),kr=V;let oe=await p({message:C.SIGIL_DB_PASSWORD?"Sigil database password (keep existing \u2014 press Enter)":"Sigil database password",placeholder:C.SIGIL_DB_PASSWORD?"(unchanged)":"sigil_dev or generate",validate:rt=>{if(!rt&&!C.SIGIL_DB_PASSWORD)return"Password required"}});if(w(oe)&&(y("Setup cancelled."),process.exit(0)),Fi=oe||C.SIGIL_DB_PASSWORD,!t){let{probeSigilConnection:rt,ensurePostgresDatabase:cx,diagnoseConnectionError:lx}=await Promise.resolve().then(()=>(Qe(),ut)),js=u();js.start("Probing Postgres connection...");let Ws=await rt({host:tr,port:rr,database:vt,user:kr,password:Fi});if(Ws.ok)js.stop(`Connected to ${kr}@${tr}:${rr}/${vt}`);else{let nr=lx({code:Ws.code,message:Ws.message});if(js.stop(`Connection failed (${nr.kind})`),nr.kind==="unreachable"&&(y(`Postgres unreachable at ${tr}:${rr}.
1003
- ${nr.hint}`),process.exit(1)),nr.kind==="missing-db"||nr.kind==="auth"){let Cu=await m({message:nr.kind==="missing-db"?`Database "${vt}" does not exist. Create it now (requires admin credentials)?`:`Authentication failed for ${kr}@${vt}. Create / reset the user now (requires admin credentials)?`,initialValue:!0});(w(Cu)||!Cu)&&(y("Setup cancelled \u2014 fix Postgres credentials and re-run sigil init."),process.exit(0));let $u=await p({message:"Postgres admin user",placeholder:"postgres",initialValue:"postgres"});w($u)&&(y("Setup cancelled."),process.exit(0));let Ou=await p({message:"Postgres admin password (used once, not stored)",placeholder:"admin password",validate:jn=>{if(!jn)return"Required to create the database"}});w(Ou)&&(y("Setup cancelled."),process.exit(0));let Vs=u();Vs.start("Creating database, user, and pgvector extension...");try{let{actions:jn}=await cx({admin:{host:tr,port:rr,user:$u,password:Ou},sigil:{database:vt,user:kr,password:Fi}});Vs.stop(`Bootstrapped: ${jn.join(", ")}`)}catch(jn){Vs.stop("Bootstrap failed"),y(jn.message),process.exit(1)}}else y(`Postgres setup failed: ${nr.hint}`),process.exit(1)}}}t||await o.mkdir(x,{recursive:!0});let ox=C.SIGIL_ENCRYPTION_KEY||fM(64),z={...C};z.LLM_PROVIDER=F,z.OLLAMA_HOST=C.OLLAMA_HOST||"http://localhost:11434",Object.assign(z,Q),z.EMBEDDING_PROVIDER=N,z.EMBEDDING_MODEL=de,z.EMBEDDING_DIMENSIONS=String(Ue),z.DEFAULT_NAMESPACE=Gn,z.SIGIL_ENCRYPTION_KEY=ox,z.SIGIL_DB_TYPE="postgres",Lr==="url"?(z.SIGIL_DATABASE_URL=St,delete z.SIGIL_DB_HOST,delete z.SIGIL_DB_PORT,delete z.SIGIL_DB_NAME,delete z.SIGIL_DB_USER,delete z.SIGIL_DB_PASSWORD):(delete z.SIGIL_DATABASE_URL,z.SIGIL_DB_HOST=tr,z.SIGIL_DB_PORT=String(rr),z.SIGIL_DB_NAME=vt,z.SIGIL_DB_USER=kr,z.SIGIL_DB_PASSWORD=Fi);let sx=[`# Sigil \u2014 generated ${new Date().toISOString().slice(0,10)}`,"# (re-running `sigil init` preserves unrecognised keys \u2014 edit manually as needed)","",...Object.entries(z).map(([$,k])=>`${$}=${k}`)].join(`
1004
- `),vu=await s(b,sx,{dryRun:t});if(v(vu.action,b,`${vu.bytes} bytes`),t){let $=Lr==="url"?`connection URL (${St?new URL(St).hostname:"\u2014"})`:`${tr}:${rr}/${vt}`;v("migrate","postgres",$),v("verify","embedder",`${N}/${de} \u2014 live ping (skipped in dry-run)`)}else{Su({path:b,override:!0,quiet:!0});let $=u();$.start("Initialising memory database...");try{let{MIGRATIONS_DIR:H}=await Promise.resolve().then(()=>(B(),Qs)),V=(await Promise.resolve().then(()=>(D(),G))).default,[,oe]=await V.migrate.latest({directory:H});$.stop(oe.length?`Memory database ready (${oe.length} tables created)`:"Memory database up to date")}catch(H){$.stop("Database setup failed");let{diagnoseError:V}=await Promise.resolve().then(()=>(Qe(),ut)),oe=V(H);y(`${oe.humanMessage}
1005
- `+(oe.fixHint?`
1006
- \u2192 ${oe.fixHint}
1057
+ Or re-run sigil init and choose OpenAI for embeddings.`,"Ollama not found"),y("Install Ollama then re-run sigil init."),process.exit(0));let O=C.OLLAMA_HOST||"http://localhost:11434";if(t)I("check",`ollama server @ ${O}`,"start in background if not running"),I("pull","ollama:nomic-embed-text","~270MB embedding model (if not already present)");else{let k=await qx(O),U=null;if(!k){let ce=u();ce.start("Starting ollama serve in the background..."),U=EB(),k=await _B(O,15e3),k?ce.stop(`Ollama server ready (pid ${U?.pid??"?"}, background)`):(ce.stop("Ollama server did not come up in time"),h("Sigil tried to start `ollama serve` in the background but it did not\nbecome reachable at "+O+" within 15s.\n\nOpen a new terminal, run `ollama serve`, then re-run `sigil init`.","Ollama server unreachable"),y("Start ollama serve manually then re-run sigil init."),process.exit(0))}if(!Fd("ollama list 2>/dev/null | grep nomic-embed-text")){let ce=await m({message:"Pull nomic-embed-text embedding model now? (~270MB)"});if(w(ce)&&(y("Setup cancelled."),process.exit(0)),ce){let ct=u();ct.start("Pulling nomic-embed-text...");try{en("ollama pull nomic-embed-text",{stdio:"pipe"}),ct.stop("nomic-embed-text ready")}catch{ct.stop("Pull failed \u2014 run: ollama pull nomic-embed-text manually")}}}U&&U.unref()}}let Ba=await p({message:"Default namespace",placeholder:"default",initialValue:C.DEFAULT_NAMESPACE||"default",validate:O=>{if(!O.trim())return"Cannot be empty"}});w(Ba)&&(y("Setup cancelled."),process.exit(0));let tn="local",Lt=null,pe=null,hr,gr,kt,rn,xo;if(n)tn="url",Lt=n;else if(C.SIGIL_DATABASE_URL&&!C.SIGIL_DB_HOST){let O=await l({message:"Database mode",options:[{value:"url",label:"Connection URL",hint:"keep current SIGIL_DATABASE_URL"},{value:"local",label:"Local Postgres install",hint:"discrete host/port/user/password"}],initialValue:"url"});w(O)&&(y("Setup cancelled."),process.exit(0)),tn=O}else{let O=await l({message:"Database mode",options:[{value:"local",label:"Local Postgres install",hint:"docker / brew / RDS host:port"},{value:"url",label:"Connection URL",hint:"Neon, Supabase, RDS, Render, \u2026"}],initialValue:(C.SIGIL_DB_HOST,"local")});w(O)&&(y("Setup cancelled."),process.exit(0)),tn=O}if(tn==="url"){if(Lt||(Lt=await p({message:"Postgres connection URL",placeholder:C.SIGIL_DATABASE_URL||"postgres://user:pass@host.neon.tech/db",initialValue:C.SIGIL_DATABASE_URL||"",validate:O=>{if(!/^postgres(ql)?:\/\//i.test(O||""))return"Must start with postgres:// or postgresql://"}}),w(Lt)&&(y("Setup cancelled."),process.exit(0))),!t){let{probeUrlConnection:O}=await Promise.resolve().then(()=>(Oe(),ut)),k=u();if(k.start("Probing connection URL..."),pe=await O(Lt),pe.ok||(k.stop(`Connection failed (${pe.stage}${pe.code?`: ${pe.code}`:""})`),y(`Could not connect: ${pe.error}
1058
+ `+(pe.stage==="parse"?" Check the URL format (postgres://user:pass@host:port/db?sslmode=...)":"")+(pe.stage==="connect"?` Provider hint: ${pe.provider}. For Neon use the pooler URL.`:"")+(pe.stage==="query"?" Connection succeeded but a basic SELECT failed \u2014 check user privileges.":"")),process.exit(1)),pe.pgvector)k.stop(`Connected (${pe.provider}, ${pe.connectMs}ms) \u2014 pgvector \u2713`);else{k.stop(`Connected (${pe.provider}, ${pe.connectMs}ms) \u2014 pgvector NOT installed`);let U=await m({message:"pgvector extension is not installed on this database. Sigil cannot run without it. Continue anyway?",initialValue:!1});(w(U)||!U)&&(y(`Cancelled. Install pgvector on your database first:
1059
+ `+(pe.provider==="neon"?" Neon: extensions are auto-enabled, but the role may need the right privileges":"")+(pe.provider.startsWith("supabase")?" Supabase: enable via Dashboard \u2192 Database \u2192 Extensions \u2192 vector":"")+(pe.provider==="aws-rds"?" RDS: add `vector` to the parameter group `shared_preload_libraries`":"")+`
1060
+ Then re-run sigil init.`),process.exit(1))}}}else{let O=await p({message:"Postgres host",placeholder:C.SIGIL_DB_HOST||"localhost",initialValue:C.SIGIL_DB_HOST||"localhost"});w(O)&&(y("Setup cancelled."),process.exit(0)),hr=O;let k=await p({message:"Postgres port",placeholder:C.SIGIL_DB_PORT||"5432",initialValue:C.SIGIL_DB_PORT||"5432",validate:ct=>{if(ct&&!/^\d+$/.test(ct))return"Port must be a number"}});w(k)&&(y("Setup cancelled."),process.exit(0)),gr=Number(k);let U=await p({message:"Sigil database name",placeholder:C.SIGIL_DB_NAME||"sigil",initialValue:C.SIGIL_DB_NAME||"sigil"});w(U)&&(y("Setup cancelled."),process.exit(0)),kt=U;let K=await p({message:"Sigil database user",placeholder:C.SIGIL_DB_USER||"sigil_app",initialValue:C.SIGIL_DB_USER||"sigil_app"});w(K)&&(y("Setup cancelled."),process.exit(0)),rn=K;let ce=await p({message:C.SIGIL_DB_PASSWORD?"Sigil database password (keep existing \u2014 press Enter)":"Sigil database password",placeholder:C.SIGIL_DB_PASSWORD?"(unchanged)":"sigil_dev or generate",validate:ct=>{if(!ct&&!C.SIGIL_DB_PASSWORD)return"Password required"}});if(w(ce)&&(y("Setup cancelled."),process.exit(0)),xo=ce||C.SIGIL_DB_PASSWORD,!t){let{probeSigilConnection:ct,ensurePostgresDatabase:Zx,diagnoseConnectionError:Qx}=await Promise.resolve().then(()=>(Oe(),ut)),Ha=u();Ha.start("Probing Postgres connection...");let Ua=await ct({host:hr,port:gr,database:kt,user:rn,password:xo});if(Ua.ok)Ha.stop(`Connected to ${rn}@${hr}:${gr}/${kt}`);else{let yr=Qx({code:Ua.code,message:Ua.message});if(Ha.stop(`Connection failed (${yr.kind})`),yr.kind==="unreachable"&&(y(`Postgres unreachable at ${hr}:${gr}.
1061
+ ${yr.hint}`),process.exit(1)),yr.kind==="missing-db"||yr.kind==="auth"){let Vd=await m({message:yr.kind==="missing-db"?`Database "${kt}" does not exist. Create it now (requires admin credentials)?`:`Authentication failed for ${rn}@${kt}. Create / reset the user now (requires admin credentials)?`,initialValue:!0});(w(Vd)||!Vd)&&(y("Setup cancelled \u2014 fix Postgres credentials and re-run sigil init."),process.exit(0));let Kd=await p({message:"Postgres admin user",placeholder:"postgres",initialValue:"postgres"});w(Kd)&&(y("Setup cancelled."),process.exit(0));let Yd=await p({message:"Postgres admin password (used once, not stored)",placeholder:"admin password",validate:gi=>{if(!gi)return"Required to create the database"}});w(Yd)&&(y("Setup cancelled."),process.exit(0));let Ga=u();Ga.start("Creating database, user, and pgvector extension...");try{let{actions:gi}=await Zx({admin:{host:hr,port:gr,user:Kd,password:Yd},sigil:{database:kt,user:rn,password:xo}});Ga.stop(`Bootstrapped: ${gi.join(", ")}`)}catch(gi){Ga.stop("Bootstrap failed"),y(gi.message),process.exit(1)}}else y(`Postgres setup failed: ${yr.hint}`),process.exit(1)}}}t||await o.mkdir(b,{recursive:!0});let Jx=C.SIGIL_ENCRYPTION_KEY||SB(64),X={...C};X.LLM_PROVIDER=B,X.OLLAMA_HOST=C.OLLAMA_HOST||"http://localhost:11434",Object.assign(X,ie),X.EMBEDDING_PROVIDER=H,X.EMBEDDING_MODEL=Et,X.EMBEDDING_DIMENSIONS=String(_t),X.DEFAULT_NAMESPACE=Ba,X.SIGIL_ENCRYPTION_KEY=Jx,X.SIGIL_DB_TYPE="postgres",X.SIGIL_SETUP_COMPLETE="true",tn==="url"?(X.SIGIL_DATABASE_URL=Lt,delete X.SIGIL_DB_HOST,delete X.SIGIL_DB_PORT,delete X.SIGIL_DB_NAME,delete X.SIGIL_DB_USER,delete X.SIGIL_DB_PASSWORD):(delete X.SIGIL_DATABASE_URL,X.SIGIL_DB_HOST=hr,X.SIGIL_DB_PORT=String(gr),X.SIGIL_DB_NAME=kt,X.SIGIL_DB_USER=rn,X.SIGIL_DB_PASSWORD=xo);let zx=[`# Sigil \u2014 generated ${new Date().toISOString().slice(0,10)}`,"# (re-running `sigil init` preserves unrecognised keys \u2014 edit manually as needed)","",...Object.entries(X).map(([O,k])=>`${O}=${k}`)].join(`
1062
+ `),Ud=await s(S,zx,{dryRun:t});if(I(Ud.action,S,`${Ud.bytes} bytes`),t){let O=tn==="url"?`connection URL (${Lt?new URL(Lt).hostname:"\u2014"})`:`${hr}:${gr}/${kt}`;I("migrate","postgres",O),I("verify","embedder",`${H}/${Et} \u2014 live ping (skipped in dry-run)`)}else{Bd({path:S,override:!0,quiet:!0});let O=u();O.start("Initialising memory database...");try{let{MIGRATIONS_DIR:U}=await Promise.resolve().then(()=>(M(),Oo)),K=(await Promise.resolve().then(()=>(N(),j))).default,[,ce]=await K.migrate.latest({directory:U});O.stop(ce.length?`Memory database ready (${ce.length} tables created)`:"Memory database up to date")}catch(U){O.stop("Database setup failed");let{diagnoseError:K}=await Promise.resolve().then(()=>(Oe(),ut)),ce=K(U);y(`${ce.humanMessage}
1063
+ `+(ce.fixHint?`
1064
+ \u2192 ${ce.fixHint}
1007
1065
  `:"")+`
1008
- (${H.message})
1066
+ (${U.message})
1009
1067
 
1010
- Set the database connection in ~/.sigil/.env or re-run sigil init.`),process.exit(1)}let k=u();k.start(`Verifying ${N} embedder...`);try{let{embed:H}=await Promise.resolve().then(()=>(Ot(),oo)),V=await H("ping");if(!Array.isArray(V)||V.length===0)throw new Error(`embedder returned ${typeof V} (length ${V?.length}) \u2014 expected number[]`);if(V.length!==Ue)throw new Error(`embedder returned ${V.length}d vector but config says EMBEDDING_DIMENSIONS=${Ue}d.
1011
- This means ${N}/${de} doesn't produce ${Ue}d embeddings \u2014 one of them is wrong.`);k.stop(`Embedder healthy (${V.length}d via ${N}/${de})`)}catch(H){k.stop("Embedder check failed");let{diagnoseError:V}=await Promise.resolve().then(()=>(Qe(),ut)),oe=V(H);y(`${oe.humanMessage}
1012
- `+(oe.fixHint?`
1013
- \u2192 ${oe.fixHint}
1068
+ Set the database connection in ~/.sigil/.env or re-run sigil init.`),process.exit(1)}let k=u();k.start(`Verifying ${H} embedder...`);try{let{embed:U}=await Promise.resolve().then(()=>(jt(),Jo)),K=await U("ping");if(!Array.isArray(K)||K.length===0)throw new Error(`embedder returned ${typeof K} (length ${K?.length}) \u2014 expected number[]`);if(K.length!==_t)throw new Error(`embedder returned ${K.length}d vector but config says EMBEDDING_DIMENSIONS=${_t}d.
1069
+ This means ${H}/${Et} doesn't produce ${_t}d embeddings \u2014 one of them is wrong.`);k.stop(`Embedder healthy (${K.length}d via ${H}/${Et})`)}catch(U){k.stop("Embedder check failed");let{diagnoseError:K}=await Promise.resolve().then(()=>(Oe(),ut)),ce=K(U);y(`${ce.humanMessage}
1070
+ `+(ce.fixHint?`
1071
+ \u2192 ${ce.fixHint}
1014
1072
  `:"")+`
1015
- (${N}/${de}: ${H.message})
1073
+ (${H}/${Et}: ${U.message})
1016
1074
 
1017
- Your config was written to `+b+` \u2014 fix the root cause then re-run sigil init.
1018
- Sigil init aborted before any AI clients were touched \u2014 your existing setup is unchanged.`),process.exit(1)}}let{listClients:ax}=await Promise.resolve().then(()=>(Gs(),Us)),Hi=await ax(),Iu=await Promise.all(Hi.map($=>$.detect())),Au=Hi.filter(($,k)=>Iu[k]).map($=>$.id),Pr=await d({message:"Install Sigil for which clients? (space to toggle, enter to confirm)",options:Hi.map(($,k)=>({value:$.id,label:$.label,hint:Iu[k]?`${$.hint} \u2014 detected`:$.hint})),initialValues:Au.length?Au:["claude-code"],required:!1});w(Pr)&&(y("Setup cancelled."),process.exit(0));let Tu=u();Tu.start(t?"Computing client integration plan...":"Configuring client integrations...");for(let $ of Pr){let k=Hi.find(V=>V.id===$),{actions:H}=await k.install({dryRun:t});for(let V of H)v(V.action,V.path,V.detail)}if(!t){let{updateContextSnapshot:$}=await Promise.resolve().then(()=>(Tn(),An));await $({namespace:Gn.toString()}).catch(()=>{})}if(Tu.stop(t?"Plan computed.":Pr.length?`Configured ${Pr.length} client${Pr.length>1?"s":""}: ${Pr.join(", ")}`:"No clients selected \u2014 skipping integration step"),t){let $=A.map(k=>` ${rx(k.action,8)} ${k.path}${k.detail?` (${k.detail})`:""}`);g(["Dry run \u2014 no files were written. The following would happen:","",...$,"","Each existing file would be backed up to <path>.sigil.bak before its first","modification. Re-run without --dry-run to apply."].join(`
1019
- `),"Plan"),c("Dry run complete.");return}g(["Memory store ~/.sigil/db (embedded, no server needed)",`Config ${b}`,"Claude ~/.claude/CLAUDE.md \u2014 Sigil is now your memory","Backups any pre-existing files saved to <path>.sigil.bak","","Claude will search Sigil before answering and save important","facts automatically. Start a new Claude session to begin.","","Quick start:",' sigil remember "your first fact"'," sigil ingest <file-or-url>",' sigil search "anything"'].join(`
1020
- `),"Setup complete"),c("Open a new Claude Code session to start using Sigil."),process.exit(0)}function rx(e,t){return String(e).padEnd(t)}async function BP(e){(e.includes("--help")||e.includes("-h"))&&(console.log(`sigil uninstall \u2014 Remove Sigil's entries from AI clients
1075
+ Your config was written to `+S+` \u2014 fix the root cause then re-run sigil init.
1076
+ Sigil init aborted before any AI clients were touched \u2014 your existing setup is unchanged.`),process.exit(1)}}let{listClients:Xx}=await Promise.resolve().then(()=>(po(),da)),Io=await Xx(),Gd=await Promise.all(Io.map(O=>O.detect())),jd=Io.filter((O,k)=>Gd[k]).map(O=>O.id),nn=await d({message:"Install Sigil for which clients? (space to toggle, enter to confirm)",options:Io.map((O,k)=>({value:O.id,label:O.label,hint:Gd[k]?`${O.hint} \u2014 detected`:O.hint})),initialValues:jd.length?jd:["claude-code"],required:!1});w(nn)&&(y("Setup cancelled."),process.exit(0));let Wd=u();Wd.start(t?"Computing client integration plan...":"Configuring client integrations...");for(let O of nn){let k=Io.find(K=>K.id===O),{actions:U}=await k.install({dryRun:t});for(let K of U)I(K.action,K.path,K.detail)}if(!t){let{updateContextSnapshot:O}=await Promise.resolve().then(()=>(zn(),Jn));await O({namespace:Ba.toString()}).catch(()=>{})}if(Wd.stop(t?"Plan computed.":nn.length?`Configured ${nn.length} client${nn.length>1?"s":""}: ${nn.join(", ")}`:"No clients selected \u2014 skipping integration step"),t){let O=T.map(k=>` ${Kx(k.action,8)} ${k.path}${k.detail?` (${k.detail})`:""}`);h(["Dry run \u2014 no files were written. The following would happen:","",...O,"","Each existing file would be backed up to <path>.sigil.bak before its first","modification. Re-run without --dry-run to apply."].join(`
1077
+ `),"Plan"),c("Dry run complete.");return}h(["Memory store ~/.sigil/db (embedded, no server needed)",`Config ${S}`,"Claude ~/.claude/CLAUDE.md \u2014 Sigil is now your memory","Backups any pre-existing files saved to <path>.sigil.bak","","Claude will search Sigil before answering and save important","facts automatically. Start a new Claude session to begin.","","Quick start:",' sigil remember "your first fact"'," sigil ingest <file-or-url>",' sigil search "anything"'].join(`
1078
+ `),"Setup complete"),c("Open a new Claude Code session to start using Sigil."),process.exit(0)}function Kx(e,t){return String(e).padEnd(t)}async function qF(e){(e.includes("--help")||e.includes("-h"))&&(console.log(`sigil uninstall \u2014 Remove Sigil's entries from AI clients
1021
1079
 
1022
1080
  Usage:
1023
1081
  sigil uninstall [--dry-run]
@@ -1032,21 +1090,21 @@ Sigil's own data \u2014 ~/.sigil/, the database, stored facts \u2014 is NOT touc
1032
1090
  Use 'sigil reset' for a full wipe.
1033
1091
 
1034
1092
  Options:
1035
- --dry-run Show what would be removed without writing anything.`),process.exit(0));let t=e.includes("--dry-run"),r=await Promise.resolve().then(()=>($s(),Cs)),{intro:n,outro:i,multiselect:o,spinner:s,note:a,cancel:c,isCancel:l}=r;n(t?"Sigil uninstall \u2014 DRY RUN (no files will be written)":"Sigil uninstall");let{listClients:d}=await Promise.resolve().then(()=>(Gs(),Us)),p=await d(),u=[];for(let x of p){if(!await x.detect())continue;let{installed:b}=await x.verify();b&&u.push(x)}if(u.length===0){a("No clients have Sigil installed \u2014 nothing to remove.","Nothing to do"),i("Done.");return}let m=await o({message:"Remove Sigil from which clients? (space to toggle, enter to confirm)",options:u.map(x=>({value:x.id,label:x.label,hint:x.hint})),initialValues:u.map(x=>x.id),required:!1});if(l(m)&&(c("Uninstall cancelled."),process.exit(0)),m.length===0){i("Nothing selected \u2014 nothing removed.");return}let g=[],y=s();y.start(t?"Computing uninstall plan...":"Removing Sigil entries...");for(let x of m){let b=u.find(v=>v.id===x),{actions:A}=await b.uninstall({dryRun:t});for(let v of A)g.push({client:b.label,...v})}y.stop(t?"Plan computed.":`Removed from ${m.length} client${m.length>1?"s":""}`);let w=g.map(x=>` ${rx(x.action,8)} [${x.client}] ${x.path}${x.detail?` (${x.detail})`:""}`);a(w.join(`
1036
- `)||"(no changes)",t?"Plan":"Done"),i(t?"Dry run complete. Re-run without --dry-run to apply.":"Sigil entries removed. Your stored memory is unchanged \u2014 use `sigil reset` to wipe data too.")}async function UP(e){e.includes("--help")&&(console.log(`sigil doctor \u2014 Diagnose Sigil setup
1093
+ --dry-run Show what would be removed without writing anything.`),process.exit(0));let t=e.includes("--dry-run"),r=await Promise.resolve().then(()=>(Ma(),Pa)),{intro:n,outro:i,multiselect:o,spinner:s,note:a,cancel:c,isCancel:l}=r;n(t?"Sigil uninstall \u2014 DRY RUN (no files will be written)":"Sigil uninstall");let{listClients:d}=await Promise.resolve().then(()=>(po(),da)),p=await d(),u=[];for(let b of p){if(!await b.detect())continue;let{installed:S}=await b.verify();S&&u.push(b)}if(u.length===0){a("No clients have Sigil installed \u2014 nothing to remove.","Nothing to do"),i("Done.");return}let m=await o({message:"Remove Sigil from which clients? (space to toggle, enter to confirm)",options:u.map(b=>({value:b.id,label:b.label,hint:b.hint})),initialValues:u.map(b=>b.id),required:!1});if(l(m)&&(c("Uninstall cancelled."),process.exit(0)),m.length===0){i("Nothing selected \u2014 nothing removed.");return}let h=[],y=s();y.start(t?"Computing uninstall plan...":"Removing Sigil entries...");for(let b of m){let S=u.find(I=>I.id===b),{actions:T}=await S.uninstall({dryRun:t});for(let I of T)h.push({client:S.label,...I})}y.stop(t?"Plan computed.":`Removed from ${m.length} client${m.length>1?"s":""}`);let w=h.map(b=>` ${Kx(b.action,8)} [${b.client}] ${b.path}${b.detail?` (${b.detail})`:""}`);a(w.join(`
1094
+ `)||"(no changes)",t?"Plan":"Done"),i(t?"Dry run complete. Re-run without --dry-run to apply.":"Sigil entries removed. Your stored memory is unchanged \u2014 use `sigil reset` to wipe data too.")}async function JF(e){e.includes("--help")&&(console.log(`sigil doctor \u2014 Diagnose Sigil setup
1037
1095
 
1038
1096
  Usage:
1039
1097
  sigil doctor
1040
1098
 
1041
1099
  Checks: Postgres connection, LLM provider, embedding provider, hook registration, hook error budget.`),process.exit(0));let t=[],r=(a,c,l="")=>{let d=a==="ok"?"\u2713":a==="warn"?"\u26A0":"\u2717";t.push({status:a,label:c}),console.log(` ${d} ${c}${l?` \u2014 ${l}`:""}`)};console.log(`
1042
1100
  Sigil diagnostic
1043
- `);let n=ue(bt(),".sigil",".env");xt(n)?r("ok","Config file",n):r("warn","Config file",`${n} not found \u2014 run 'sigil init'`);try{let{validateConfig:a}=await Promise.resolve().then(()=>(Dl(),Nl)),c=a();if(c.length===0)r("ok","Config validation","no provider/model mismatches");else for(let l of c)r(l.level==="fail"?"fail":"warn",`Config: ${l.code}`,l.message),console.log(` fix: ${l.fix}`)}catch(a){r("warn","Config validation",`unable to run: ${a.message}`)}try{let a=(await Promise.resolve().then(()=>(D(),G))).default,c=(await Promise.resolve().then(()=>(R(),X))).default,{selectDriver:l}=await Promise.resolve().then(()=>(qn(),Qi)),d=l(c);if(await a.raw("SELECT 1"),d.kind==="url"){let y=d.connection.host;r("ok","DB driver",`URL (${d.provider}, host=${y})`)}else r("ok","DB driver",`local (${c.db.host}:${c.db.port}/${c.db.database})`);let{getFactCount:p}=await Promise.resolve().then(()=>(lt(),Ut)),{getStats:u}=await Promise.resolve().then(()=>(lo(),co)),[m,g]=await Promise.all([p(),u()]);r("ok","Stored data",`${g.documentCount} docs, ${g.totalChunks} chunks, ${m} facts`),await a.destroy()}catch(a){let c=a.message||String(a);a instanceof AggregateError&&Array.isArray(a.errors)&&a.errors.length?c=a.errors[0].message||c:a.cause&&(!c||c==="AggregateError")&&(c=a.cause.message||c);let l=(await Promise.resolve().then(()=>(R(),X))).default;/ECONNREFUSED|connection refused|password authentication failed/i.test(c)?(r("fail","Database",`Postgres unreachable \u2014 ${c.split(`
1101
+ `);let n=me(Nt(),".sigil",".env");Dt(n)?r("ok","Config file",n):r("warn","Config file",`${n} not found \u2014 run 'sigil init'`);try{let{validateConfig:a}=await Promise.resolve().then(()=>(od(),id)),c=a();if(c.length===0)r("ok","Config validation","no provider/model mismatches");else for(let l of c)r(l.level==="fail"?"fail":"warn",`Config: ${l.code}`,l.message),console.log(` fix: ${l.fix}`)}catch(a){r("warn","Config validation",`unable to run: ${a.message}`)}try{let a=(await Promise.resolve().then(()=>(N(),j))).default,c=(await Promise.resolve().then(()=>($(),re))).default,{selectDriver:l}=await Promise.resolve().then(()=>(xi(),Wo)),d=l(c);if(await a.raw("SELECT 1"),d.kind==="url"){let y=d.connection.host;r("ok","DB driver",`URL (${d.provider}, host=${y})`)}else r("ok","DB driver",`local (${c.db.host}:${c.db.port}/${c.db.database})`);let{getFactCount:p}=await Promise.resolve().then(()=>(ht(),er)),{getStats:u}=await Promise.resolve().then(()=>(Qo(),Zo)),[m,h]=await Promise.all([p(),u()]);r("ok","Stored data",`${h.documentCount} docs, ${h.totalChunks} chunks, ${m} facts`),await a.destroy()}catch(a){let c=a.message||String(a);a instanceof AggregateError&&Array.isArray(a.errors)&&a.errors.length?c=a.errors[0].message||c:a.cause&&(!c||c==="AggregateError")&&(c=a.cause.message||c);let l=(await Promise.resolve().then(()=>($(),re))).default;/ECONNREFUSED|connection refused|password authentication failed/i.test(c)?(r("fail","Database",`Postgres unreachable \u2014 ${c.split(`
1044
1102
  `)[0]}`),r("warn","Recovery",l.db.url?"verify SIGIL_DATABASE_URL is valid and the provider is reachable":"check that Postgres is running and SIGIL_DB_* env vars are set in ~/.sigil/.env")):r("fail","Database",c.split(`
1045
- `)[0])}try{let{detectProvider:a,isOllamaReachable:c,isClaudeCliAvailable:l}=await Promise.resolve().then(()=>(Kr(),io)),d=(await Promise.resolve().then(()=>(R(),X))).default,p=await a();p==="anthropic"?r("ok","LLM provider","anthropic (API key set)"):p==="openai"?r("ok","LLM provider","openai (API key set)"):p==="openrouter"?r("ok","LLM provider",`openrouter (model=${d.llm.openrouterModel})`):p==="ollama"?r("ok","LLM provider",`ollama @ ${d.llm.ollamaHost}`):p==="claude-cli"?r("ok","LLM provider","claude-cli (Claude Code subscription)"):r("warn","LLM provider",p)}catch(a){r("fail","LLM provider",a.message.split(`
1046
- `)[0])}try{let{detectEmbeddingProvider:a}=await Promise.resolve().then(()=>(Kr(),io)),c=(await Promise.resolve().then(()=>(R(),X))).default,l=await a();r("ok","Embedding provider",`${l} / ${c.embedding.model}`)}catch(a){r("fail","Embedding provider",a.message.split(`
1047
- `)[0])}try{let{listClients:a}=await Promise.resolve().then(()=>(Gs(),Us)),c=await a(),l=0;for(let d of c){if(!await d.detect())continue;l++;let p=await d.verify();p.installed?r("ok",`${d.label} integration`,"configured"):r("warn",`${d.label} integration`,`${p.reason} \u2014 run 'sigil init' to refresh`)}l===0&&r("warn","Client integrations","no AI clients detected (Claude Code / Cursor / Codex / Kiro)")}catch(a){r("warn","Client integrations",`check failed: ${a.message}`)}let i=ue(bt(),".sigil","CLAUDE.md");xt(i)?r("ok","Sigil CLAUDE.md",i):r("warn","Sigil CLAUDE.md","not found \u2014 run 'sigil init'");try{let{readRecentHookErrors:a,getUnackedErrorCount:c,HOOK_ERROR_LOG:l}=await Promise.resolve().then(()=>($i(),Ci)),d=await a(100),p=await c();if(d.length===0)r("ok","Hook errors",`none in ${l}`);else if(p>5){r("fail","Hook errors",`${p} unacked errors since last clean doctor (budget: \u22645) \u2014 see ${l}`);for(let u of d.slice(-5))console.log(` ${u.ts} [${u.hook}] ${(u.error||"").split(`
1103
+ `)[0])}try{let{detectProvider:a,isOllamaReachable:c,isClaudeCliAvailable:l}=await Promise.resolve().then(()=>(Sr(),Ai)),d=(await Promise.resolve().then(()=>($(),re))).default,p=await a();p==="anthropic"?r("ok","LLM provider","anthropic (API key set)"):p==="openai"?r("ok","LLM provider","openai (API key set)"):p==="openrouter"?r("ok","LLM provider",`openrouter (model=${d.llm.openrouterModel})`):p==="ollama"?r("ok","LLM provider",`ollama @ ${d.llm.ollamaHost}`):p==="claude-cli"?r("ok","LLM provider","claude-cli (Claude Code subscription)"):r("warn","LLM provider",p)}catch(a){r("fail","LLM provider",a.message.split(`
1104
+ `)[0])}try{let{detectEmbeddingProvider:a}=await Promise.resolve().then(()=>(Sr(),Ai)),c=(await Promise.resolve().then(()=>($(),re))).default,l=await a();r("ok","Embedding provider",`${l} / ${c.embedding.model}`)}catch(a){r("fail","Embedding provider",a.message.split(`
1105
+ `)[0])}try{let{listClients:a}=await Promise.resolve().then(()=>(po(),da)),c=await a(),l=0;for(let d of c){if(!await d.detect())continue;l++;let p=await d.verify();p.installed?r("ok",`${d.label} integration`,"configured"):r("warn",`${d.label} integration`,`${p.reason} \u2014 run 'sigil init' to refresh`)}l===0&&r("warn","Client integrations","no AI clients detected (Claude Code / Cursor / Codex / Kiro)")}catch(a){r("warn","Client integrations",`check failed: ${a.message}`)}let i=me(Nt(),".sigil","CLAUDE.md");Dt(i)?r("ok","Sigil CLAUDE.md",i):r("warn","Sigil CLAUDE.md","not found \u2014 run 'sigil init'");try{let{readRecentHookErrors:a,getUnackedErrorCount:c,HOOK_ERROR_LOG:l}=await Promise.resolve().then(()=>(_o(),Eo)),d=await a(100),p=await c();if(d.length===0)r("ok","Hook errors",`none in ${l}`);else if(p>5){r("fail","Hook errors",`${p} unacked errors since last clean doctor (budget: \u22645) \u2014 see ${l}`);for(let u of d.slice(-5))console.log(` ${u.ts} [${u.hook}] ${(u.error||"").split(`
1048
1106
  `)[0].slice(0,160)}`)}else if(p>0){r("warn","Hook errors",`${p} unacked / ${d.length} total \u2014 see ${l}`);for(let u of d.slice(-3))console.log(` ${u.ts} [${u.hook}] ${(u.error||"").split(`
1049
- `)[0].slice(0,160)}`)}else r("ok","Hook errors",`${d.length} historical errors, all acked`)}catch(a){r("warn","Hook errors",`unreadable: ${a.message}`)}console.log();let o=t.filter(a=>a.status==="fail").length,s=t.filter(a=>a.status==="warn").length;if(o)console.log(`${o} error${o>1?"s":""}, ${s} warning${s!==1?"s":""}`),process.exit(1);else if(s){console.log(`All critical checks passed. ${s} warning${s>1?"s":""}.`);try{let{markDoctorClean:a}=await Promise.resolve().then(()=>($i(),Ci));await a()}catch{}}else{console.log("All checks passed.");try{let{markDoctorClean:a}=await Promise.resolve().then(()=>($i(),Ci));await a()}catch{}}}async function GP(e){e.includes("--help")&&(console.log(`sigil export \u2014 Export knowledge base to stdout or a file
1107
+ `)[0].slice(0,160)}`)}else r("ok","Hook errors",`${d.length} historical errors, all acked`)}catch(a){r("warn","Hook errors",`unreadable: ${a.message}`)}console.log();let o=t.filter(a=>a.status==="fail").length,s=t.filter(a=>a.status==="warn").length;if(o)console.log(`${o} error${o>1?"s":""}, ${s} warning${s!==1?"s":""}`),process.exit(1);else if(s){console.log(`All critical checks passed. ${s} warning${s>1?"s":""}.`);try{let{markDoctorClean:a}=await Promise.resolve().then(()=>(_o(),Eo));await a()}catch{}}else{console.log("All checks passed.");try{let{markDoctorClean:a}=await Promise.resolve().then(()=>(_o(),Eo));await a()}catch{}}}async function zF(e){e.includes("--help")&&(console.log(`sigil export \u2014 Export knowledge base to stdout or a file
1050
1108
 
1051
1109
  Usage:
1052
1110
  sigil export [options] [> file]
@@ -1054,20 +1112,20 @@ Usage:
1054
1112
  Options:
1055
1113
  --namespace=<ns> Filter by namespace
1056
1114
  --format=<fmt> Output format: json (default) or markdown
1057
- --output=<path> Write to file instead of stdout`),process.exit(0));let t=await import("node:fs/promises"),{listFacts:r}=await Promise.resolve().then(()=>(lt(),Ut)),n=(await Promise.resolve().then(()=>(R(),X))).default,i=(await Promise.resolve().then(()=>(D(),G))).default,o=e.find(u=>u.startsWith("--namespace="))?.split("=")[1]||n.defaults.namespace,s=e.find(u=>u.startsWith("--format="))?.split("=")[1]||"json",a=e.find(u=>u.startsWith("--output="))?.split("=")[1],c=await r({namespace:o,limit:1e4}),l=await i("entity").where({namespace:o}),d=await i("document").where({namespace:o}),p;if(s==="markdown"){let u=[`# Sigil export \u2014 namespace: ${o}`,`Generated: ${new Date().toISOString()}`,""];u.push(`## Facts (${c.length})`,"");for(let m of c){let g=m.importance==="vital"?" **[VITAL]**":"";u.push(`- **[${m.category}]**${g} ${m.content} *(${m.confidence})*`)}u.push("",`## Entities (${l.length})`,"");for(let m of l)u.push(`- **${m.name}** (${m.entityType})${m.description?` \u2014 ${m.description}`:""}`);u.push("",`## Documents (${d.length})`,"");for(let m of d)u.push(`- ${m.title} (${m.sourcePath})`);p=u.join(`
1115
+ --output=<path> Write to file instead of stdout`),process.exit(0));let t=await import("node:fs/promises"),{listFacts:r}=await Promise.resolve().then(()=>(ht(),er)),n=(await Promise.resolve().then(()=>($(),re))).default,i=(await Promise.resolve().then(()=>(N(),j))).default,o=e.find(u=>u.startsWith("--namespace="))?.split("=")[1]||n.defaults.namespace,s=e.find(u=>u.startsWith("--format="))?.split("=")[1]||"json",a=e.find(u=>u.startsWith("--output="))?.split("=")[1],c=await r({namespace:o,limit:1e4}),l=await i("entity").where({namespace:o}),d=await i("document").where({namespace:o}),p;if(s==="markdown"){let u=[`# Sigil export \u2014 namespace: ${o}`,`Generated: ${new Date().toISOString()}`,""];u.push(`## Facts (${c.length})`,"");for(let m of c){let h=m.importance==="vital"?" **[VITAL]**":"";u.push(`- **[${m.category}]**${h} ${m.content} *(${m.confidence})*`)}u.push("",`## Entities (${l.length})`,"");for(let m of l)u.push(`- **${m.name}** (${m.entityType})${m.description?` \u2014 ${m.description}`:""}`);u.push("",`## Documents (${d.length})`,"");for(let m of d)u.push(`- ${m.title} (${m.sourcePath})`);p=u.join(`
1058
1116
  `)}else p=JSON.stringify({namespace:o,exportedAt:new Date().toISOString(),facts:c.map(u=>({uid:u.uid,content:u.content,category:u.category,confidence:u.confidence,importance:u.importance,createdAt:u.createdAt})),entities:l.map(u=>({uid:u.uid,name:u.name,type:u.entityType,description:u.description,mentionCount:u.mentionCount})),documents:d.map(u=>({sourcePath:u.sourcePath,title:u.title,sourceType:u.sourceType,chunkCount:u.chunkCount,factCount:u.factCount}))},null,2);a?(await t.writeFile(a,p,"utf8"),console.log(`Exported ${c.length} facts, ${l.length} entities, ${d.length} documents to ${a}`)):process.stdout.write(p+`
1059
- `),await i.destroy()}async function jP(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil namespace \u2014 Manage namespaces
1117
+ `),await i.destroy()}async function XF(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil namespace \u2014 Manage namespaces
1060
1118
 
1061
1119
  Usage:
1062
1120
  sigil namespace list
1063
1121
  sigil namespace delete <ns> [--confirm]
1064
1122
 
1065
- Namespaces isolate facts. A project, team, or context each gets its own.`),process.exit(t?0:1));let{listNamespaces:r,deleteNamespace:n}=await Promise.resolve().then(()=>(lt(),Ut)),i=(await Promise.resolve().then(()=>(D(),G))).default;if(t==="list"){let o=await r();if(!o.length)console.log("No namespaces with facts.");else{console.log("Namespaces:");for(let{namespace:s,factCount:a}of o)console.log(` ${s.padEnd(30)} ${a} fact${a===1?"":"s"}`)}}else if(t==="delete"){let o=e[1];(!o||o.startsWith("--"))&&(console.error("Provide a namespace: sigil namespace delete <ns> --confirm"),await i.destroy(),process.exit(1)),e.includes("--confirm")||(console.error(`This will delete ALL data in namespace "${o}". Run with --confirm to proceed.`),await i.destroy(),process.exit(1));let s=await n(o);console.log(`Deleted namespace "${o}":`),console.log(` ${s.factsDeleted} facts, ${s.chunksDeleted} chunks, ${s.docsDeleted} documents, ${s.entitiesDeleted} entities`)}else console.error(`Unknown subcommand: ${t}`),await i.destroy(),process.exit(1);await i.destroy()}async function WP(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil session \u2014 Inspect the active Claude Code session pod
1123
+ Namespaces isolate facts. A project, team, or context each gets its own.`),process.exit(t?0:1));let{listNamespaces:r,deleteNamespace:n}=await Promise.resolve().then(()=>(ht(),er)),i=(await Promise.resolve().then(()=>(N(),j))).default;if(t==="list"){let o=await r();if(!o.length)console.log("No namespaces with facts.");else{console.log("Namespaces:");for(let{namespace:s,factCount:a}of o)console.log(` ${s.padEnd(30)} ${a} fact${a===1?"":"s"}`)}}else if(t==="delete"){let o=e[1];(!o||o.startsWith("--"))&&(console.error("Provide a namespace: sigil namespace delete <ns> --confirm"),await i.destroy(),process.exit(1)),e.includes("--confirm")||(console.error(`This will delete ALL data in namespace "${o}". Run with --confirm to proceed.`),await i.destroy(),process.exit(1));let s=await n(o);console.log(`Deleted namespace "${o}":`),console.log(` ${s.factsDeleted} facts, ${s.chunksDeleted} chunks, ${s.docsDeleted} documents, ${s.entitiesDeleted} entities`)}else console.error(`Unknown subcommand: ${t}`),await i.destroy(),process.exit(1);await i.destroy()}async function ZF(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil session \u2014 Inspect the active Claude Code session pod
1066
1124
 
1067
1125
  Usage:
1068
1126
  sigil session current Show active session uid + summary
1069
1127
  sigil session list [--limit=10] List recent session pods
1070
- sigil session show [<uid>] Detailed view (defaults to active)`),process.exit(t?0:1));let r=(await Promise.resolve().then(()=>(D(),G))).default;try{if(t==="current"){let{getActiveCursor:n}=await Promise.resolve().then(()=>(yr(),vn)),i=await n();if(!i){console.log("No active session.");return}let o=await(await Promise.resolve().then(()=>(Se(),Te))).findByUid(i.pod_uid);if(!o){console.log(`Cursor points to ${i.pod_uid} but pod row not found.`);return}let a=(await Promise.resolve().then(()=>(qo(),Uc))).formatForDisplay(o);console.log(`Active session: ${o.uid}`),console.log(` session_id: ${a.sessionId}`),console.log(` started_at: ${o.startedAt}`),console.log(` turn_count: ${a.turnCount}`),console.log(` cwd: ${a.cwd||"\u2014"}`),console.log(` transcript: ${a.transcriptPath||"\u2014"}`),console.log(` facts in pod: ${o.memberFactCount}`),console.log(` docs in pod: ${o.memberDocCount}`)}else if(t==="list"){let n=Number(Re(e,"--limit")||10),i=await(await Promise.resolve().then(()=>(Se(),Te))).listPods({podType:"claude_session",limit:n});if(!i.length){console.log("No session pods.");return}for(let o of i){let s=o.endedAt?o.endedAt.toISOString().slice(0,16).replace("T"," "):"active";console.log(` ${o.uid} ${o.name.padEnd(40)} facts=${o.memberFactCount} ${s}`)}}else if(t==="show"){let n=e[1];if(!n){let{getActiveCursor:i}=await Promise.resolve().then(()=>(yr(),vn));n=(await i())?.pod_uid,n||(console.log("No active session. Pass a uid: sigil session show <uid>"),process.exit(1))}await nx(n)}else console.error(`Unknown subcommand: ${t}`),process.exit(1)}finally{await r.destroy()}}async function VP(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil pod \u2014 Inspect and manage memory pods
1128
+ sigil session show [<uid>] Detailed view (defaults to active)`),process.exit(t?0:1));let r=(await Promise.resolve().then(()=>(N(),j))).default;try{if(t==="current"){let{getActiveCursor:n}=await Promise.resolve().then(()=>(Lr(),Yn)),i=await n();if(!i){console.log("No active session.");return}let o=await(await Promise.resolve().then(()=>(Ae(),$e))).findByUid(i.pod_uid);if(!o){console.log(`Cursor points to ${i.pod_uid} but pod row not found.`);return}let a=(await Promise.resolve().then(()=>(Ms(),Ul))).formatForDisplay(o);console.log(`Active session: ${o.uid}`),console.log(` session_id: ${a.sessionId}`),console.log(` started_at: ${o.startedAt}`),console.log(` turn_count: ${a.turnCount}`),console.log(` cwd: ${a.cwd||"\u2014"}`),console.log(` transcript: ${a.transcriptPath||"\u2014"}`),console.log(` facts in pod: ${o.memberFactCount}`),console.log(` docs in pod: ${o.memberDocCount}`)}else if(t==="list"){let n=Number(ke(e,"--limit")||10),i=await(await Promise.resolve().then(()=>(Ae(),$e))).listPods({podType:"claude_session",limit:n});if(!i.length){console.log("No session pods.");return}for(let o of i){let s=o.endedAt?o.endedAt.toISOString().slice(0,16).replace("T"," "):"active";console.log(` ${o.uid} ${o.name.padEnd(40)} facts=${o.memberFactCount} ${s}`)}}else if(t==="show"){let n=e[1];if(!n){let{getActiveCursor:i}=await Promise.resolve().then(()=>(Lr(),Yn));n=(await i())?.pod_uid,n||(console.log("No active session. Pass a uid: sigil session show <uid>"),process.exit(1))}await Yx(n)}else console.error(`Unknown subcommand: ${t}`),process.exit(1)}finally{await r.destroy()}}async function QF(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil pod \u2014 Inspect and manage memory pods
1071
1129
 
1072
1130
  Usage:
1073
1131
  sigil pod list [--type=session|person] [--namespace=<ns>] [--limit=20]
@@ -1080,8 +1138,8 @@ Usage:
1080
1138
  sigil pod delete <uid> --confirm
1081
1139
 
1082
1140
  Pods are typed memory containers (session, person, ...). Person pods
1083
- back a canonical entity so dedup churn doesn't lose their metadata.`),process.exit(t?0:1));let r=(await Promise.resolve().then(()=>(D(),G))).default;try{if(t==="list"){let n=Re(e,"--type"),i=Re(e,"--namespace"),o=Number(Re(e,"--limit")||20),s=await(await Promise.resolve().then(()=>(Se(),Te))).listPods({podType:n,namespace:i,limit:o});if(!s.length){console.log("No pods.");return}for(let a of s)console.log(` ${a.uid} type=${a.podType.padEnd(20)} ${a.name.padEnd(40)} facts=${a.memberFactCount}`)}else if(t==="show"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod show <uid>"),process.exit(1)),await nx(n)}else if(t==="create")await KP(e);else if(t==="archive"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod archive <uid>"),process.exit(1));let i=await Promise.resolve().then(()=>(Se(),Te)),o=await i.findByUid(n);o||(console.error(`Not found: ${n}`),process.exit(1)),await i.archivePod(o.id),console.log(`Archived: ${n}`)}else if(t==="delete"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod delete <uid> --confirm"),process.exit(1)),e.includes("--confirm")||(console.error("Pass --confirm to delete (cascades pod_membership)."),process.exit(1));let i=await Promise.resolve().then(()=>(Se(),Te)),o=await i.findByUid(n);o||(console.error(`Not found: ${n}`),process.exit(1)),await i.deletePod(o.id),console.log(`Deleted: ${n}`)}else console.error(`Unknown subcommand: ${t}`),process.exit(1)}finally{await r.destroy()}}async function nx(e){let t=await Promise.resolve().then(()=>(Se(),Te)),r=await Promise.resolve().then(()=>(hr(),Gt)),n=await t.findByUid(e);n||(console.error(`Not found: ${e}`),process.exit(1));let i=typeof n.attrs=="object"?n.attrs:YP(n.attrs);console.log(`${n.uid} type=${n.podType}`),console.log(` name: ${n.name}`),console.log(` namespace: ${n.namespace}`),console.log(` status: ${n.status}`),console.log(` started_at: ${n.startedAt||"\u2014"}`),console.log(` ended_at: ${n.endedAt||"\u2014"}`),n.entityId&&console.log(` entity_id: ${n.entityId}`),n.connectionId&&console.log(` connection_id: ${n.connectionId}`),n.externalId&&console.log(` external_id: ${n.externalId}`),console.log(` facts: ${n.memberFactCount}`),console.log(` documents: ${n.memberDocCount}`),console.log(" attrs:");for(let[s,a]of Object.entries(i)){let c=typeof a=="object"?JSON.stringify(a):a;console.log(` ${s}: ${c??"\u2014"}`)}let o=await r.listMembers(n.id,{memberType:"fact",limit:10});if(o.length){console.log(`
1084
- Latest member facts (${o.length}):`);for(let s of o){let a=(s.content||"").slice(0,100);console.log(` - ${a}${s.content&&s.content.length>100?"\u2026":""}`)}}}async function KP(e){Re(e,"--type")!=="person"&&(console.error("Only --type=person is supported in PR1. Session pods are auto-created by hooks."),process.exit(1));let r=Re(e,"--name");r||(console.error("--name is required"),process.exit(1));let n=Re(e,"--namespace"),i=Re(e,"--slack"),o=Re(e,"--github"),s=Re(e,"--email"),a=Re(e,"--role"),c=Re(e,"--relationship"),l=Re(e,"--notes"),d={};i&&(d.slack={user_id:i}),o&&(d.github={username:o}),s&&(d.email=s);let p=(await Promise.resolve().then(()=>(R(),X))).default,u=n||p.defaults.namespace,m=await Promise.resolve().then(()=>(Ze(),pr)),g=await m.findByName(r,u);if(g&&g.entityType&&g.entityType!=="person"&&(console.error(`An entity named "${r}" already exists with entity_type="${g.entityType}". Use a different name or merge manually.`),process.exit(1)),g)console.log(`Linked to existing entity: ${g.uid} (${g.name})`);else{let{embed:b}=await Promise.resolve().then(()=>(Ot(),oo)),A=await b(r).catch(()=>null);g=await m.insertEntity({name:r,entityType:"person",description:a?`${a}`:null,namespace:u,externalId:i||null,embedding:A}),console.log(`Created entity: ${g.uid} (${g.name})`)}let{upsertPersonPod:y}=await Promise.resolve().then(()=>(Jc(),ly)),{pod:w,isNew:x}=await y({entityId:g.id,name:r,namespace:u,attrs:{platforms:d,role:a,relationship:c,notes:l}});console.log(`${x?"Created":"Updated"} person pod: ${w.uid}`),console.log(` entity_id: ${g.id}`),console.log(` platforms: ${JSON.stringify(d)}`),a&&console.log(` role: ${a}`),c&&console.log(` relationship: ${c}`)}function Re(e,t){let r=e.find(i=>i.startsWith(`${t}=`));if(r)return r.slice(t.length+1);let n=e.indexOf(t);return n!==-1&&n+1<e.length&&!e[n+1].startsWith("--")?e[n+1]:null}function YP(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}async function qP(e){e.includes("--help")&&(console.log(`sigil facts \u2014 List stored facts
1141
+ back a canonical entity so dedup churn doesn't lose their metadata.`),process.exit(t?0:1));let r=(await Promise.resolve().then(()=>(N(),j))).default;try{if(t==="list"){let n=ke(e,"--type"),i=ke(e,"--namespace"),o=Number(ke(e,"--limit")||20),s=await(await Promise.resolve().then(()=>(Ae(),$e))).listPods({podType:n,namespace:i,limit:o});if(!s.length){console.log("No pods.");return}for(let a of s)console.log(` ${a.uid} type=${a.podType.padEnd(20)} ${a.name.padEnd(40)} facts=${a.memberFactCount}`)}else if(t==="show"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod show <uid>"),process.exit(1)),await Yx(n)}else if(t==="create")await eB(e);else if(t==="archive"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod archive <uid>"),process.exit(1));let i=await Promise.resolve().then(()=>(Ae(),$e)),o=await i.findByUid(n);o||(console.error(`Not found: ${n}`),process.exit(1)),await i.archivePod(o.id),console.log(`Archived: ${n}`)}else if(t==="delete"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod delete <uid> --confirm"),process.exit(1)),e.includes("--confirm")||(console.error("Pass --confirm to delete (cascades pod_membership)."),process.exit(1));let i=await Promise.resolve().then(()=>(Ae(),$e)),o=await i.findByUid(n);o||(console.error(`Not found: ${n}`),process.exit(1)),await i.deletePod(o.id),console.log(`Deleted: ${n}`)}else console.error(`Unknown subcommand: ${t}`),process.exit(1)}finally{await r.destroy()}}async function Yx(e){let t=await Promise.resolve().then(()=>(Ae(),$e)),r=await Promise.resolve().then(()=>(Nr(),tr)),n=await t.findByUid(e);n||(console.error(`Not found: ${e}`),process.exit(1));let i=typeof n.attrs=="object"?n.attrs:tB(n.attrs);console.log(`${n.uid} type=${n.podType}`),console.log(` name: ${n.name}`),console.log(` namespace: ${n.namespace}`),console.log(` status: ${n.status}`),console.log(` started_at: ${n.startedAt||"\u2014"}`),console.log(` ended_at: ${n.endedAt||"\u2014"}`),n.entityId&&console.log(` entity_id: ${n.entityId}`),n.connectionId&&console.log(` connection_id: ${n.connectionId}`),n.externalId&&console.log(` external_id: ${n.externalId}`),console.log(` facts: ${n.memberFactCount}`),console.log(` documents: ${n.memberDocCount}`),console.log(" attrs:");for(let[s,a]of Object.entries(i)){let c=typeof a=="object"?JSON.stringify(a):a;console.log(` ${s}: ${c??"\u2014"}`)}let o=await r.listMembers(n.id,{memberType:"fact",limit:10});if(o.length){console.log(`
1142
+ Latest member facts (${o.length}):`);for(let s of o){let a=(s.content||"").slice(0,100);console.log(` - ${a}${s.content&&s.content.length>100?"\u2026":""}`)}}}async function eB(e){ke(e,"--type")!=="person"&&(console.error("Only --type=person is supported in PR1. Session pods are auto-created by hooks."),process.exit(1));let r=ke(e,"--name");r||(console.error("--name is required"),process.exit(1));let n=ke(e,"--namespace"),i=ke(e,"--slack"),o=ke(e,"--github"),s=ke(e,"--email"),a=ke(e,"--role"),c=ke(e,"--relationship"),l=ke(e,"--notes"),d={};i&&(d.slack={user_id:i}),o&&(d.github={username:o}),s&&(d.email=s);let p=(await Promise.resolve().then(()=>($(),re))).default,u=n||p.defaults.namespace,m=await Promise.resolve().then(()=>(it(),Or)),h=await m.findByName(r,u);if(h&&h.entityType&&h.entityType!=="person"&&(console.error(`An entity named "${r}" already exists with entity_type="${h.entityType}". Use a different name or merge manually.`),process.exit(1)),h)console.log(`Linked to existing entity: ${h.uid} (${h.name})`);else{let{embed:S}=await Promise.resolve().then(()=>(jt(),Jo)),T=await S(r).catch(()=>null);h=await m.insertEntity({name:r,entityType:"person",description:a?`${a}`:null,namespace:u,externalId:i||null,embedding:T}),console.log(`Created entity: ${h.uid} (${h.name})`)}let{upsertPersonPod:y}=await Promise.resolve().then(()=>(Jl(),vw)),{pod:w,isNew:b}=await y({entityId:h.id,name:r,namespace:u,attrs:{platforms:d,role:a,relationship:c,notes:l}});console.log(`${b?"Created":"Updated"} person pod: ${w.uid}`),console.log(` entity_id: ${h.id}`),console.log(` platforms: ${JSON.stringify(d)}`),a&&console.log(` role: ${a}`),c&&console.log(` relationship: ${c}`)}function ke(e,t){let r=e.find(i=>i.startsWith(`${t}=`));if(r)return r.slice(t.length+1);let n=e.indexOf(t);return n!==-1&&n+1<e.length&&!e[n+1].startsWith("--")?e[n+1]:null}function tB(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}async function rB(e){e.includes("--help")&&(console.log(`sigil facts \u2014 List stored facts
1085
1143
 
1086
1144
  Usage:
1087
1145
  sigil facts [options]
@@ -1089,8 +1147,8 @@ Usage:
1089
1147
  Options:
1090
1148
  --namespace=<ns> Filter by namespace
1091
1149
  --category=<c> Filter by category
1092
- --limit=<n> Max facts to show (default: 20)`),process.exit(0));let t=e.find(s=>s.startsWith("--namespace="))?.split("=")[1],r=e.find(s=>s.startsWith("--category="))?.split("=")[1],n=Number(e.find(s=>s.startsWith("--limit="))?.split("=")[1]||20),{connectOrStartDaemon:i}=await Promise.resolve().then(()=>(Ne(),nt)),o=await i();try{let{data:s}=await o.call("listFacts",{namespace:t,category:r,limit:n});if(!s.facts.length)console.log("No facts found.");else{for(let a of s.facts){let c=a.importance==="vital"?" [VITAL]":"";console.log(`${a.uid.slice(0,8)} [${a.category}]${c} ${a.content}`)}console.log(`
1093
- ${s.facts.length} fact${s.facts.length>1?"s":""} shown. Use 'sigil forget <id>' to delete.`)}}finally{await o.close()}}async function JP(e){(e.includes("--help")||!e[0]||e[0].startsWith("--"))&&(console.log(`sigil forget \u2014 Delete a fact by ID
1150
+ --limit=<n> Max facts to show (default: 20)`),process.exit(0));let t=e.find(s=>s.startsWith("--namespace="))?.split("=")[1],r=e.find(s=>s.startsWith("--category="))?.split("=")[1],n=Number(e.find(s=>s.startsWith("--limit="))?.split("=")[1]||20),{connectOrStartDaemon:i}=await Promise.resolve().then(()=>(Pe(),lt)),o=await i();try{let{data:s}=await o.call("listFacts",{namespace:t,category:r,limit:n});if(!s.facts.length)console.log("No facts found.");else{for(let a of s.facts){let c=a.importance==="vital"?" [VITAL]":"";console.log(`${a.uid.slice(0,8)} [${a.category}]${c} ${a.content}`)}console.log(`
1151
+ ${s.facts.length} fact${s.facts.length>1?"s":""} shown. Use 'sigil forget <id>' to delete.`)}}finally{await o.close()}}async function nB(e){(e.includes("--help")||!e[0]||e[0].startsWith("--"))&&(console.log(`sigil forget \u2014 Delete a fact by ID
1094
1152
 
1095
1153
  Usage:
1096
1154
  sigil forget <id>
@@ -1098,7 +1156,7 @@ Usage:
1098
1156
  The <id> can be any of:
1099
1157
  - A numeric row id (e.g. 165) \u2014 shown by 'sigil facts' and 'sigil search'
1100
1158
  - A full UID (e.g. fact-eehjLrKb80s-TQHy)
1101
- - A short UID prefix (e.g. fact-eeh)`),process.exit(e[0]?0:1));let t=e[0],{connectOrStartDaemon:r}=await Promise.resolve().then(()=>(Ne(),nt)),n=await r();try{let{data:i}=await n.call("forgetFact",{id:t});i.notFound&&(console.error(`No fact matches: ${t}`),process.exit(1)),console.log(`Forgotten: ${i.deleted.content}`)}finally{await n.close()}}async function zP(e){let t=e.filter(a=>a.startsWith("--")),r=e.filter(a=>!a.startsWith("--"));t.includes("--help")&&(console.log(`sigil remember \u2014 Save facts to memory
1159
+ - A short UID prefix (e.g. fact-eeh)`),process.exit(e[0]?0:1));let t=e[0],{connectOrStartDaemon:r}=await Promise.resolve().then(()=>(Pe(),lt)),n=await r();try{let{data:i}=await n.call("forgetFact",{id:t});i.notFound&&(console.error(`No fact matches: ${t}`),process.exit(1)),console.log(`Forgotten: ${i.deleted.content}`)}finally{await n.close()}}async function iB(e){let t=e.filter(a=>a.startsWith("--")),r=e.filter(a=>!a.startsWith("--"));t.includes("--help")&&(console.log(`sigil remember \u2014 Save facts to memory
1102
1160
 
1103
1161
  Usage:
1104
1162
  sigil remember "fact1" ["fact2" ...] Save one or more facts
@@ -1109,17 +1167,17 @@ Examples:
1109
1167
  sigil remember "I prefer tabs over spaces"
1110
1168
  sigil remember "Uses React" "Prefers TypeScript" "Deadline is April 20"
1111
1169
  sigil remember --bg "user likes dark mode" "project uses Postgres"`),process.exit(0));let n=t.includes("--bg")||t.includes("--background"),i=r.filter(Boolean);if(i.length===0&&!process.stdin.isTTY){let a=[];for await(let l of process.stdin)a.push(l);let c=Buffer.concat(a).toString("utf8").trim();c&&(i=c.split(`
1112
- `).map(l=>l.trim()).filter(Boolean))}if(i.length===0&&(console.error('Provide text to remember: sigil remember "your fact"'),process.exit(1)),n){let{spawn:a}=await import("node:child_process");a(process.execPath,[process.argv[1],"remember",...i],{detached:!0,stdio:"ignore",env:{...process.env}}).unref(),console.log(`Saving ${i.length} fact${i.length>1?"s":""} in background...`);return}let{connectOrStartDaemon:o}=await Promise.resolve().then(()=>(Ne(),nt)),s=await o();try{let{data:a}=await s.call("remember",{facts:i}),c=[];a.added&&c.push(`${a.added} new`),a.updated&&c.push(`${a.updated} updated`),a.alreadyKnown&&c.push(`${a.alreadyKnown} already known`),console.log(c.length?`Remembered. (${c.join(", ")})`:"Already known.")}finally{await s.close()}}async function XP(e){e.includes("--help")&&(console.log(`sigil register \u2014 Register Sigil as a Claude Code MCP server
1170
+ `).map(l=>l.trim()).filter(Boolean))}if(i.length===0&&(console.error('Provide text to remember: sigil remember "your fact"'),process.exit(1)),n){let{spawn:a}=await import("node:child_process");a(process.execPath,[process.argv[1],"remember",...i],{detached:!0,stdio:"ignore",env:{...process.env}}).unref(),console.log(`Saving ${i.length} fact${i.length>1?"s":""} in background...`);return}let{connectOrStartDaemon:o}=await Promise.resolve().then(()=>(Pe(),lt)),s=await o();try{let{data:a}=await s.call("remember",{facts:i}),c=[];a.added&&c.push(`${a.added} new`),a.updated&&c.push(`${a.updated} updated`),a.alreadyKnown&&c.push(`${a.alreadyKnown} already known`),console.log(c.length?`Remembered. (${c.join(", ")})`:"Already known.")}finally{await s.close()}}async function oB(e){e.includes("--help")&&(console.log(`sigil register \u2014 Register Sigil as a Claude Code MCP server
1113
1171
 
1114
1172
  Usage:
1115
1173
  sigil register [--print]
1116
1174
 
1117
1175
  Options:
1118
- --print Print the config JSON without modifying files`),process.exit(0));let t=ue(bt(),".sigil",".env"),r=xt(t)?t:Zb(process.cwd(),".env");await ZP(DP,r,e.includes("--print"))}async function ZP(e,t,r=!1){let n=await import("node:fs/promises"),i=ue(e,"src","server.js"),o={command:process.execPath,args:[i,"--mcp"],env:{DOTENV_CONFIG_PATH:t}},s=JSON.stringify({mcpServers:{sigil:o}},null,2);if(r){console.log(`
1176
+ --print Print the config JSON without modifying files`),process.exit(0));let t=me(Nt(),".sigil",".env"),r=Dt(t)?t:jx(process.cwd(),".env");await sB(HF,r,e.includes("--print"))}async function sB(e,t,r=!1){let n=await import("node:fs/promises"),i=me(e,"src","server.js"),o={command:process.execPath,args:[i,"--mcp"],env:{DOTENV_CONFIG_PATH:t}},s=JSON.stringify({mcpServers:{sigil:o}},null,2);if(r){console.log(`
1119
1177
  Add this to your Claude Code MCP config:
1120
- `),console.log(s);return}if(xu("claude --version"))try{try{Dr("claude mcp remove sigil",{stdio:"pipe"})}catch{}try{Dr("claude mcp remove cortex",{stdio:"pipe"})}catch{}Dr(`claude mcp add sigil -s user -- ${process.execPath} ${i} --mcp`,{stdio:"pipe",env:{...process.env,DOTENV_CONFIG_PATH:t}}),console.log("Registered sigil MCP server via `claude mcp add`."),console.log(` Server: ${i}`);return}catch{}let c=QP(),l=!1;for(let d of c)if(xt(d))try{let p=await n.readFile(d,"utf8"),u=JSON.parse(p);u.mcpServers=u.mcpServers||{},u.mcpServers.sigil=o,await n.writeFile(d,JSON.stringify(u,null,2),"utf8"),console.log(`Registered sigil MCP server in ${d}`),l=!0;break}catch{}l||(console.log(`Could not auto-register. Add this to your Claude Code MCP configuration:
1178
+ `),console.log(s);return}if(Fd("claude --version"))try{try{en("claude mcp remove sigil",{stdio:"pipe"})}catch{}try{en("claude mcp remove cortex",{stdio:"pipe"})}catch{}en(`claude mcp add sigil -s user -- ${process.execPath} ${i} --mcp`,{stdio:"pipe",env:{...process.env,DOTENV_CONFIG_PATH:t}}),console.log("Registered sigil MCP server via `claude mcp add`."),console.log(` Server: ${i}`);return}catch{}let c=aB(),l=!1;for(let d of c)if(Dt(d))try{let p=await n.readFile(d,"utf8"),u=JSON.parse(p);u.mcpServers=u.mcpServers||{},u.mcpServers.sigil=o,await n.writeFile(d,JSON.stringify(u,null,2),"utf8"),console.log(`Registered sigil MCP server in ${d}`),l=!0;break}catch{}l||(console.log(`Could not auto-register. Add this to your Claude Code MCP configuration:
1121
1179
  `),console.log(s),console.log(`
1122
- Or run: claude mcp add sigil -- node `+i+" --mcp"))}function QP(){let e=bt(),t=process.platform,r=[ue(e,".config","claude","claude_code_config.json"),ue(e,".claude","settings.json")];return t==="darwin"?r.push(ue(e,"Library","Application Support","Claude","claude_desktop_config.json")):t==="linux"?r.push(ue(e,".config","Claude","claude_desktop_config.json")):t==="win32"&&r.push(ue(process.env.APPDATA||"","Claude","claude_desktop_config.json")),r}async function eM(e){let t=e.filter(m=>m.startsWith("--")),r=e.filter(m=>!m.startsWith("--"));(!r.length||t.includes("--help"))&&(console.log(`sigil ingest \u2014 Ingest documents into the knowledge base
1180
+ Or run: claude mcp add sigil -- node `+i+" --mcp"))}function aB(){let e=Nt(),t=process.platform,r=[me(e,".config","claude","claude_code_config.json"),me(e,".claude","settings.json")];return t==="darwin"?r.push(me(e,"Library","Application Support","Claude","claude_desktop_config.json")):t==="linux"?r.push(me(e,".config","Claude","claude_desktop_config.json")):t==="win32"&&r.push(me(process.env.APPDATA||"","Claude","claude_desktop_config.json")),r}async function cB(e){let t=e.filter(m=>m.startsWith("--")),r=e.filter(m=>!m.startsWith("--"));(!r.length||t.includes("--help"))&&(console.log(`sigil ingest \u2014 Ingest documents into the knowledge base
1123
1181
 
1124
1182
  Usage:
1125
1183
  sigil ingest <file|url|glob> [options]
@@ -1133,8 +1191,8 @@ Examples:
1133
1191
  sigil ingest ./docs/README.md
1134
1192
  sigil ingest "docs/**/*.md"
1135
1193
  sigil ingest https://example.com/page
1136
- sigil ingest file1.md file2.md --namespace=engineering`),process.exit(0));let{readSource:n,readSources:i}=await Promise.resolve().then(()=>(ul(),hw)),{fetchSource:o}=await Promise.resolve().then(()=>(pl(),gw)),s=t.find(m=>m.startsWith("--namespace="))?.split("=")[1],a=t.includes("--skip-facts"),c=t.includes("--skip-entities"),l={success:[],failed:[],skipped:[]},d=Date.now(),{connectOrStartDaemon:p}=await Promise.resolve().then(()=>(Ne(),nt)),u=await p();try{for(let g of r)try{let y;if(g.startsWith("http://")||g.startsWith("https://"))y=[await o(g)];else if(g.includes("*")){if(y=await i(g),!y.length){console.error(`Error: No files matched pattern: ${g}`),l.failed.push({input:g,error:"no files matched"});continue}}else y=[await n(g)];for(let w of y){console.log(`Ingesting: ${w.title}`);let{data:x}=await u.call("ingestDoc",{content:w.content,title:w.title,filePath:w.sourcePath,sourceType:w.sourceType,namespace:s,metadata:w.metadata,skipFacts:a,skipEntities:c});if(x.skipped)l.skipped.push(w.title),console.log(" Skipped (unchanged)");else{l.success.push(w.title);let b=x.facts;console.log(` Done \u2014 ${x.chunkCount} chunks${b?`, ${b.total} facts (${b.added} new, ${b.updated??0} updated)`:""}`)}}}catch(y){console.error(` Failed: ${g} \u2014 ${y.message}`),l.failed.push({input:g,error:y.message})}let m=((Date.now()-d)/1e3).toFixed(1);console.log(`
1137
- Done in ${m}s \u2014 ${l.success.length} ingested, ${l.skipped.length} skipped, ${l.failed.length} failed`),l.success.length>0&&await u.call("refreshContext",{}).catch(()=>{})}finally{await u.close()}l.failed.length&&!l.success.length&&process.exit(1)}async function tM(e){let t=e.filter(u=>u.startsWith("--")),r=e.filter(u=>!u.startsWith("--")).join(" ");(!r||t.includes("--help"))&&(console.log(`sigil search \u2014 Search the knowledge base
1194
+ sigil ingest file1.md file2.md --namespace=engineering`),process.exit(0));let{readSource:n,readSources:i}=await Promise.resolve().then(()=>(uu(),$E)),{fetchSource:o}=await Promise.resolve().then(()=>(pu(),NE)),s=t.find(m=>m.startsWith("--namespace="))?.split("=")[1],a=t.includes("--skip-facts"),c=t.includes("--skip-entities"),l={success:[],failed:[],skipped:[]},d=Date.now(),{connectOrStartDaemon:p}=await Promise.resolve().then(()=>(Pe(),lt)),u=await p();try{for(let h of r)try{let y;if(h.startsWith("http://")||h.startsWith("https://"))y=[await o(h)];else if(h.includes("*")){if(y=await i(h),!y.length){console.error(`Error: No files matched pattern: ${h}`),l.failed.push({input:h,error:"no files matched"});continue}}else y=[await n(h)];for(let w of y){console.log(`Ingesting: ${w.title}`);let{data:b}=await u.call("ingestDoc",{content:w.content,title:w.title,filePath:w.sourcePath,sourceType:w.sourceType,namespace:s,metadata:w.metadata,skipFacts:a,skipEntities:c});if(b.skipped)l.skipped.push(w.title),console.log(" Skipped (unchanged)");else{l.success.push(w.title);let S=b.facts;console.log(` Done \u2014 ${b.chunkCount} chunks${S?`, ${S.total} facts (${S.added} new, ${S.updated??0} updated)`:""}`)}}}catch(y){console.error(` Failed: ${h} \u2014 ${y.message}`),l.failed.push({input:h,error:y.message})}let m=((Date.now()-d)/1e3).toFixed(1);console.log(`
1195
+ Done in ${m}s \u2014 ${l.success.length} ingested, ${l.skipped.length} skipped, ${l.failed.length} failed`),l.success.length>0&&await u.call("refreshContext",{}).catch(()=>{})}finally{await u.close()}l.failed.length&&!l.success.length&&process.exit(1)}async function lB(e){let t=e.filter(u=>u.startsWith("--")),r=e.filter(u=>!u.startsWith("--")).join(" ");(!r||t.includes("--help"))&&(console.log(`sigil search \u2014 Search the knowledge base
1138
1196
 
1139
1197
  Usage:
1140
1198
  sigil search "query" [options]
@@ -1153,9 +1211,9 @@ Examples:
1153
1211
  sigil search "authentication flow"
1154
1212
  sigil search "deploy process" --namespace=engineering
1155
1213
  sigil search "API design" --limit=5
1156
- sigil search "that decision" --scope # only this project's memory`),process.exit(0));let n=t.find(u=>u.startsWith("--namespace="))?.split("=")[1],i=n?n.split(","):void 0,o=Number(t.find(u=>u.startsWith("--limit="))?.split("=")[1]||10),s=t.includes("--graph")&&!t.includes("--no-graph"),a=t.includes("--route"),c=t.includes("--synthesize"),l=t.includes("--chunks")||c,{connectOrStartDaemon:d}=await Promise.resolve().then(()=>(Ne(),nt)),p=await d();try{let u=t.includes("--scope")?"auto":"global",{data:m}=await p.call("search",{query:r,namespaces:i,limit:o,useGraph:s,route:a,synthesize:c,includeChunks:l,podScope:u,cwd:process.cwd()});if(m.synthesized&&console.log(m.synthesized),m.facts.length){console.log(`
1157
- Facts (${m.facts.length}):`);for(let g of m.facts)console.log(` ${g.content}${Xb(g)}`)}if(m.chunks.length){console.log(`
1158
- Chunks (${m.chunks.length}):`);for(let g of m.chunks){let y=g.content?.slice(0,120).replace(/\n/g," ");console.log(` ${y}...${Xb(g)}`)}}!m.facts.length&&!m.chunks.length&&console.log("No results found.")}finally{await p.close()}}function Xb(e){let t=Number(e?.similarity);return Number.isFinite(t)&&t>0?` [sim ${t.toFixed(2)}]`:Number.isFinite(t)&&t===0?" [kw]":e?.rrfScore!=null?` [${e.rrfScore}]`:""}async function rM(e){e.includes("--help")&&(console.log(`sigil context \u2014 Refresh the hot-context snapshot in ~/.claude/CLAUDE.md
1214
+ sigil search "that decision" --scope # only this project's memory`),process.exit(0));let n=t.find(u=>u.startsWith("--namespace="))?.split("=")[1],i=n?n.split(","):void 0,o=Number(t.find(u=>u.startsWith("--limit="))?.split("=")[1]||10),s=t.includes("--graph")&&!t.includes("--no-graph"),a=t.includes("--route"),c=t.includes("--synthesize"),l=t.includes("--chunks")||c,{connectOrStartDaemon:d}=await Promise.resolve().then(()=>(Pe(),lt)),p=await d();try{let u=t.includes("--scope")?"auto":"global",{data:m}=await p.call("search",{query:r,namespaces:i,limit:o,useGraph:s,route:a,synthesize:c,includeChunks:l,podScope:u,cwd:process.cwd()});if(m.synthesized&&console.log(m.synthesized),m.facts.length){console.log(`
1215
+ Facts (${m.facts.length}):`);for(let h of m.facts)console.log(` ${h.content}${Gx(h)}`)}if(m.chunks.length){console.log(`
1216
+ Chunks (${m.chunks.length}):`);for(let h of m.chunks){let y=h.content?.slice(0,120).replace(/\n/g," ");console.log(` ${y}...${Gx(h)}`)}}!m.facts.length&&!m.chunks.length&&console.log("No results found.")}finally{await p.close()}}function Gx(e){let t=Number(e?.similarity);return Number.isFinite(t)&&t>0?` [sim ${t.toFixed(2)}]`:Number.isFinite(t)&&t===0?" [kw]":e?.rrfScore!=null?` [${e.rrfScore}]`:""}async function uB(e){e.includes("--help")&&(console.log(`sigil context \u2014 Refresh the hot-context snapshot in ~/.claude/CLAUDE.md
1159
1217
 
1160
1218
  Usage:
1161
1219
  sigil context [--namespace=<ns>] [--limit=<n>] [--explain]
@@ -1167,21 +1225,21 @@ Options:
1167
1225
  --namespace=<ns> Namespace to pull facts from (default: from config)
1168
1226
  --limit=<n> Max facts to include (default: 20)
1169
1227
  --explain Don't write the snapshot \u2014 print which kind each
1170
- fact came from instead`),process.exit(0));let t=e.find(a=>a.startsWith("--namespace="))?.split("=")[1],r=e.find(a=>a.startsWith("--limit="))?.split("=")[1],n=r?Number(r):20,i=e.includes("--explain"),{connectOrStartDaemon:o}=await Promise.resolve().then(()=>(Ne(),nt)),s=await o();try{let{data:a}=await s.call("refreshContext",{namespace:t,limit:n,explain:i,cwd:process.cwd()});if(a.mode==="explain"){console.log(`Hot-context blend for namespace=${a.namespace}:
1171
- `);for(let c of a.sections){if(console.log(` ${c.name} (budget=${c.budget}, ${c.visibility})`),c.error&&console.log(` (failed: ${c.error})`),!c.facts.length)console.log(" (no facts)");else for(let l of c.facts)console.log(` - ${(l.content||"").slice(0,120)}`);console.log("")}return}a.count?console.log(`Context refreshed \u2014 ${a.count} facts written to ~/.sigil/CLAUDE.md`):console.log("No facts found. Ingest some content first.")}finally{await s.close()}}async function nM(e){e.includes("--help")&&(console.log(`sigil status \u2014 Show knowledge base statistics
1228
+ fact came from instead`),process.exit(0));let t=e.find(a=>a.startsWith("--namespace="))?.split("=")[1],r=e.find(a=>a.startsWith("--limit="))?.split("=")[1],n=r?Number(r):20,i=e.includes("--explain"),{connectOrStartDaemon:o}=await Promise.resolve().then(()=>(Pe(),lt)),s=await o();try{let{data:a}=await s.call("refreshContext",{namespace:t,limit:n,explain:i,cwd:process.cwd()});if(a.mode==="explain"){console.log(`Hot-context blend for namespace=${a.namespace}:
1229
+ `);for(let c of a.sections){if(console.log(` ${c.name} (budget=${c.budget}, ${c.visibility})`),c.error&&console.log(` (failed: ${c.error})`),!c.facts.length)console.log(" (no facts)");else for(let l of c.facts)console.log(` - ${(l.content||"").slice(0,120)}`);console.log("")}return}a.count?console.log(`Context refreshed \u2014 ${a.count} facts written to ~/.sigil/CLAUDE.md`):console.log("No facts found. Ingest some content first.")}finally{await s.close()}}async function dB(e){e.includes("--help")&&(console.log(`sigil status \u2014 Show knowledge base statistics
1172
1230
 
1173
1231
  Usage:
1174
- sigil status [--namespace=<ns>]`),process.exit(0));let t=e.find(i=>i.startsWith("--namespace="))?.split("=")[1],{connectOrStartDaemon:r}=await Promise.resolve().then(()=>(Ne(),nt)),n=await r();try{let{data:i}=await n.call("status",{namespace:t||null}),o=Object.entries(i.podsByType||{}).map(([s,a])=>`${a} ${s}`).join(", ")||"\u2014";if(console.log(`Sigil Knowledge Base${i.namespace?` (${i.namespace})`:""}`),console.log(` Documents: ${i.documents}`),console.log(` Chunks: ${i.chunks}`),console.log(` Facts: ${i.facts} active`),console.log(` Entities: ${i.entities.documents} documents, ${i.entities.people} people, ${i.entities.topics} topics`),console.log(` Relations: ${i.relations}`),console.log(` Pods: ${o}`),i.hebbian){let s=i.hebbian.avgStrength?i.hebbian.avgStrength.toFixed(2):"0",a=i.hebbian.maxStrength?i.hebbian.maxStrength.toFixed(2):"0";if(console.log(` Co-retrieval edges: ${i.hebbian.edgeCount} (avg ${s}, max ${a})`),i.hebbian.topPairs.length){console.log(" Top pairs by decayed strength:");for(let c of i.hebbian.topPairs)console.log(` ${c.a} \u2194 ${c.b} (decayed ${Number(c.decayed).toFixed(2)})`)}}}finally{await n.close()}}async function iM(e){e.includes("--help")&&(console.log(`sigil maintain \u2014 Run periodic memory maintenance
1232
+ sigil status [--namespace=<ns>]`),process.exit(0));let t=e.find(i=>i.startsWith("--namespace="))?.split("=")[1],{connectOrStartDaemon:r}=await Promise.resolve().then(()=>(Pe(),lt)),n=await r();try{let{data:i}=await n.call("status",{namespace:t||null}),o=Object.entries(i.podsByType||{}).map(([s,a])=>`${a} ${s}`).join(", ")||"\u2014";if(console.log(`Sigil Knowledge Base${i.namespace?` (${i.namespace})`:""}`),console.log(` Documents: ${i.documents}`),console.log(` Chunks: ${i.chunks}`),console.log(` Facts: ${i.facts} active`),console.log(` Entities: ${i.entities.documents} documents, ${i.entities.people} people, ${i.entities.topics} topics`),console.log(` Relations: ${i.relations}`),console.log(` Pods: ${o}`),i.hebbian){let s=i.hebbian.avgStrength?i.hebbian.avgStrength.toFixed(2):"0",a=i.hebbian.maxStrength?i.hebbian.maxStrength.toFixed(2):"0";if(console.log(` Co-retrieval edges: ${i.hebbian.edgeCount} (avg ${s}, max ${a})`),i.hebbian.topPairs.length){console.log(" Top pairs by decayed strength:");for(let c of i.hebbian.topPairs)console.log(` ${c.a} \u2194 ${c.b} (decayed ${Number(c.decayed).toFixed(2)})`)}}}finally{await n.close()}}async function pB(e){e.includes("--help")&&(console.log(`sigil maintain \u2014 Run periodic memory maintenance
1175
1233
 
1176
1234
  Usage:
1177
1235
  sigil maintain
1178
1236
 
1179
1237
  Promotes 'fresh' facts (older than 1h with importance=vital or any access) to 'stable',
1180
1238
  closes 'editing' windows older than 30 minutes back to 'stable', and consolidates
1181
- co-retrieval edges. Safe to run as a cron \u2014 fully idempotent.`),process.exit(0));let t=(await Promise.resolve().then(()=>(D(),G))).default,{promoteFreshFacts:r,closeEditingWindows:n,getLifecycleStats:i}=await Promise.resolve().then(()=>(Jb(),qb)),{consolidateCoRetrievalEdges:o}=await Promise.resolve().then(()=>(rl(),Ty)).catch(()=>({})),{consolidateEntityCoRetrievalEdges:s}=await Promise.resolve().then(()=>(_i(),Zo)).catch(()=>({})),a=await i(),c=await r(),l=await n(),d=o?await o():0,p=s?await s():0,u=await i();console.log("Memory maintenance:"),console.log(` Stages \u2014 fresh: ${a.fresh}\u2192${u.fresh}, stable: ${a.stable}\u2192${u.stable}, editing: ${a.editing}\u2192${u.editing}`),console.log(` Promoted (fresh\u2192stable): ${c}`),console.log(` Closed editing windows (editing\u2192stable): ${l}`),d&&console.log(` Fact co-retrieval edges consolidated: ${d}`),p&&console.log(` Entity co-retrieval edges consolidated: ${p}`),await t.destroy()}async function oM(e){e.includes("--help")&&(console.log(`sigil migrate \u2014 Run database migrations
1239
+ co-retrieval edges. Safe to run as a cron \u2014 fully idempotent.`),process.exit(0));let t=(await Promise.resolve().then(()=>(N(),j))).default,{promoteFreshFacts:r,closeEditingWindows:n,getLifecycleStats:i}=await Promise.resolve().then(()=>(Hx(),Bx)),{consolidateCoRetrievalEdges:o}=await Promise.resolve().then(()=>(ru(),jw)).catch(()=>({})),{consolidateEntityCoRetrievalEdges:s}=await Promise.resolve().then(()=>(Ji(),Us)).catch(()=>({})),a=await i(),c=await r(),l=await n(),d=o?await o():0,p=s?await s():0,u=await i();console.log("Memory maintenance:"),console.log(` Stages \u2014 fresh: ${a.fresh}\u2192${u.fresh}, stable: ${a.stable}\u2192${u.stable}, editing: ${a.editing}\u2192${u.editing}`),console.log(` Promoted (fresh\u2192stable): ${c}`),console.log(` Closed editing windows (editing\u2192stable): ${l}`),d&&console.log(` Fact co-retrieval edges consolidated: ${d}`),p&&console.log(` Entity co-retrieval edges consolidated: ${p}`),await t.destroy()}async function fB(e){e.includes("--help")&&(console.log(`sigil migrate \u2014 Run database migrations
1182
1240
 
1183
1241
  Usage:
1184
- sigil migrate [--rollback]`),process.exit(0));let t=(await Promise.resolve().then(()=>(D(),G))).default,{MIGRATIONS_DIR:r}=await Promise.resolve().then(()=>(B(),Qs));if(e.includes("--rollback")){let[n,i]=await t.migrate.rollback({directory:r});console.log(`Rolled back batch ${n}: ${i.length} migrations`);for(let o of i)console.log(` ${o}`)}else{let[n,i]=await t.migrate.latest({directory:r});if(i.length){console.log(`Ran batch ${n}: ${i.length} migrations`);for(let o of i)console.log(` ${o}`)}else console.log("Already up to date.")}await t.destroy()}async function sM(e){e.includes("--help")&&(console.log(`sigil reset \u2014 Wipe Sigil's setup and re-run init
1242
+ sigil migrate [--rollback]`),process.exit(0));let t=(await Promise.resolve().then(()=>(N(),j))).default,{MIGRATIONS_DIR:r}=await Promise.resolve().then(()=>(M(),Oo));if(e.includes("--rollback")){let[n,i]=await t.migrate.rollback({directory:r});console.log(`Rolled back batch ${n}: ${i.length} migrations`);for(let o of i)console.log(` ${o}`)}else{let[n,i]=await t.migrate.latest({directory:r});if(i.length){console.log(`Ran batch ${n}: ${i.length} migrations`);for(let o of i)console.log(` ${o}`)}else console.log("Already up to date.")}await t.destroy()}async function mB(e){e.includes("--help")&&(console.log(`sigil reset \u2014 Wipe Sigil's setup and re-run init
1185
1243
 
1186
1244
  Usage:
1187
1245
  sigil reset Show a confirmation prompt before wiping
@@ -1192,8 +1250,8 @@ Wipes:
1192
1250
  ~/.claude/CLAUDE.md removes the @~/.sigil/CLAUDE.md import line
1193
1251
 
1194
1252
  Then automatically runs 'sigil init' to walk you through fresh setup.
1195
- Hooks in ~/.claude/settings.json are re-registered by init (idempotent).`),process.exit(0));let t=e.includes("--confirm")||e.includes("--yes")||e.includes("-y"),r=bt(),n=ue(r,".sigil"),i=ue(r,".claude","CLAUDE.md");if(!t){let s=await Promise.resolve().then(()=>($s(),Cs));s.intro("Sigil \u2014 reset"),s.note(["This will:",` - delete ${n} (DB, config, CLAUDE.md, all stored facts)`,` - remove the @~/.sigil/CLAUDE.md import line from ${i}`," - re-run sigil init from scratch (you will be re-prompted for provider + key)","","Hooks in ~/.claude/settings.json stay registered \u2014 init refreshes them."].join(`
1196
- `),"About to reset");let a=await s.confirm({message:"Wipe everything and re-init?",initialValue:!1});(s.isCancel(a)||a!==!0)&&(s.cancel("Reset cancelled. Nothing changed."),process.exit(0))}try{Dr('pkill -f "sigil/dist/server.js --mcp"',{stdio:"pipe"})}catch{}try{Dr('pkill -f ".sigil/db" ',{stdio:"pipe"})}catch{}let o=await import("node:fs/promises");xt(n)&&await o.rm(n,{recursive:!0,force:!0}),await aM(),console.log(""),console.log("Wipe complete. Starting init..."),console.log(""),await tx([])}async function aM(){let e=await import("node:fs/promises"),t=ue(bt(),".claude","CLAUDE.md");if(!xt(t))return!1;let r=await e.readFile(t,"utf8"),n=bt(),i=[ue(n,".sigil","CLAUDE.md"),ue(n,".smara","CLAUDE.md"),ue(n,".cortex","CLAUDE.md")],o=r;for(let s of i){let a=new RegExp(`^@${cM(s)}\\s*\\n?`,"gm");o=o.replace(a,"")}return o===r?!1:(await e.writeFile(t,o,"utf8"),!0)}function cM(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function lM(e){(e.length===0||e.includes("--help"))&&(console.log(`sigil why \u2014 Explain a search result
1253
+ Hooks in ~/.claude/settings.json are re-registered by init (idempotent).`),process.exit(0));let t=e.includes("--confirm")||e.includes("--yes")||e.includes("-y"),r=Nt(),n=me(r,".sigil"),i=me(r,".claude","CLAUDE.md");if(!t){let s=await Promise.resolve().then(()=>(Ma(),Pa));s.intro("Sigil \u2014 reset"),s.note(["This will:",` - delete ${n} (DB, config, CLAUDE.md, all stored facts)`,` - remove the @~/.sigil/CLAUDE.md import line from ${i}`," - re-run sigil init from scratch (you will be re-prompted for provider + key)","","Hooks in ~/.claude/settings.json stay registered \u2014 init refreshes them."].join(`
1254
+ `),"About to reset");let a=await s.confirm({message:"Wipe everything and re-init?",initialValue:!1});(s.isCancel(a)||a!==!0)&&(s.cancel("Reset cancelled. Nothing changed."),process.exit(0))}try{en('pkill -f "sigil/dist/server.js --mcp"',{stdio:"pipe"})}catch{}try{en('pkill -f ".sigil/db" ',{stdio:"pipe"})}catch{}let o=await import("node:fs/promises");Dt(n)&&await o.rm(n,{recursive:!0,force:!0}),await hB(),console.log(""),console.log("Wipe complete. Starting init..."),console.log(""),await Hd([])}async function hB(){let e=await import("node:fs/promises"),t=me(Nt(),".claude","CLAUDE.md");if(!Dt(t))return!1;let r=await e.readFile(t,"utf8"),n=Nt(),i=[me(n,".sigil","CLAUDE.md"),me(n,".smara","CLAUDE.md"),me(n,".cortex","CLAUDE.md")],o=r;for(let s of i){let a=new RegExp(`^@${gB(s)}\\s*\\n?`,"gm");o=o.replace(a,"")}return o===r?!1:(await e.writeFile(t,o,"utf8"),!0)}function gB(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function yB(e){(e.length===0||e.includes("--help"))&&(console.log(`sigil why \u2014 Explain a search result
1197
1255
 
1198
1256
  Usage:
1199
1257
  sigil why "<query>" [--namespace=<ns>] [--limit=5] [--pod-scope=auto|global|<name>,<name>]
@@ -1201,7 +1259,7 @@ Usage:
1201
1259
  Runs the same hybrid search the UserPromptSubmit hook uses and prints
1202
1260
  the per-fact breakdown \u2014 vector score, keyword score, importance,
1203
1261
  recency, kind / pod source \u2014 so you can see WHY each fact made the
1204
- top-K for a given query.`),process.exit(0));let t=(await Promise.resolve().then(()=>(R(),X))).default,r=(await Promise.resolve().then(()=>(D(),G))).default,n=e.findIndex(g=>g.startsWith("--")),o=(n===-1?e:e.slice(0,n)).join(" ").replace(/^["']|["']$/g,"");o||(console.error('Provide a query: sigil why "<query>"'),process.exit(1));let s=e.find(g=>g.startsWith("--namespace="))?.split("=")[1]||t.defaults.namespace,a=e.find(g=>g.startsWith("--limit="))?.split("=")[1],c=a?Number(a):5,l=e.find(g=>g.startsWith("--pod-scope="))?.split("=")[1],d=null;l&&(l==="auto"||l==="global"?d=l:d=l.split(",").map(g=>g.trim()).filter(Boolean));let{search:p}=await Promise.resolve().then(()=>(ll(),cl)),u=await p(o,{namespaces:[s],limit:c,route:!0,expand:!0,synthesize:!1,podScope:d??"auto"});if(console.log(`Query: ${o}`),console.log(`Namespace: ${s}`),console.log(`Pod scope: ${JSON.stringify(d??"auto")}`),console.log(""),u.matchedEntity&&(console.log(`Matched entity: ${u.matchedEntity.name} (${u.matchedEntity.type}, id:${u.matchedEntity.id})`),console.log("")),!u.facts.length){console.log("No facts returned."),await r.destroy();return}let m=await Promise.resolve().then(()=>(hr(),Gt));console.log(`Facts (${u.facts.length}):`);for(let[g,y]of u.facts.entries()){let w=await m.listPodsForMember("fact",y.id).catch(()=>[]),x=w.length?w.map(v=>`${v.podType}:${v.name}`).join(", "):"\u2014",b=y.importance||`score=${y.importanceScore??"?"}`,A=y.coRetrievalBoost!=null?` hebbian=${y.coRetrievalBoost}`:"";console.log(` ${g+1}. [rrf=${y.rrfScore??"?"}${A}] [${y.category}] [${b}] [conf=${y.confidence}]`),console.log(` pods: ${x}`),console.log(` content: ${(y.content||"").slice(0,140)}`)}await r.destroy()}async function uM(e){let t=e[0];(!t||t==="--help")&&(console.log(`sigil kind \u2014 Inspect registered pod kinds
1262
+ top-K for a given query.`),process.exit(0));let t=(await Promise.resolve().then(()=>($(),re))).default,r=(await Promise.resolve().then(()=>(N(),j))).default,n=e.findIndex(h=>h.startsWith("--")),o=(n===-1?e:e.slice(0,n)).join(" ").replace(/^["']|["']$/g,"");o||(console.error('Provide a query: sigil why "<query>"'),process.exit(1));let s=e.find(h=>h.startsWith("--namespace="))?.split("=")[1]||t.defaults.namespace,a=e.find(h=>h.startsWith("--limit="))?.split("=")[1],c=a?Number(a):5,l=e.find(h=>h.startsWith("--pod-scope="))?.split("=")[1],d=null;l&&(l==="auto"||l==="global"?d=l:d=l.split(",").map(h=>h.trim()).filter(Boolean));let{search:p}=await Promise.resolve().then(()=>(lu(),cu)),u=await p(o,{namespaces:[s],limit:c,route:!0,expand:!0,synthesize:!1,podScope:d??"auto"});if(console.log(`Query: ${o}`),console.log(`Namespace: ${s}`),console.log(`Pod scope: ${JSON.stringify(d??"auto")}`),console.log(""),u.matchedEntity&&(console.log(`Matched entity: ${u.matchedEntity.name} (${u.matchedEntity.type}, id:${u.matchedEntity.id})`),console.log("")),!u.facts.length){console.log("No facts returned."),await r.destroy();return}let m=await Promise.resolve().then(()=>(Nr(),tr));console.log(`Facts (${u.facts.length}):`);for(let[h,y]of u.facts.entries()){let w=await m.listPodsForMember("fact",y.id).catch(()=>[]),b=w.length?w.map(I=>`${I.podType}:${I.name}`).join(", "):"\u2014",S=y.importance||`score=${y.importanceScore??"?"}`,T=y.coRetrievalBoost!=null?` hebbian=${y.coRetrievalBoost}`:"";console.log(` ${h+1}. [rrf=${y.rrfScore??"?"}${T}] [${y.category}] [${S}] [conf=${y.confidence}]`),console.log(` pods: ${b}`),console.log(` content: ${(y.content||"").slice(0,140)}`)}await r.destroy()}async function wB(e){let t=e[0];(!t||t==="--help")&&(console.log(`sigil kind \u2014 Inspect registered pod kinds
1205
1263
 
1206
1264
  Usage:
1207
1265
  sigil kind list
@@ -1209,4 +1267,4 @@ Usage:
1209
1267
 
1210
1268
  list Show every registered pod kind with budget / visibility / TTL.
1211
1269
  show Show one kind's full contract, schema doc path, and active scope
1212
- for the current shell context.`),process.exit(0)),await Promise.resolve().then(()=>(wi(),el));let{list:r,get:n,activeKinds:i,getSchemaDoc:o}=await Promise.resolve().then(()=>(In(),Qc));if(t==="list"){let s=r();console.log(`Registered kinds (${s.length}):`);for(let l of s){let d=l.ttlDays?`${l.ttlDays}d TTL`:"no decay";console.log(` ${l.name.padEnd(18)} budget=${l.hotContextBudget} ${l.visibility.padEnd(8)} ${d}`),console.log(` ${l.description}`)}let a=(await Promise.resolve().then(()=>(R(),X))).default.defaults.namespace,c=await i({namespace:a,cwd:process.cwd()});console.log(""),console.log(`Active for cwd=${process.cwd()}: ${c.length?c.map(l=>l.kind.name).join(", "):"(none)"}`);return}if(t==="show"){let s=e[1];s||(console.error("Provide a kind name: sigil kind show <name>"),process.exit(1));let a=n(s);a||(console.error(`Unknown kind: ${s}`),process.exit(1)),console.log(`Kind: ${a.name}`),console.log(` description: ${a.description}`),console.log(` identityField: ${a.identityField??"\u2014"}`),console.log(` visibility: ${a.visibility}`),console.log(` activeMode: ${a.activeMode}`),console.log(` hotContextBudget: ${a.hotContextBudget}`),console.log(` retrievalWeights: ${JSON.stringify(a.retrievalWeights)}`),console.log(` importanceDefault: ${a.importanceDefault}`),console.log(` ttlDays: ${a.ttlDays??"no decay"}`),console.log(` writePolicy: ${a.writePolicy}`),console.log(` schemaDocPath: ${a.schemaDocPath??"\u2014"}`);let c=await o(a);console.log(` schemaDoc chars: ${c?c.length:0}`);return}console.error(`Unknown subcommand: ${t}`),process.exit(1)}function xu(e){try{return Dr(e,{stdio:"pipe"}),!0}catch{return!1}}async function ix(e){try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function dM(){return RP("ollama",["serve"],{detached:!0,stdio:"ignore"})}async function pM(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await ix(e))return!0;await new Promise(n=>setTimeout(n,250))}return!1}function fM(e){return NP(e).toString("hex")}
1270
+ for the current shell context.`),process.exit(0)),await Promise.resolve().then(()=>(qi(),eu));let{list:r,get:n,activeKinds:i,getSchemaDoc:o}=await Promise.resolve().then(()=>(qn(),Ql));if(t==="list"){let s=r();console.log(`Registered kinds (${s.length}):`);for(let l of s){let d=l.ttlDays?`${l.ttlDays}d TTL`:"no decay";console.log(` ${l.name.padEnd(18)} budget=${l.hotContextBudget} ${l.visibility.padEnd(8)} ${d}`),console.log(` ${l.description}`)}let a=(await Promise.resolve().then(()=>($(),re))).default.defaults.namespace,c=await i({namespace:a,cwd:process.cwd()});console.log(""),console.log(`Active for cwd=${process.cwd()}: ${c.length?c.map(l=>l.kind.name).join(", "):"(none)"}`);return}if(t==="show"){let s=e[1];s||(console.error("Provide a kind name: sigil kind show <name>"),process.exit(1));let a=n(s);a||(console.error(`Unknown kind: ${s}`),process.exit(1)),console.log(`Kind: ${a.name}`),console.log(` description: ${a.description}`),console.log(` identityField: ${a.identityField??"\u2014"}`),console.log(` visibility: ${a.visibility}`),console.log(` activeMode: ${a.activeMode}`),console.log(` hotContextBudget: ${a.hotContextBudget}`),console.log(` retrievalWeights: ${JSON.stringify(a.retrievalWeights)}`),console.log(` importanceDefault: ${a.importanceDefault}`),console.log(` ttlDays: ${a.ttlDays??"no decay"}`),console.log(` writePolicy: ${a.writePolicy}`),console.log(` schemaDocPath: ${a.schemaDocPath??"\u2014"}`);let c=await o(a);console.log(` schemaDoc chars: ${c?c.length:0}`);return}console.error(`Unknown subcommand: ${t}`),process.exit(1)}function Fd(e){try{return en(e,{stdio:"pipe"}),!0}catch{return!1}}async function qx(e){try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function EB(){return FF("ollama",["serve"],{detached:!0,stdio:"ignore"})}async function _B(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await qx(e))return!0;await new Promise(n=>setTimeout(n,250))}return!1}function SB(e){return BF(e).toString("hex")}