@anmol-srv/sigil 0.11.0 → 0.12.1

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/daemon.js CHANGED
@@ -1,47 +1,49 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __sigilCreateRequire } from 'node:module'; const require = __sigilCreateRequire(import.meta.url);
3
- var Zm=Object.defineProperty;var u=(e,t)=>()=>(e&&(t=e(e=0)),t);var b=(e,t)=>{for(var r in t)Zm(e,r,{get:t[r],enumerable:!0})};import{fileURLToPath as Qm}from"node:url";import{dirname as ua,join as C}from"node:path";import{existsSync as da}from"node:fs";import{homedir as eh}from"node:os";function th(){let e=ua(Qm(import.meta.url));for(let t=0;t<10;t++){if(da(C(e,"package.json"))&&da(C(e,"prompts")))return e;let r=ua(e);if(r===e)break;e=r}return process.cwd()}var me,K,nt,fa,k,j,Yv,qn,pa,Kv,qv,ma,Vv,zv,Ue,qt,Vn,Vt,zn,Jn,Xn,Ge,ha,Jv,Xv,L=u(()=>{me=th(),K=C(me,"prompts"),nt=C(me,"src","db","migrations"),fa=eh(),k=C(fa,".sigil"),j=C(k,".env"),Yv=C(k,"db"),qn=C(k,"CLAUDE.md"),pa=C(k,"schemas"),Kv=C(k,".hook-errors.log"),qv=C(k,".last-clean-doctor"),ma=C(k,".active-session.json"),Vv=C(k,".stop-cursor.json"),zv=C(k,".hook-dedup.json"),Ue=C(k,"sock"),qt=C(k,"sigild.pid"),Vn=C(k,"sigild.log"),Vt=C(k,"gui.token"),zn=C(me,"dist","gui"),Jn=C(me,"src","gui","web"),Xn=C(k,"iroh"),Ge=C(k,"identity.key"),ha=C(fa,".claude"),Jv=C(ha,"settings.json"),Xv=C(ha,"CLAUDE.md")});var to={};b(to,{currentAgent:()=>uh,currentDeviceId:()=>lh,currentRequestContext:()=>eo,runWithRequestContext:()=>ch});import{AsyncLocalStorage as sh}from"node:async_hooks";function ch(e,t){return Fr.run(e,t)}function eo(){return Fr.getStore()||null}function lh(){return Fr.getStore()?.device?.id??null}function uh(){return Fr.getStore()?.agent??process.env.SIGIL_AGENT??null}var Fr,$r=u(()=>{Fr=new sh});var io={};b(io,{clearRegistry:()=>oo,getDbHealth:()=>ph,getRegistry:()=>no,setDbHealth:()=>fh,setRegistry:()=>ro});function ro(e){Br=e}function no(){if(!Br)throw new Error("rpc registry not initialised \u2014 is the daemon running?");return Br}function oo(){Br=null}function fh(e){Ia={healthy:null,error:null,checkedAt:null,...e}}function ph(){return Ia}var Br,Ia,zt=u(()=>{Br=null;Ia={healthy:null,error:null,checkedAt:null}});var Oa={};b(Oa,{EventBus:()=>Ur,default:()=>H});var Ur,Sh,H,ot=u(()=>{Ur=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 o of this.subs)try{o(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}},Sh=new Ur,H=Sh});function Ma(e){let t=e.split(`
4
- `),r=[],n=null,o=[];for(let s of t){let c=s.match(/^(#{1,6})\s+(.+)/);c?(o.length&&r.push({heading:n||"Introduction",text:o.join(`
5
- `).trim()}),n=c[2].trim(),o=[]):o.push(s)}o.length&&r.push({heading:n||"Content",text:o.join(`
6
- `).trim()});let i=r.map(s=>s.text).join(`
7
-
8
- `),a=Bh(t)||null;return{text:i,sections:r,metadata:{title:a}}}function Bh(e){for(let t of e){let r=t.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var Fa=u(()=>{});function co(e){let t=e.split(/\n{2,}/).map(n=>n.trim()).filter(Boolean),r=t.length>1?t.map((n,o)=>({heading:`Section ${o+1}`,text:n})):[{heading:"Content",text:e.trim()}];return{text:e.trim(),sections:r,metadata:{}}}var $a=u(()=>{});function Ba(e){let t=Hh(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,`
3
+ var Uw=Object.create;var $i=Object.defineProperty;var Gw=Object.getOwnPropertyDescriptor;var jw=Object.getOwnPropertyNames;var Ww=Object.getPrototypeOf,Kw=Object.prototype.hasOwnProperty;var Yw=(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 u=(e,t)=>()=>(e&&(t=e(e=0)),t);var J=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),x=(e,t)=>{for(var r in t)$i(e,r,{get:t[r],enumerable:!0})},Vw=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of jw(t))!Kw.call(e,o)&&o!==r&&$i(e,o,{get:()=>t[o],enumerable:!(n=Gw(t,o))||n.enumerable});return e};var qw=(e,t,r)=>(r=e!=null?Uw(Ww(e)):{},Vw(t||!e||!e.__esModule?$i(r,"default",{value:e,enumerable:!0}):r,e));var kc={};x(kc,{CLAUDE_HOME:()=>ji,CLAUDE_MD_PATH:()=>iE,CLAUDE_SETTINGS_PATH:()=>oE,GUI_WEB_DIR:()=>nE,GUI_WEB_DIR_BUILT:()=>en,GUI_WEB_DIR_DEV:()=>no,MIGRATIONS_DIR:()=>ke,PKG_ROOT:()=>Z,PROMPTS_DIR:()=>Q,SIGIL_ACTIVE_SESSION_CURSOR:()=>Gi,SIGIL_DAEMON_LOG:()=>Ie,SIGIL_DAEMON_PID:()=>Yt,SIGIL_DAEMON_SOCK:()=>qe,SIGIL_DB_PATH:()=>Zw,SIGIL_ENV_PATH:()=>W,SIGIL_GUI_TOKEN:()=>qt,SIGIL_HEARTBEAT:()=>Vt,SIGIL_HOME:()=>M,SIGIL_HOOK_DEDUP:()=>rE,SIGIL_HOOK_ERRORS_LOG:()=>Qw,SIGIL_IDENTITY_KEY:()=>Je,SIGIL_IROH_DIR:()=>oo,SIGIL_LAST_CLEAN_DOCTOR:()=>eE,SIGIL_MD_PATH:()=>to,SIGIL_ONBOARDING_STATE:()=>ro,SIGIL_SCHEMAS_DIR:()=>Ui,SIGIL_STOP_CURSOR:()=>tE});import{fileURLToPath as Jw}from"node:url";import{dirname as Dc,join as N}from"node:path";import{existsSync as Lc}from"node:fs";import{homedir as zw}from"node:os";function Xw(){let e=Dc(Jw(import.meta.url));for(let t=0;t<10;t++){if(Lc(N(e,"package.json"))&&Lc(N(e,"prompts")))return e;let r=Dc(e);if(r===e)break;e=r}return process.cwd()}var Z,Q,ke,Pc,M,W,Zw,to,Ui,Qw,eE,Gi,tE,rE,qe,Yt,Ie,Vt,ro,qt,en,no,nE,oo,Je,ji,oE,iE,C=u(()=>{Z=Xw(),Q=N(Z,"prompts"),ke=N(Z,"src","db","migrations"),Pc=zw(),M=N(Pc,".sigil"),W=N(M,".env"),Zw=N(M,"db"),to=N(M,"CLAUDE.md"),Ui=N(M,"schemas"),Qw=N(M,".hook-errors.log"),eE=N(M,".last-clean-doctor"),Gi=N(M,".active-session.json"),tE=N(M,".stop-cursor.json"),rE=N(M,".hook-dedup.json"),qe=N(M,"sock"),Yt=N(M,"sigild.pid"),Ie=N(M,"sigild.log"),Vt=N(M,"heartbeat.json"),ro=N(M,"onboarding-state.json"),qt=N(M,"gui.token"),en=N(Z,"dist","gui"),no=N(Z,"src","gui","web"),nE=en,oo=N(M,"iroh"),Je=N(M,"identity.key"),ji=N(Pc,".claude"),oE=N(ji,"settings.json"),iE=N(ji,"CLAUDE.md")});var Uc={};x(Uc,{detectRunningDaemon:()=>Ki,dirname:()=>cE,ensureSigilHome:()=>Vi,installShutdownHooks:()=>Yi,isPidAlive:()=>Fc,readPidFile:()=>$c,removePidFile:()=>io,removeSocketFile:()=>so,writePidFile:()=>Wi});import{readFile as sE,writeFile as aE,unlink as Mc,mkdir as Hc}from"node:fs/promises";import{existsSync as Bc}from"node:fs";import{dirname as cE}from"node:path";function Fc(e){if(!e||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function $c(){if(!Bc(Yt))return null;try{let e=(await sE(Yt,"utf8")).trim(),t=Number(e);return Number.isFinite(t)?t:null}catch{return null}}async function Wi(){await Hc(M,{recursive:!0}),await aE(Yt,String(process.pid),"utf8")}async function io(){try{await Mc(Yt)}catch{}}async function so(){try{await Mc(qe)}catch{}}async function Ki(){let e=await $c();return e&&Fc(e)?e:(e&&await io(),Bc(qe)&&await so(),null)}function Yi(e){let t=!1,r=async n=>{if(!t){t=!0;try{await e(n)}catch(o){process.stderr.write(`[sigild] shutdown error: ${o.message}
4
+ `)}finally{process.exit(0)}}};process.on("SIGTERM",()=>r("SIGTERM")),process.on("SIGINT",()=>r("SIGINT")),process.on("SIGHUP",()=>r("SIGHUP"))}async function Vi(){await Hc(M,{recursive:!0})}var ao=u(()=>{C()});var jc={};x(jc,{buildUrlConnection:()=>re,classifyProvider:()=>ze,directMigrationUrl:()=>qi,isPooledUrl:()=>co});function re(e){if(!e)throw new Error("url driver: SIGIL_DATABASE_URL is empty");let t;try{t=new URL(e)}catch(i){throw new Error(`url driver: invalid URL \u2014 ${i.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=uE(t.hostname,r),o={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&&(o.ssl=n),t.searchParams.get("application_name")||(o.application_name="sigil"),o}function uE(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(!Gc.some(r=>r.test(e)))return lE.some(r=>r.test(e))?{rejectUnauthorized:!0}:{rejectUnauthorized:!1}}function co(e){try{let t=new URL(e).hostname;return/-pooler\./i.test(t)||/\.pooler\.supabase\.com$/i.test(t)}catch{return!1}}function qi(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()):co(e)?null:e}function ze(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":Gc.some(r=>r.test(t))?"local":"unknown"}catch{return"unknown"}}var lE,Gc,_t=u(()=>{lE=[/\.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],Gc=[/^localhost$/i,/^127\.0\.0\.1$/,/^::1$/,/\.local$/i]});var Jt={};x(Jt,{diagnoseConnectionError:()=>pE,diagnoseError:()=>uo,ensurePostgresDatabase:()=>fE,probeSigilConnection:()=>dE,probeUrlConnection:()=>rn});import lo from"pg";async function dE({host:e,port:t,database:r,user:n,password:o}){let i=new lo.Client({host:e,port:t,database:r,user:n,password:o});try{return await i.connect(),await i.query("SELECT 1"),{ok:!0}}catch(s){return{ok:!1,code:s.code,message:s.message}}finally{try{await i.end()}catch{}}}async function rn(e){let t,r="unknown";try{t=re(e),r=ze(e)}catch(i){return{ok:!1,stage:"parse",error:i.message}}let n=new lo.Client(t),o=Date.now();try{await n.connect()}catch(i){return{ok:!1,stage:"connect",provider:r,error:i.message,code:i.code}}try{let i=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()-o,database:i.rows[0].db,serverVersion:i.rows[0].version,pgvector:s.rowCount>0}}catch(i){return{ok:!1,stage:"query",provider:r,error:i.message,code:i.code}}finally{try{await n.end()}catch{}}}async function fE({admin:{host:e,port:t,user:r,password:n},sigil:{database:o,user:i,password:s}}){let a=new lo.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",[o])).rowCount===0?(await a.query(`CREATE DATABASE ${Xe(o)}`),c.push(`created database "${o}"`)):c.push(`database "${o}" already exists \u2014 left as-is`),(await a.query("SELECT 1 FROM pg_roles WHERE rolname = $1",[i])).rowCount===0?(await a.query(`CREATE USER ${Xe(i)} WITH PASSWORD ${Wc(s)}`),c.push(`created user "${i}"`)):(await a.query(`ALTER USER ${Xe(i)} WITH PASSWORD ${Wc(s)}`),c.push(`user "${i}" exists \u2014 password reset to match .env`)),await a.query(`GRANT ALL PRIVILEGES ON DATABASE ${Xe(o)} TO ${Xe(i)}`)}finally{await a.end()}let l=new lo.Client({host:e,port:t,database:o,user:r,password:n});await l.connect();try{await l.query(`GRANT ALL ON SCHEMA public TO ${Xe(i)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${Xe(i)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${Xe(i)}`);try{await l.query("CREATE EXTENSION IF NOT EXISTS vector"),c.push("pgvector extension ready")}catch(d){throw d.code===tn.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 uo(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===tn.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===tn.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===tn.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===tn.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(`
5
+ `)[0],fixHint:null}}function pE(e){let t=uo(e);return{kind:t.kind,hint:t.fixHint||t.humanMessage}}function Xe(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`Refusing to quote invalid SQL identifier: ${e}`);return`"${e}"`}function Wc(e){return`'${String(e).replace(/'/g,"''")}'`}var tn,Me=u(()=>{_t();tn={DB_DOES_NOT_EXIST:"3D000",CONNECTION_REFUSED:"ECONNREFUSED",AUTH_FAILED:"28P01",EXTENSION_NOT_AVAILABLE:"0A000",INTERNAL_ERROR:"XX000"}});function Yc(e,{data:t}={}){let r=Kc[e?.kind]||"DB_ERROR";return new H({errorCode:r,message:e?.humanMessage,hint:e?.fixHint,data:t})}function Ji(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 Vc(e){if(e instanceof H)return Ji({code:e.errorCode,message:e.message,hint:e.hint??zt[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 i=[...new Set(e.errors.map(s=>s.code).filter(Boolean))];i.length>1&&(n=` (and ${e.errors.length-1} more: ${i.slice(1).join(", ")})`)}else e?.cause&&(!r||r==="AggregateError")&&(t=e.cause,r=t.message||r);let o=uo(t);if(o&&o.kind!=="other"){let i=Kc[o.kind]||"DB_ERROR";return Ji({code:i,message:o.humanMessage+n,hint:o.fixHint??zt[i]?.hint??void 0},e)}return Ji({code:t?.code||e?.code||mE,message:r+n,hint:void 0},e)}var mE,zt,Kc,H,Xt=u(()=>{Me();mE="handler_error",zt={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."}},Kc={"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"},H=class extends Error{constructor({errorCode:t,message:r,hint:n,data:o}={}){let i=zt[t]||zt.INTERNAL;super(r||i.message),this.name="AppError",this.errorCode=t&&zt[t]?t:"INTERNAL",this.statusCode=i.statusCode,this.hint=n??i.hint??null,this.data=o}static get codes(){return zt}}});var Xi={};x(Xi,{currentAgent:()=>wE,currentDeviceId:()=>yE,currentRequestContext:()=>zi,runWithRequestContext:()=>gE});import{AsyncLocalStorage as hE}from"node:async_hooks";function gE(e,t){return fo.run(e,t)}function zi(){return fo.getStore()||null}function yE(){return fo.getStore()?.device?.id??null}function wE(){return fo.getStore()?.agent??process.env.SIGIL_AGENT??null}var fo,po=u(()=>{fo=new hE});var rs={};x(rs,{clearRegistry:()=>es,getDbHealth:()=>ts,getRegistry:()=>Qi,setDbHealth:()=>_E,setRegistry:()=>Zi});function Zi(e){mo=e}function Qi(){if(!mo)throw new Error("rpc registry not initialised \u2014 is the daemon running?");return mo}function es(){mo=null}function _E(e){Jc={healthy:null,error:null,checkedAt:null,...e}}function ts(){return Jc}var mo,Jc,Zt=u(()=>{mo=null;Jc={healthy:null,error:null,checkedAt:null}});var Zc={};x(Zc,{EventBus:()=>go,default:()=>K});var go,NE,K,Qt=u(()=>{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 o of this.subs)try{o(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}},NE=new go,K=NE});function sl(e){let t=e.split(`
6
+ `),r=[],n=null,o=[];for(let a of t){let c=a.match(/^(#{1,6})\s+(.+)/);c?(o.length&&r.push({heading:n||"Introduction",text:o.join(`
7
+ `).trim()}),n=c[2].trim(),o=[]):o.push(a)}o.length&&r.push({heading:n||"Content",text:o.join(`
8
+ `).trim()});let i=r.map(a=>a.text).join(`
9
+
10
+ `),s=YE(t)||null;return{text:i,sections:r,metadata:{title:s}}}function YE(e){for(let t of e){let r=t.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var al=u(()=>{});function is(e){let t=e.split(/\n{2,}/).map(n=>n.trim()).filter(Boolean),r=t.length>1?t.map((n,o)=>({heading:`Section ${o+1}`,text:n})):[{heading:"Content",text:e.trim()}];return{text:e.trim(),sections:r,metadata:{}}}var cl=u(()=>{});function ll(e){let t=VE(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,`
9
11
  `),r=r.replace(/<br\s*\/?>/gi,`
10
12
  `),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,`
11
13
 
12
- `),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:t}}}function Hh(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return t?t[1].trim():null}var Ha=u(()=>{});function Ua(e,{language:t}={}){let r=t||Wh(e),n=Uh(e,r);return{text:e.trim(),sections:n,metadata:{language:r}}}function Uh(e,t){let r=e.split(`
13
- `),n=[],o="Header",i=[],a=!1,s=0;for(let c of r){let l=Gh(c,t);l&&s===0?(i.length&&n.push({heading:o,text:i.join(`
14
- `).trim()}),o=l,i=[c],a=!0):i.push(c);for(let d of c)d==="{"&&s++,d==="}"&&(s=Math.max(0,s-1))}return i.length&&n.push({heading:o,text:i.join(`
15
- `).trim()}),n.length<=1?jh(e):n.filter(c=>c.text)}function Gh(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+)/],o=[/^(?:async\s+)?def\s+(\w+)/,/^class\s+(\w+)/],i=[/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/,/^type\s+(\w+)/],a=[...n,...o,...i];for(let s of a){let c=r.match(s);if(c)return c[1]||c[0].slice(0,40)}return null}function jh(e){return e.split(/\n{2,}/).map((r,n)=>({heading:`Block ${n+1}`,text:r.trim()})).filter(r=>r.text)}function Wh(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 Ga=u(()=>{});function ja(e){let t;try{t=typeof e=="string"?JSON.parse(e):e}catch{return{text:e,sections:[{heading:"Content",text:e}],metadata:{}}}let r=lo(t);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function lo(e,t=0){if(e==null)return"";if(Array.isArray(e))return e.map((r,n)=>typeof r=="object"&&r!==null?`Item ${n+1}:
16
- ${lo(r,t+1)}`:`- ${r}`).join(`
14
+ `),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:t}}}function VE(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return t?t[1].trim():null}var ul=u(()=>{});function dl(e,{language:t}={}){let r=t||XE(e),n=qE(e,r);return{text:e.trim(),sections:n,metadata:{language:r}}}function qE(e,t){let r=e.split(`
15
+ `),n=[],o="Header",i=[],s=!1,a=0;for(let c of r){let l=JE(c,t);l&&a===0?(i.length&&n.push({heading:o,text:i.join(`
16
+ `).trim()}),o=l,i=[c],s=!0):i.push(c);for(let d of c)d==="{"&&a++,d==="}"&&(a=Math.max(0,a-1))}return i.length&&n.push({heading:o,text:i.join(`
17
+ `).trim()}),n.length<=1?zE(e):n.filter(c=>c.text)}function JE(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+)/],o=[/^(?:async\s+)?def\s+(\w+)/,/^class\s+(\w+)/],i=[/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/,/^type\s+(\w+)/],s=[...n,...o,...i];for(let a of s){let c=r.match(a);if(c)return c[1]||c[0].slice(0,40)}return null}function zE(e){return e.split(/\n{2,}/).map((r,n)=>({heading:`Block ${n+1}`,text:r.trim()})).filter(r=>r.text)}function XE(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 fl=u(()=>{});function pl(e){let t;try{t=typeof e=="string"?JSON.parse(e):e}catch{return{text:e,sections:[{heading:"Content",text:e}],metadata:{}}}let r=ss(t);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function ss(e,t=0){if(e==null)return"";if(Array.isArray(e))return e.map((r,n)=>typeof r=="object"&&r!==null?`Item ${n+1}:
18
+ ${ss(r,t+1)}`:`- ${r}`).join(`
17
19
  `);if(typeof e=="object"){let r=" ".repeat(t);return Object.entries(e).filter(([,n])=>n!=null).map(([n,o])=>typeof o=="object"?`${r}${n}:
18
- ${lo(o,t+1)}`:`${r}${n}: ${o}`).join(`
19
- `)}return String(e)}var Wa=u(()=>{});function Ya(e,{format:t,filePath:r,contentType:n}={}){let o=t||Vh(n)||zh(r)||Jh(e);return(qh[o]||co)(e)}function Vh(e){if(!e)return null;let t=e.split(";")[0].trim();return Kh[t]||null}function zh(e){if(!e)return null;let t=e.match(/\.[^.]+$/)?.[0]?.toLowerCase();return t&&Yh[t]||null}function Jh(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 Yh,Kh,qh,Ka=u(()=>{Fa();$a();Ha();Ga();Wa();Yh={".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"},Kh={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},qh={markdown:Ma,text:co,html:Ba,code:Ua,json:ja}});function Xh(e,{maxTokens:t=512,overlapTokens:r=50}={}){if(!e?.trim())return[];let n=t*4,o=r*4;if(e.length<=n)return[{content:e.trim(),index:0}];let i=Zh(e),a=[],s="",c="";for(let l of i){if(l.length>n){s.trim()&&(a.push({content:s.trim(),index:a.length}),c=uo(s,o),s="");let d=Qh(l,n,o);for(let p of d)a.push({content:p.trim(),index:a.length});c=uo(a[a.length-1].content,o);continue}(s+l).length>n?(a.push({content:s.trim(),index:a.length}),c=uo(s,o),s=c+l):s+=l}return s.trim()&&a.push({content:s.trim(),index:a.length}),a}function Va(e,t={}){let r=[];for(let{heading:n,text:o}of e){if(!o?.trim())continue;let i=Xh(o,t);for(let a of i)r.push({content:a.content,index:r.length,sectionHeading:n})}return r}function Zh(e){return e.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function Qh(e,t,r){let n=[],o=0;for(;o<e.length;){let i=Math.min(o+t,e.length);if(n.push(e.slice(o,i)),o=i-r,o>=e.length)break}return n}function uo(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 qa,fo=u(()=>{qa=Object.freeze({version:3,size:512,overlap:50,contextualPrefix:!0})});var q={};b(q,{default:()=>g});var N,za,eg,g,S=u(()=>{N=(e,t)=>process.env[e]??t,za=N("SIGIL_DB_TYPE","postgres");if(za!=="postgres")throw new Error(`SIGIL_DB_TYPE=${za} is no longer supported. Sigil 0.10.0+ is Postgres-only.
20
+ ${ss(o,t+1)}`:`${r}${n}: ${o}`).join(`
21
+ `)}return String(e)}var ml=u(()=>{});function hl(e,{format:t,filePath:r,contentType:n}={}){let o=t||t_(n)||r_(r)||n_(e);return(e_[o]||is)(e)}function t_(e){if(!e)return null;let t=e.split(";")[0].trim();return QE[t]||null}function r_(e){if(!e)return null;let t=e.match(/\.[^.]+$/)?.[0]?.toLowerCase();return t&&ZE[t]||null}function n_(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 ZE,QE,e_,gl=u(()=>{al();cl();ul();fl();ml();ZE={".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"},QE={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},e_={markdown:sl,text:is,html:ll,code:dl,json:pl}});function o_(e,{maxTokens:t=512,overlapTokens:r=50}={}){if(!e?.trim())return[];let n=t*4,o=r*4;if(e.length<=n)return[{content:e.trim(),index:0}];let i=i_(e),s=[],a="",c="";for(let l of i){if(l.length>n){a.trim()&&(s.push({content:a.trim(),index:s.length}),c=as(a,o),a="");let d=s_(l,n,o);for(let p of d)s.push({content:p.trim(),index:s.length});c=as(s[s.length-1].content,o);continue}(a+l).length>n?(s.push({content:a.trim(),index:s.length}),c=as(a,o),a=c+l):a+=l}return a.trim()&&s.push({content:a.trim(),index:s.length}),s}function wl(e,t={}){let r=[];for(let{heading:n,text:o}of e){if(!o?.trim())continue;let i=o_(o,t);for(let s of i)r.push({content:s.content,index:r.length,sectionHeading:n})}return r}function i_(e){return e.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function s_(e,t,r){let n=[],o=0;for(;o<e.length;){let i=Math.min(o+t,e.length);if(n.push(e.slice(o,i)),o=i-r,o>=e.length)break}return n}function as(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 yl,cs=u(()=>{yl=Object.freeze({version:3,size:512,overlap:50,contextualPrefix:!0})});var ne={};x(ne,{default:()=>g});var v,El,a_,g,A=u(()=>{v=(e,t)=>process.env[e]??t,El=v("SIGIL_DB_TYPE","postgres");if(El!=="postgres")throw new Error(`SIGIL_DB_TYPE=${El} is no longer supported. Sigil 0.10.0+ is Postgres-only.
20
22
  PGlite was deprecated; existing PGlite data at ~/.sigil/db is preserved but unreachable from this version.
21
23
  Set SIGIL_DB_TYPE=postgres in ~/.sigil/.env and configure SIGIL_DB_HOST / PORT / NAME / USER / PASSWORD.
22
- Run \`sigil init\` for an interactive setup.`);eg={db:{type:"postgres",get url(){return N("SIGIL_DATABASE_URL",N("DATABASE_URL",""))||null},get host(){return N("SIGIL_DB_HOST","localhost")},get port(){return Number(N("SIGIL_DB_PORT",5432))},get database(){return N("SIGIL_DB_NAME","sigil")},get user(){return N("SIGIL_DB_USER","sigil_app")},get password(){return N("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:N("SIGIL_HTTP_ENABLED","true")!=="false",host:N("SIGIL_HTTP_HOST","127.0.0.1"),port:Number(N("SIGIL_HTTP_PORT",7777))},network:{mode:N("SIGIL_MODE","solo"),enabled:N("SIGIL_NETWORK_ENABLED",null)===null?N("SIGIL_MODE","solo")!=="solo":N("SIGIL_NETWORK_ENABLED","false")!=="false",masterNodeId:N("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:N("SIGIL_SYNTHESIZE","true")!=="false",synthesizeModel:N("SIGIL_SYNTH_MODEL","")},ingest:{eagerExtract:N("SIGIL_EAGER_EXTRACT","true")!=="false"},hebbian:{entity:{enabled:N("SIGIL_HEBBIAN_ENTITY_ENABLED",null,"true")!=="false",eta:Number(N("SIGIL_HEBBIAN_ENTITY_ETA",null,1)),cap:Number(N("SIGIL_HEBBIAN_ENTITY_CAP",null,50)),halfLifeDays:Number(N("SIGIL_HEBBIAN_ENTITY_HALF_LIFE_DAYS",null,30)),minEffective:Number(N("SIGIL_HEBBIAN_ENTITY_MIN_EFFECTIVE",null,.5)),rrfWeight:Number(N("SIGIL_HEBBIAN_ENTITY_RRF_WEIGHT",null,.3)),maxWriteEntities:Number(N("SIGIL_HEBBIAN_ENTITY_MAX_WRITE",null,12)),expandPerSeed:Number(N("SIGIL_HEBBIAN_ENTITY_EXPAND_PER_SEED",null,3))}}},g=eg});var Ja={};b(Ja,{chat:()=>tg,meta:()=>rg,setup:()=>ng});async function tg(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.openaiModel,o=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&o.unshift({role:"system",content:"Respond with valid JSON."});let i={model:n,messages:o};r&&(i.response_format={type:"json_object"});let a=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${g.llm.openaiApiKey}`},body:JSON.stringify(i)});if(!a.ok){let d=await a.text();throw new Error(`OpenAI error ${a.status}: ${d}`)}let s=await a.json(),c=s.choices[0].message.content.trim(),l=s.usage||{};return{text:c,inputTokens:l.prompt_tokens||0,outputTokens:l.completion_tokens||0,model:n}}async function ng({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:o=>{if(!o&&!r)return"API key is required";if(o&&!o.startsWith("sk-"))return'OpenAI keys start with "sk-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{OPENAI_API_KEY:n||r}}}var rg,Xa=u(()=>{S();rg={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});var Za={};b(Za,{buildLocalConnection:()=>se});function se(e){return{host:e.db.host,port:e.db.port,database:e.db.database,user:e.db.user,password:e.db.password}}var it=u(()=>{});var es={};b(es,{buildUrlConnection:()=>ce,classifyProvider:()=>be,directMigrationUrl:()=>po,isPooledUrl:()=>jr});function ce(e){if(!e)throw new Error("url driver: SIGIL_DATABASE_URL is empty");let t;try{t=new URL(e)}catch(i){throw new Error(`url driver: invalid URL \u2014 ${i.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=ig(t.hostname,r),o={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&&(o.ssl=n),t.searchParams.get("application_name")||(o.application_name="sigil"),o}function ig(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(!Qa.some(r=>r.test(e)))return og.some(r=>r.test(e))?{rejectUnauthorized:!0}:{rejectUnauthorized:!1}}function jr(e){try{let t=new URL(e).hostname;return/-pooler\./i.test(t)||/\.pooler\.supabase\.com$/i.test(t)}catch{return!1}}function po(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()):jr(e)?null:e}function be(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":Qa.some(r=>r.test(t))?"local":"unknown"}catch{return"unknown"}}var og,Qa,at=u(()=>{og=[/\.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],Qa=[/^localhost$/i,/^127\.0\.0\.1$/,/^::1$/,/\.local$/i]});var ho={};b(ho,{buildLocalConnection:()=>se,buildUrlConnection:()=>ce,classifyProvider:()=>be,selectDriver:()=>mo});function mo(e){let t=e.db.url;return t?{kind:"url",provider:be(t),connection:ce(t)}:{kind:"local",provider:"local",connection:se(e)}}var Wr=u(()=>{it();at()});var P={};b(P,{default:()=>m});import ag from"knex";function sg(e){return Array.isArray(e)?e.map(go):e&&typeof e=="object"?go(e):e}function cg(e,t){return t(lg(e))}function go(e){if(!e||typeof e!="object"||e instanceof Date)return e;if(Array.isArray(e))return e.map(go);let t={};for(let[r,n]of Object.entries(e))t[r.replace(/_([a-z])/g,(o,i)=>i.toUpperCase())]=n;return t}function lg(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}var ts,rs,m,A=u(()=>{S();Wr();ts=mo(g),rs=ag({client:"pg",connection:ts.connection,pool:{min:2,max:10},postProcessResponse:sg,wrapIdentifier:cg});rs.__sigilDriver=ts;m=rs});function Z(e){return Math.ceil((e||"").length/4)}function yo(e,t,r){let n=ug[e];return n?(t*n.input+r*n.output)/1e6:0}function Zt({provider:e,model:t,caller:r,input:n,response:o,inputTokens:i,outputTokens:a,cost:s,durationMs:c,status:l,error:d}){m("llm_log").insert({provider:e,model:t,caller:r,input:n?.slice(0,1e4),response:o?.slice(0,1e4),inputTokens:i,outputTokens:a,cost:s,durationMs:c,status:l,error:d?.slice(0,2e3)}).catch(p=>console.error("[llm-log] Write failed:",p.message))}async function wo(e,t=3){for(let r=1;r<=t;r++)try{return await e()}catch(n){if(r===t)throw n;let o=Math.min(1e3*2**(r-1),1e4);await new Promise(i=>setTimeout(i,o))}}var ug,Qt=u(()=>{A();ug={"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 ns={};b(ns,{chat:()=>fg,meta:()=>pg,setup:()=>mg});async function dg(){if(!Eo){let{default:e}=await import("@anthropic-ai/sdk");Eo=new e({apiKey:g.llm.apiKey})}return Eo}async function fg(e,{model:t,jsonMode:r=!1}={}){let n=t||"claude-haiku-4-5-20251001",o=await dg(),i=[{role:"user",content:e}],a=r?"Respond with valid JSON only. No explanation or wrapping.":void 0,s=await o.messages.create({model:n,max_tokens:4096,messages:i,...a&&{system:a}});return{text:s.content[0].text.trim(),inputTokens:s.usage?.input_tokens||Z(e),outputTokens:s.usage?.output_tokens||Z(s.content[0].text),model:n}}async function mg({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:o=>{if(!o&&!r)return"API key is required";if(o&&!o.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 Eo,pg,os=u(()=>{S();Qt();Eo=null;pg={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var as={};b(as,{chat:()=>gg,meta:()=>yg,setup:()=>wg});async function gg(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.openrouterModel;if(!g.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 o=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&o.unshift({role:"system",content:"Respond with valid JSON."});let i={model:n,messages:o};r&&(i.response_format={type:"json_object"});let a=(g.llm.openrouterBaseUrl||hg).replace(/\/+$/,""),s={"Content-Type":"application/json",Authorization:`Bearer ${g.llm.openrouterApiKey}`};g.llm.openrouterReferer&&(s["HTTP-Referer"]=g.llm.openrouterReferer),g.llm.openrouterTitle&&(s["X-Title"]=g.llm.openrouterTitle);let c=await fetch(`${a}/chat/completions`,{method:"POST",headers:s,body:JSON.stringify(i)});if(!c.ok){let h=await c.text();throw new Error(`OpenRouter error ${c.status}: ${h}`)}let l=await c.json(),p=(l.choices?.[0]?.message?.content||"").trim(),f=l.usage||{};return{text:p,inputTokens:f.prompt_tokens||0,outputTokens:f.completion_tokens||0,model:l.model||n}}async function wg({existing:e,clack:t}){let r={},n=e.OPENROUTER_API_KEY||"",o=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(o))return null;r.OPENROUTER_API_KEY=o||n;let i=e.LLM_OPENROUTER_MODEL||"",a=await t.text({message:"OpenRouter model (vendor/model)",placeholder:i||is,validate:c=>{if(c&&!c.includes("/"))return'OpenRouter models are "vendor/model" \u2014 e.g. google/gemini-flash-latest'}});if(t.isCancel(a))return null;r.LLM_OPENROUTER_MODEL=a||i||is;let s=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(s))return null;if(s==="yes"){let c=await t.text({message:"Extraction model (high-volume; cheap matters)",placeholder:e.LLM_EXTRACTION_MODEL||st.extraction});if(t.isCancel(c))return null;r.LLM_EXTRACTION_MODEL=c||e.LLM_EXTRACTION_MODEL||st.extraction;let l=await t.text({message:"Decision model (AUDM; smart matters)",placeholder:e.LLM_DECISION_MODEL||st.decision});if(t.isCancel(l))return null;r.LLM_DECISION_MODEL=l||e.LLM_DECISION_MODEL||st.decision;let d=await t.text({message:"Synthesis model (read-time answer composition)",placeholder:e.SIGIL_SYNTH_MODEL||st.synthesis});if(t.isCancel(d))return null;r.SIGIL_SYNTH_MODEL=d||e.SIGIL_SYNTH_MODEL||st.synthesis}return t.note(`OpenRouter can drive both LLM calls and embeddings.
24
+ Run \`sigil init\` for an interactive setup.`);a_={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))}}},g=a_});var _l={};x(_l,{chat:()=>c_,meta:()=>l_,setup:()=>u_});async function c_(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.openaiModel,o=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&o.unshift({role:"system",content:"Respond with valid JSON."});let i={model:n,messages:o};r&&(i.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 ${g.llm.openaiApiKey}`},body:JSON.stringify(i)});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 u_({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:o=>{if(!o&&!r)return"API key is required";if(o&&!o.startsWith("sk-"))return'OpenAI keys start with "sk-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{OPENAI_API_KEY:n||r}}}var l_,xl=u(()=>{A();l_={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});var Sl={};x(Sl,{buildLocalConnection:()=>Oe});function Oe(e){return{host:e.db.host,port:e.db.port,database:e.db.database,user:e.db.user,password:e.db.password}}var er=u(()=>{});var us={};x(us,{buildLocalConnection:()=>Oe,buildUrlConnection:()=>re,classifyProvider:()=>ze,selectDriver:()=>ls});function ls(e){let t=e.db.url;return t?{kind:"url",provider:ze(t),connection:re(t)}:{kind:"local",provider:"local",connection:Oe(e)}}var wo=u(()=>{er();_t()});var F={};x(F,{default:()=>h});import d_ from"knex";function f_(e){return Array.isArray(e)?e.map(ds):e&&typeof e=="object"?ds(e):e}function p_(e,t){return t(m_(e))}function ds(e){if(!e||typeof e!="object"||e instanceof Date)return e;if(Array.isArray(e))return e.map(ds);let t={};for(let[r,n]of Object.entries(e))t[r.replace(/_([a-z])/g,(o,i)=>i.toUpperCase())]=n;return t}function m_(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}var Al,bl,h,T=u(()=>{A();wo();Al=ls(g),bl=d_({client:"pg",connection:Al.connection,pool:{min:2,max:10},postProcessResponse:f_,wrapIdentifier:p_});bl.__sigilDriver=Al;h=bl});function he(e){return Math.ceil((e||"").length/4)}function fs(e,t,r){let n=h_[e];return n?(t*n.input+r*n.output)/1e6:0}function sn({provider:e,model:t,caller:r,input:n,response:o,inputTokens:i,outputTokens:s,cost:a,durationMs:c,status:l,error:d}){h("llm_log").insert({provider:e,model:t,caller:r,input:n?.slice(0,1e4),response:o?.slice(0,1e4),inputTokens:i,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 ps(e,t=3){for(let r=1;r<=t;r++)try{return await e()}catch(n){if(r===t)throw n;let o=Math.min(1e3*2**(r-1),1e4);await new Promise(i=>setTimeout(i,o))}}var h_,an=u(()=>{T();h_={"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 Tl={};x(Tl,{chat:()=>y_,meta:()=>w_,setup:()=>E_});async function g_(){if(!ms){let{default:e}=await import("@anthropic-ai/sdk");ms=new e({apiKey:g.llm.apiKey})}return ms}async function y_(e,{model:t,jsonMode:r=!1}={}){let n=t||"claude-haiku-4-5-20251001",o=await g_(),i=[{role:"user",content:e}],s=r?"Respond with valid JSON only. No explanation or wrapping.":void 0,a=await o.messages.create({model:n,max_tokens:4096,messages:i,...s&&{system:s}});return{text:a.content[0].text.trim(),inputTokens:a.usage?.input_tokens||he(e),outputTokens:a.usage?.output_tokens||he(a.content[0].text),model:n}}async function E_({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:o=>{if(!o&&!r)return"API key is required";if(o&&!o.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 ms,w_,Il=u(()=>{A();an();ms=null;w_={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var Rl={};x(Rl,{chat:()=>x_,meta:()=>S_,setup:()=>A_});async function x_(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.openrouterModel;if(!g.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 o=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&o.unshift({role:"system",content:"Respond with valid JSON."});let i={model:n,messages:o};r&&(i.response_format={type:"json_object"});let s=(g.llm.openrouterBaseUrl||__).replace(/\/+$/,""),a={"Content-Type":"application/json",Authorization:`Bearer ${g.llm.openrouterApiKey}`};g.llm.openrouterReferer&&(a["HTTP-Referer"]=g.llm.openrouterReferer),g.llm.openrouterTitle&&(a["X-Title"]=g.llm.openrouterTitle);let c=await fetch(`${s}/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(i)});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(),f=l.usage||{};return{text:p,inputTokens:f.prompt_tokens||0,outputTokens:f.completion_tokens||0,model:l.model||n}}async function A_({existing:e,clack:t}){let r={},n=e.OPENROUTER_API_KEY||"",o=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(o))return null;r.OPENROUTER_API_KEY=o||n;let i=e.LLM_OPENROUTER_MODEL||"",s=await t.text({message:"OpenRouter model (vendor/model)",placeholder:i||Ol,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||i||Ol;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||tr.extraction});if(t.isCancel(c))return null;r.LLM_EXTRACTION_MODEL=c||e.LLM_EXTRACTION_MODEL||tr.extraction;let l=await t.text({message:"Decision model (AUDM; smart matters)",placeholder:e.LLM_DECISION_MODEL||tr.decision});if(t.isCancel(l))return null;r.LLM_DECISION_MODEL=l||e.LLM_DECISION_MODEL||tr.decision;let d=await t.text({message:"Synthesis model (read-time answer composition)",placeholder:e.SIGIL_SYNTH_MODEL||tr.synthesis});if(t.isCancel(d))return null;r.SIGIL_SYNTH_MODEL=d||e.SIGIL_SYNTH_MODEL||tr.synthesis}return t.note(`OpenRouter can drive both LLM calls and embeddings.
23
25
  You will pick an embedding provider in the next step \u2014 "openrouter" is an option,
24
- or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var hg,yg,is,st,ss=u(()=>{S();hg="https://openrouter.ai/api/v1";yg={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},is="google/gemini-flash-latest",st={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var cs={};b(cs,{chat:()=>Sg,meta:()=>Ag,setup:()=>Ig});import{spawn as Eg}from"node:child_process";function bg(e,t){let r=g.llm.cliTimeout||12e4;return new Promise((n,o)=>{let i=Eg("claude",e,{stdio:["pipe","pipe","pipe"]}),a=setTimeout(()=>{i.kill("SIGTERM"),o(new Error(`claude CLI timed out after ${r}ms`))},r),s="",c="";i.stdout.on("data",l=>{s+=l}),i.stderr.on("data",l=>{c+=l}),i.on("error",l=>{clearTimeout(a),o(new Error(`Failed to spawn claude CLI: ${l.message}`))}),i.on("close",l=>{clearTimeout(a),n({stdout:s,stderr:c,code:l})}),i.stdin.write(t),i.stdin.end()})}async function Sg(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.cliModel||"haiku",o=_g[n]||n,i=["-p","--model",o,"--output-format","json"];r&&i.push("--json-schema",xg);let{stdout:a,stderr:s,code:c}=await bg(i,e);if(c!==0)throw new Error(`claude CLI exited ${c}: ${(s||a).slice(0,500)}`);let l;try{l=JSON.parse(a)}catch{return{text:a.trim(),inputTokens:Z(e),outputTokens:Z(a),model:o}}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||Z(e),outputTokens:p.output_tokens||Z(d),model:o,cost:l.total_cost_usd||0}}async function Ig(){return{env:{}}}var _g,xg,Ag,ls=u(()=>{S();Qt();_g={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},xg=JSON.stringify({type:"object",additionalProperties:!0});Ag={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var us={};b(us,{chat:()=>vg,meta:()=>Tg,setup:()=>Og});async function vg(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.ollamaModel,o=`${g.llm.ollamaHost}/api/chat`,i={model:n,messages:[{role:"user",content:e}],stream:!1};r&&(i.format="json");let a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!a.ok){let c=await a.text();throw new Error(`Ollama error ${a.status}: ${c}`)}let s=await a.json();return{text:s.message.content.trim(),inputTokens:s.prompt_eval_count||Z(e),outputTokens:s.eval_count||Z(s.message.content),model:n}}async function Og({existing:e,clack:t}){let r=e.OLLAMA_HOST||"http://localhost:11434",n=await t.text({message:"Ollama host",placeholder:r,initialValue:r,validate:o=>{if(o&&!/^https?:\/\//.test(o))return"Must start with http:// or https://"}});return t.isCancel(n)?null:{env:{OLLAMA_HOST:n||r}}}var Tg,ds=u(()=>{S();Qt();Tg={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function _o(e,t){let r={};for(let n of e)r[n[t]]=n;return r}function Yr(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 Kr=u(()=>{});var fs={};b(fs,{embedBatch:()=>Cg});async function Cg(e,{model:t,ollamaHost:r}){let n=Yr(e,Ng),o=[];for(let i of n){let a=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:t,input:i})});if(!a.ok)throw new Error(`Ollama embed failed: ${a.status} ${await a.text()}`);let s=await a.json();o.push(...s.embeddings)}return o}var Ng,ps=u(()=>{Kr();Ng=50});var ms={};b(ms,{embedBatch:()=>Rg});async function Rg(e,{model:t,openaiApiKey:r,dimensions:n}={}){let o={model:t,input:e};n&&/^text-embedding-3/.test(t)&&(o.dimensions=n);let i=await fetch("https://api.openai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(o)});if(!i.ok)throw new Error(`OpenAI embed failed: ${i.status} ${await i.text()}`);return(await i.json()).data.map(s=>s.embedding)}var hs=u(()=>{});var gs={};b(gs,{embedBatch:()=>Lg});async function Lg(e,{model:t,voyageApiKey:r,inputType:n="document",dimensions:o}={}){if(!r)throw new Error("VOYAGE_API_KEY is not set. Get one at dashboard.voyageai.com.");let i=Yr(e,Dg),a=[];for(let s of i){let c={input:s,model:t||"voyage-3-large",input_type:n==="query"?"query":"document"};o&&(c.output_dimension=o);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 f=await l.text();throw new Error(`Voyage embed failed: ${l.status} ${f}`)}let p=[...(await l.json()).data].sort((f,h)=>f.index-h.index);a.push(...p.map(f=>f.embedding))}return a}var Dg,ys=u(()=>{Kr();Dg=50});var ws={};b(ws,{embedBatch:()=>Pg});async function Pg(e,{model:t,openrouterApiKey:r,openrouterBaseUrl:n,openrouterReferer:o,openrouterTitle:i,dimensions:a}={}){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 s={model:t,input:e};a&&/(^|\/)text-embedding-3/.test(t)&&(s.dimensions=a);let c=(n||kg).replace(/\/+$/,""),l={"Content-Type":"application/json",Authorization:`Bearer ${r}`};o&&(l["HTTP-Referer"]=o),i&&(l["X-Title"]=i);let d=await fetch(`${c}/embeddings`,{method:"POST",headers:l,body:JSON.stringify(s)});if(!d.ok)throw new Error(`OpenRouter embed failed: ${d.status} ${await d.text()}`);return[...(await d.json()).data].sort((h,w)=>h.index-w.index).map(h=>h.embedding)}var kg,Es=u(()=>{kg="https://openrouter.ai/api/v1"});import{spawn as Mg}from"node:child_process";async function Ao(e){if(!xo[e]){let t=So[e];if(!t)throw new Error(`Unknown LLM provider: "${e}". Available: ${Object.keys(So).join(", ")}`);let r=await t();xo[e]=r.chat}return xo[e]}async function xs(e){if(!bo[e]){let t=_s[e];if(!t)throw new Error(`Unknown embedding provider: "${e}". Available: ${Object.keys(_s).join(", ")}`);let r=await t();bo[e]=r.embedBatch}return bo[e]}function bs(e,t){if(!e)return{provider:t,model:null};let r=e.indexOf(":");return r>0&&So[e.slice(0,r)]?{provider:e.slice(0,r),model:e.slice(r+1)}:{provider:t,model:e}}async function Ss(){let e=g.llm.ollamaHost||g.embedding.ollamaHost||"http://localhost:11434";try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function Fg(){return new Promise(e=>{let t=Mg("claude",["--version"],{stdio:"pipe"});t.on("error",()=>e(!1)),t.on("close",r=>e(r===0)),setTimeout(()=>{t.kill(),e(!1)},3e3)})}async function As(){if(W)return W;if(g.llm.provider)return W=g.llm.provider,W;if(g.llm.openrouterApiKey)return W="openrouter",W;if(g.llm.apiKey)return W="anthropic",W;if(g.llm.openaiApiKey)return W="openai",W;if(await Ss())return W="ollama",W;if(await Fg())return W="claude-cli",W;throw new Error(`No LLM provider available. Either:
26
+ or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var __,S_,Ol,tr,Cl=u(()=>{A();__="https://openrouter.ai/api/v1";S_={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},Ol="google/gemini-flash-latest",tr={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var Nl={};x(Nl,{chat:()=>R_,meta:()=>C_,setup:()=>N_});import{spawn as b_}from"node:child_process";function O_(e,t){let r=g.llm.cliTimeout||12e4;return new Promise((n,o)=>{let i=b_("claude",e,{stdio:["pipe","pipe","pipe"]}),s=setTimeout(()=>{i.kill("SIGTERM"),o(new Error(`claude CLI timed out after ${r}ms`))},r),a="",c="";i.stdout.on("data",l=>{a+=l}),i.stderr.on("data",l=>{c+=l}),i.on("error",l=>{clearTimeout(s),o(new Error(`Failed to spawn claude CLI: ${l.message}`))}),i.on("close",l=>{clearTimeout(s),n({stdout:a,stderr:c,code:l})}),i.stdin.write(t),i.stdin.end()})}async function R_(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.cliModel||"haiku",o=T_[n]||n,i=["-p","--model",o,"--output-format","json"];r&&i.push("--json-schema",I_);let{stdout:s,stderr:a,code:c}=await O_(i,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:he(e),outputTokens:he(s),model:o}}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||he(e),outputTokens:p.output_tokens||he(d),model:o,cost:l.total_cost_usd||0}}async function N_(){return{env:{}}}var T_,I_,C_,vl=u(()=>{A();an();T_={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},I_=JSON.stringify({type:"object",additionalProperties:!0});C_={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var Dl={};x(Dl,{chat:()=>v_,meta:()=>D_,setup:()=>L_});async function v_(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.ollamaModel,o=`${g.llm.ollamaHost}/api/chat`,i={model:n,messages:[{role:"user",content:e}],stream:!1};r&&(i.format="json");let s=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});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||he(e),outputTokens:a.eval_count||he(a.message.content),model:n}}async function L_({existing:e,clack:t}){let r=e.OLLAMA_HOST||"http://localhost:11434",n=await t.text({message:"Ollama host",placeholder:r,initialValue:r,validate:o=>{if(o&&!/^https?:\/\//.test(o))return"Must start with http:// or https://"}});return t.isCancel(n)?null:{env:{OLLAMA_HOST:n||r}}}var D_,Ll=u(()=>{A();an();D_={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function hs(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 _o=u(()=>{});var Pl={};x(Pl,{embedBatch:()=>k_});async function k_(e,{model:t,ollamaHost:r}){let n=Eo(e,P_),o=[];for(let i of n){let s=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:t,input:i})});if(!s.ok)throw new Error(`Ollama embed failed: ${s.status} ${await s.text()}`);let a=await s.json();o.push(...a.embeddings)}return o}var P_,kl=u(()=>{_o();P_=50});var Ml={};x(Ml,{embedBatch:()=>M_});async function M_(e,{model:t,openaiApiKey:r,dimensions:n}={}){let o={model:t,input:e};n&&/^text-embedding-3/.test(t)&&(o.dimensions=n);let i=await fetch("https://api.openai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(o)});if(!i.ok)throw new Error(`OpenAI embed failed: ${i.status} ${await i.text()}`);return(await i.json()).data.map(a=>a.embedding)}var Hl=u(()=>{});var Bl={};x(Bl,{embedBatch:()=>B_});async function B_(e,{model:t,voyageApiKey:r,inputType:n="document",dimensions:o}={}){if(!r)throw new Error("VOYAGE_API_KEY is not set. Get one at dashboard.voyageai.com.");let i=Eo(e,H_),s=[];for(let a of i){let c={input:a,model:t||"voyage-3-large",input_type:n==="query"?"query":"document"};o&&(c.output_dimension=o);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 f=await l.text();throw new Error(`Voyage embed failed: ${l.status} ${f}`)}let p=[...(await l.json()).data].sort((f,m)=>f.index-m.index);s.push(...p.map(f=>f.embedding))}return s}var H_,Fl=u(()=>{_o();H_=50});var $l={};x($l,{embedBatch:()=>$_});async function $_(e,{model:t,openrouterApiKey:r,openrouterBaseUrl:n,openrouterReferer:o,openrouterTitle:i,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||F_).replace(/\/+$/,""),l={"Content-Type":"application/json",Authorization:`Bearer ${r}`};o&&(l["HTTP-Referer"]=o),i&&(l["X-Title"]=i);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,w)=>m.index-w.index).map(m=>m.embedding)}var F_,Ul=u(()=>{F_="https://openrouter.ai/api/v1"});var Wl={};x(Wl,{detectEmbeddingProvider:()=>Ss,detectProvider:()=>xs,getEmbedder:()=>ws,getProvider:()=>So,isClaudeCliAvailable:()=>jl,isOllamaReachable:()=>_s,listProvidersForSetup:()=>j_,resetDetection:()=>G_,resolveProviderAndModel:()=>Es});import{spawn as U_}from"node:child_process";async function So(e){if(!gs[e]){let t=xo[e];if(!t)throw new Error(`Unknown LLM provider: "${e}". Available: ${Object.keys(xo).join(", ")}`);let r=await t();gs[e]=r.chat}return gs[e]}async function ws(e){if(!ys[e]){let t=Gl[e];if(!t)throw new Error(`Unknown embedding provider: "${e}". Available: ${Object.keys(Gl).join(", ")}`);let r=await t();ys[e]=r.embedBatch}return ys[e]}function Es(e,t){if(!e)return{provider:t,model:null};let r=e.indexOf(":");return r>0&&xo[e.slice(0,r)]?{provider:e.slice(0,r),model:e.slice(r+1)}:{provider:t,model:e}}async function _s(){let e=g.llm.ollamaHost||g.embedding.ollamaHost||"http://localhost:11434";try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function jl(){return new Promise(e=>{let t=U_("claude",["--version"],{stdio:"pipe"});t.on("error",()=>e(!1)),t.on("close",r=>e(r===0)),setTimeout(()=>{t.kill(),e(!1)},3e3)})}async function xs(){if(Y)return Y;if(g.llm.provider)return Y=g.llm.provider,Y;if(g.llm.openrouterApiKey)return Y="openrouter",Y;if(g.llm.apiKey)return Y="anthropic",Y;if(g.llm.openaiApiKey)return Y="openai",Y;if(await _s())return Y="ollama",Y;if(await jl())return Y="claude-cli",Y;throw new Error(`No LLM provider available. Either:
25
27
  - Set LLM_PROVIDER (openai, anthropic, openrouter, ollama, claude-cli)
26
28
  - Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY
27
29
  - Start Ollama locally
28
- - Install the Claude CLI (claude)`)}async function Is(){if(V)return V;if(g.embedding.provider)return V=g.embedding.provider,V;if(g.embedding.voyageApiKey)return V="voyage",V;if(await Ss())return V="ollama",V;if(g.embedding.openaiApiKey)return V="openai",V;if(g.embedding.openrouterApiKey)return V="openrouter",V;throw new Error(`No embedding provider available. Either:
30
+ - Install the Claude CLI (claude)`)}async function Ss(){if(ee)return ee;if(g.embedding.provider)return ee=g.embedding.provider,ee;if(g.embedding.voyageApiKey)return ee="voyage",ee;if(await _s())return ee="ollama",ee;if(g.embedding.openaiApiKey)return ee="openai",ee;if(g.embedding.openrouterApiKey)return ee="openrouter",ee;throw new Error(`No embedding provider available. Either:
29
31
  - Set EMBEDDING_PROVIDER (voyage, ollama, openai, openrouter)
30
32
  - Set VOYAGE_API_KEY (recommended \u2014 best quality)
31
33
  - Start Ollama locally
32
34
  - Set OPENAI_API_KEY
33
- - Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}var So,_s,xo,bo,W,V,Io=u(()=>{S();So={openai:()=>Promise.resolve().then(()=>(Xa(),Ja)),anthropic:()=>Promise.resolve().then(()=>(os(),ns)),openrouter:()=>Promise.resolve().then(()=>(ss(),as)),"claude-cli":()=>Promise.resolve().then(()=>(ls(),cs)),ollama:()=>Promise.resolve().then(()=>(ds(),us))},_s={ollama:()=>Promise.resolve().then(()=>(ps(),fs)),openai:()=>Promise.resolve().then(()=>(hs(),ms)),voyage:()=>Promise.resolve().then(()=>(ys(),gs)),openrouter:()=>Promise.resolve().then(()=>(Es(),ws))},xo={},bo={};W=null,V=null});function $(e){return e?`[${e.join(",")}]`:null}function vs(){let e=Number(g.embedding.dimensions)||768;if(!Number.isInteger(e)||e<=0)throw new Error(`Invalid EMBEDDING_DIMENSIONS: ${g.embedding.dimensions}`);return e}function le(e="embedding"){return`(${e}::halfvec(${vs()}))`}function ue(){return`?::halfvec(${vs()})`}var Se=u(()=>{S()});import{createHash as $g}from"node:crypto";function Hg(e,t,r,n="document"){let o=$g("sha256");return o.update(e),o.update("\0"),o.update(t),o.update("\0"),o.update(n),o.update("\0"),o.update(r),o.digest("hex")}async function Ug(e){if(!e.length)return new Map;let t=await m("embedding_cache").whereIn("key",e).select("key","embedding");return new Map(t.map(r=>[r.key,Gg(r.embedding)]))}function Gg(e){return Array.isArray(e)||typeof e!="string"?e:(e.startsWith("[")?e.slice(1,-1):e).split(",").map(Number)}async function jg(e){e.length&&await m("embedding_cache").whereIn("key",e).update({hits:m.raw("hits + 1"),lastUsedAt:m.fn.now()})}async function Wg(e,t,r){if(e.length){for(let{key:n,embedding:o}of e)await m.raw(`
35
+ - Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function G_(){Y=null,ee=null}async function j_(){return await Promise.all(Object.entries(xo).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 xo,Gl,gs,ys,Y,ee,Ao=u(()=>{A();xo={openai:()=>Promise.resolve().then(()=>(xl(),_l)),anthropic:()=>Promise.resolve().then(()=>(Il(),Tl)),openrouter:()=>Promise.resolve().then(()=>(Cl(),Rl)),"claude-cli":()=>Promise.resolve().then(()=>(vl(),Nl)),ollama:()=>Promise.resolve().then(()=>(Ll(),Dl))},Gl={ollama:()=>Promise.resolve().then(()=>(kl(),Pl)),openai:()=>Promise.resolve().then(()=>(Hl(),Ml)),voyage:()=>Promise.resolve().then(()=>(Fl(),Bl)),openrouter:()=>Promise.resolve().then(()=>(Ul(),$l))},gs={},ys={};Y=null,ee=null});function G(e){return e?`[${e.join(",")}]`:null}function Kl(){let e=Number(g.embedding.dimensions)||768;if(!Number.isInteger(e)||e<=0)throw new Error(`Invalid EMBEDDING_DIMENSIONS: ${g.embedding.dimensions}`);return e}function Re(e="embedding"){return`(${e}::halfvec(${Kl()}))`}function Ce(){return`?::halfvec(${Kl()})`}var Ze=u(()=>{A()});import{createHash as W_}from"node:crypto";function Y_(e,t,r,n="document"){let o=W_("sha256");return o.update(e),o.update("\0"),o.update(t),o.update("\0"),o.update(n),o.update("\0"),o.update(r),o.digest("hex")}async function V_(e){if(!e.length)return new Map;let t=await h("embedding_cache").whereIn("key",e).select("key","embedding");return new Map(t.map(r=>[r.key,q_(r.embedding)]))}function q_(e){return Array.isArray(e)||typeof e!="string"?e:(e.startsWith("[")?e.slice(1,-1):e).split(",").map(Number)}async function J_(e){e.length&&await h("embedding_cache").whereIn("key",e).update({hits:h.raw("hits + 1"),lastUsedAt:h.fn.now()})}async function z_(e,t,r){if(e.length){for(let{key:n,embedding:o}of e)await h.raw(`
34
36
  INSERT INTO embedding_cache (key, provider, model, embedding, hits, created_at, last_used_at)
35
37
  VALUES (?, ?, ?, ?, 0, NOW(), NOW())
36
38
  ON CONFLICT (key) DO UPDATE
37
39
  SET last_used_at = NOW(),
38
40
  hits = embedding_cache.hits + 1
39
- `,[n,t,r,$(o)]);await Kg()}}async function Kg(){let e=Date.now();if(e-Os<Yg)return;Os=e;let[{count:t}]=await m("embedding_cache").count("key as count"),r=Number(t);if(r<=Ts)return;let n=Math.min(r-Ts,Bg);await m.raw(`
41
+ `,[n,t,r,G(o)]);await Z_()}}async function Z_(){let e=Date.now();if(e-Vl<X_)return;Vl=e;let[{count:t}]=await h("embedding_cache").count("key as count"),r=Number(t);if(r<=Yl)return;let n=Math.min(r-Yl,K_);await h.raw(`
40
42
  DELETE FROM embedding_cache WHERE key IN (
41
43
  SELECT key FROM embedding_cache ORDER BY last_used_at ASC LIMIT ?
42
44
  )
43
- `,[n])}async function Ns(e,t,r,n,o,i={}){if(!e.length)return[];let a=i.inputType||o?.inputType||"document",s=e.map(h=>Hg(t,r,h,a)),c=await Ug(s),l=[],d=[],p=new Array(e.length);for(let h=0;h<e.length;h++){let w=c.get(s[h]);w?p[h]=w:(l.push(e[h]),d.push(h))}if(l.length){let h=await n(l,o),w=[];for(let y=0;y<l.length;y++){let E=d[y];p[E]=h[y],w.push({key:s[E],embedding:h[y]})}Wg(w,t,r).catch(y=>{process.stderr.write(`[embedding-cache] store failed: ${y.message}
44
- `)})}let f=s.filter(h=>c.has(h));return f.length&&jg(f).catch(()=>{}),p}var Ts,Bg,Os,Yg,Cs=u(()=>{Se();A();Ts=1e4,Bg=500;Os=0,Yg=6e4});var Rs={};b(Rs,{dimensions:()=>qg,embed:()=>je,embedBatch:()=>he});async function je(e,t={}){let[r]=await he([e],t);return r}async function he(e,{inputType:t="document"}={}){if(!e.length)return[];let r=await Is(),n=await xs(r),o=g.embedding.model,i={...g.embedding,inputType:t};return Ns(e,r,o,n,i,{inputType:t})}var qg,ct=u(()=>{S();Io();Cs();({dimensions:qg}=g.embedding)});var Ls={};b(Ls,{parseJson:()=>qr,prompt:()=>ge,promptJson:()=>Q});async function Ds(e){let t=await As();return bs(e,t)}async function ge(e,{model:t,caller:r}={}){let{provider:n,model:o}=await Ds(t),i=await Ao(n),a=Date.now();try{let s=await wo(()=>i(e,{model:o,jsonMode:!1}),g.llm.maxRetries),c=s.cost||yo(s.model,s.inputTokens,s.outputTokens);return Zt({provider:n,model:s.model,caller:r,input:e,response:s.text,inputTokens:s.inputTokens,outputTokens:s.outputTokens,cost:c,durationMs:Date.now()-a,status:"success"}),s.text}catch(s){throw Zt({provider:n,model:o,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-a,status:"error",error:s.message}),s}}async function Q(e,{model:t,caller:r}={}){let{provider:n,model:o}=await Ds(t),i=await Ao(n),a=Date.now();try{let s=await wo(()=>i(e,{model:o,jsonMode:!0}),g.llm.maxRetries),c=s.cost||yo(s.model,s.inputTokens,s.outputTokens);return Zt({provider:n,model:s.model,caller:r,input:e,response:s.text,inputTokens:s.inputTokens,outputTokens:s.outputTokens,cost:c,durationMs:Date.now()-a,status:"success"}),qr(s.text)}catch(s){throw Zt({provider:n,model:o,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-a,status:"error",error:s.message}),s}}function qr(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 ee=u(()=>{S();Io();Qt()});import{readFile as Vg}from"node:fs/promises";import{join as zg}from"node:path";async function ks(e,t,{title:r}){if(!e.length)return e;let n=await Vg(Jg,"utf8"),o=e.map((a,s)=>`Chunk ${s+1}: ${a.content.slice(0,200)}`),i=`${n}
45
+ `,[n])}async function ql(e,t,r,n,o,i={}){if(!e.length)return[];let s=i.inputType||o?.inputType||"document",a=e.map(m=>Y_(t,r,m,s)),c=await V_(a),l=[],d=[],p=new Array(e.length);for(let m=0;m<e.length;m++){let w=c.get(a[m]);w?p[m]=w:(l.push(e[m]),d.push(m))}if(l.length){let m=await n(l,o),w=[];for(let y=0;y<l.length;y++){let E=d[y];p[E]=m[y],w.push({key:a[E],embedding:m[y]})}z_(w,t,r).catch(y=>{process.stderr.write(`[embedding-cache] store failed: ${y.message}
46
+ `)})}let f=a.filter(m=>c.has(m));return f.length&&J_(f).catch(()=>{}),p}var Yl,K_,Vl,X_,Jl=u(()=>{Ze();T();Yl=1e4,K_=500;Vl=0,X_=6e4});var zl={};x(zl,{dimensions:()=>Q_,embed:()=>xt,embedBatch:()=>He});async function xt(e,t={}){let[r]=await He([e],t);return r}async function He(e,{inputType:t="document"}={}){if(!e.length)return[];let r=await Ss(),n=await ws(r),o=g.embedding.model,i={...g.embedding,inputType:t};return ql(e,r,o,n,i,{inputType:t})}var Q_,rr=u(()=>{A();Ao();Jl();({dimensions:Q_}=g.embedding)});var Zl={};x(Zl,{parseJson:()=>bo,prompt:()=>Be,promptJson:()=>ge});async function Xl(e){let t=await xs();return Es(e,t)}async function Be(e,{model:t,caller:r}={}){let{provider:n,model:o}=await Xl(t),i=await So(n),s=Date.now();try{let a=await ps(()=>i(e,{model:o,jsonMode:!1}),g.llm.maxRetries),c=a.cost||fs(a.model,a.inputTokens,a.outputTokens);return sn({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 sn({provider:n,model:o,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}async function ge(e,{model:t,caller:r}={}){let{provider:n,model:o}=await Xl(t),i=await So(n),s=Date.now();try{let a=await ps(()=>i(e,{model:o,jsonMode:!0}),g.llm.maxRetries),c=a.cost||fs(a.model,a.inputTokens,a.outputTokens);return sn({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"}),bo(a.text)}catch(a){throw sn({provider:n,model:o,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}function bo(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 ye=u(()=>{A();Ao();an()});import{readFile as ex}from"node:fs/promises";import{join as tx}from"node:path";async function Ql(e,t,{title:r}){if(!e.length)return e;let n=await ex(rx,"utf8"),o=e.map((s,a)=>`Chunk ${a+1}: ${s.content.slice(0,200)}`),i=`${n}
45
47
 
46
48
  ---
47
49
 
@@ -56,7 +58,7 @@ ${o.join(`
56
58
 
57
59
  ---
58
60
 
59
- Respond with a JSON array of ${e.length} context prefix strings.`;try{let a=await Q(i,{model:g.llm.extractionModel,caller:"contextualizer"}),s=Array.isArray(a)?a:a&&typeof a=="object"?Object.values(a).find(l=>Array.isArray(l))??null:null;if(!s)return console.warn("[contextualizer] LLM did not return an array \u2014 skipping"),e;let c=s;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(a){return console.error("[contextualizer] Failed:",a.message),e}}var Jg,Ps=u(()=>{ee();S();L();Jg=zg(K,"chunk-context.md")});var Ms,Fs=u(()=>{Ms="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as $s}from"node:crypto";function Zg(e){if(e<0||e>1024)throw new RangeError("Wrong ID size");!We||We.length<e?(We=Buffer.allocUnsafe(e*Xg),$s.getRandomValues(We),lt=0):lt+e>We.length&&($s.getRandomValues(We),lt=0),lt+=e}function te(e=21){Zg(e|=0);let t="";for(let r=lt-e;r<lt;r++)t+=Ms[We[r]&63];return t}var Xg,We,lt,ut=u(()=>{Fs();Xg=128});var No={};b(No,{deleteDocument:()=>ny,findBySourcePath:()=>Qg,findByUid:()=>ey,getStats:()=>ty,listDocuments:()=>ry,resetHash:()=>To,updateCounts:()=>Vr,updateSourceMetadata:()=>Oo,upsert:()=>vo});async function Qg(e){let[t]=await m("document").where({sourcePath:e});return t||null}async function ey(e){let[t]=await m("document").where({uid:e});return t||null}async function vo({sourcePath:e,sourceType:t,title:r=null,contentHash:n,namespace:o}){let i=`doc-${te(16)}`,{rows:[a]}=await m.raw(`
61
+ Respond with a JSON array of ${e.length} context prefix strings.`;try{let s=await ge(i,{model:g.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 rx,eu=u(()=>{ye();A();C();rx=tx(Q,"chunk-context.md")});var tu,ru=u(()=>{tu="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as nu}from"node:crypto";function ox(e){if(e<0||e>1024)throw new RangeError("Wrong ID size");!St||St.length<e?(St=Buffer.allocUnsafe(e*nx),nu.getRandomValues(St),nr=0):nr+e>St.length&&(nu.getRandomValues(St),nr=0),nr+=e}function we(e=21){ox(e|=0);let t="";for(let r=nr-e;r<nr;r++)t+=tu[St[r]&63];return t}var nx,St,nr,or=u(()=>{ru();nx=128});var Is={};x(Is,{deleteDocument:()=>lx,findBySourcePath:()=>ix,findByUid:()=>sx,getStats:()=>ax,listDocuments:()=>cx,resetHash:()=>bs,updateCounts:()=>To,updateSourceMetadata:()=>Ts,upsert:()=>As});async function ix(e){let[t]=await h("document").where({sourcePath:e});return t||null}async function sx(e){let[t]=await h("document").where({uid:e});return t||null}async function As({sourcePath:e,sourceType:t,title:r=null,contentHash:n,namespace:o}){let i=`doc-${we(16)}`,{rows:[s]}=await h.raw(`
60
62
  INSERT INTO document (uid, source_path, source_type, title, content_hash, namespace, last_ingested_at, created_at, updated_at)
61
63
  VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), NOW())
62
64
  ON CONFLICT (source_path, namespace) DO UPDATE SET
@@ -65,12 +67,12 @@ Respond with a JSON array of ${e.length} context prefix strings.`;try{let a=awai
65
67
  last_ingested_at = NOW(),
66
68
  updated_at = NOW()
67
69
  RETURNING *, (xmax = 0) AS "isNew", content_hash != ? AS "contentChanged"
68
- `,[i,e,t,r,n,o,n]),c=a.isNew||a.contentChanged;return{doc:a,changed:c}}async function Vr(e,{chunkCount:t,factCount:r}){await m("document").where({id:e}).update({chunkCount:t,factCount:r})}async function ty(e){let t=m("document");e&&t.where({namespace:e});let r=await t;return{documentCount:r.length,totalChunks:r.reduce((n,o)=>n+(o.chunkCount||0),0),totalFacts:r.reduce((n,o)=>n+(o.factCount||0),0)}}async function ry({namespace:e,sourceType:t,limit:r=100}={}){let n=m("document").orderBy("createdAt","desc").limit(r);return e&&n.where({namespace:e}),t&&n.where({sourceType:t}),n}async function ny(e){await m("chunk").where({documentId:e}).del(),await m("document").where({id:e}).del()}async function To(e){await m("document").where({id:e}).update({contentHash:null})}async function Oo(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 m("document").where({id:e}).update(n)}var Co=u(()=>{ut();A()});async function Bs(e,t,r){if(await m("chunk").where({documentId:e}).del(),!t.length)return[];let n=t.map((i,a)=>({documentId:e,chunkIndex:a,content:i.content,contextualPrefix:i.contextualPrefix||null,sectionHeading:i.sectionHeading||null,namespace:r,embedding:$(i.embedding)})),o=await m("chunk").insert(n).returning("*");return await m.raw(`
70
+ `,[i,e,t,r,n,o,n]),c=s.isNew||s.contentChanged;return{doc:s,changed:c}}async function To(e,{chunkCount:t,factCount:r}){await h("document").where({id:e}).update({chunkCount:t,factCount:r})}async function ax(e){let t=h("document");e&&t.where({namespace:e});let r=await t;return{documentCount:r.length,totalChunks:r.reduce((n,o)=>n+(o.chunkCount||0),0),totalFacts:r.reduce((n,o)=>n+(o.factCount||0),0)}}async function cx({namespace:e,sourceType:t,limit:r=100}={}){let n=h("document").orderBy("createdAt","desc").limit(r);return e&&n.where({namespace:e}),t&&n.where({sourceType:t}),n}async function lx(e){await h("chunk").where({documentId:e}).del(),await h("document").where({id:e}).del()}async function bs(e){await h("document").where({id:e}).update({contentHash:null})}async function Ts(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 h("document").where({id:e}).update(n)}var Os=u(()=>{or();T()});async function ou(e,t,r){if(await h("chunk").where({documentId:e}).del(),!t.length)return[];let n=t.map((i,s)=>({documentId:e,chunkIndex:s,content:i.content,contextualPrefix:i.contextualPrefix||null,sectionHeading:i.sectionHeading||null,namespace:r,embedding:G(i.embedding)})),o=await h("chunk").insert(n).returning("*");return await h.raw(`
69
71
  UPDATE chunk
70
72
  SET search_vector = to_tsvector('english', COALESCE(contextual_prefix, '') || ' ' || content)
71
73
  WHERE document_id = ?
72
- `,[e]),o}var Hs=u(()=>{A();Se()});var iy,zr,Ro=u(()=>{iy=typeof global=="object"&&global&&global.Object===Object&&global,zr=iy});var ay,sy,M,de=u(()=>{Ro();ay=typeof self=="object"&&self&&self.Object===Object&&self,sy=zr||ay||Function("return this")(),M=sy});var cy,U,dt=u(()=>{de();cy=M.Symbol,U=cy});function dy(e){var t=ly.call(e,er),r=e[er];try{e[er]=void 0;var n=!0}catch{}var o=uy.call(e);return n&&(t?e[er]=r:delete e[er]),o}var Us,ly,uy,er,Gs,js=u(()=>{dt();Us=Object.prototype,ly=Us.hasOwnProperty,uy=Us.toString,er=U?U.toStringTag:void 0;Gs=dy});function my(e){return py.call(e)}var fy,py,Ws,Ys=u(()=>{fy=Object.prototype,py=fy.toString;Ws=my});function yy(e){return e==null?e===void 0?gy:hy:Ks&&Ks in Object(e)?Gs(e):Ws(e)}var hy,gy,Ks,re,ft=u(()=>{dt();js();Ys();hy="[object Null]",gy="[object Undefined]",Ks=U?U.toStringTag:void 0;re=yy});function wy(e){return e!=null&&typeof e=="object"}var ne,pt=u(()=>{ne=wy});function _y(e){return typeof e=="symbol"||ne(e)&&re(e)==Ey}var Ey,oe,mt=u(()=>{ft();pt();Ey="[object Symbol]";oe=_y});function xy(e,t){for(var r=-1,n=e==null?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}var ht,Do=u(()=>{ht=xy});var by,D,z=u(()=>{by=Array.isArray,D=by});function zs(e){if(typeof e=="string")return e;if(D(e))return ht(e,zs)+"";if(oe(e))return Vs?Vs.call(e):"";var t=e+"";return t=="0"&&1/e==-Sy?"-0":t}var Sy,qs,Vs,Js,Xs=u(()=>{dt();Do();z();mt();Sy=1/0,qs=U?U.prototype:void 0,Vs=qs?qs.toString:void 0;Js=zs});function Iy(e){for(var t=e.length;t--&&Ay.test(e.charAt(t)););return t}var Ay,Zs,Qs=u(()=>{Ay=/\s/;Zs=Iy});function Ty(e){return e&&e.slice(0,Zs(e)+1).replace(vy,"")}var vy,ec,tc=u(()=>{Qs();vy=/^\s+/;ec=Ty});function Oy(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var ie,gt=u(()=>{ie=Oy});function Ly(e){if(typeof e=="number")return e;if(oe(e))return rc;if(ie(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ie(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=ec(e);var r=Cy.test(e);return r||Ry.test(e)?Dy(e.slice(2),r?2:8):Ny.test(e)?rc:+e}var rc,Ny,Cy,Ry,Dy,nc,oc=u(()=>{tc();gt();mt();rc=NaN,Ny=/^[-+]0x[0-9a-f]+$/i,Cy=/^0b[01]+$/i,Ry=/^0o[0-7]+$/i,Dy=parseInt;nc=Ly});function Py(e){if(!e)return e===0?e:0;if(e=nc(e),e===ic||e===-ic){var t=e<0?-1:1;return t*ky}return e===e?e:0}var ic,ky,ac,sc=u(()=>{oc();ic=1/0,ky=17976931348623157e292;ac=Py});function My(e){var t=ac(e),r=t%1;return t===t?r?t-r:t:0}var cc,lc=u(()=>{sc();cc=My});function Fy(e){return e}var Ae,tr=u(()=>{Ae=Fy});function Gy(e){if(!ie(e))return!1;var t=re(e);return t==By||t==Hy||t==$y||t==Uy}var $y,By,Hy,Uy,Jr,Lo=u(()=>{ft();gt();$y="[object AsyncFunction]",By="[object Function]",Hy="[object GeneratorFunction]",Uy="[object Proxy]";Jr=Gy});var jy,Xr,uc=u(()=>{de();jy=M["__core-js_shared__"],Xr=jy});function Wy(e){return!!dc&&dc in e}var dc,fc,pc=u(()=>{uc();dc=(function(){var e=/[^.]+$/.exec(Xr&&Xr.keys&&Xr.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();fc=Wy});function qy(e){if(e!=null){try{return Ky.call(e)}catch{}try{return e+""}catch{}}return""}var Yy,Ky,ye,ko=u(()=>{Yy=Function.prototype,Ky=Yy.toString;ye=qy});function tw(e){if(!ie(e)||fc(e))return!1;var t=Jr(e)?ew:zy;return t.test(ye(e))}var Vy,zy,Jy,Xy,Zy,Qy,ew,mc,hc=u(()=>{Lo();pc();gt();ko();Vy=/[\\^$.*+?()[\]{}|]/g,zy=/^\[object .+?Constructor\]$/,Jy=Function.prototype,Xy=Object.prototype,Zy=Jy.toString,Qy=Xy.hasOwnProperty,ew=RegExp("^"+Zy.call(Qy).replace(Vy,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");mc=tw});function rw(e,t){return e?.[t]}var gc,yc=u(()=>{gc=rw});function nw(e,t){var r=gc(e,t);return mc(r)?r:void 0}var Y,Ie=u(()=>{hc();yc();Y=nw});var ow,Zr,wc=u(()=>{Ie();de();ow=Y(M,"WeakMap"),Zr=ow});function iw(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 Ec,_c=u(()=>{Ec=iw});function aw(){}var xc,bc=u(()=>{xc=aw});function uw(e){var t=0,r=0;return function(){var n=lw(),o=cw-(n-r);if(r=n,o>0){if(++t>=sw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var sw,cw,lw,Sc,Ac=u(()=>{sw=800,cw=16,lw=Date.now;Sc=uw});function dw(e){return function(){return e}}var Ic,vc=u(()=>{Ic=dw});var fw,yt,Po=u(()=>{Ie();fw=(function(){try{var e=Y(Object,"defineProperty");return e({},"",{}),e}catch{}})(),yt=fw});var pw,Tc,Oc=u(()=>{vc();Po();tr();pw=yt?function(e,t){return yt(e,"toString",{configurable:!0,enumerable:!1,value:Ic(t),writable:!0})}:Ae,Tc=pw});var mw,Nc,Cc=u(()=>{Oc();Ac();mw=Sc(Tc),Nc=mw});function hw(e,t,r,n){for(var o=e.length,i=r+(n?1:-1);n?i--:++i<o;)if(t(e[i],i,e))return i;return-1}var Rc,Dc=u(()=>{Rc=hw});function gw(e){return e!==e}var Lc,kc=u(()=>{Lc=gw});function yw(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}var Pc,Mc=u(()=>{Pc=yw});function ww(e,t,r){return t===t?Pc(e,t,r):Rc(e,Lc,r)}var Fc,$c=u(()=>{Dc();kc();Mc();Fc=ww});function Ew(e,t){var r=e==null?0:e.length;return!!r&&Fc(e,t,0)>-1}var Bc,Hc=u(()=>{$c();Bc=Ew});function bw(e,t){var r=typeof e;return t=t??_w,!!t&&(r=="number"||r!="symbol"&&xw.test(e))&&e>-1&&e%1==0&&e<t}var _w,xw,wt,Qr=u(()=>{_w=9007199254740991,xw=/^(?:0|[1-9]\d*)$/;wt=bw});function Sw(e,t,r){t=="__proto__"&&yt?yt(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Uc,Gc=u(()=>{Po();Uc=Sw});function Aw(e,t){return e===t||e!==e&&t!==t}var Et,en=u(()=>{Et=Aw});function Iw(e,t,r){return t=jc(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=jc(n.length-t,0),a=Array(i);++o<i;)a[o]=n[t+o];o=-1;for(var s=Array(t+1);++o<t;)s[o]=n[o];return s[t]=r(a),Ec(e,this,s)}}var jc,Wc,Yc=u(()=>{_c();jc=Math.max;Wc=Iw});function vw(e,t){return Nc(Wc(e,t,Ae),e+"")}var Kc,qc=u(()=>{tr();Yc();Cc();Kc=vw});function Ow(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Tw}var Tw,_t,tn=u(()=>{Tw=9007199254740991;_t=Ow});function Nw(e){return e!=null&&_t(e.length)&&!Jr(e)}var ve,rr=u(()=>{Lo();tn();ve=Nw});function Cw(e,t,r){if(!ie(r))return!1;var n=typeof t;return(n=="number"?ve(r)&&wt(t,r.length):n=="string"&&t in r)?Et(r[t],e):!1}var nr,Mo=u(()=>{en();rr();Qr();gt();nr=Cw});function Dw(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||Rw;return e===r}var Rw,Vc,zc=u(()=>{Rw=Object.prototype;Vc=Dw});function Lw(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var Jc,Xc=u(()=>{Jc=Lw});function Pw(e){return ne(e)&&re(e)==kw}var kw,Fo,Zc=u(()=>{ft();pt();kw="[object Arguments]";Fo=Pw});var Qc,Mw,Fw,$w,xt,rn=u(()=>{Zc();pt();Qc=Object.prototype,Mw=Qc.hasOwnProperty,Fw=Qc.propertyIsEnumerable,$w=Fo((function(){return arguments})())?Fo:function(e){return ne(e)&&Mw.call(e,"callee")&&!Fw.call(e,"callee")},xt=$w});function Bw(){return!1}var el,tl=u(()=>{el=Bw});var ol,rl,Hw,nl,Uw,Gw,or,$o=u(()=>{de();tl();ol=typeof exports=="object"&&exports&&!exports.nodeType&&exports,rl=ol&&typeof module=="object"&&module&&!module.nodeType&&module,Hw=rl&&rl.exports===ol,nl=Hw?M.Buffer:void 0,Uw=nl?nl.isBuffer:void 0,Gw=Uw||el,or=Gw});function pE(e){return ne(e)&&_t(e.length)&&!!R[re(e)]}var jw,Ww,Yw,Kw,qw,Vw,zw,Jw,Xw,Zw,Qw,eE,tE,rE,nE,oE,iE,aE,sE,cE,lE,uE,dE,fE,R,il,al=u(()=>{ft();tn();pt();jw="[object Arguments]",Ww="[object Array]",Yw="[object Boolean]",Kw="[object Date]",qw="[object Error]",Vw="[object Function]",zw="[object Map]",Jw="[object Number]",Xw="[object Object]",Zw="[object RegExp]",Qw="[object Set]",eE="[object String]",tE="[object WeakMap]",rE="[object ArrayBuffer]",nE="[object DataView]",oE="[object Float32Array]",iE="[object Float64Array]",aE="[object Int8Array]",sE="[object Int16Array]",cE="[object Int32Array]",lE="[object Uint8Array]",uE="[object Uint8ClampedArray]",dE="[object Uint16Array]",fE="[object Uint32Array]",R={};R[oE]=R[iE]=R[aE]=R[sE]=R[cE]=R[lE]=R[uE]=R[dE]=R[fE]=!0;R[jw]=R[Ww]=R[rE]=R[Yw]=R[nE]=R[Kw]=R[qw]=R[Vw]=R[zw]=R[Jw]=R[Xw]=R[Zw]=R[Qw]=R[eE]=R[tE]=!1;il=pE});function mE(e){return function(t){return e(t)}}var nn,Bo=u(()=>{nn=mE});var sl,ir,hE,Ho,gE,Uo,cl=u(()=>{Ro();sl=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ir=sl&&typeof module=="object"&&module&&!module.nodeType&&module,hE=ir&&ir.exports===sl,Ho=hE&&zr.process,gE=(function(){try{var e=ir&&ir.require&&ir.require("util").types;return e||Ho&&Ho.binding&&Ho.binding("util")}catch{}})(),Uo=gE});var ll,yE,on,Go=u(()=>{al();Bo();cl();ll=Uo&&Uo.isTypedArray,yE=ll?nn(ll):il,on=yE});function _E(e,t){var r=D(e),n=!r&&xt(e),o=!r&&!n&&or(e),i=!r&&!n&&!o&&on(e),a=r||n||o||i,s=a?Jc(e.length,String):[],c=s.length;for(var l in e)(t||EE.call(e,l))&&!(a&&(l=="length"||o&&(l=="offset"||l=="parent")||i&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||wt(l,c)))&&s.push(l);return s}var wE,EE,ul,dl=u(()=>{Xc();rn();z();$o();Qr();Go();wE=Object.prototype,EE=wE.hasOwnProperty;ul=_E});function xE(e,t){return function(r){return e(t(r))}}var fl,pl=u(()=>{fl=xE});var bE,ml,hl=u(()=>{pl();bE=fl(Object.keys,Object),ml=bE});function IE(e){if(!Vc(e))return ml(e);var t=[];for(var r in Object(e))AE.call(e,r)&&r!="constructor"&&t.push(r);return t}var SE,AE,gl,yl=u(()=>{zc();hl();SE=Object.prototype,AE=SE.hasOwnProperty;gl=IE});function vE(e){return ve(e)?ul(e):gl(e)}var bt,an=u(()=>{dl();yl();rr();bt=vE});function NE(e,t){if(D(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||oe(e)?!0:OE.test(e)||!TE.test(e)||t!=null&&e in Object(t)}var TE,OE,St,sn=u(()=>{z();mt();TE=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,OE=/^\w*$/;St=NE});var CE,we,ar=u(()=>{Ie();CE=Y(Object,"create"),we=CE});function RE(){this.__data__=we?we(null):{},this.size=0}var wl,El=u(()=>{ar();wl=RE});function DE(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var _l,xl=u(()=>{_l=DE});function ME(e){var t=this.__data__;if(we){var r=t[e];return r===LE?void 0:r}return PE.call(t,e)?t[e]:void 0}var LE,kE,PE,bl,Sl=u(()=>{ar();LE="__lodash_hash_undefined__",kE=Object.prototype,PE=kE.hasOwnProperty;bl=ME});function BE(e){var t=this.__data__;return we?t[e]!==void 0:$E.call(t,e)}var FE,$E,Al,Il=u(()=>{ar();FE=Object.prototype,$E=FE.hasOwnProperty;Al=BE});function UE(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=we&&t===void 0?HE:t,this}var HE,vl,Tl=u(()=>{ar();HE="__lodash_hash_undefined__";vl=UE});function At(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 jo,Ol=u(()=>{El();xl();Sl();Il();Tl();At.prototype.clear=wl;At.prototype.delete=_l;At.prototype.get=bl;At.prototype.has=Al;At.prototype.set=vl;jo=At});function GE(){this.__data__=[],this.size=0}var Nl,Cl=u(()=>{Nl=GE});function jE(e,t){for(var r=e.length;r--;)if(Et(e[r][0],t))return r;return-1}var Te,sr=u(()=>{en();Te=jE});function KE(e){var t=this.__data__,r=Te(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():YE.call(t,r,1),--this.size,!0}var WE,YE,Rl,Dl=u(()=>{sr();WE=Array.prototype,YE=WE.splice;Rl=KE});function qE(e){var t=this.__data__,r=Te(t,e);return r<0?void 0:t[r][1]}var Ll,kl=u(()=>{sr();Ll=qE});function VE(e){return Te(this.__data__,e)>-1}var Pl,Ml=u(()=>{sr();Pl=VE});function zE(e,t){var r=this.__data__,n=Te(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var Fl,$l=u(()=>{sr();Fl=zE});function It(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 Oe,cr=u(()=>{Cl();Dl();kl();Ml();$l();It.prototype.clear=Nl;It.prototype.delete=Rl;It.prototype.get=Ll;It.prototype.has=Pl;It.prototype.set=Fl;Oe=It});var JE,Ne,cn=u(()=>{Ie();de();JE=Y(M,"Map"),Ne=JE});function XE(){this.size=0,this.__data__={hash:new jo,map:new(Ne||Oe),string:new jo}}var Bl,Hl=u(()=>{Ol();cr();cn();Bl=XE});function ZE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Ul,Gl=u(()=>{Ul=ZE});function QE(e,t){var r=e.__data__;return Ul(t)?r[typeof t=="string"?"string":"hash"]:r.map}var Ce,lr=u(()=>{Gl();Ce=QE});function e_(e){var t=Ce(this,e).delete(e);return this.size-=t?1:0,t}var jl,Wl=u(()=>{lr();jl=e_});function t_(e){return Ce(this,e).get(e)}var Yl,Kl=u(()=>{lr();Yl=t_});function r_(e){return Ce(this,e).has(e)}var ql,Vl=u(()=>{lr();ql=r_});function n_(e,t){var r=Ce(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var zl,Jl=u(()=>{lr();zl=n_});function vt(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 Ye,ln=u(()=>{Hl();Wl();Kl();Vl();Jl();vt.prototype.clear=Bl;vt.prototype.delete=jl;vt.prototype.get=Yl;vt.prototype.has=ql;vt.prototype.set=zl;Ye=vt});function Wo(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(o_);var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var a=e.apply(this,n);return r.cache=i.set(o,a)||i,a};return r.cache=new(Wo.Cache||Ye),r}var o_,Xl,Zl=u(()=>{ln();o_="Expected a function";Wo.Cache=Ye;Xl=Wo});function a_(e){var t=Xl(e,function(n){return r.size===i_&&r.clear(),n}),r=t.cache;return t}var i_,Ql,eu=u(()=>{Zl();i_=500;Ql=a_});var s_,c_,l_,tu,ru=u(()=>{eu();s_=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,c_=/\\(\\)?/g,l_=Ql(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(s_,function(r,n,o,i){t.push(o?i.replace(c_,"$1"):n||r)}),t}),tu=l_});function u_(e){return e==null?"":Js(e)}var nu,ou=u(()=>{Xs();nu=u_});function d_(e,t){return D(e)?e:St(e,t)?[e]:tu(nu(e))}var un,Yo=u(()=>{z();sn();ru();ou();un=d_});function p_(e){if(typeof e=="string"||oe(e))return e;var t=e+"";return t=="0"&&1/e==-f_?"-0":t}var f_,Re,ur=u(()=>{mt();f_=1/0;Re=p_});function m_(e,t){t=un(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[Re(t[r++])];return r&&r==n?e:void 0}var Tt,dn=u(()=>{Yo();ur();Tt=m_});function h_(e,t,r){var n=e==null?void 0:Tt(e,t);return n===void 0?r:n}var iu,au=u(()=>{dn();iu=h_});function g_(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var fn,Ko=u(()=>{fn=g_});function y_(e){return D(e)||xt(e)||!!(su&&e&&e[su])}var su,cu,lu=u(()=>{dt();rn();z();su=U?U.isConcatSpreadable:void 0;cu=y_});function uu(e,t,r,n,o){var i=-1,a=e.length;for(r||(r=cu),o||(o=[]);++i<a;){var s=e[i];t>0&&r(s)?t>1?uu(s,t-1,r,n,o):fn(o,s):n||(o[o.length]=s)}return o}var du,fu=u(()=>{Ko();lu();du=uu});function w_(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),r=r>o?o:r,r<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n<o;)i[n]=e[n+t];return i}var pu,mu=u(()=>{pu=w_});function x_(e,t,r){(r?nr(e,t,r):t===void 0)?t=1:t=__(cc(t),0);var n=e==null?0:e.length;if(!n||t<1)return[];for(var o=0,i=0,a=Array(E_(n/t));o<n;)a[i++]=pu(e,o,o+=t);return a}var E_,__,qo,hu=u(()=>{mu();Mo();lc();E_=Math.ceil,__=Math.max;qo=x_});function b_(){this.__data__=new Oe,this.size=0}var gu,yu=u(()=>{cr();gu=b_});function S_(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var wu,Eu=u(()=>{wu=S_});function A_(e){return this.__data__.get(e)}var _u,xu=u(()=>{_u=A_});function I_(e){return this.__data__.has(e)}var bu,Su=u(()=>{bu=I_});function T_(e,t){var r=this.__data__;if(r instanceof Oe){var n=r.__data__;if(!Ne||n.length<v_-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ye(n)}return r.set(e,t),this.size=r.size,this}var v_,Au,Iu=u(()=>{cr();cn();ln();v_=200;Au=T_});function Ot(e){var t=this.__data__=new Oe(e);this.size=t.size}var Nt,Vo=u(()=>{cr();yu();Eu();xu();Su();Iu();Ot.prototype.clear=gu;Ot.prototype.delete=wu;Ot.prototype.get=_u;Ot.prototype.has=bu;Ot.prototype.set=Au;Nt=Ot});function O_(e,t){for(var r=-1,n=e==null?0:e.length,o=0,i=[];++r<n;){var a=e[r];t(a,r,e)&&(i[o++]=a)}return i}var vu,Tu=u(()=>{vu=O_});function N_(){return[]}var Ou,Nu=u(()=>{Ou=N_});var C_,R_,Cu,D_,Ru,Du=u(()=>{Tu();Nu();C_=Object.prototype,R_=C_.propertyIsEnumerable,Cu=Object.getOwnPropertySymbols,D_=Cu?function(e){return e==null?[]:(e=Object(e),vu(Cu(e),function(t){return R_.call(e,t)}))}:Ou,Ru=D_});function L_(e,t,r){var n=t(e);return D(e)?n:fn(n,r(e))}var Lu,ku=u(()=>{Ko();z();Lu=L_});function k_(e){return Lu(e,bt,Ru)}var zo,Pu=u(()=>{ku();Du();an();zo=k_});var P_,pn,Mu=u(()=>{Ie();de();P_=Y(M,"DataView"),pn=P_});var M_,mn,Fu=u(()=>{Ie();de();M_=Y(M,"Promise"),mn=M_});var F_,De,Jo=u(()=>{Ie();de();F_=Y(M,"Set"),De=F_});var $u,$_,Bu,Hu,Uu,Gu,B_,H_,U_,G_,j_,Ke,Xo,ju=u(()=>{Mu();cn();Fu();Jo();wc();ft();ko();$u="[object Map]",$_="[object Object]",Bu="[object Promise]",Hu="[object Set]",Uu="[object WeakMap]",Gu="[object DataView]",B_=ye(pn),H_=ye(Ne),U_=ye(mn),G_=ye(De),j_=ye(Zr),Ke=re;(pn&&Ke(new pn(new ArrayBuffer(1)))!=Gu||Ne&&Ke(new Ne)!=$u||mn&&Ke(mn.resolve())!=Bu||De&&Ke(new De)!=Hu||Zr&&Ke(new Zr)!=Uu)&&(Ke=function(e){var t=re(e),r=t==$_?e.constructor:void 0,n=r?ye(r):"";if(n)switch(n){case B_:return Gu;case H_:return $u;case U_:return Bu;case G_:return Hu;case j_:return Uu}return t});Xo=Ke});var W_,Zo,Wu=u(()=>{de();W_=M.Uint8Array,Zo=W_});function K_(e){return this.__data__.set(e,Y_),this}var Y_,Yu,Ku=u(()=>{Y_="__lodash_hash_undefined__";Yu=K_});function q_(e){return this.__data__.has(e)}var qu,Vu=u(()=>{qu=q_});function hn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new Ye;++t<r;)this.add(e[t])}var gn,Qo=u(()=>{ln();Ku();Vu();hn.prototype.add=hn.prototype.push=Yu;hn.prototype.has=qu;gn=hn});function V_(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 zu,Ju=u(()=>{zu=V_});function z_(e,t){return e.has(t)}var yn,ei=u(()=>{yn=z_});function Z_(e,t,r,n,o,i){var a=r&J_,s=e.length,c=t.length;if(s!=c&&!(a&&c>s))return!1;var l=i.get(e),d=i.get(t);if(l&&d)return l==t&&d==e;var p=-1,f=!0,h=r&X_?new gn:void 0;for(i.set(e,t),i.set(t,e);++p<s;){var w=e[p],y=t[p];if(n)var E=a?n(y,w,p,t,e,i):n(w,y,p,e,t,i);if(E!==void 0){if(E)continue;f=!1;break}if(h){if(!zu(t,function(I,_){if(!yn(h,_)&&(w===I||o(w,I,r,n,i)))return h.push(_)})){f=!1;break}}else if(!(w===y||o(w,y,r,n,i))){f=!1;break}}return i.delete(e),i.delete(t),f}var J_,X_,wn,ti=u(()=>{Qo();Ju();ei();J_=1,X_=2;wn=Z_});function Q_(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}var Xu,Zu=u(()=>{Xu=Q_});function ex(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var Ct,En=u(()=>{Ct=ex});function mx(e,t,r,n,o,i,a){switch(r){case px:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case fx:return!(e.byteLength!=t.byteLength||!i(new Zo(e),new Zo(t)));case nx:case ox:case sx:return Et(+e,+t);case ix:return e.name==t.name&&e.message==t.message;case cx:case ux:return e==t+"";case ax:var s=Xu;case lx:var c=n&tx;if(s||(s=Ct),e.size!=t.size&&!c)return!1;var l=a.get(e);if(l)return l==t;n|=rx,a.set(e,t);var d=wn(s(e),s(t),n,o,i,a);return a.delete(e),d;case dx:if(ri)return ri.call(e)==ri.call(t)}return!1}var tx,rx,nx,ox,ix,ax,sx,cx,lx,ux,dx,fx,px,Qu,ri,ed,td=u(()=>{dt();Wu();en();ti();Zu();En();tx=1,rx=2,nx="[object Boolean]",ox="[object Date]",ix="[object Error]",ax="[object Map]",sx="[object Number]",cx="[object RegExp]",lx="[object Set]",ux="[object String]",dx="[object Symbol]",fx="[object ArrayBuffer]",px="[object DataView]",Qu=U?U.prototype:void 0,ri=Qu?Qu.valueOf:void 0;ed=mx});function wx(e,t,r,n,o,i){var a=r&hx,s=zo(e),c=s.length,l=zo(t),d=l.length;if(c!=d&&!a)return!1;for(var p=c;p--;){var f=s[p];if(!(a?f in t:yx.call(t,f)))return!1}var h=i.get(e),w=i.get(t);if(h&&w)return h==t&&w==e;var y=!0;i.set(e,t),i.set(t,e);for(var E=a;++p<c;){f=s[p];var I=e[f],_=t[f];if(n)var O=a?n(_,I,f,t,e,i):n(I,_,f,e,t,i);if(!(O===void 0?I===_||o(I,_,r,n,i):O)){y=!1;break}E||(E=f=="constructor")}if(y&&!E){var v=e.constructor,x=t.constructor;v!=x&&"constructor"in e&&"constructor"in t&&!(typeof v=="function"&&v instanceof v&&typeof x=="function"&&x instanceof x)&&(y=!1)}return i.delete(e),i.delete(t),y}var hx,gx,yx,rd,nd=u(()=>{Pu();hx=1,gx=Object.prototype,yx=gx.hasOwnProperty;rd=wx});function xx(e,t,r,n,o,i){var a=D(e),s=D(t),c=a?id:Xo(e),l=s?id:Xo(t);c=c==od?_n:c,l=l==od?_n:l;var d=c==_n,p=l==_n,f=c==l;if(f&&or(e)){if(!or(t))return!1;a=!0,d=!1}if(f&&!d)return i||(i=new Nt),a||on(e)?wn(e,t,r,n,o,i):ed(e,t,c,r,n,o,i);if(!(r&Ex)){var h=d&&ad.call(e,"__wrapped__"),w=p&&ad.call(t,"__wrapped__");if(h||w){var y=h?e.value():e,E=w?t.value():t;return i||(i=new Nt),o(y,E,r,n,i)}}return f?(i||(i=new Nt),rd(e,t,r,n,o,i)):!1}var Ex,od,id,_n,_x,ad,sd,cd=u(()=>{Vo();ti();td();nd();ju();z();$o();Go();Ex=1,od="[object Arguments]",id="[object Array]",_n="[object Object]",_x=Object.prototype,ad=_x.hasOwnProperty;sd=xx});function ld(e,t,r,n,o){return e===t?!0:e==null||t==null||!ne(e)&&!ne(t)?e!==e&&t!==t:sd(e,t,r,n,ld,o)}var xn,ni=u(()=>{cd();pt();xn=ld});function Ax(e,t,r,n){var o=r.length,i=o,a=!n;if(e==null)return!i;for(e=Object(e);o--;){var s=r[o];if(a&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++o<i;){s=r[o];var c=s[0],l=e[c],d=s[1];if(a&&s[2]){if(l===void 0&&!(c in e))return!1}else{var p=new Nt;if(n)var f=n(l,d,c,e,t,p);if(!(f===void 0?xn(d,l,bx|Sx,n,p):f))return!1}}return!0}var bx,Sx,ud,dd=u(()=>{Vo();ni();bx=1,Sx=2;ud=Ax});function Ix(e){return e===e&&!ie(e)}var bn,oi=u(()=>{gt();bn=Ix});function vx(e){for(var t=bt(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,bn(o)]}return t}var fd,pd=u(()=>{oi();an();fd=vx});function Tx(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var Sn,ii=u(()=>{Sn=Tx});function Ox(e){var t=fd(e);return t.length==1&&t[0][2]?Sn(t[0][0],t[0][1]):function(r){return r===e||ud(r,e,t)}}var md,hd=u(()=>{dd();pd();ii();md=Ox});function Nx(e,t){return e!=null&&t in Object(e)}var gd,yd=u(()=>{gd=Nx});function Cx(e,t,r){t=un(t,e);for(var n=-1,o=t.length,i=!1;++n<o;){var a=Re(t[n]);if(!(i=e!=null&&r(e,a)))break;e=e[a]}return i||++n!=o?i:(o=e==null?0:e.length,!!o&&_t(o)&&wt(a,o)&&(D(e)||xt(e)))}var wd,Ed=u(()=>{Yo();rn();z();Qr();tn();ur();wd=Cx});function Rx(e,t){return e!=null&&wd(e,t,gd)}var _d,xd=u(()=>{yd();Ed();_d=Rx});function kx(e,t){return St(e)&&bn(t)?Sn(Re(e),t):function(r){var n=iu(r,e);return n===void 0&&n===t?_d(r,e):xn(t,n,Dx|Lx)}}var Dx,Lx,bd,Sd=u(()=>{ni();au();xd();sn();oi();ii();ur();Dx=1,Lx=2;bd=kx});function Px(e){return function(t){return t?.[e]}}var Ad,Id=u(()=>{Ad=Px});function Mx(e){return function(t){return Tt(t,e)}}var vd,Td=u(()=>{dn();vd=Mx});function Fx(e){return St(e)?Ad(Re(e)):vd(e)}var Od,Nd=u(()=>{Id();Td();sn();ur();Od=Fx});function $x(e){return typeof e=="function"?e:e==null?Ae:typeof e=="object"?D(e)?bd(e[0],e[1]):md(e):Od(e)}var Le,dr=u(()=>{hd();Sd();tr();z();Nd();Le=$x});function Bx(e,t,r,n){for(var o=-1,i=e==null?0:e.length;++o<i;){var a=e[o];t(n,a,r(a),e)}return n}var Cd,Rd=u(()=>{Cd=Bx});function Hx(e){return function(t,r,n){for(var o=-1,i=Object(t),a=n(t),s=a.length;s--;){var c=a[e?s:++o];if(r(i[c],c,i)===!1)break}return t}}var Dd,Ld=u(()=>{Dd=Hx});var Ux,kd,Pd=u(()=>{Ld();Ux=Dd(),kd=Ux});function Gx(e,t){return e&&kd(e,t,bt)}var Md,Fd=u(()=>{Pd();an();Md=Gx});function jx(e,t){return function(r,n){if(r==null)return r;if(!ve(r))return e(r,n);for(var o=r.length,i=t?o:-1,a=Object(r);(t?i--:++i<o)&&n(a[i],i,a)!==!1;);return r}}var $d,Bd=u(()=>{rr();$d=jx});var Wx,An,ai=u(()=>{Fd();Bd();Wx=$d(Md),An=Wx});function Yx(e,t,r,n){return An(e,function(o,i,a){t(n,o,r(o),a)}),n}var Hd,Ud=u(()=>{ai();Hd=Yx});function Kx(e,t){return function(r,n){var o=D(r)?Cd:Hd,i=t?t():{};return o(r,e,Le(n,2),i)}}var Gd,jd=u(()=>{Rd();Ud();dr();z();Gd=Kx});function qx(e,t,r){for(var n=-1,o=e==null?0:e.length;++n<o;)if(r(t,e[n]))return!0;return!1}var Wd,Yd=u(()=>{Wd=qx});function Vx(e,t){var r=-1,n=ve(e)?Array(e.length):[];return An(e,function(o,i,a){n[++r]=t(o,i,a)}),n}var Kd,qd=u(()=>{ai();rr();Kd=Vx});var zx,Jx,Xx,si,Vd=u(()=>{Gc();jd();zx=Object.prototype,Jx=zx.hasOwnProperty,Xx=Gd(function(e,t,r){Jx.call(e,r)?e[r].push(t):Uc(e,r,[t])}),si=Xx});function Zx(e,t){for(var r,n=-1,o=e.length;++n<o;){var i=t(e[n]);i!==void 0&&(r=r===void 0?i:r+i)}return r}var zd,Jd=u(()=>{zd=Zx});function Qx(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}var Xd,Zd=u(()=>{Xd=Qx});function eb(e,t){if(e!==t){var r=e!==void 0,n=e===null,o=e===e,i=oe(e),a=t!==void 0,s=t===null,c=t===t,l=oe(t);if(!s&&!l&&!i&&e>t||i&&a&&c&&!s&&!l||n&&a&&c||!r&&c||!o)return 1;if(!n&&!i&&!l&&e<t||l&&r&&o&&!n&&!i||s&&r&&o||!a&&o||!c)return-1}return 0}var Qd,ef=u(()=>{mt();Qd=eb});function tb(e,t,r){for(var n=-1,o=e.criteria,i=t.criteria,a=o.length,s=r.length;++n<a;){var c=Qd(o[n],i[n]);if(c){if(n>=s)return c;var l=r[n];return c*(l=="desc"?-1:1)}}return e.index-t.index}var tf,rf=u(()=>{ef();tf=tb});function rb(e,t,r){t.length?t=ht(t,function(i){return D(i)?function(a){return Tt(a,i.length===1?i[0]:i)}:i}):t=[Ae];var n=-1;t=ht(t,nn(Le));var o=Kd(e,function(i,a,s){var c=ht(t,function(l){return l(i)});return{criteria:c,index:++n,value:i}});return Xd(o,function(i,a){return tf(i,a,r)})}var nf,of=u(()=>{Do();dn();dr();qd();Zd();Bo();rf();tr();z();nf=rb});var nb,ci,af=u(()=>{fu();of();qc();Mo();nb=Kc(function(e,t){if(e==null)return[];var r=t.length;return r>1&&nr(e,t[0],t[1])?t=[]:r>2&&nr(t[0],t[1],t[2])&&(t=[t[0]]),nf(e,du(t,1),[])}),ci=nb});function ob(e,t){return e&&e.length?zd(e,Le(t,2)):0}var li,sf=u(()=>{dr();Jd();li=ob});var ib,ab,cf,lf=u(()=>{Jo();bc();En();ib=1/0,ab=De&&1/Ct(new De([,-0]))[1]==ib?function(e){return new De(e)}:xc,cf=ab});function cb(e,t,r){var n=-1,o=Bc,i=e.length,a=!0,s=[],c=s;if(r)a=!1,o=Wd;else if(i>=sb){var l=t?null:cf(e);if(l)return Ct(l);a=!1,o=yn,c=new gn}else c=t?[]:s;e:for(;++n<i;){var d=e[n],p=t?t(d):d;if(d=r||d!==0?d:0,a&&p===p){for(var f=c.length;f--;)if(c[f]===p)continue e;t&&c.push(p),s.push(d)}else o(c,p,r)||(c!==s&&c.push(p),s.push(d))}return s}var sb,uf,df=u(()=>{Qo();Hc();Yd();ei();lf();En();sb=200;uf=cb});function lb(e,t){return e&&e.length?uf(e,Le(t,2)):[]}var ui,ff=u(()=>{dr();df();ui=lb});var In=u(()=>{hu();Vd();af();sf();ff();});import{readFile as ub}from"node:fs/promises";function fb(e){let t=[];return e.sectionHeading&&t.push(`[Section: ${e.sectionHeading}]`),e.contextualPrefix&&t.push(e.contextualPrefix),t.push(e.content),t.join(`
73
- `)}function pb(e,t,r){return`${e}
74
+ `,[e]),o}var iu=u(()=>{T();Ze()});var dx,Io,Rs=u(()=>{dx=typeof global=="object"&&global&&global.Object===Object&&global,Io=dx});var fx,px,$,Ne=u(()=>{Rs();fx=typeof self=="object"&&self&&self.Object===Object&&self,px=Io||fx||Function("return this")(),$=px});var mx,V,ir=u(()=>{Ne();mx=$.Symbol,V=mx});function yx(e){var t=hx.call(e,cn),r=e[cn];try{e[cn]=void 0;var n=!0}catch{}var o=gx.call(e);return n&&(t?e[cn]=r:delete e[cn]),o}var su,hx,gx,cn,au,cu=u(()=>{ir();su=Object.prototype,hx=su.hasOwnProperty,gx=su.toString,cn=V?V.toStringTag:void 0;au=yx});function _x(e){return Ex.call(e)}var wx,Ex,lu,uu=u(()=>{wx=Object.prototype,Ex=wx.toString;lu=_x});function Ax(e){return e==null?e===void 0?Sx:xx:du&&du in Object(e)?au(e):lu(e)}var xx,Sx,du,Ee,sr=u(()=>{ir();cu();uu();xx="[object Null]",Sx="[object Undefined]",du=V?V.toStringTag:void 0;Ee=Ax});function bx(e){return e!=null&&typeof e=="object"}var _e,ar=u(()=>{_e=bx});function Ix(e){return typeof e=="symbol"||_e(e)&&Ee(e)==Tx}var Tx,xe,cr=u(()=>{sr();ar();Tx="[object Symbol]";xe=Ix});function Ox(e,t){for(var r=-1,n=e==null?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}var lr,Cs=u(()=>{lr=Ox});var Rx,P,oe=u(()=>{Rx=Array.isArray,P=Rx});function mu(e){if(typeof e=="string")return e;if(P(e))return lr(e,mu)+"";if(xe(e))return pu?pu.call(e):"";var t=e+"";return t=="0"&&1/e==-Cx?"-0":t}var Cx,fu,pu,hu,gu=u(()=>{ir();Cs();oe();cr();Cx=1/0,fu=V?V.prototype:void 0,pu=fu?fu.toString:void 0;hu=mu});function vx(e){for(var t=e.length;t--&&Nx.test(e.charAt(t)););return t}var Nx,yu,wu=u(()=>{Nx=/\s/;yu=vx});function Lx(e){return e&&e.slice(0,yu(e)+1).replace(Dx,"")}var Dx,Eu,_u=u(()=>{wu();Dx=/^\s+/;Eu=Lx});function Px(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var Se,ur=u(()=>{Se=Px});function Fx(e){if(typeof e=="number")return e;if(xe(e))return xu;if(Se(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Se(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=Eu(e);var r=Mx.test(e);return r||Hx.test(e)?Bx(e.slice(2),r?2:8):kx.test(e)?xu:+e}var xu,kx,Mx,Hx,Bx,Su,Au=u(()=>{_u();ur();cr();xu=NaN,kx=/^[-+]0x[0-9a-f]+$/i,Mx=/^0b[01]+$/i,Hx=/^0o[0-7]+$/i,Bx=parseInt;Su=Fx});function Ux(e){if(!e)return e===0?e:0;if(e=Su(e),e===bu||e===-bu){var t=e<0?-1:1;return t*$x}return e===e?e:0}var bu,$x,Tu,Iu=u(()=>{Au();bu=1/0,$x=17976931348623157e292;Tu=Ux});function Gx(e){var t=Tu(e),r=t%1;return t===t?r?t-r:t:0}var Ou,Ru=u(()=>{Iu();Ou=Gx});function jx(e){return e}var Qe,ln=u(()=>{Qe=jx});function qx(e){if(!Se(e))return!1;var t=Ee(e);return t==Kx||t==Yx||t==Wx||t==Vx}var Wx,Kx,Yx,Vx,Oo,Ns=u(()=>{sr();ur();Wx="[object AsyncFunction]",Kx="[object Function]",Yx="[object GeneratorFunction]",Vx="[object Proxy]";Oo=qx});var Jx,Ro,Cu=u(()=>{Ne();Jx=$["__core-js_shared__"],Ro=Jx});function zx(e){return!!Nu&&Nu in e}var Nu,vu,Du=u(()=>{Cu();Nu=(function(){var e=/[^.]+$/.exec(Ro&&Ro.keys&&Ro.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();vu=zx});function Qx(e){if(e!=null){try{return Zx.call(e)}catch{}try{return e+""}catch{}}return""}var Xx,Zx,Fe,vs=u(()=>{Xx=Function.prototype,Zx=Xx.toString;Fe=Qx});function aS(e){if(!Se(e)||vu(e))return!1;var t=Oo(e)?sS:tS;return t.test(Fe(e))}var eS,tS,rS,nS,oS,iS,sS,Lu,Pu=u(()=>{Ns();Du();ur();vs();eS=/[\\^$.*+?()[\]{}|]/g,tS=/^\[object .+?Constructor\]$/,rS=Function.prototype,nS=Object.prototype,oS=rS.toString,iS=nS.hasOwnProperty,sS=RegExp("^"+oS.call(iS).replace(eS,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");Lu=aS});function cS(e,t){return e?.[t]}var ku,Mu=u(()=>{ku=cS});function lS(e,t){var r=ku(e,t);return Lu(r)?r:void 0}var z,et=u(()=>{Pu();Mu();z=lS});var uS,Co,Hu=u(()=>{et();Ne();uS=z($,"WeakMap"),Co=uS});function dS(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 Bu,Fu=u(()=>{Bu=dS});function fS(){}var $u,Uu=u(()=>{$u=fS});function gS(e){var t=0,r=0;return function(){var n=hS(),o=mS-(n-r);if(r=n,o>0){if(++t>=pS)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var pS,mS,hS,Gu,ju=u(()=>{pS=800,mS=16,hS=Date.now;Gu=gS});function yS(e){return function(){return e}}var Wu,Ku=u(()=>{Wu=yS});var wS,dr,Ds=u(()=>{et();wS=(function(){try{var e=z(Object,"defineProperty");return e({},"",{}),e}catch{}})(),dr=wS});var ES,Yu,Vu=u(()=>{Ku();Ds();ln();ES=dr?function(e,t){return dr(e,"toString",{configurable:!0,enumerable:!1,value:Wu(t),writable:!0})}:Qe,Yu=ES});var _S,qu,Ju=u(()=>{Vu();ju();_S=Gu(Yu),qu=_S});function xS(e,t,r,n){for(var o=e.length,i=r+(n?1:-1);n?i--:++i<o;)if(t(e[i],i,e))return i;return-1}var zu,Xu=u(()=>{zu=xS});function SS(e){return e!==e}var Zu,Qu=u(()=>{Zu=SS});function AS(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}var ed,td=u(()=>{ed=AS});function bS(e,t,r){return t===t?ed(e,t,r):zu(e,Zu,r)}var rd,nd=u(()=>{Xu();Qu();td();rd=bS});function TS(e,t){var r=e==null?0:e.length;return!!r&&rd(e,t,0)>-1}var od,id=u(()=>{nd();od=TS});function RS(e,t){var r=typeof e;return t=t??IS,!!t&&(r=="number"||r!="symbol"&&OS.test(e))&&e>-1&&e%1==0&&e<t}var IS,OS,fr,No=u(()=>{IS=9007199254740991,OS=/^(?:0|[1-9]\d*)$/;fr=RS});function CS(e,t,r){t=="__proto__"&&dr?dr(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var sd,ad=u(()=>{Ds();sd=CS});function NS(e,t){return e===t||e!==e&&t!==t}var pr,vo=u(()=>{pr=NS});function vS(e,t,r){return t=cd(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=cd(n.length-t,0),s=Array(i);++o<i;)s[o]=n[t+o];o=-1;for(var a=Array(t+1);++o<t;)a[o]=n[o];return a[t]=r(s),Bu(e,this,a)}}var cd,ld,ud=u(()=>{Fu();cd=Math.max;ld=vS});function DS(e,t){return qu(ld(e,t,Qe),e+"")}var dd,fd=u(()=>{ln();ud();Ju();dd=DS});function PS(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=LS}var LS,mr,Do=u(()=>{LS=9007199254740991;mr=PS});function kS(e){return e!=null&&mr(e.length)&&!Oo(e)}var tt,un=u(()=>{Ns();Do();tt=kS});function MS(e,t,r){if(!Se(r))return!1;var n=typeof t;return(n=="number"?tt(r)&&fr(t,r.length):n=="string"&&t in r)?pr(r[t],e):!1}var dn,Ls=u(()=>{vo();un();No();ur();dn=MS});function BS(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||HS;return e===r}var HS,pd,md=u(()=>{HS=Object.prototype;pd=BS});function FS(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var hd,gd=u(()=>{hd=FS});function US(e){return _e(e)&&Ee(e)==$S}var $S,Ps,yd=u(()=>{sr();ar();$S="[object Arguments]";Ps=US});var wd,GS,jS,WS,hr,Lo=u(()=>{yd();ar();wd=Object.prototype,GS=wd.hasOwnProperty,jS=wd.propertyIsEnumerable,WS=Ps((function(){return arguments})())?Ps:function(e){return _e(e)&&GS.call(e,"callee")&&!jS.call(e,"callee")},hr=WS});function KS(){return!1}var Ed,_d=u(()=>{Ed=KS});var Ad,xd,YS,Sd,VS,qS,fn,ks=u(()=>{Ne();_d();Ad=typeof exports=="object"&&exports&&!exports.nodeType&&exports,xd=Ad&&typeof module=="object"&&module&&!module.nodeType&&module,YS=xd&&xd.exports===Ad,Sd=YS?$.Buffer:void 0,VS=Sd?Sd.isBuffer:void 0,qS=VS||Ed,fn=qS});function EA(e){return _e(e)&&mr(e.length)&&!!D[Ee(e)]}var JS,zS,XS,ZS,QS,eA,tA,rA,nA,oA,iA,sA,aA,cA,lA,uA,dA,fA,pA,mA,hA,gA,yA,wA,D,bd,Td=u(()=>{sr();Do();ar();JS="[object Arguments]",zS="[object Array]",XS="[object Boolean]",ZS="[object Date]",QS="[object Error]",eA="[object Function]",tA="[object Map]",rA="[object Number]",nA="[object Object]",oA="[object RegExp]",iA="[object Set]",sA="[object String]",aA="[object WeakMap]",cA="[object ArrayBuffer]",lA="[object DataView]",uA="[object Float32Array]",dA="[object Float64Array]",fA="[object Int8Array]",pA="[object Int16Array]",mA="[object Int32Array]",hA="[object Uint8Array]",gA="[object Uint8ClampedArray]",yA="[object Uint16Array]",wA="[object Uint32Array]",D={};D[uA]=D[dA]=D[fA]=D[pA]=D[mA]=D[hA]=D[gA]=D[yA]=D[wA]=!0;D[JS]=D[zS]=D[cA]=D[XS]=D[lA]=D[ZS]=D[QS]=D[eA]=D[tA]=D[rA]=D[nA]=D[oA]=D[iA]=D[sA]=D[aA]=!1;bd=EA});function _A(e){return function(t){return e(t)}}var Po,Ms=u(()=>{Po=_A});var Id,pn,xA,Hs,SA,Bs,Od=u(()=>{Rs();Id=typeof exports=="object"&&exports&&!exports.nodeType&&exports,pn=Id&&typeof module=="object"&&module&&!module.nodeType&&module,xA=pn&&pn.exports===Id,Hs=xA&&Io.process,SA=(function(){try{var e=pn&&pn.require&&pn.require("util").types;return e||Hs&&Hs.binding&&Hs.binding("util")}catch{}})(),Bs=SA});var Rd,AA,ko,Fs=u(()=>{Td();Ms();Od();Rd=Bs&&Bs.isTypedArray,AA=Rd?Po(Rd):bd,ko=AA});function IA(e,t){var r=P(e),n=!r&&hr(e),o=!r&&!n&&fn(e),i=!r&&!n&&!o&&ko(e),s=r||n||o||i,a=s?hd(e.length,String):[],c=a.length;for(var l in e)(t||TA.call(e,l))&&!(s&&(l=="length"||o&&(l=="offset"||l=="parent")||i&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||fr(l,c)))&&a.push(l);return a}var bA,TA,Cd,Nd=u(()=>{gd();Lo();oe();ks();No();Fs();bA=Object.prototype,TA=bA.hasOwnProperty;Cd=IA});function OA(e,t){return function(r){return e(t(r))}}var vd,Dd=u(()=>{vd=OA});var RA,Ld,Pd=u(()=>{Dd();RA=vd(Object.keys,Object),Ld=RA});function vA(e){if(!pd(e))return Ld(e);var t=[];for(var r in Object(e))NA.call(e,r)&&r!="constructor"&&t.push(r);return t}var CA,NA,kd,Md=u(()=>{md();Pd();CA=Object.prototype,NA=CA.hasOwnProperty;kd=vA});function DA(e){return tt(e)?Cd(e):kd(e)}var gr,Mo=u(()=>{Nd();Md();un();gr=DA});function kA(e,t){if(P(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||xe(e)?!0:PA.test(e)||!LA.test(e)||t!=null&&e in Object(t)}var LA,PA,yr,Ho=u(()=>{oe();cr();LA=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,PA=/^\w*$/;yr=kA});var MA,$e,mn=u(()=>{et();MA=z(Object,"create"),$e=MA});function HA(){this.__data__=$e?$e(null):{},this.size=0}var Hd,Bd=u(()=>{mn();Hd=HA});function BA(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Fd,$d=u(()=>{Fd=BA});function GA(e){var t=this.__data__;if($e){var r=t[e];return r===FA?void 0:r}return UA.call(t,e)?t[e]:void 0}var FA,$A,UA,Ud,Gd=u(()=>{mn();FA="__lodash_hash_undefined__",$A=Object.prototype,UA=$A.hasOwnProperty;Ud=GA});function KA(e){var t=this.__data__;return $e?t[e]!==void 0:WA.call(t,e)}var jA,WA,jd,Wd=u(()=>{mn();jA=Object.prototype,WA=jA.hasOwnProperty;jd=KA});function VA(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=$e&&t===void 0?YA:t,this}var YA,Kd,Yd=u(()=>{mn();YA="__lodash_hash_undefined__";Kd=VA});function wr(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 $s,Vd=u(()=>{Bd();$d();Gd();Wd();Yd();wr.prototype.clear=Hd;wr.prototype.delete=Fd;wr.prototype.get=Ud;wr.prototype.has=jd;wr.prototype.set=Kd;$s=wr});function qA(){this.__data__=[],this.size=0}var qd,Jd=u(()=>{qd=qA});function JA(e,t){for(var r=e.length;r--;)if(pr(e[r][0],t))return r;return-1}var rt,hn=u(()=>{vo();rt=JA});function ZA(e){var t=this.__data__,r=rt(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():XA.call(t,r,1),--this.size,!0}var zA,XA,zd,Xd=u(()=>{hn();zA=Array.prototype,XA=zA.splice;zd=ZA});function QA(e){var t=this.__data__,r=rt(t,e);return r<0?void 0:t[r][1]}var Zd,Qd=u(()=>{hn();Zd=QA});function eb(e){return rt(this.__data__,e)>-1}var ef,tf=u(()=>{hn();ef=eb});function tb(e,t){var r=this.__data__,n=rt(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var rf,nf=u(()=>{hn();rf=tb});function Er(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 nt,gn=u(()=>{Jd();Xd();Qd();tf();nf();Er.prototype.clear=qd;Er.prototype.delete=zd;Er.prototype.get=Zd;Er.prototype.has=ef;Er.prototype.set=rf;nt=Er});var rb,ot,Bo=u(()=>{et();Ne();rb=z($,"Map"),ot=rb});function nb(){this.size=0,this.__data__={hash:new $s,map:new(ot||nt),string:new $s}}var of,sf=u(()=>{Vd();gn();Bo();of=nb});function ob(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var af,cf=u(()=>{af=ob});function ib(e,t){var r=e.__data__;return af(t)?r[typeof t=="string"?"string":"hash"]:r.map}var it,yn=u(()=>{cf();it=ib});function sb(e){var t=it(this,e).delete(e);return this.size-=t?1:0,t}var lf,uf=u(()=>{yn();lf=sb});function ab(e){return it(this,e).get(e)}var df,ff=u(()=>{yn();df=ab});function cb(e){return it(this,e).has(e)}var pf,mf=u(()=>{yn();pf=cb});function lb(e,t){var r=it(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var hf,gf=u(()=>{yn();hf=lb});function _r(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 At,Fo=u(()=>{sf();uf();ff();mf();gf();_r.prototype.clear=of;_r.prototype.delete=lf;_r.prototype.get=df;_r.prototype.has=pf;_r.prototype.set=hf;At=_r});function Us(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(ub);var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var s=e.apply(this,n);return r.cache=i.set(o,s)||i,s};return r.cache=new(Us.Cache||At),r}var ub,yf,wf=u(()=>{Fo();ub="Expected a function";Us.Cache=At;yf=Us});function fb(e){var t=yf(e,function(n){return r.size===db&&r.clear(),n}),r=t.cache;return t}var db,Ef,_f=u(()=>{wf();db=500;Ef=fb});var pb,mb,hb,xf,Sf=u(()=>{_f();pb=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,mb=/\\(\\)?/g,hb=Ef(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(pb,function(r,n,o,i){t.push(o?i.replace(mb,"$1"):n||r)}),t}),xf=hb});function gb(e){return e==null?"":hu(e)}var Af,bf=u(()=>{gu();Af=gb});function yb(e,t){return P(e)?e:yr(e,t)?[e]:xf(Af(e))}var $o,Gs=u(()=>{oe();Ho();Sf();bf();$o=yb});function Eb(e){if(typeof e=="string"||xe(e))return e;var t=e+"";return t=="0"&&1/e==-wb?"-0":t}var wb,st,wn=u(()=>{cr();wb=1/0;st=Eb});function _b(e,t){t=$o(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[st(t[r++])];return r&&r==n?e:void 0}var xr,Uo=u(()=>{Gs();wn();xr=_b});function xb(e,t,r){var n=e==null?void 0:xr(e,t);return n===void 0?r:n}var Tf,If=u(()=>{Uo();Tf=xb});function Sb(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var Go,js=u(()=>{Go=Sb});function Ab(e){return P(e)||hr(e)||!!(Of&&e&&e[Of])}var Of,Rf,Cf=u(()=>{ir();Lo();oe();Of=V?V.isConcatSpreadable:void 0;Rf=Ab});function Nf(e,t,r,n,o){var i=-1,s=e.length;for(r||(r=Rf),o||(o=[]);++i<s;){var a=e[i];t>0&&r(a)?t>1?Nf(a,t-1,r,n,o):Go(o,a):n||(o[o.length]=a)}return o}var vf,Df=u(()=>{js();Cf();vf=Nf});function bb(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),r=r>o?o:r,r<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n<o;)i[n]=e[n+t];return i}var Lf,Pf=u(()=>{Lf=bb});function Ob(e,t,r){(r?dn(e,t,r):t===void 0)?t=1:t=Ib(Ou(t),0);var n=e==null?0:e.length;if(!n||t<1)return[];for(var o=0,i=0,s=Array(Tb(n/t));o<n;)s[i++]=Lf(e,o,o+=t);return s}var Tb,Ib,Ws,kf=u(()=>{Pf();Ls();Ru();Tb=Math.ceil,Ib=Math.max;Ws=Ob});function Rb(){this.__data__=new nt,this.size=0}var Mf,Hf=u(()=>{gn();Mf=Rb});function Cb(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var Bf,Ff=u(()=>{Bf=Cb});function Nb(e){return this.__data__.get(e)}var $f,Uf=u(()=>{$f=Nb});function vb(e){return this.__data__.has(e)}var Gf,jf=u(()=>{Gf=vb});function Lb(e,t){var r=this.__data__;if(r instanceof nt){var n=r.__data__;if(!ot||n.length<Db-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new At(n)}return r.set(e,t),this.size=r.size,this}var Db,Wf,Kf=u(()=>{gn();Bo();Fo();Db=200;Wf=Lb});function Sr(e){var t=this.__data__=new nt(e);this.size=t.size}var Ar,Ks=u(()=>{gn();Hf();Ff();Uf();jf();Kf();Sr.prototype.clear=Mf;Sr.prototype.delete=Bf;Sr.prototype.get=$f;Sr.prototype.has=Gf;Sr.prototype.set=Wf;Ar=Sr});function Pb(e,t){for(var r=-1,n=e==null?0:e.length,o=0,i=[];++r<n;){var s=e[r];t(s,r,e)&&(i[o++]=s)}return i}var Yf,Vf=u(()=>{Yf=Pb});function kb(){return[]}var qf,Jf=u(()=>{qf=kb});var Mb,Hb,zf,Bb,Xf,Zf=u(()=>{Vf();Jf();Mb=Object.prototype,Hb=Mb.propertyIsEnumerable,zf=Object.getOwnPropertySymbols,Bb=zf?function(e){return e==null?[]:(e=Object(e),Yf(zf(e),function(t){return Hb.call(e,t)}))}:qf,Xf=Bb});function Fb(e,t,r){var n=t(e);return P(e)?n:Go(n,r(e))}var Qf,ep=u(()=>{js();oe();Qf=Fb});function $b(e){return Qf(e,gr,Xf)}var Ys,tp=u(()=>{ep();Zf();Mo();Ys=$b});var Ub,jo,rp=u(()=>{et();Ne();Ub=z($,"DataView"),jo=Ub});var Gb,Wo,np=u(()=>{et();Ne();Gb=z($,"Promise"),Wo=Gb});var jb,at,Vs=u(()=>{et();Ne();jb=z($,"Set"),at=jb});var op,Wb,ip,sp,ap,cp,Kb,Yb,Vb,qb,Jb,bt,qs,lp=u(()=>{rp();Bo();np();Vs();Hu();sr();vs();op="[object Map]",Wb="[object Object]",ip="[object Promise]",sp="[object Set]",ap="[object WeakMap]",cp="[object DataView]",Kb=Fe(jo),Yb=Fe(ot),Vb=Fe(Wo),qb=Fe(at),Jb=Fe(Co),bt=Ee;(jo&&bt(new jo(new ArrayBuffer(1)))!=cp||ot&&bt(new ot)!=op||Wo&&bt(Wo.resolve())!=ip||at&&bt(new at)!=sp||Co&&bt(new Co)!=ap)&&(bt=function(e){var t=Ee(e),r=t==Wb?e.constructor:void 0,n=r?Fe(r):"";if(n)switch(n){case Kb:return cp;case Yb:return op;case Vb:return ip;case qb:return sp;case Jb:return ap}return t});qs=bt});var zb,Js,up=u(()=>{Ne();zb=$.Uint8Array,Js=zb});function Zb(e){return this.__data__.set(e,Xb),this}var Xb,dp,fp=u(()=>{Xb="__lodash_hash_undefined__";dp=Zb});function Qb(e){return this.__data__.has(e)}var pp,mp=u(()=>{pp=Qb});function Ko(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new At;++t<r;)this.add(e[t])}var Yo,zs=u(()=>{Fo();fp();mp();Ko.prototype.add=Ko.prototype.push=dp;Ko.prototype.has=pp;Yo=Ko});function eT(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 hp,gp=u(()=>{hp=eT});function tT(e,t){return e.has(t)}var Vo,Xs=u(()=>{Vo=tT});function oT(e,t,r,n,o,i){var s=r&rT,a=e.length,c=t.length;if(a!=c&&!(s&&c>a))return!1;var l=i.get(e),d=i.get(t);if(l&&d)return l==t&&d==e;var p=-1,f=!0,m=r&nT?new Yo:void 0;for(i.set(e,t),i.set(t,e);++p<a;){var w=e[p],y=t[p];if(n)var E=s?n(y,w,p,t,e,i):n(w,y,p,e,t,i);if(E!==void 0){if(E)continue;f=!1;break}if(m){if(!hp(t,function(b,_){if(!Vo(m,_)&&(w===b||o(w,b,r,n,i)))return m.push(_)})){f=!1;break}}else if(!(w===y||o(w,y,r,n,i))){f=!1;break}}return i.delete(e),i.delete(t),f}var rT,nT,qo,Zs=u(()=>{zs();gp();Xs();rT=1,nT=2;qo=oT});function iT(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}var yp,wp=u(()=>{yp=iT});function sT(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var br,Jo=u(()=>{br=sT});function _T(e,t,r,n,o,i,s){switch(r){case ET:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case wT:return!(e.byteLength!=t.byteLength||!i(new Js(e),new Js(t)));case lT:case uT:case pT:return pr(+e,+t);case dT:return e.name==t.name&&e.message==t.message;case mT:case gT:return e==t+"";case fT:var a=yp;case hT:var c=n&aT;if(a||(a=br),e.size!=t.size&&!c)return!1;var l=s.get(e);if(l)return l==t;n|=cT,s.set(e,t);var d=qo(a(e),a(t),n,o,i,s);return s.delete(e),d;case yT:if(Qs)return Qs.call(e)==Qs.call(t)}return!1}var aT,cT,lT,uT,dT,fT,pT,mT,hT,gT,yT,wT,ET,Ep,Qs,_p,xp=u(()=>{ir();up();vo();Zs();wp();Jo();aT=1,cT=2,lT="[object Boolean]",uT="[object Date]",dT="[object Error]",fT="[object Map]",pT="[object Number]",mT="[object RegExp]",hT="[object Set]",gT="[object String]",yT="[object Symbol]",wT="[object ArrayBuffer]",ET="[object DataView]",Ep=V?V.prototype:void 0,Qs=Ep?Ep.valueOf:void 0;_p=_T});function bT(e,t,r,n,o,i){var s=r&xT,a=Ys(e),c=a.length,l=Ys(t),d=l.length;if(c!=d&&!s)return!1;for(var p=c;p--;){var f=a[p];if(!(s?f in t:AT.call(t,f)))return!1}var m=i.get(e),w=i.get(t);if(m&&w)return m==t&&w==e;var y=!0;i.set(e,t),i.set(t,e);for(var E=s;++p<c;){f=a[p];var b=e[f],_=t[f];if(n)var R=s?n(_,b,f,t,e,i):n(b,_,f,e,t,i);if(!(R===void 0?b===_||o(b,_,r,n,i):R)){y=!1;break}E||(E=f=="constructor")}if(y&&!E){var I=e.constructor,S=t.constructor;I!=S&&"constructor"in e&&"constructor"in t&&!(typeof I=="function"&&I instanceof I&&typeof S=="function"&&S instanceof S)&&(y=!1)}return i.delete(e),i.delete(t),y}var xT,ST,AT,Sp,Ap=u(()=>{tp();xT=1,ST=Object.prototype,AT=ST.hasOwnProperty;Sp=bT});function OT(e,t,r,n,o,i){var s=P(e),a=P(t),c=s?Tp:qs(e),l=a?Tp:qs(t);c=c==bp?zo:c,l=l==bp?zo:l;var d=c==zo,p=l==zo,f=c==l;if(f&&fn(e)){if(!fn(t))return!1;s=!0,d=!1}if(f&&!d)return i||(i=new Ar),s||ko(e)?qo(e,t,r,n,o,i):_p(e,t,c,r,n,o,i);if(!(r&TT)){var m=d&&Ip.call(e,"__wrapped__"),w=p&&Ip.call(t,"__wrapped__");if(m||w){var y=m?e.value():e,E=w?t.value():t;return i||(i=new Ar),o(y,E,r,n,i)}}return f?(i||(i=new Ar),Sp(e,t,r,n,o,i)):!1}var TT,bp,Tp,zo,IT,Ip,Op,Rp=u(()=>{Ks();Zs();xp();Ap();lp();oe();ks();Fs();TT=1,bp="[object Arguments]",Tp="[object Array]",zo="[object Object]",IT=Object.prototype,Ip=IT.hasOwnProperty;Op=OT});function Cp(e,t,r,n,o){return e===t?!0:e==null||t==null||!_e(e)&&!_e(t)?e!==e&&t!==t:Op(e,t,r,n,Cp,o)}var Xo,ea=u(()=>{Rp();ar();Xo=Cp});function NT(e,t,r,n){var o=r.length,i=o,s=!n;if(e==null)return!i;for(e=Object(e);o--;){var a=r[o];if(s&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++o<i;){a=r[o];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 Ar;if(n)var f=n(l,d,c,e,t,p);if(!(f===void 0?Xo(d,l,RT|CT,n,p):f))return!1}}return!0}var RT,CT,Np,vp=u(()=>{Ks();ea();RT=1,CT=2;Np=NT});function vT(e){return e===e&&!Se(e)}var Zo,ta=u(()=>{ur();Zo=vT});function DT(e){for(var t=gr(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,Zo(o)]}return t}var Dp,Lp=u(()=>{ta();Mo();Dp=DT});function LT(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var Qo,ra=u(()=>{Qo=LT});function PT(e){var t=Dp(e);return t.length==1&&t[0][2]?Qo(t[0][0],t[0][1]):function(r){return r===e||Np(r,e,t)}}var Pp,kp=u(()=>{vp();Lp();ra();Pp=PT});function kT(e,t){return e!=null&&t in Object(e)}var Mp,Hp=u(()=>{Mp=kT});function MT(e,t,r){t=$o(t,e);for(var n=-1,o=t.length,i=!1;++n<o;){var s=st(t[n]);if(!(i=e!=null&&r(e,s)))break;e=e[s]}return i||++n!=o?i:(o=e==null?0:e.length,!!o&&mr(o)&&fr(s,o)&&(P(e)||hr(e)))}var Bp,Fp=u(()=>{Gs();Lo();oe();No();Do();wn();Bp=MT});function HT(e,t){return e!=null&&Bp(e,t,Mp)}var $p,Up=u(()=>{Hp();Fp();$p=HT});function $T(e,t){return yr(e)&&Zo(t)?Qo(st(e),t):function(r){var n=Tf(r,e);return n===void 0&&n===t?$p(r,e):Xo(t,n,BT|FT)}}var BT,FT,Gp,jp=u(()=>{ea();If();Up();Ho();ta();ra();wn();BT=1,FT=2;Gp=$T});function UT(e){return function(t){return t?.[e]}}var Wp,Kp=u(()=>{Wp=UT});function GT(e){return function(t){return xr(t,e)}}var Yp,Vp=u(()=>{Uo();Yp=GT});function jT(e){return yr(e)?Wp(st(e)):Yp(e)}var qp,Jp=u(()=>{Kp();Vp();Ho();wn();qp=jT});function WT(e){return typeof e=="function"?e:e==null?Qe:typeof e=="object"?P(e)?Gp(e[0],e[1]):Pp(e):qp(e)}var ct,En=u(()=>{kp();jp();ln();oe();Jp();ct=WT});function KT(e,t,r,n){for(var o=-1,i=e==null?0:e.length;++o<i;){var s=e[o];t(n,s,r(s),e)}return n}var zp,Xp=u(()=>{zp=KT});function YT(e){return function(t,r,n){for(var o=-1,i=Object(t),s=n(t),a=s.length;a--;){var c=s[e?a:++o];if(r(i[c],c,i)===!1)break}return t}}var Zp,Qp=u(()=>{Zp=YT});var VT,em,tm=u(()=>{Qp();VT=Zp(),em=VT});function qT(e,t){return e&&em(e,t,gr)}var rm,nm=u(()=>{tm();Mo();rm=qT});function JT(e,t){return function(r,n){if(r==null)return r;if(!tt(r))return e(r,n);for(var o=r.length,i=t?o:-1,s=Object(r);(t?i--:++i<o)&&n(s[i],i,s)!==!1;);return r}}var om,im=u(()=>{un();om=JT});var zT,ei,na=u(()=>{nm();im();zT=om(rm),ei=zT});function XT(e,t,r,n){return ei(e,function(o,i,s){t(n,o,r(o),s)}),n}var sm,am=u(()=>{na();sm=XT});function ZT(e,t){return function(r,n){var o=P(r)?zp:sm,i=t?t():{};return o(r,e,ct(n,2),i)}}var cm,lm=u(()=>{Xp();am();En();oe();cm=ZT});function QT(e,t,r){for(var n=-1,o=e==null?0:e.length;++n<o;)if(r(t,e[n]))return!0;return!1}var um,dm=u(()=>{um=QT});function eI(e,t){var r=-1,n=tt(e)?Array(e.length):[];return ei(e,function(o,i,s){n[++r]=t(o,i,s)}),n}var fm,pm=u(()=>{na();un();fm=eI});var tI,rI,nI,oa,mm=u(()=>{ad();lm();tI=Object.prototype,rI=tI.hasOwnProperty,nI=cm(function(e,t,r){rI.call(e,r)?e[r].push(t):sd(e,r,[t])}),oa=nI});function oI(e,t){for(var r,n=-1,o=e.length;++n<o;){var i=t(e[n]);i!==void 0&&(r=r===void 0?i:r+i)}return r}var hm,gm=u(()=>{hm=oI});function iI(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}var ym,wm=u(()=>{ym=iI});function sI(e,t){if(e!==t){var r=e!==void 0,n=e===null,o=e===e,i=xe(e),s=t!==void 0,a=t===null,c=t===t,l=xe(t);if(!a&&!l&&!i&&e>t||i&&s&&c&&!a&&!l||n&&s&&c||!r&&c||!o)return 1;if(!n&&!i&&!l&&e<t||l&&r&&o&&!n&&!i||a&&r&&o||!s&&o||!c)return-1}return 0}var Em,_m=u(()=>{cr();Em=sI});function aI(e,t,r){for(var n=-1,o=e.criteria,i=t.criteria,s=o.length,a=r.length;++n<s;){var c=Em(o[n],i[n]);if(c){if(n>=a)return c;var l=r[n];return c*(l=="desc"?-1:1)}}return e.index-t.index}var xm,Sm=u(()=>{_m();xm=aI});function cI(e,t,r){t.length?t=lr(t,function(i){return P(i)?function(s){return xr(s,i.length===1?i[0]:i)}:i}):t=[Qe];var n=-1;t=lr(t,Po(ct));var o=fm(e,function(i,s,a){var c=lr(t,function(l){return l(i)});return{criteria:c,index:++n,value:i}});return ym(o,function(i,s){return xm(i,s,r)})}var Am,bm=u(()=>{Cs();Uo();En();pm();wm();Ms();Sm();ln();oe();Am=cI});var lI,ia,Tm=u(()=>{Df();bm();fd();Ls();lI=dd(function(e,t){if(e==null)return[];var r=t.length;return r>1&&dn(e,t[0],t[1])?t=[]:r>2&&dn(t[0],t[1],t[2])&&(t=[t[0]]),Am(e,vf(t,1),[])}),ia=lI});function uI(e,t){return e&&e.length?hm(e,ct(t,2)):0}var sa,Im=u(()=>{En();gm();sa=uI});var dI,fI,Om,Rm=u(()=>{Vs();Uu();Jo();dI=1/0,fI=at&&1/br(new at([,-0]))[1]==dI?function(e){return new at(e)}:$u,Om=fI});function mI(e,t,r){var n=-1,o=od,i=e.length,s=!0,a=[],c=a;if(r)s=!1,o=um;else if(i>=pI){var l=t?null:Om(e);if(l)return br(l);s=!1,o=Vo,c=new Yo}else c=t?[]:a;e:for(;++n<i;){var d=e[n],p=t?t(d):d;if(d=r||d!==0?d:0,s&&p===p){for(var f=c.length;f--;)if(c[f]===p)continue e;t&&c.push(p),a.push(d)}else o(c,p,r)||(c!==a&&c.push(p),a.push(d))}return a}var pI,Cm,Nm=u(()=>{zs();id();dm();Xs();Rm();Jo();pI=200;Cm=mI});function hI(e,t){return e&&e.length?Cm(e,ct(t,2)):[]}var aa,vm=u(()=>{En();Nm();aa=hI});var ti=u(()=>{kf();mm();Tm();Im();vm();});import{readFile as gI}from"node:fs/promises";function wI(e){let t=[];return e.sectionHeading&&t.push(`[Section: ${e.sectionHeading}]`),e.contextualPrefix&&t.push(e.contextualPrefix),t.push(e.content),t.join(`
75
+ `)}function EI(e,t,r){return`${e}
74
76
 
75
77
  ---
76
78
 
@@ -84,15 +86,15 @@ Respond with ONLY a JSON array of facts. Each fact object must have exactly thes
84
86
  - "confidence" (string): one of high, medium, low
85
87
  - "importance" (string): "vital" if essential to understanding the topic, "supplementary" if supporting detail
86
88
 
87
- Output the JSON array directly, no explanation or wrapping.`}function mb(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 hb(e,t,r){let n=fb(e),o=pb(t,n,r),i=await Q(o,{model:g.llm.extractionModel,caller:"extractor"});return mb(i,r).map(s=>({...s,sourceSection:e.sectionHeading||null}))}async function pf(e,{promptPath:t,categories:r}){if(!e.length)return[];let n=await ub(t,"utf8"),o=qo(e,db),i=[];for(let a of o){let s=await Promise.all(a.map(c=>hb(c,n,r).catch(l=>(console.error(`[extractor] chunk failed: ${l.message}`),[]))));i.push(...s.flat())}return i}var db,mf=u(()=>{In();ee();S();db=5});function vn(e){if(!e||typeof e!="string")return e;let t=e;for(let r of gb)t=t.replace(r,fr);return t=t.replace(yb,(r,n)=>`${n}=${fr}`),t=t.replace(wb,(r,n)=>`${n}${fr}:${fr}@`),t=t.replace(_b,(r,n)=>`${n}=${fr}`),t}var fr,gb,yb,wb,Eb,_b,di=u(()=>{fr="***MASKED***",gb=[/\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],yb=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"),wb=/(\w+:\/\/)([^:/\s]+):([^@\s]{3,})@/g,Eb=["DATABASE_URL","REDIS_URL","MONGODB_URI","MONGO_URI","POSTGRES_URL","DSN","CONNECTION_STRING","ENCRYPTION_KEY","JWT_SECRET","SIGIL_ENCRYPTION_KEY","SESSION_SECRET","WEBHOOK_SECRET"],_b=new RegExp(`\\b(${Eb.join("|")})\\s*[=:]\\s*["']?([^\\s"']+)["']?`,"gi")});var pr={};b(pr,{deleteFact:()=>Cb,deleteNamespace:()=>Db,findByUid:()=>Ib,findSimilar:()=>wf,getFactCount:()=>Nb,getHotFacts:()=>Tb,insertFact:()=>Rt,listByCategory:()=>vb,listByDocument:()=>gf,listFacts:()=>Ob,listNamespaces:()=>Rb,markContradicted:()=>yf,markSuperseded:()=>hi,recordAccess:()=>gi,saveFact:()=>mi,supersedeStaleDocFacts:()=>Tn});import{readFile as xb}from"node:fs/promises";import bb from"node:path";async function mi({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:a,embedding:s}){e=vn(e);let c=s||await je(e),l=await wf(c,{namespace:o}),d={skip:hf,ambiguous:fi};if(!l.length)return{action:"ADD",fact:await Rt({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:a,embedding:c}),audm:{topSimilarity:null,matchCount:0,decision:"no-match",thresholds:d}};let p=l[0],f={topSimilarity:Number(p.similarity),matchCount:l.length,existingId:p.id,existingContent:p.content,thresholds:d};if(p.similarity>=hf)return{action:"SKIP",existing:p,audm:{...f,decision:"skip-duplicate"}};if(p.similarity>=fi){let w=await Ab(e,p.content);if(w==="UPDATE"){let E=await Rt({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:a,embedding:c});return await hi(p.id,E.id),await pi({targetType:"fact",targetId:p.id,event:"UPDATE",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"UPDATE",fact:E,supersededId:p.id,audm:{...f,decision:"llm:UPDATE"}}}if(w==="CONTRADICT"){let E=await Rt({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:a,embedding:c});return await yf(p.id,E.id),await pi({targetType:"fact",targetId:p.id,event:"CONTRADICT",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"CONTRADICT",fact:E,contradictedId:p.id,audm:{...f,decision:"llm:CONTRADICT"}}}return{action:"ADD",fact:await Rt({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:a,embedding:c}),audm:{...f,decision:"llm:ADD"}}}return{action:"ADD",fact:await Rt({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:a,embedding:c}),audm:{...f,decision:"below-ambiguous"}}}async function Ab(e,t){let n=`${await xb(Sb,"utf8")}
89
+ Output the JSON array directly, no explanation or wrapping.`}function _I(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 xI(e,t,r){let n=wI(e),o=EI(t,n,r),i=await ge(o,{model:g.llm.extractionModel,caller:"extractor"});return _I(i,r).map(a=>({...a,sourceSection:e.sectionHeading||null}))}async function Dm(e,{promptPath:t,categories:r}){if(!e.length)return[];let n=await gI(t,"utf8"),o=Ws(e,yI),i=[];for(let s of o){let a=await Promise.all(s.map(c=>xI(c,n,r).catch(l=>(console.error(`[extractor] chunk failed: ${l.message}`),[]))));i.push(...a.flat())}return i}var yI,Lm=u(()=>{ti();ye();A();yI=5});function ri(e){if(!e||typeof e!="string")return e;let t=e;for(let r of SI)t=t.replace(r,_n);return t=t.replace(AI,(r,n)=>`${n}=${_n}`),t=t.replace(bI,(r,n)=>`${n}${_n}:${_n}@`),t=t.replace(II,(r,n)=>`${n}=${_n}`),t}var _n,SI,AI,bI,TI,II,ca=u(()=>{_n="***MASKED***",SI=[/\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],AI=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"),bI=/(\w+:\/\/)([^:/\s]+):([^@\s]{3,})@/g,TI=["DATABASE_URL","REDIS_URL","MONGODB_URI","MONGO_URI","POSTGRES_URL","DSN","CONNECTION_STRING","ENCRYPTION_KEY","JWT_SECRET","SIGIL_ENCRYPTION_KEY","SESSION_SECRET","WEBHOOK_SECRET"],II=new RegExp(`\\b(${TI.join("|")})\\s*[=:]\\s*["']?([^\\s"']+)["']?`,"gi")});var xn={};x(xn,{deleteFact:()=>MI,deleteNamespace:()=>BI,findByUid:()=>vI,findSimilar:()=>Hm,getFactCount:()=>kI,getHotFacts:()=>LI,insertFact:()=>Tr,listByCategory:()=>DI,listByDocument:()=>km,listFacts:()=>PI,listNamespaces:()=>HI,markContradicted:()=>Mm,markSuperseded:()=>fa,recordAccess:()=>pa,saveFact:()=>da,supersedeStaleDocFacts:()=>ni});import{readFile as OI}from"node:fs/promises";import RI from"node:path";async function da({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:s,embedding:a}){e=ri(e);let c=a||await xt(e),l=await Hm(c,{namespace:o}),d={skip:Pm,ambiguous:la};if(!l.length)return{action:"ADD",fact:await Tr({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:s,embedding:c}),audm:{topSimilarity:null,matchCount:0,decision:"no-match",thresholds:d}};let p=l[0],f={topSimilarity:Number(p.similarity),matchCount:l.length,existingId:p.id,existingContent:p.content,thresholds:d};if(p.similarity>=Pm)return{action:"SKIP",existing:p,audm:{...f,decision:"skip-duplicate"}};if(p.similarity>=la){let w=await NI(e,p.content);if(w==="UPDATE"){let E=await Tr({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:s,embedding:c});return await fa(p.id,E.id),await ua({targetType:"fact",targetId:p.id,event:"UPDATE",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"UPDATE",fact:E,supersededId:p.id,audm:{...f,decision:"llm:UPDATE"}}}if(w==="CONTRADICT"){let E=await Tr({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:s,embedding:c});return await Mm(p.id,E.id),await ua({targetType:"fact",targetId:p.id,event:"CONTRADICT",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"CONTRADICT",fact:E,contradictedId:p.id,audm:{...f,decision:"llm:CONTRADICT"}}}return{action:"ADD",fact:await Tr({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:s,embedding:c}),audm:{...f,decision:"llm:ADD"}}}return{action:"ADD",fact:await Tr({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:s,embedding:c}),audm:{...f,decision:"below-ambiguous"}}}async function NI(e,t){let n=`${await OI(CI,"utf8")}
88
90
 
89
91
  **EXISTING FACT:** ${t}
90
92
 
91
- **NEW FACT:** ${e}`,i=(await ge(n,{model:g.llm.decisionModel,caller:"audm"})).trim().toUpperCase();return i.includes("UPDATE")?"UPDATE":i.includes("CONTRADICT")?"CONTRADICT":"ADD"}async function Rt({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:a,embedding:s}){let c=`fact-${te(16)}`,l=null,d=null;try{let{currentDeviceId:f,currentAgent:h}=await Promise.resolve().then(()=>($r(),to));l=f(),d=h()}catch{}let[p]=await m("fact").insert({uid:c,content:e,category:t,confidence:r||"medium",importance:n||"supplementary",namespace:o,status:"active",sourceDocumentIds:i||[],sourceSection:a||null,embedding:$(s),validFrom:new Date,embeddingModel:g.embedding.model||null,embeddingDim:Number(g.embedding.dimensions)||null,createdByDeviceId:l,createdByAgent:d}).returning("*");return await m.raw(`
93
+ **NEW FACT:** ${e}`,i=(await Be(n,{model:g.llm.decisionModel,caller:"audm"})).trim().toUpperCase();return i.includes("UPDATE")?"UPDATE":i.includes("CONTRADICT")?"CONTRADICT":"ADD"}async function Tr({content:e,category:t,confidence:r,importance:n,namespace:o,sourceDocumentIds:i,sourceSection:s,embedding:a}){let c=`fact-${we(16)}`,l=null,d=null;try{let{currentDeviceId:f,currentAgent:m}=await Promise.resolve().then(()=>(po(),Xi));l=f(),d=m()}catch{}let[p]=await h("fact").insert({uid:c,content:e,category:t,confidence:r||"medium",importance:n||"supplementary",namespace:o,status:"active",sourceDocumentIds:i||[],sourceSection:s||null,embedding:G(a),validFrom:new Date,embeddingModel:g.embedding.model||null,embeddingDim:Number(g.embedding.dimensions)||null,createdByDeviceId:l,createdByAgent:d}).returning("*");return await h.raw(`
92
94
  UPDATE fact
93
95
  SET search_vector = to_tsvector('english', content)
94
96
  WHERE id = ?
95
- `,[p.id]),p}async function Ib(e){let[t]=await m("fact").where({uid:e});return t||null}async function vb(e,{namespace:t,limit:r=50}={}){let n=m("fact").where({category:e,status:"active"}).orderBy("createdAt","desc").limit(r);return t&&n.where({namespace:t}),n}async function gf(e){return m("fact").whereRaw("? = ANY(source_document_ids)",[e]).where({status:"active"}).orderBy("createdAt","desc")}async function yf(e,t){await m("fact").where({id:e}).update({status:"contradicted",contradictedById:t,validUntil:m.fn.now()})}async function hi(e,t){await m("fact").where({id:e}).update({status:"superseded",supersededById:t,validUntil:m.fn.now()})}async function Tn(e,t=[]){let r=new Set((t||[]).filter(a=>a!=null)),n=await gf(e),o=0,i=0;for(let a of n){if(r.has(a.id))continue;(Array.isArray(a.sourceDocumentIds)?a.sourceDocumentIds:[]).length<=1?(await hi(a.id,null),await pi({targetType:"fact",targetId:a.id,event:"SUPERSEDE",oldContent:a.content,newContent:null,triggeredBy:`reingest:doc=${e}`}),o++):(await m("fact").where({id:a.id}).update({sourceDocumentIds:m.raw("array_remove(source_document_ids, ?)",[e])}),i++)}return{superseded:o,dissociated:i}}async function wf(e,{namespace:t,threshold:r=fi,limit:n=5}){let o=$(e),i=`${le("embedding")} <=> ${ue()}`;return m.transaction(async a=>{await a.raw("SET LOCAL hnsw.ef_search = 40");let{rows:s}=await a.raw(`
97
+ `,[p.id]),p}async function vI(e){let[t]=await h("fact").where({uid:e});return t||null}async function DI(e,{namespace:t,limit:r=50}={}){let n=h("fact").where({category:e,status:"active"}).orderBy("createdAt","desc").limit(r);return t&&n.where({namespace:t}),n}async function km(e){return h("fact").whereRaw("? = ANY(source_document_ids)",[e]).where({status:"active"}).orderBy("createdAt","desc")}async function Mm(e,t){await h("fact").where({id:e}).update({status:"contradicted",contradictedById:t,validUntil:h.fn.now()})}async function fa(e,t){await h("fact").where({id:e}).update({status:"superseded",supersededById:t,validUntil:h.fn.now()})}async function ni(e,t=[]){let r=new Set((t||[]).filter(s=>s!=null)),n=await km(e),o=0,i=0;for(let s of n){if(r.has(s.id))continue;(Array.isArray(s.sourceDocumentIds)?s.sourceDocumentIds:[]).length<=1?(await fa(s.id,null),await ua({targetType:"fact",targetId:s.id,event:"SUPERSEDE",oldContent:s.content,newContent:null,triggeredBy:`reingest:doc=${e}`}),o++):(await h("fact").where({id:s.id}).update({sourceDocumentIds:h.raw("array_remove(source_document_ids, ?)",[e])}),i++)}return{superseded:o,dissociated:i}}async function Hm(e,{namespace:t,threshold:r=la,limit:n=5}){let o=G(e),i=`${Re("embedding")} <=> ${Ce()}`;return h.transaction(async s=>{await s.raw("SET LOCAL hnsw.ef_search = 40");let{rows:a}=await s.raw(`
96
98
  SELECT id, uid, content, category, status,
97
99
  1 - (${i}) as similarity
98
100
  FROM fact
@@ -102,12 +104,12 @@ Output the JSON array directly, no explanation or wrapping.`}function mb(e,t){le
102
104
  AND 1 - (${i}) >= ?
103
105
  ORDER BY ${i}
104
106
  LIMIT ?
105
- `,[o,t,o,r,o,n]);return s})}async function pi({targetType:e,targetId:t,event:r,oldContent:n,newContent:o,triggeredBy:i}){await m("history").insert({targetType:e,targetId:t,event:r,oldContent:n||null,newContent:o||null,triggeredBy:i||null})}async function gi(e){e.length&&await m.raw(`UPDATE fact_lifecycle
107
+ `,[o,t,o,r,o,n]);return a})}async function ua({targetType:e,targetId:t,event:r,oldContent:n,newContent:o,triggeredBy:i}){await h("history").insert({targetType:e,targetId:t,event:r,oldContent:n||null,newContent:o||null,triggeredBy:i||null})}async function pa(e){e.length&&await h.raw(`UPDATE fact_lifecycle
106
108
  SET access_count = access_count + 1,
107
109
  last_accessed_at = NOW(),
108
110
  stage = CASE WHEN stage = 'stable' THEN 'editing' ELSE stage END,
109
111
  stage_entered_at = CASE WHEN stage = 'stable' THEN NOW() ELSE stage_entered_at END
110
- WHERE fact_id = ANY(?)`,[e])}async function Tb(e,{limit:t=10,since:r}={}){let n=m("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 Ob({namespace:e,limit:t=50,offset:r=0,category:n}={}){let o=m("fact").where({status:"active"}).select("id","uid","content","category","confidence","importance","createdAt","namespace").orderBy("createdAt","desc").limit(t).offset(r);return e&&o.where({namespace:e}),n&&o.where({category:n}),o}async function Nb(e){let t=m("fact").where({status:"active"});e&&t.where({namespace:e});let[{count:r}]=await t.count("id as count");return Number(r)}async function Cb(e){let r=typeof e=="string"&&e.length>8?{uid:e}:{id:Number(e)},n=await m("fact").where(r).first();return n?(await m("fact_entity").where({factId:n.id}).del(),await m("fact").where({id:n.id}).del(),n):null}async function Rb(){return(await m("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 Db(e){await m.raw("DELETE FROM relation WHERE source_fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await m.raw("DELETE FROM fact_entity WHERE fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await m.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 m("fact").where({namespace:e}).del(),r=await m("chunk").where({namespace:e}).del(),n=await m("document").where({namespace:e}).del(),o=await m("entity").where({namespace:e}).del();return{factsDeleted:t,chunksDeleted:r,docsDeleted:n,entitiesDeleted:o}}var Sb,hf,fi,qe=u(()=>{ut();A();ct();ee();Se();di();S();L();Sb=bb.join(K,"audm-decision.md"),hf=g.memory.skipThreshold,fi=g.memory.ambiguousThreshold});var On,Lb,zP,Ef,yi=u(()=>{On={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"},Lb=["preference","opinion","personal","experience"],zP=Object.keys(On).filter(e=>!Lb.includes(e)),Ef=On});import{readFile as kb}from"node:fs/promises";import{join as Pb}from"node:path";async function xf(e,{title:t}={}){if(!e?.trim()||e.trim().length<Fb)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(e.length>$b)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let n=`${await kb(Mb,"utf8")}
112
+ WHERE fact_id = ANY(?)`,[e])}async function LI(e,{limit:t=10,since:r}={}){let n=h("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 PI({namespace:e,limit:t=50,offset:r=0,category:n}={}){let o=h("fact").where({status:"active"}).select("id","uid","content","category","confidence","importance","createdAt","namespace").orderBy("createdAt","desc").limit(t).offset(r);return e&&o.where({namespace:e}),n&&o.where({category:n}),o}async function kI(e){let t=h("fact").where({status:"active"});e&&t.where({namespace:e});let[{count:r}]=await t.count("id as count");return Number(r)}async function MI(e){let r=typeof e=="string"&&e.length>8?{uid:e}:{id:Number(e)},n=await h("fact").where(r).first();return n?(await h("fact_entity").where({factId:n.id}).del(),await h("fact").where({id:n.id}).del(),n):null}async function HI(){return(await h("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 BI(e){await h.raw("DELETE FROM relation WHERE source_fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await h.raw("DELETE FROM fact_entity WHERE fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await h.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 h("fact").where({namespace:e}).del(),r=await h("chunk").where({namespace:e}).del(),n=await h("document").where({namespace:e}).del(),o=await h("entity").where({namespace:e}).del();return{factsDeleted:t,chunksDeleted:r,docsDeleted:n,entitiesDeleted:o}}var CI,Pm,la,Tt=u(()=>{or();T();rr();ye();Ze();ca();A();C();CI=RI.join(Q,"audm-decision.md"),Pm=g.memory.skipThreshold,la=g.memory.ambiguousThreshold});var oi,FI,bU,Bm,ma=u(()=>{oi={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"},FI=["preference","opinion","personal","experience"],bU=Object.keys(oi).filter(e=>!FI.includes(e)),Bm=oi});import{readFile as $I}from"node:fs/promises";import{join as UI}from"node:path";async function $m(e,{title:t}={}){if(!e?.trim()||e.trim().length<jI)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(e.length>WI)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let n=`${await $I(GI,"utf8")}
111
113
 
112
114
  ---
113
115
 
@@ -116,36 +118,36 @@ Input: ${e}
116
118
 
117
119
  ---
118
120
 
119
- Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts": [{"content":"...","category":"...","confidence":"high|medium|low","importance":"vital|supplementary"}], "entities": ["..."], "reasoning": "..." }`;try{let o=await Q(n,{model:g.llm.extractionModel,caller:"classifier"});if(!o||!Bb.includes(o.route))return _f("Invalid classification result");let i=Object.keys(Ef),a=o.route==="thought"&&Array.isArray(o.facts)?o.facts.filter(s=>s.content&&i.includes(s.category)).map(s=>({...s,confidence:["high","medium","low"].includes(s.confidence)?s.confidence:"high",importance:["vital","supplementary"].includes(s.importance)?s.importance:"vital"})):[];return{route:o.route,facts:a,entities:Array.isArray(o.entities)?o.entities:[],reasoning:o.reasoning||""}}catch(o){return console.error("[input-classifier] Failed:",o.message),_f(o.message)}}function _f(e){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${e}`}}var Mb,Fb,$b,Bb,bf=u(()=>{ee();S();yi();L();Mb=Pb(K,"input-classifier.md"),Fb=3,$b=2e3,Bb=["thought","knowledge","noise"]});var Dt={};b(Dt,{findById:()=>ae,findByName:()=>Ve,findByUid:()=>Hb,findSimilar:()=>Ub,getCanonicalEntity:()=>Je,getEntityCount:()=>Wb,incrementMentionCount:()=>mr,insertEntity:()=>wi,listByType:()=>jb,pushAlias:()=>Nn,searchByName:()=>_i,updateDescription:()=>Gb,updateEntityTypes:()=>ze,updateName:()=>Ei});async function wi({name:e,entityType:t,description:r,namespace:n,externalId:o,embedding:i}){let a=`ent-${te(16)}`,[s]=await m("entity").insert({uid:a,name:e,entityType:t,description:r||null,namespace:n||g.defaults.namespace,externalId:o||null,mentionCount:1,embedding:$(i)}).returning("*");return s}async function Ve(e,t){let r=t||g.defaults.namespace,n=e.toLowerCase();return m("entity").where({namespace:r}).whereNull("mergedWith").where(function(){this.whereRaw("LOWER(name) = ?",[n]).orWhereRaw("aliases @> ARRAY[?]::text[]",[n])}).first()||null}async function Nn(e,t){if(!t)return;let r=t.toLowerCase();await m.raw(`
121
+ Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts": [{"content":"...","category":"...","confidence":"high|medium|low","importance":"vital|supplementary"}], "entities": ["..."], "reasoning": "..." }`;try{let o=await ge(n,{model:g.llm.extractionModel,caller:"classifier"});if(!o||!KI.includes(o.route))return Fm("Invalid classification result");let i=Object.keys(Bm),s=o.route==="thought"&&Array.isArray(o.facts)?o.facts.filter(a=>a.content&&i.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:o.route,facts:s,entities:Array.isArray(o.entities)?o.entities:[],reasoning:o.reasoning||""}}catch(o){return console.error("[input-classifier] Failed:",o.message),Fm(o.message)}}function Fm(e){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${e}`}}var GI,jI,WI,KI,Um=u(()=>{ye();A();ma();C();GI=UI(Q,"input-classifier.md"),jI=3,WI=2e3,KI=["thought","knowledge","noise"]});var Ir={};x(Ir,{findById:()=>Ae,findByName:()=>It,findByUid:()=>YI,findSimilar:()=>VI,getCanonicalEntity:()=>Rt,getEntityCount:()=>zI,incrementMentionCount:()=>Sn,insertEntity:()=>ha,listByType:()=>JI,pushAlias:()=>ii,searchByName:()=>ya,updateDescription:()=>qI,updateEntityTypes:()=>Ot,updateName:()=>ga});async function ha({name:e,entityType:t,description:r,namespace:n,externalId:o,embedding:i}){let s=`ent-${we(16)}`,[a]=await h("entity").insert({uid:s,name:e,entityType:t,description:r||null,namespace:n||g.defaults.namespace,externalId:o||null,mentionCount:1,embedding:G(i)}).returning("*");return a}async function It(e,t){let r=t||g.defaults.namespace,n=e.toLowerCase();return h("entity").where({namespace:r}).whereNull("mergedWith").where(function(){this.whereRaw("LOWER(name) = ?",[n]).orWhereRaw("aliases @> ARRAY[?]::text[]",[n])}).first()||null}async function ii(e,t){if(!t)return;let r=t.toLowerCase();await h.raw(`
120
122
  UPDATE entity
121
123
  SET aliases = (
122
124
  SELECT ARRAY(SELECT DISTINCT unnest(aliases || ARRAY[?]::text[]))
123
125
  )
124
126
  WHERE id = ?
125
- `,[r,e])}async function Ei(e,t){await m("entity").where({id:e}).update({name:t})}async function Hb(e){return m("entity").where({uid:e}).first()||null}async function ae(e){return m("entity").where({id:e}).first()||null}async function Ub(e,{entityType:t,namespace:r,threshold:n=.85,limit:o=3}){let i=$(e),a=`${le("embedding")} <=> ${ue()}`,{rows:s}=await m.raw(`
127
+ `,[r,e])}async function ga(e,t){await h("entity").where({id:e}).update({name:t})}async function YI(e){return h("entity").where({uid:e}).first()||null}async function Ae(e){return h("entity").where({id:e}).first()||null}async function VI(e,{entityType:t,namespace:r,threshold:n=.85,limit:o=3}){let i=G(e),s=`${Re("embedding")} <=> ${Ce()}`,{rows:a}=await h.raw(`
126
128
  SELECT id, uid, name, entity_type AS "entityType", description,
127
129
  mention_count AS "mentionCount",
128
- 1 - (${a}) AS similarity
130
+ 1 - (${s}) AS similarity
129
131
  FROM entity
130
132
  WHERE entity_type = ?
131
133
  AND namespace = COALESCE(?, ?)
132
134
  AND embedding IS NOT NULL
133
135
  AND merged_with IS NULL
134
- AND 1 - (${a}) >= ?
135
- ORDER BY ${a}
136
+ AND 1 - (${s}) >= ?
137
+ ORDER BY ${s}
136
138
  LIMIT ?
137
- `,[i,t,r,g.defaults.namespace,i,n,i,o]);return s}async function mr(e){await m("entity").where({id:e}).increment("mentionCount",1)}async function Gb(e,t){await m("entity").where({id:e}).update({description:t})}async function jb(e,{namespace:t,limit:r=50}={}){let n=m("entity").where({entityType:e}).whereNull("mergedWith").orderBy("mentionCount","desc").limit(r);return t&&n.where({namespace:t}),n}async function Wb(e){let[{count:t}]=await m("entity").where({entityType:e}).whereNull("mergedWith").count("id as count");return Number(t)}async function _i(e,{entityType:t,namespace:r,limit:n=10}={}){let o=m("entity").whereRaw("LOWER(name) LIKE ?",[`%${e.toLowerCase()}%`]).whereNull("mergedWith").orderBy("mentionCount","desc").limit(n);return t&&o.where({entityType:t}),r&&o.where({namespace:r}),o}async function ze(e,t){let r=await ae(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 m("entity").where({id:e}).update({entityTypes:JSON.stringify(n)}))}async function Je(e){let t=await ae(e);for(;t?.mergedWith;)t=await ae(t.mergedWith);return t}var fe=u(()=>{ut();A();Se();S()});async function Sf(e,t,{namespace:r,threshold:n=Yb,limit:o=5}){if(!t)return[];let i=$(t),a=`${le("embedding")} <=> ${ue()}`,{rows:s}=await m.raw(`
139
+ `,[i,t,r,g.defaults.namespace,i,n,i,o]);return a}async function Sn(e){await h("entity").where({id:e}).increment("mentionCount",1)}async function qI(e,t){await h("entity").where({id:e}).update({description:t})}async function JI(e,{namespace:t,limit:r=50}={}){let n=h("entity").where({entityType:e}).whereNull("mergedWith").orderBy("mentionCount","desc").limit(r);return t&&n.where({namespace:t}),n}async function zI(e){let[{count:t}]=await h("entity").where({entityType:e}).whereNull("mergedWith").count("id as count");return Number(t)}async function ya(e,{entityType:t,namespace:r,limit:n=10}={}){let o=h("entity").whereRaw("LOWER(name) LIKE ?",[`%${e.toLowerCase()}%`]).whereNull("mergedWith").orderBy("mentionCount","desc").limit(n);return t&&o.where({entityType:t}),r&&o.where({namespace:r}),o}async function Ot(e,t){let r=await Ae(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 h("entity").where({id:e}).update({entityTypes:JSON.stringify(n)}))}async function Rt(e){let t=await Ae(e);for(;t?.mergedWith;)t=await Ae(t.mergedWith);return t}var ve=u(()=>{or();T();Ze();A()});async function Gm(e,t,{namespace:r,threshold:n=XI,limit:o=5}){if(!t)return[];let i=G(t),s=`${Re("embedding")} <=> ${Ce()}`,{rows:a}=await h.raw(`
138
140
  SELECT id, name, entity_type AS "entityType", entity_types AS "entityTypes",
139
- 1 - (${a}) AS similarity
141
+ 1 - (${s}) AS similarity
140
142
  FROM entity
141
143
  WHERE namespace = ?
142
144
  AND embedding IS NOT NULL
143
145
  AND LOWER(name) != LOWER(?)
144
146
  AND merged_with IS NULL
145
- AND 1 - (${a}) >= ?
146
- ORDER BY ${a}
147
+ AND 1 - (${s}) >= ?
148
+ ORDER BY ${s}
147
149
  LIMIT ?
148
- `,[i,r,e,i,n,i,o]);return s.map(c=>{let l;try{l=c.entityTypes?JSON.parse(c.entityTypes):[c.entityType]}catch{l=[c.entityType]}return{...c,types:l}})}async function xi(e,t,r,n){let o=(r.aliases||[]).filter(Boolean),i=o.length?`Existing aliases: ${o.join(", ")}`:"",a=r.similarity>0?`Name-embedding similarity: ${(r.similarity*100).toFixed(0)}%`:"Name-embedding similarity: not directly measured (LLM judging on episode text alone)",s=n?`
150
+ `,[i,r,e,i,n,i,o]);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 wa(e,t,r,n){let o=(r.aliases||[]).filter(Boolean),i=o.length?`Existing aliases: ${o.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?`
149
151
  Source passage where the new mention appeared:
150
152
  ---
151
153
  ${n.slice(0,1500)}
@@ -155,8 +157,8 @@ ${n.slice(0,1500)}
155
157
  Mention A (new): "${e}" (type: ${t})
156
158
  Mention B (existing): "${r.name}" (types: ${(r.types||[r.entityType]).join(", ")})
157
159
  ${i}
158
- ${a}
159
160
  ${s}
161
+ ${a}
160
162
  Decision rules:
161
163
  - "same" = true when both mentions refer to the same person/product/concept/thing \u2014 including renames, abbreviations ("NYC" / "New York City"), and common-knowledge equivalents.
162
164
  - "rename" = true ONLY when "same" is true AND the source passage says one name has replaced the other ("X is now named Y", "X was renamed to Y", "we renamed X to Y", "X used to be called Y", etc.). A normal synonym match is NOT a rename.
@@ -164,19 +166,19 @@ Decision rules:
164
166
  - If you cannot tell, "same" is false. Don't guess.
165
167
 
166
168
  Respond as STRICT JSON, no markdown, no prose:
167
- {"same": boolean, "rename": boolean, "current_name": "<one of A or B verbatim, or null>", "reason": "one short sentence"}`,l;try{l=await ge(c,{model:g.llm.entityModel,caller:"entity-matcher"})}catch{return{same:!1,rename:!1,reason:"llm-error"}}let d=Kb(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 Kb(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 Yb,Af=u(()=>{A();ee();Se();S();Yb=.85});var If={};b(If,{followMergeChain:()=>Jb,mergeEntities:()=>qb});async function qb(e,t){let[r,n]=await Promise.all([ae(e),ae(t)]);if(!r||!n)throw new Error(`Entity ${e} or ${t} not found`);if(e===t)return r;let o=(r.mentionCount||0)+(n.mentionCount||0);await m.transaction(async a=>{await a("relation").where({sourceId:t}).update({sourceId:e}),await a("relation").where({targetId:t}).update({targetId:e}),await a("relation").whereRaw("source_id = target_id").del(),await a.raw(`
169
+ {"same": boolean, "rename": boolean, "current_name": "<one of A or B verbatim, or null>", "reason": "one short sentence"}`,l;try{l=await Be(c,{model:g.llm.entityModel,caller:"entity-matcher"})}catch{return{same:!1,rename:!1,reason:"llm-error"}}let d=ZI(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 ZI(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 XI,jm=u(()=>{T();ye();Ze();A();XI=.85});var Wm={};x(Wm,{followMergeChain:()=>rO,mergeEntities:()=>QI});async function QI(e,t){let[r,n]=await Promise.all([Ae(e),Ae(t)]);if(!r||!n)throw new Error(`Entity ${e} or ${t} not found`);if(e===t)return r;let o=(r.mentionCount||0)+(n.mentionCount||0);await h.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(`
168
170
  INSERT INTO fact_entity (fact_id, entity_id, mention_type, mention_count, created_at, updated_at)
169
171
  SELECT fact_id, ?, mention_type, mention_count, NOW(), NOW()
170
172
  FROM fact_entity
171
173
  WHERE entity_id = ?
172
174
  ON CONFLICT (fact_id, entity_id, mention_type)
173
175
  DO UPDATE SET mention_count = fact_entity.mention_count + EXCLUDED.mention_count
174
- `,[e,t]),await a("fact_entity").where({entityId:t}).del(),await a("entity").where({id:e}).update({mentionCount:o}),await a("pod").where({entityId:e,status:"active"}).first()?await a("pod").where({entityId:t}).update({status:"archived",updatedAt:a.fn.now()}):await a("pod").where({entityId:t}).update({entityId:e,updatedAt:a.fn.now()}),await a("entity").where({id:t}).update({mergedWith:e})}),await zb(e);let i=Vb(n);for(let a of i)await ze(e,a);return console.log(`[entity-merge] Merged ${t} (${n.name}) into ${e} (${r.name})`),{...r,mentionCount:o}}function Vb(e){if(!e.entityTypes)return[e.entityType];try{return JSON.parse(e.entityTypes)}catch{return[e.entityType]}}async function zb(e){let t=await m("relation").where(function(){this.where({sourceId:e}).orWhere({targetId:e})}).whereNull("invalidAt"),r=si(t,n=>`${n.sourceId}-${n.targetId}-${n.relationType}`);for(let n of Object.values(r)){if(n.length<=1)continue;let[o,...i]=ci(n,"id"),a=li(n,"mentionCount");await m("relation").where({id:o.id}).update({mentionCount:a}),await m("relation").whereIn("id",i.map(s=>s.id)).del()}}async function Jb(e){let t=await ae(e),r=[t?.id];for(;t?.mergedWith;)t=await ae(t.mergedWith),t&&r.push(t.id);return{canonical:t,chain:r}}var vf=u(()=>{In();A();fe()});import{readFile as Xb}from"node:fs/promises";async function hr({name:e,entityType:t,description:r,namespace:n,externalId:o,embedding:i,episodeText:a,episodeEntityIds:s=[]}){let c=n||g.defaults.namespace,l=await Ve(e,c);if(l)return l=await Je(l.id),await mr(l.id),l.entityType!==t&&await ze(l.id,t),l;let d=i||await je(`${t}: ${e}`),p=await Sf(e,d,{namespace:c,limit:3});for(let w of p){let y=await xi(e,t,w,a);if(y.same)return Tf(w,{newName:e,entityType:t,isRename:y.rename,currentName:y.currentName})}let f=new Set(p.map(w=>w.id)),h=s.filter(w=>w!=null&&!f.has(w));for(let w of h){let y=await Je(w);if(!y||y.namespace!==c||y.name?.toLowerCase()===e.toLowerCase())continue;let E=await xi(e,t,{...y,types:Zb(y),similarity:0},a);if(E.same)return Tf(y,{newName:e,entityType:t,isRename:E.rename,currentName:E.currentName})}try{return await wi({name:e,entityType:t,description:r,namespace:c,externalId:o,embedding:d})}catch(w){if(Of(w)){let y=await Ve(e,c);if(y){let E=await Je(y.id);return await mr(E.id),await ze(E.id,t),E}}throw w}}function Of(e){return e?!!(e.code==="23505"||typeof e.message=="string"&&e.message.includes("duplicate key value violates unique constraint")):!1}async function Tf(e,{newName:t,entityType:r,isRename:n,currentName:o}){let i=await Je(e.id);if(await mr(i.id),await ze(i.id,r),n&&i.name&&i.name.toLowerCase()!==t.toLowerCase()){let a=t.toLowerCase(),s=i.name.toLowerCase(),c=(o||"").toLowerCase(),l,d;if(c===a?(l=t,d=i.name):c===s?(l=i.name,d=t):(l=t,d=i.name),d&&d.toLowerCase()!==l.toLowerCase()&&(await Nn(i.id,d),i.aliases=[...i.aliases||[],d.toLowerCase()]),l!==i.name)try{await Ei(i.id,l),i.name=l}catch(p){if(Of(p)){let f=await Ve(l,i.namespace);if(f&&f.id!==i.id){let{mergeEntities:h}=await Promise.resolve().then(()=>(vf(),If));return await h(f.id,i.id),await Nn(f.id,i.name),await Je(f.id)}}throw p}}return i}function Zb(e){if(e.entityTypes)try{return JSON.parse(e.entityTypes)}catch{}return[e.entityType]}async function bi(e,{promptPath:t,namespace:r}){if(!e.length)return[];let n=e.map(f=>`- [${f.category}] ${f.content}`).join(`
175
- `),i=`${await Xb(t,"utf8")}
176
+ `,[e,t]),await s("fact_entity").where({entityId:t}).del(),await s("entity").where({id:e}).update({mentionCount:o}),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 tO(e);let i=eO(n);for(let s of i)await Ot(e,s);return console.log(`[entity-merge] Merged ${t} (${n.name}) into ${e} (${r.name})`),{...r,mentionCount:o}}function eO(e){if(!e.entityTypes)return[e.entityType];try{return JSON.parse(e.entityTypes)}catch{return[e.entityType]}}async function tO(e){let t=await h("relation").where(function(){this.where({sourceId:e}).orWhere({targetId:e})}).whereNull("invalidAt"),r=oa(t,n=>`${n.sourceId}-${n.targetId}-${n.relationType}`);for(let n of Object.values(r)){if(n.length<=1)continue;let[o,...i]=ia(n,"id"),s=sa(n,"mentionCount");await h("relation").where({id:o.id}).update({mentionCount:s}),await h("relation").whereIn("id",i.map(a=>a.id)).del()}}async function rO(e){let t=await Ae(e),r=[t?.id];for(;t?.mergedWith;)t=await Ae(t.mergedWith),t&&r.push(t.id);return{canonical:t,chain:r}}var Km=u(()=>{ti();T();ve()});import{readFile as nO}from"node:fs/promises";async function An({name:e,entityType:t,description:r,namespace:n,externalId:o,embedding:i,episodeText:s,episodeEntityIds:a=[]}){let c=n||g.defaults.namespace,l=await It(e,c);if(l)return l=await Rt(l.id),await Sn(l.id),l.entityType!==t&&await Ot(l.id,t),l;let d=i||await xt(`${t}: ${e}`),p=await Gm(e,d,{namespace:c,limit:3});for(let w of p){let y=await wa(e,t,w,s);if(y.same)return Ym(w,{newName:e,entityType:t,isRename:y.rename,currentName:y.currentName})}let f=new Set(p.map(w=>w.id)),m=a.filter(w=>w!=null&&!f.has(w));for(let w of m){let y=await Rt(w);if(!y||y.namespace!==c||y.name?.toLowerCase()===e.toLowerCase())continue;let E=await wa(e,t,{...y,types:oO(y),similarity:0},s);if(E.same)return Ym(y,{newName:e,entityType:t,isRename:E.rename,currentName:E.currentName})}try{return await ha({name:e,entityType:t,description:r,namespace:c,externalId:o,embedding:d})}catch(w){if(Vm(w)){let y=await It(e,c);if(y){let E=await Rt(y.id);return await Sn(E.id),await Ot(E.id,t),E}}throw w}}function Vm(e){return e?!!(e.code==="23505"||typeof e.message=="string"&&e.message.includes("duplicate key value violates unique constraint")):!1}async function Ym(e,{newName:t,entityType:r,isRename:n,currentName:o}){let i=await Rt(e.id);if(await Sn(i.id),await Ot(i.id,r),n&&i.name&&i.name.toLowerCase()!==t.toLowerCase()){let s=t.toLowerCase(),a=i.name.toLowerCase(),c=(o||"").toLowerCase(),l,d;if(c===s?(l=t,d=i.name):c===a?(l=i.name,d=t):(l=t,d=i.name),d&&d.toLowerCase()!==l.toLowerCase()&&(await ii(i.id,d),i.aliases=[...i.aliases||[],d.toLowerCase()]),l!==i.name)try{await ga(i.id,l),i.name=l}catch(p){if(Vm(p)){let f=await It(l,i.namespace);if(f&&f.id!==i.id){let{mergeEntities:m}=await Promise.resolve().then(()=>(Km(),Wm));return await m(f.id,i.id),await ii(f.id,i.name),await Rt(f.id)}}throw p}}return i}function oO(e){if(e.entityTypes)try{return JSON.parse(e.entityTypes)}catch{}return[e.entityType]}async function Ea(e,{promptPath:t,namespace:r}){if(!e.length)return[];let n=e.map(f=>`- [${f.category}] ${f.content}`).join(`
177
+ `),i=`${await nO(t,"utf8")}
176
178
 
177
179
  ---
178
180
 
179
- ${n}`,a=await ge(i,{model:g.llm.entityModel,caller:"entity-resolver"}),s=qr(a);if(!Array.isArray(s))return[];let c=s.filter(f=>f.name);if(!c.length)return[];let l=new Array(c.length),d=[],p=[];for(let f=0;f<c.length;f++){let h=await Qb(c[f].name,r);h?(l[f]=h,d.push(h.id)):p.push(f)}for(let f of p){let h=c[f],w=await hr({name:h.name,entityType:"topic",description:h.description||null,namespace:r,episodeText:n,episodeEntityIds:d});l[f]=w,w?.id&&d.push(w.id)}return l.filter(Boolean)}async function Qb(e,t){let{findByName:r,getCanonicalEntity:n,incrementMentionCount:o}=await Promise.resolve().then(()=>(fe(),Dt)),i=await r(e,t);if(!i)return null;let a=await n(i.id);return await o(a.id),a}var Nf=u(()=>{ct();ee();S();fe();Af()});var Cn={};b(Cn,{createRelation:()=>gr,findRelation:()=>eS,getRelationCount:()=>nS,getRelationsByFact:()=>rS,invalidateRelation:()=>tS,listRelationsForEntity:()=>yr});async function gr({sourceId:e,targetId:t,relationType:r,sourceFactId:n,validAt:o}){let{rows:[i]}=await m.raw(`
181
+ ${n}`,s=await Be(i,{model:g.llm.entityModel,caller:"entity-resolver"}),a=bo(s);if(!Array.isArray(a))return[];let c=a.filter(f=>f.name);if(!c.length)return[];let l=new Array(c.length),d=[],p=[];for(let f=0;f<c.length;f++){let m=await iO(c[f].name,r);m?(l[f]=m,d.push(m.id)):p.push(f)}for(let f of p){let m=c[f],w=await An({name:m.name,entityType:"topic",description:m.description||null,namespace:r,episodeText:n,episodeEntityIds:d});l[f]=w,w?.id&&d.push(w.id)}return l.filter(Boolean)}async function iO(e,t){let{findByName:r,getCanonicalEntity:n,incrementMentionCount:o}=await Promise.resolve().then(()=>(ve(),Ir)),i=await r(e,t);if(!i)return null;let s=await n(i.id);return await o(s.id),s}var qm=u(()=>{rr();ye();A();ve();jm()});var si={};x(si,{createRelation:()=>bn,findRelation:()=>sO,getRelationCount:()=>lO,getRelationsByFact:()=>cO,invalidateRelation:()=>aO,listRelationsForEntity:()=>Tn});async function bn({sourceId:e,targetId:t,relationType:r,sourceFactId:n,validAt:o}){let{rows:[i]}=await h.raw(`
180
182
  INSERT INTO relation (source_id, target_id, relation_type, source_fact_id, mention_count, valid_at, created_at, updated_at)
181
183
  VALUES (?, ?, ?, ?, 1, ?, NOW(), NOW())
182
184
  ON CONFLICT (source_id, target_id, relation_type) DO UPDATE SET
@@ -184,11 +186,11 @@ ${n}`,a=await ge(i,{model:g.llm.entityModel,caller:"entity-resolver"}),s=qr(a);i
184
186
  source_fact_id = COALESCE(EXCLUDED.source_fact_id, relation.source_fact_id),
185
187
  updated_at = NOW()
186
188
  RETURNING *
187
- `,[e,t,r,n||null,o||null]);return i}async function eS(e,t,r){return m("relation").where({sourceId:e,targetId:t,relationType:r}).whereNull("invalidAt").first()||null}async function tS(e,{invalidAt:t}={}){await m("relation").where({id:e}).update({invalidAt:t||new Date})}async function yr(e,{direction:t="both",relationType:r,limit:n=50}={}){let o=s=>{let c=s==="outgoing"?"source_id":"target_id",l=s==="outgoing"?"target_id":"source_id";return m.raw(`
189
+ `,[e,t,r,n||null,o||null]);return i}async function sO(e,t,r){return h("relation").where({sourceId:e,targetId:t,relationType:r}).whereNull("invalidAt").first()||null}async function aO(e,{invalidAt:t}={}){await h("relation").where({id:e}).update({invalidAt:t||new Date})}async function Tn(e,{direction:t="both",relationType:r,limit:n=50}={}){let o=a=>{let c=a==="outgoing"?"source_id":"target_id",l=a==="outgoing"?"target_id":"source_id";return h.raw(`
188
190
  SELECT r.id AS "relationId", r.relation_type AS "relationType",
189
191
  r.mention_count AS "mentionCount", r.valid_at AS "validAt",
190
192
  e.id AS "entityId", e.uid, e.name, e.entity_type AS "entityType",
191
- e.description, '${s}' AS direction
193
+ e.description, '${a}' AS direction
192
194
  FROM relation r
193
195
  JOIN entity e ON e.id = r.${l}
194
196
  WHERE r.${c} = ?
@@ -197,7 +199,7 @@ ${n}`,a=await ge(i,{model:g.llm.entityModel,caller:"entity-resolver"}),s=qr(a);i
197
199
  ${r?"AND r.relation_type = ?":""}
198
200
  ORDER BY r.mention_count DESC
199
201
  LIMIT ?
200
- `,r?[e,r,n]:[e,n])};if(t==="outgoing"){let{rows:s}=await o("outgoing");return s}if(t==="incoming"){let{rows:s}=await o("incoming");return s}let[i,a]=await Promise.all([o("outgoing"),o("incoming")]);return[...i.rows,...a.rows]}async function rS(e){let{rows:t}=await m.raw(`
202
+ `,r?[e,r,n]:[e,n])};if(t==="outgoing"){let{rows:a}=await o("outgoing");return a}if(t==="incoming"){let{rows:a}=await o("incoming");return a}let[i,s]=await Promise.all([o("outgoing"),o("incoming")]);return[...i.rows,...s.rows]}async function cO(e){let{rows:t}=await h.raw(`
201
203
  SELECT r.id, r.relation_type AS "relationType",
202
204
  r.mention_count AS "mentionCount",
203
205
  s.name AS "sourceName", s.entity_type AS "sourceType",
@@ -209,62 +211,62 @@ ${n}`,a=await ge(i,{model:g.llm.entityModel,caller:"entity-resolver"}),s=qr(a);i
209
211
  AND r.invalid_at IS NULL
210
212
  AND s.merged_with IS NULL
211
213
  AND t.merged_with IS NULL
212
- `,[e]);return t}async function nS(){let[{count:e}]=await m("relation").whereNull("invalidAt").count("id as count");return Number(e)}var Xe=u(()=>{A()});var Ze={};b(Ze,{archivePod:()=>aS,deletePod:()=>sS,findByEntityId:()=>Rf,findByExternalId:()=>Pt,findById:()=>oS,findByUid:()=>kt,incrementCounters:()=>Mt,insertPod:()=>Cf,listPods:()=>iS,patchAttrs:()=>wr,reassignEntity:()=>cS,setEndedAt:()=>Si,upsertPod:()=>Lt});async function Cf({podType:e,name:t,namespace:r,attrs:n={},entityId:o=null,connectionId:i=null,externalId:a=null,startedAt:s=null,endedAt:c=null}){let l=`pod-${te(16)}`,[d]=await m("pod").insert({uid:l,podType:e,name:t,namespace:r||g.defaults.namespace,attrs:JSON.stringify(n),entityId:o,connectionId:i,externalId:a,startedAt:s,endedAt:c}).returning("*");return d}async function Lt({podType:e,externalId:t,name:r,namespace:n,attrs:o={},entityId:i=null,connectionId:a=null,startedAt:s=null}){if(!t)throw new Error("upsertPod requires externalId; use insertPod for custom pods");let c=`pod-${te(16)}`,l=n||g.defaults.namespace,{rows:[d]}=await m.raw(`
214
+ `,[e]);return t}async function lO(){let[{count:e}]=await h("relation").whereNull("invalidAt").count("id as count");return Number(e)}var Ct=u(()=>{T()});var Nt={};x(Nt,{archivePod:()=>fO,deletePod:()=>pO,findByEntityId:()=>zm,findByExternalId:()=>Cr,findById:()=>uO,findByUid:()=>Rr,incrementCounters:()=>Nr,insertPod:()=>Jm,listPods:()=>dO,patchAttrs:()=>In,reassignEntity:()=>mO,setEndedAt:()=>_a,upsertPod:()=>Or});async function Jm({podType:e,name:t,namespace:r,attrs:n={},entityId:o=null,connectionId:i=null,externalId:s=null,startedAt:a=null,endedAt:c=null}){let l=`pod-${we(16)}`,[d]=await h("pod").insert({uid:l,podType:e,name:t,namespace:r||g.defaults.namespace,attrs:JSON.stringify(n),entityId:o,connectionId:i,externalId:s,startedAt:a,endedAt:c}).returning("*");return d}async function Or({podType:e,externalId:t,name:r,namespace:n,attrs:o={},entityId:i=null,connectionId:s=null,startedAt:a=null}){if(!t)throw new Error("upsertPod requires externalId; use insertPod for custom pods");let c=`pod-${we(16)}`,l=n||g.defaults.namespace,{rows:[d]}=await h.raw(`
213
215
  INSERT INTO pod (uid, pod_type, name, namespace, attrs, entity_id, connection_id, external_id, started_at, created_at, updated_at)
214
216
  VALUES (?, ?, ?, ?, ?::jsonb, ?, ?, ?, ?, NOW(), NOW())
215
217
  ON CONFLICT (pod_type, external_id, namespace) WHERE external_id IS NOT NULL DO UPDATE SET
216
218
  attrs = pod.attrs || EXCLUDED.attrs,
217
219
  updated_at = NOW()
218
220
  RETURNING *, (xmax = 0) AS "isNew"
219
- `,[c,e,r,l,JSON.stringify(o),i,a,t,s]);return{pod:d,isNew:d.isNew}}async function kt(e){return m("pod").where({uid:e}).first()||null}async function oS(e){return m("pod").where({id:e}).first()||null}async function Pt({podType:e,externalId:t,namespace:r}){return m("pod").where({podType:e,externalId:t,namespace:r||g.defaults.namespace}).first()||null}async function Rf(e){return m("pod").where({entityId:e}).first()||null}async function iS({podType:e,namespace:t,status:r="active",limit:n=20}={}){let o=m("pod").where({status:r}).orderBy("updatedAt","desc").limit(n);return e&&o.where({podType:e}),t&&o.where({namespace:t}),o}async function aS(e){await m("pod").where({id:e}).update({status:"archived",updatedAt:m.fn.now()})}async function sS(e){await m("pod").where({id:e}).del()}async function wr(e,t){await m.raw("UPDATE pod SET attrs = attrs || ?::jsonb, updated_at = NOW() WHERE id = ?",[JSON.stringify(t),e])}async function Si(e,t=new Date){await m("pod").where({id:e}).update({endedAt:t,updatedAt:m.fn.now()})}async function cS(e,t){await m("pod").where({entityId:e}).update({entityId:t,updatedAt:m.fn.now()})}async function Mt(e,{docs:t=0,facts:r=0}){!t&&!r||await m.raw(`UPDATE pod
221
+ `,[c,e,r,l,JSON.stringify(o),i,s,t,a]);return{pod:d,isNew:d.isNew}}async function Rr(e){return h("pod").where({uid:e}).first()||null}async function uO(e){return h("pod").where({id:e}).first()||null}async function Cr({podType:e,externalId:t,namespace:r}){return h("pod").where({podType:e,externalId:t,namespace:r||g.defaults.namespace}).first()||null}async function zm(e){return h("pod").where({entityId:e}).first()||null}async function dO({podType:e,namespace:t,status:r="active",limit:n=20}={}){let o=h("pod").where({status:r}).orderBy("updatedAt","desc").limit(n);return e&&o.where({podType:e}),t&&o.where({namespace:t}),o}async function fO(e){await h("pod").where({id:e}).update({status:"archived",updatedAt:h.fn.now()})}async function pO(e){await h("pod").where({id:e}).del()}async function In(e,t){await h.raw("UPDATE pod SET attrs = attrs || ?::jsonb, updated_at = NOW() WHERE id = ?",[JSON.stringify(t),e])}async function _a(e,t=new Date){await h("pod").where({id:e}).update({endedAt:t,updatedAt:h.fn.now()})}async function mO(e,t){await h("pod").where({entityId:e}).update({entityId:t,updatedAt:h.fn.now()})}async function Nr(e,{docs:t=0,facts:r=0}){!t&&!r||await h.raw(`UPDATE pod
220
222
  SET member_doc_count = member_doc_count + ?,
221
223
  member_fact_count = member_fact_count + ?,
222
224
  updated_at = NOW()
223
- WHERE id = ?`,[t,r,e])}var ke=u(()=>{ut();A();S()});var Ft={};b(Ft,{attach:()=>Rn,attachDocument:()=>Ai,attachEntity:()=>lS,attachFact:()=>Er,detach:()=>uS,factIdsInPod:()=>pS,listMembers:()=>dS,listPodsForMember:()=>fS});async function Rn(e,t,r,n="primary"){let{rowCount:o}=await m.raw(`INSERT INTO pod_membership (pod_id, member_type, member_id, role)
225
+ WHERE id = ?`,[t,r,e])}var lt=u(()=>{or();T();A()});var vr={};x(vr,{attach:()=>ai,attachDocument:()=>xa,attachEntity:()=>hO,attachFact:()=>On,detach:()=>gO,factIdsInPod:()=>EO,listMembers:()=>yO,listPodsForMember:()=>wO});async function ai(e,t,r,n="primary"){let{rowCount:o}=await h.raw(`INSERT INTO pod_membership (pod_id, member_type, member_id, role)
224
226
  VALUES (?, ?, ?, ?)
225
- ON CONFLICT (pod_id, member_type, member_id) DO NOTHING`,[e,t,r,n]);return o>0&&(t==="fact"?await Mt(e,{facts:1}):t==="document"&&await Mt(e,{docs:1})),{attached:o>0}}async function uS(e,t,r){let n=await m("pod_membership").where({podId:e,memberType:t,memberId:r}).del();return n>0&&(t==="fact"?await Mt(e,{facts:-1}):t==="document"&&await Mt(e,{docs:-1})),{detached:n>0}}async function dS(e,{memberType:t,limit:r=20}={}){if(!t)throw new Error("listMembers requires a memberType filter");return m(`${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 fS(e,t){return m("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 pS(e){return await m("pod_membership").where({podId:e,memberType:"fact"}).pluck("memberId")}var Er,Ai,lS,_r=u(()=>{A();ke();Er=(e,t,r)=>Rn(e,"fact",t,r),Ai=(e,t,r)=>Rn(e,"document",t,r),lS=(e,t,r)=>Rn(e,"entity",t,r)});var vi={};b(vi,{getEntitiesForFact:()=>hS,getEntityIdsForFacts:()=>$t,getFactsForEntity:()=>Ii,linkEntitiesToFact:()=>xr});async function xr(e,t){if(!t.length)return;let r=ui(t,"id"),n=r.map(o=>({factId:e,entityId:o.id,mentionType:"content",mentionCount:1}));await m("fact_entity").insert(n).onConflict(m.raw("(fact_id, entity_id, mention_type)")).merge({mentionCount:m.raw("fact_entity.mention_count + 1")}),await mS(e,r)}async function mS(e,t){let r=t.map(o=>o.id).filter(Boolean);if(!r.length)return;let n=await m("pod").whereIn("entityId",r).where({status:"active"}).select("id");for(let{id:o}of n)await Er(o,e,"mention")}async function Ii(e,{limit:t=50}={}){return m("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 hS(e){return m("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 $t(e){if(!e.length)return new Map;let t=await m("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 Qe=u(()=>{In();A();_r()});import gS from"node:path";async function Ci(e,t,r,n){let{title:o,sourceType:i,metadata:a={}}=e,s=t.filter(f=>f.action==="ADD"||f.action==="UPDATE"),c=s.map(f=>f.fact||f.existing).filter(Boolean),d=s.find(f=>f.fact)?.fact?.id||null,p=new Date().toISOString().split("T")[0];return n?.items?.length?yS({entityDefs:n,factObjects:c,firstFactId:d,namespace:r,today:p}):wS({title:o,sourceType:i,metadata:a,factObjects:c,firstFactId:d,namespace:r,today:p})}async function yS({entityDefs:e,factObjects:t,firstFactId:r,namespace:n,today:o}){let i={},a=0,s=t.map(f=>f.content).filter(Boolean).join(`
226
- `),c=[];for(let f of e.items){let h=await hr({name:f.name,entityType:f.type,description:f.description,namespace:n,episodeText:s,episodeEntityIds:c});i[f.name]=h,h?.id&&c.push(h.id)}for(let f of e.relations||[]){let h=i[f.source],w=i[f.target];if(!h||!w)continue;let y=Ti(t,f.source)||Ti(t,f.target);await gr({sourceId:h.id,targetId:w.id,relationType:f.type,sourceFactId:y?.id||r,validAt:o}),a++}let l=await Ni(t,n),d=Oi(Object.values(i),l),p=0;for(let f of t){let h=d.filter(w=>Dn(f.content,w));h.length&&(await xr(f.id,h),p+=h.length)}return{entityCount:d.length,relationCount:a,factEntityLinks:p,topics:d.filter(f=>f.entityType==="topic").map(f=>f.name)}}async function wS({title:e,sourceType:t,metadata:r,factObjects:n,firstFactId:o,namespace:i,today:a}){if(!e){let E=n.length?await bi(n,{promptPath:Df,namespace:i}):[],I=await Ni(n,i),_=Oi(E,I),O=0;for(let v of n){let x=_.filter(G=>Dn(v.content,G));x.length&&(await xr(v.id,x),O+=x.length)}return{entityCount:_.length,relationCount:0,factEntityLinks:O,topics:E.map(v=>v.name)}}let s=n.map(E=>E.content).filter(Boolean).join(`
227
- `).slice(0,2e3),c=await hr({name:e,entityType:"document",description:`${t} document: ${e}`,namespace:i,episodeText:s}),l=null;r.author&&(l=await hr({name:r.author,entityType:"person",namespace:i,episodeText:s,episodeEntityIds:c?.id?[c.id]:[]}));let d=n.length?await bi(n,{promptPath:Df,namespace:i}):[],p=0;l&&(await gr({sourceId:c.id,targetId:l.id,relationType:"AUTHORED_BY",sourceFactId:o,validAt:a}),p++);for(let E of d){let I=Ti(n,E.name);await gr({sourceId:c.id,targetId:E.id,relationType:"COVERS",sourceFactId:I?.id||o,validAt:a}),p++}let f=[c,l,...d].filter(Boolean),h=await Ni(n,i),w=Oi(f,h),y=0;for(let E of n){let I=w.filter(_=>Dn(E.content,_));I.length&&(await xr(E.id,I),y+=I.length)}return{entityCount:w.length,relationCount:p,factEntityLinks:y,topics:d.map(E=>E.name)}}function Ti(e,t){if(!t)return null;let r=t.toLowerCase();return e.find(n=>n.content?.toLowerCase().includes(r))||null}function Dn(e,t){if(!e||!t?.name)return!1;let r=e.toLowerCase();return[t.name.toLowerCase(),...t.aliases||[]].some(o=>o?new RegExp(`\\b${ES(o)}\\b`).test(r):!1)}function ES(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Oi(...e){let t=new Set,r=[];for(let n of e)for(let o of n)!o||t.has(o.id)||(t.add(o.id),r.push(o));return r}async function Ni(e,t){if(!e?.length)return[];let r=await m("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(o=>Dn(o.content,n))):[]}var Df,Lf=u(()=>{Nf();Xe();Qe();L();A();Df=gS.join(K,"entity-extraction.md")});var _S,kf,Ri=u(()=>{A();S();_S=1440*60*1e3,kf={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||g.defaults.namespace;try{let r=new Date(Date.now()-_S);return(await m("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(o=>o.uid)}catch{return[]}}}});function Ff({sessionId:e,transcriptPath:t=null,cwd:r=null,turnCount:n=0,model:o=null,conclusion:i=null,summary:a=null}){return{session_id:e,transcript_path:t,cwd:r,turn_count:n,model:o,conclusion:i,summary:a}}function $f({sessionId:e,startedAt:t=new Date}={}){let n=(t instanceof Date?t:new Date(t)).toISOString().replace("T"," ").slice(0,16),o=e?e.slice(0,8):"unknown";return`claude-session ${n} (${o})`}var Pf,Mf,Di=u(()=>{br();Pf="claude_session",Mf={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 Li();return e?[e]:[]}catch{return[]}}}});var kn={};b(kn,{CURSOR_PATH:()=>Bt,endActiveSession:()=>DS,ensureActiveSession:()=>NS,getActiveCursor:()=>RS,getActiveSessionPodUid:()=>Li});import{writeFile as SS,readFile as AS,unlink as IS}from"node:fs/promises";import{existsSync as vS,mkdirSync as TS}from"node:fs";import{dirname as Bf}from"node:path";async function Ln(){try{let e=await AS(Bt,"utf8");return JSON.parse(e)}catch{return null}}async function Hf(e){vS(Bf(Bt))||TS(Bf(Bt),{recursive:!0}),await SS(Bt,JSON.stringify(e,null,2),"utf8")}async function NS({sessionId:e,transcriptPath:t=null,cwd:r=null,model:n=null,namespace:o=null}){if(!e)throw new Error("ensureActiveSession requires sessionId from hook stdin");let i=o||g.defaults.namespace,a=await Ln();if(a&&a.session_id===e&&a.namespace===i){let l=await kt(a.pod_uid);if(l)return await wr(l.id,{turn_count:(LS(l.attrs)||0)+1}),await CS(a),l}let s=new Date,{pod:c}=await Lt({podType:Pf,externalId:e,name:$f({sessionId:e,startedAt:s}),namespace:i,attrs:Ff({sessionId:e,transcriptPath:t,cwd:r,turnCount:1,model:n}),startedAt:s});return await Hf({session_id:e,pod_uid:c.uid,namespace:i,started_at:c.startedAt??s.toISOString(),last_seen_at:new Date().toISOString()}),c}async function CS(e){await Hf({...e,last_seen_at:new Date().toISOString()})}async function Li({allowStale:e=!1}={}){let t=await Ln();return!t||!t.pod_uid||!e&&t.started_at&&Date.now()-new Date(t.started_at).getTime()>OS?null:t.pod_uid}async function RS(){return Ln()}async function DS({conclusion:e=null,summary:t=null}={}){let r=await Ln();if(!r)return null;let n=await kt(r.pod_uid);if(n){if(e||t){let o={};e&&(o.conclusion=e),t&&(o.summary=t),await wr(n.id,o)}await Si(n.id)}try{await IS(Bt)}catch{}return n}function LS(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 Bt,OS,br=u(()=>{ke();Di();S();L();Bt=ma,OS=360*60*1e3});var $i={};b($i,{POD_TYPE:()=>Pi,deriveProjectRoot:()=>Fi,ensureProjectPod:()=>PS,formatForDisplay:()=>FS,membership:()=>Ft,projectKind:()=>Mi});import{execFileSync as kS}from"node:child_process";import{basename as Uf}from"node:path";async function PS({cwd:e,namespace:t=null}){if(!e)return null;let r=Fi(e),n=t||g.defaults.namespace,i=(r!==e?!1:ki(e)===e)?r:ki(e),{pod:a}=await Lt({podType:Pi,externalId:r,name:Uf(r)||r,namespace:n,attrs:{root_path:r,git_root:i||null,display_name:Uf(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return a}function Fi(e){return ki(e)||e}function ki(e){try{return kS("git",["rev-parse","--show-toplevel"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function MS(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(br(),kn));return(await e())?.cwd||null}catch{return null}}function FS(e){let t=$S(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 $S(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Pi,Mi,Pn=u(()=>{ke();_r();S();Pi="project",Mi={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 MS();if(!t)return[];let r=e.namespace||g.defaults.namespace,n=Fi(t),o=await Pt({podType:Pi,externalId:n,namespace:r});return o?[o.uid]:[]}}});async function Gf(e,t){if(!e||typeof e!="object")return[];let r=[],n=t||g.defaults.namespace;if(e.slack?.team_id&&e.connection_id){let i=await Pt({podType:"connector_workspace",externalId:`slack:${e.slack.team_id}`,namespace:n});i&&r.push({podId:i.id,role:"primary"})}if(e.github?.org&&e.connection_id){let i=await Pt({podType:"connector_workspace",externalId:`github:${e.github.org}`,namespace:n});i&&r.push({podId:i.id,role:"primary"})}let o=e.project_root||e.source_root;if(o)try{let{ensureProjectPod:i}=await Promise.resolve().then(()=>(Pn(),$i)),a=await i({cwd:o,namespace:n});a&&r.push({podId:a.id,role:"primary"})}catch{}return r}var jf=u(()=>{ke();Ri();S()});var Bi={};b(Bi,{ingestDocument:()=>GS});import{createHash as BS}from"node:crypto";import{join as HS}from"node:path";async function GS({content:e,title:t,sourcePath:r,sourceType:n="raw",contentType:o,namespace:i,metadata:a={},promptPath:s,categories:c,entities:l,skipFacts:d=!1,skipEntities:p=!1,skipContextualization:f=!1,classify:h=!0,podUids:w=[],resolvePodsFrom:y=null}){e=vn(e);let E=i||g.defaults.namespace,I=c||Object.keys(On),_=s||US,O=t||r,v=null;if(h&&(process.stderr.write(`[0/6] Classifying input...
228
- `),v=await xf(e,{title:O}),process.stderr.write(` Route: ${v.route} \u2014 ${v.reasoning}
229
- `),v.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
230
- `),{documentId:null,title:O,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
231
- `);let x=BS("sha256").update(e).digest("hex"),G=r||`thought:${x}`,{doc:T,changed:pe}=await vo({sourcePath:G,sourceType:n,title:O,contentHash:x,namespace:E});if(!pe)return process.stderr.write(` Skipped \u2014 content unchanged.
232
- `),{documentId:T.id,title:O,skipped:!0};a&&(Object.keys(a).length||a.connection_id)&&await Oo(T.id,a,a.connection_id??null);let _e=await YS({podUids:w,resolvePodsFrom:y,metadata:a,namespace:E});for(let{podId:F,role:rt}of _e)await Ai(F,T.id,rt);process.stderr.write(`[2/6] Parsing content...
233
- `);let Yt=Ya(e,{format:a.format,filePath:r,contentType:o});if(O=t||Yt.metadata?.title||r,v?.route==="thought"&&v.facts.length){process.stderr.write(`[thought] Storing ${v.facts.length} facts directly...
234
- `);let F=await jS(v.facts,{documentId:T.id,namespace:E}),rt={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!p&&F.results.length&&(rt=await Ci({title:O,sourceType:n,metadata:a},F.results,E,l)),await Vr(T.id,{chunkCount:0,factCount:F.counts.added}),await Yf(F.results,_e),await Tn(T.id,F.results.map(Pr=>Pr.fact?.id??Pr.existing?.id).filter(Boolean)),process.stderr.write(`Done. Route: thought, ${F.counts.total} facts (${F.counts.added} new)
235
- `),{documentId:T.id,documentUid:T.uid,title:O,skipped:!1,route:"thought",chunkCount:0,facts:{...F.counts,verdicts:Wf(F.results)},entities:rt}}let B=[],J={counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]},Kt={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};try{process.stderr.write(`[3/6] Chunking and embedding...
236
- `),B=Va(Yt.sections),process.stderr.write(` ${B.length} chunks created
237
- `),!f&&B.length&&(B=await ks(B,Yt.text,{title:O}));let F=B.map(xe=>{let Mr=xe.contextualPrefix;return Mr?`${Mr}
238
- ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:rt[Mr]}));await Bs(T.id,Pr,E),!d&&g.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
239
- `),J=await WS(B,{documentId:T.id,namespace:E,promptPath:_,categories:I})):g.ingest.eagerExtract||process.stderr.write(`[4/6] Skipping fact extraction (SIGIL_EAGER_EXTRACT=false)
240
- `),await Vr(T.id,{chunkCount:B.length,factCount:J.counts.added+J.counts.updated+J.counts.contradicted}),await Yf(J.results,_e),await Tn(T.id,J.results.map(xe=>xe.fact?.id??xe.existing?.id).filter(Boolean)),!p&&J.results.length&&(process.stderr.write(`[5/6] Linking entities...
241
- `),Kt=await Ci({title:O,sourceType:n,metadata:a},J.results,E,l),process.stderr.write(` ${Kt.entityCount} entities, ${Kt.relationCount} relations
242
- `))}catch(F){throw console.error(`[pipeline] Failed after document upsert: ${F.message}`),await To(T.id).catch(()=>{}),F}return process.stderr.write(`Done. ${B.length} chunks, ${J.counts.total} facts, ${Kt.entityCount} entities
243
- `),{documentId:T.id,documentUid:T.uid,title:O,skipped:!1,route:v?.route??null,chunkCount:B.length,facts:{...J.counts,verdicts:Wf(J.results)},entities:Kt}}function Wf(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 Kf(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:o="medium",defaultImportance:i="supplementary"}){let a={total:e.length,added:0,skipped:0,updated:0,contradicted:0},s=[];for(let c=0;c<e.length;c++){let l=e[c],d=await mi({content:l.content,category:l.category,confidence:l.confidence||o,importance:l.importance||i,namespace:r,sourceDocumentIds:t?[t]:[],sourceSection:l.sourceSection||l.category,embedding:n[c]});s.push(d);let p=d.action.toLowerCase();p==="add"?a.added++:p==="skip"?a.skipped++:p==="update"?a.updated++:p==="contradict"&&a.contradicted++}return{counts:a,results:s}}async function jS(e,{documentId:t,namespace:r}){let n=await he(e.map(o=>o.content));return Kf(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:"high",defaultImportance:"vital"})}async function WS(e,{documentId:t,namespace:r,promptPath:n,categories:o}){let i=await pf(e,{promptPath:n,categories:o});if(process.stderr.write(` ${i.length} facts extracted from ${e.length} chunks
244
- `),!i.length)return{counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]};let a=await he(i.map(s=>s.content));return Kf(i,{documentId:t,namespace:r,embeddings:a})}async function YS({podUids:e,resolvePodsFrom:t,metadata:r,namespace:n}){let o=[];for(let a of e){let s=await kt(a);s&&o.push({podId:s.id,role:"primary"})}if(t==="metadata"){let a=await Gf(r,n);for(let s of a)o.push(s)}let i=new Map;for(let a of o){let s=i.get(a.podId);(!s||a.role==="primary"&&s.role!=="primary")&&i.set(a.podId,a)}return[...i.values()]}async function Yf(e,t){if(!(!t.length||!e.length))for(let r of e){let n=r?.fact?.id??r?.existing?.id;if(!n)continue;let o=r?.action==="SKIP"?"mention":"primary";for(let{podId:i}of t)await Er(i,n,o)}}var US,Hi=u(()=>{Ka();fo();ct();Ps();Co();Hs();mf();qe();yi();bf();Lf();ke();_r();jf();di();S();L();US=HS(K,"default-extraction.md")});var Pe={};b(Pe,{clearTraces:()=>XS,getTrace:()=>JS,listTraces:()=>zS,recordTrace:()=>VS});function qS(){let e=eo();return{deviceId:e?.device?.id??null,transport:e?.transport??null}}async function VS({kind:e,summary:t,detail:r={},namespace:n=null,durationMs:o=null}){let i=`trace-${te(16)}`,a=new Date().toISOString(),{deviceId:s,transport:c}=qS(),l=r;try{JSON.stringify(r).length>KS&&(l={truncated:!0,note:"trace detail exceeded size cap",summary:t})}catch{l={error:"detail not serializable"}}try{H.emit("trace",{uid:i,kind:e,summary:t,namespace:n,durationMs:o,deviceId:s,transport:c,detail:l})}catch{}try{return await m("trace_event").insert({uid:i,kind:e,ts:a,duration_ms:o,namespace:n,summary:t,device_id:s,transport:c,detail:JSON.stringify(l)}),i}catch(d){return console.error("[trace-store] persist failed:",d.message),null}}async function zS({kind:e=null,namespace:t=null,before:r=null,limit:n=50}={}){let o=m("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&&(o=o.where({kind:e})),t&&(o=o.where({namespace:t})),r&&(o=o.where("ts","<",r)),(await o).map(a=>({...a,detail:typeof a.detail=="string"?qf(a.detail):a.detail}))}async function JS(e){let t=await m("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"?qf(t.detail):t.detail}:null}async function XS(){return{cleared:await m("trace_event").del()}}function qf(e){try{return JSON.parse(e)}catch{return{}}}var KS,Me=u(()=>{ut();A();ot();$r();KS=256*1024});var Jf={};b(Jf,{_reset:()=>uA,activeKinds:()=>Ar,get:()=>iA,getSchemaDoc:()=>lA,list:()=>aA,register:()=>Ui,validateAttrs:()=>cA});import{readFile as Vf}from"node:fs/promises";import{fileURLToPath as ZS}from"node:url";import{dirname as QS,join as zf}from"node:path";function Ui(e){for(let t of eA)if(!e[t])throw new Error(`Pod kind missing required field: ${t}`);if(e.visibility&&!tA.has(e.visibility))throw new Error(`Pod kind ${e.name}: invalid visibility ${e.visibility}`);if(e.activeMode&&!rA.has(e.activeMode))throw new Error(`Pod kind ${e.name}: invalid activeMode ${e.activeMode}`);if(e.writePolicy&&!nA.has(e.writePolicy))throw new Error(`Pod kind ${e.name}: invalid writePolicy ${e.writePolicy}`);Sr.set(e.name,oA(e))}function oA(e){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...e}}function iA(e){return Sr.get(e)||null}function aA(){return Array.from(Sr.values())}async function Ar(e={}){let t=[];for(let r of Sr.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}
245
- `),sA(r.name,n)}return t}function sA(e,t){Promise.resolve().then(()=>(Me(),Pe)).then(({recordTrace:r})=>r({kind:"lifecycle",summary:`pod-resolution failed for kind "${e}"`,detail:{kind:e,error:t.message}})).catch(()=>{})}function cA(e,t={}){if(!e||!e.attrsSchema)return{valid:!0};let r=[];for(let[n,o]of Object.entries(e.attrsSchema)){let i=t[n];if(i==null)continue;let a=Array.isArray(i)?"array":typeof i;o!==a&&r.push(`attr "${n}" expected ${o}, got ${a}`)}return r.length?{valid:!1,errors:r}:{valid:!0}}async function lA(e){if(!e)return null;let t=zf(pa,`${e.name}.md`);try{return await Vf(t,"utf8")}catch{}if(!e.schemaDocPath)return null;let r=QS(ZS(import.meta.url)),n=zf(r,e.schemaDocPath);try{return await Vf(n,"utf8")}catch{return null}}function uA(){Sr.clear()}var eA,tA,rA,nA,Sr,Ir=u(()=>{L();eA=["name"],tA=new Set(["private","shared","public"]),rA=new Set(["singleton-live","multi-active","rolling-window","always"]),nA=new Set(["origin-only","shared-allowlist","open"]),Sr=new Map});async function fA(e){if(e.project)return e.project;if(!e.cwd)try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(br(),kn)),r=await t();e={...e,cwd:r?.cwd}}catch{return null}if(!e.cwd)return null;try{let{deriveProjectRoot:t}=await Promise.resolve().then(()=>(Pn(),$i)),r=t(e.cwd);return r?r.split("/").pop():null}catch{return null}}function pA(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var dA,Xf,Zf=u(()=>{A();S();dA="playbook",Xf={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||g.defaults.namespace,r=await fA(e);try{let o=await m("pod").where({podType:dA,namespace:t,status:"active"}).select("uid","attrs");return r?o.filter(a=>{let s=pA(a.attrs);return!s.project||s.project===r}).map(a=>a.uid):o.map(a=>a.uid)}catch{return[]}}}});var mA,Qf,ep=u(()=>{A();S();mA=["__virtual:vital__"],Qf={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()=>mA,fetchFacts:async(e={},{slots:t=8,namespace:r}={})=>{let n=r||e.namespace||g.defaults.namespace;return m("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).where(o=>{o.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 np={};b(np,{registerBuiltins:()=>rp});function rp(){if(!tp){for(let e of hA)Ui(e);tp=!0}}var hA,tp,Mn=u(()=>{Ir();Di();Ri();Pn();Zf();ep();hA=[Mf,Mi,kf,Xf,Qf],tp=!1;rp()});var vr={};b(vr,{factsInPodsByRecency:()=>ip,getHotFacts:()=>op,updateContextSnapshot:()=>wA,writeSnapshotToFile:()=>ap});async function op({namespace:e,limit:t=gA,ctx:r={}}={}){let n=e||g.defaults.namespace,o={...r,namespace:n};o.cwd||(o.cwd=await yA());let i=await Ar(o),a=await Promise.all(i.map(async({kind:l,scope:d})=>{try{return typeof l.fetchFacts=="function"?await l.fetchFacts(o,{slots:l.hotContextBudget,namespace:n}):await ip(d,n,l.hotContextBudget)}catch{return[]}})),s=new Set,c=[];for(let l of a)for(let d of l)if(!(!d||s.has(d))&&(s.add(d),c.push(d),c.length>=t))return c;if(c.length===0){let l=await m("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||s.has(d))&&(s.add(d),c.push(d),c.length>=t))break}return c.slice(0,t)}async function ip(e,t,r){if(!Array.isArray(e)||e.length===0)return[];let n=e.filter(o=>typeof o=="string"&&!o.startsWith("__virtual:"));return n.length===0?[]:m("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(`
227
+ ON CONFLICT (pod_id, member_type, member_id) DO NOTHING`,[e,t,r,n]);return o>0&&(t==="fact"?await Nr(e,{facts:1}):t==="document"&&await Nr(e,{docs:1})),{attached:o>0}}async function gO(e,t,r){let n=await h("pod_membership").where({podId:e,memberType:t,memberId:r}).del();return n>0&&(t==="fact"?await Nr(e,{facts:-1}):t==="document"&&await Nr(e,{docs:-1})),{detached:n>0}}async function yO(e,{memberType:t,limit:r=20}={}){if(!t)throw new Error("listMembers requires a memberType filter");return h(`${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 wO(e,t){return h("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 EO(e){return await h("pod_membership").where({podId:e,memberType:"fact"}).pluck("memberId")}var On,xa,hO,Rn=u(()=>{T();lt();On=(e,t,r)=>ai(e,"fact",t,r),xa=(e,t,r)=>ai(e,"document",t,r),hO=(e,t,r)=>ai(e,"entity",t,r)});var Aa={};x(Aa,{getEntitiesForFact:()=>xO,getEntityIdsForFacts:()=>Dr,getFactsForEntity:()=>Sa,linkEntitiesToFact:()=>Cn});async function Cn(e,t){if(!t.length)return;let r=aa(t,"id"),n=r.map(o=>({factId:e,entityId:o.id,mentionType:"content",mentionCount:1}));await h("fact_entity").insert(n).onConflict(h.raw("(fact_id, entity_id, mention_type)")).merge({mentionCount:h.raw("fact_entity.mention_count + 1")}),await _O(e,r)}async function _O(e,t){let r=t.map(o=>o.id).filter(Boolean);if(!r.length)return;let n=await h("pod").whereIn("entityId",r).where({status:"active"}).select("id");for(let{id:o}of n)await On(o,e,"mention")}async function Sa(e,{limit:t=50}={}){return h("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 xO(e){return h("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 Dr(e){if(!e.length)return new Map;let t=await h("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 vt=u(()=>{ti();T();Rn()});import SO from"node:path";async function Oa(e,t,r,n){let{title:o,sourceType:i,metadata:s={}}=e,a=t.filter(f=>f.action==="ADD"||f.action==="UPDATE"),c=a.map(f=>f.fact||f.existing).filter(Boolean),d=a.find(f=>f.fact)?.fact?.id||null,p=new Date().toISOString().split("T")[0];return n?.items?.length?AO({entityDefs:n,factObjects:c,firstFactId:d,namespace:r,today:p}):bO({title:o,sourceType:i,metadata:s,factObjects:c,firstFactId:d,namespace:r,today:p})}async function AO({entityDefs:e,factObjects:t,firstFactId:r,namespace:n,today:o}){let i={},s=0,a=t.map(f=>f.content).filter(Boolean).join(`
228
+ `),c=[];for(let f of e.items){let m=await An({name:f.name,entityType:f.type,description:f.description,namespace:n,episodeText:a,episodeEntityIds:c});i[f.name]=m,m?.id&&c.push(m.id)}for(let f of e.relations||[]){let m=i[f.source],w=i[f.target];if(!m||!w)continue;let y=ba(t,f.source)||ba(t,f.target);await bn({sourceId:m.id,targetId:w.id,relationType:f.type,sourceFactId:y?.id||r,validAt:o}),s++}let l=await Ia(t,n),d=Ta(Object.values(i),l),p=0;for(let f of t){let m=d.filter(w=>ci(f.content,w));m.length&&(await Cn(f.id,m),p+=m.length)}return{entityCount:d.length,relationCount:s,factEntityLinks:p,topics:d.filter(f=>f.entityType==="topic").map(f=>f.name)}}async function bO({title:e,sourceType:t,metadata:r,factObjects:n,firstFactId:o,namespace:i,today:s}){if(!e){let E=n.length?await Ea(n,{promptPath:Xm,namespace:i}):[],b=await Ia(n,i),_=Ta(E,b),R=0;for(let I of n){let S=_.filter(q=>ci(I.content,q));S.length&&(await Cn(I.id,S),R+=S.length)}return{entityCount:_.length,relationCount:0,factEntityLinks:R,topics:E.map(I=>I.name)}}let a=n.map(E=>E.content).filter(Boolean).join(`
229
+ `).slice(0,2e3),c=await An({name:e,entityType:"document",description:`${t} document: ${e}`,namespace:i,episodeText:a}),l=null;r.author&&(l=await An({name:r.author,entityType:"person",namespace:i,episodeText:a,episodeEntityIds:c?.id?[c.id]:[]}));let d=n.length?await Ea(n,{promptPath:Xm,namespace:i}):[],p=0;l&&(await bn({sourceId:c.id,targetId:l.id,relationType:"AUTHORED_BY",sourceFactId:o,validAt:s}),p++);for(let E of d){let b=ba(n,E.name);await bn({sourceId:c.id,targetId:E.id,relationType:"COVERS",sourceFactId:b?.id||o,validAt:s}),p++}let f=[c,l,...d].filter(Boolean),m=await Ia(n,i),w=Ta(f,m),y=0;for(let E of n){let b=w.filter(_=>ci(E.content,_));b.length&&(await Cn(E.id,b),y+=b.length)}return{entityCount:w.length,relationCount:p,factEntityLinks:y,topics:d.map(E=>E.name)}}function ba(e,t){if(!t)return null;let r=t.toLowerCase();return e.find(n=>n.content?.toLowerCase().includes(r))||null}function ci(e,t){if(!e||!t?.name)return!1;let r=e.toLowerCase();return[t.name.toLowerCase(),...t.aliases||[]].some(o=>o?new RegExp(`\\b${TO(o)}\\b`).test(r):!1)}function TO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ta(...e){let t=new Set,r=[];for(let n of e)for(let o of n)!o||t.has(o.id)||(t.add(o.id),r.push(o));return r}async function Ia(e,t){if(!e?.length)return[];let r=await h("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(o=>ci(o.content,n))):[]}var Xm,Zm=u(()=>{qm();Ct();vt();C();T();Xm=SO.join(Q,"entity-extraction.md")});var IO,Qm,Ra=u(()=>{T();A();IO=1440*60*1e3,Qm={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||g.defaults.namespace;try{let r=new Date(Date.now()-IO);return(await h("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(o=>o.uid)}catch{return[]}}}});function rh({sessionId:e,transcriptPath:t=null,cwd:r=null,turnCount:n=0,model:o=null,conclusion:i=null,summary:s=null}){return{session_id:e,transcript_path:t,cwd:r,turn_count:n,model:o,conclusion:i,summary:s}}function nh({sessionId:e,startedAt:t=new Date}={}){let n=(t instanceof Date?t:new Date(t)).toISOString().replace("T"," ").slice(0,16),o=e?e.slice(0,8):"unknown";return`claude-session ${n} (${o})`}var eh,th,Ca=u(()=>{Nn();eh="claude_session",th={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 Na();return e?[e]:[]}catch{return[]}}}});var ui={};x(ui,{CURSOR_PATH:()=>Lr,endActiveSession:()=>BO,ensureActiveSession:()=>kO,getActiveCursor:()=>HO,getActiveSessionPodUid:()=>Na});import{writeFile as CO,readFile as NO,unlink as vO}from"node:fs/promises";import{existsSync as DO,mkdirSync as LO}from"node:fs";import{dirname as oh}from"node:path";async function li(){try{let e=await NO(Lr,"utf8");return JSON.parse(e)}catch{return null}}async function ih(e){DO(oh(Lr))||LO(oh(Lr),{recursive:!0}),await CO(Lr,JSON.stringify(e,null,2),"utf8")}async function kO({sessionId:e,transcriptPath:t=null,cwd:r=null,model:n=null,namespace:o=null}){if(!e)throw new Error("ensureActiveSession requires sessionId from hook stdin");let i=o||g.defaults.namespace,s=await li();if(s&&s.session_id===e&&s.namespace===i){let l=await Rr(s.pod_uid);if(l)return await In(l.id,{turn_count:(FO(l.attrs)||0)+1}),await MO(s),l}let a=new Date,{pod:c}=await Or({podType:eh,externalId:e,name:nh({sessionId:e,startedAt:a}),namespace:i,attrs:rh({sessionId:e,transcriptPath:t,cwd:r,turnCount:1,model:n}),startedAt:a});return await ih({session_id:e,pod_uid:c.uid,namespace:i,started_at:c.startedAt??a.toISOString(),last_seen_at:new Date().toISOString()}),c}async function MO(e){await ih({...e,last_seen_at:new Date().toISOString()})}async function Na({allowStale:e=!1}={}){let t=await li();return!t||!t.pod_uid||!e&&t.started_at&&Date.now()-new Date(t.started_at).getTime()>PO?null:t.pod_uid}async function HO(){return li()}async function BO({conclusion:e=null,summary:t=null}={}){let r=await li();if(!r)return null;let n=await Rr(r.pod_uid);if(n){if(e||t){let o={};e&&(o.conclusion=e),t&&(o.summary=t),await In(n.id,o)}await _a(n.id)}try{await vO(Lr)}catch{}return n}function FO(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 Lr,PO,Nn=u(()=>{lt();Ca();A();C();Lr=Gi,PO=360*60*1e3});var ka={};x(ka,{POD_TYPE:()=>Da,deriveProjectRoot:()=>Pa,ensureProjectPod:()=>UO,formatForDisplay:()=>jO,membership:()=>vr,projectKind:()=>La});import{execFileSync as $O}from"node:child_process";import{basename as sh}from"node:path";async function UO({cwd:e,namespace:t=null}){if(!e)return null;let r=Pa(e),n=t||g.defaults.namespace,i=(r!==e?!1:va(e)===e)?r:va(e),{pod:s}=await Or({podType:Da,externalId:r,name:sh(r)||r,namespace:n,attrs:{root_path:r,git_root:i||null,display_name:sh(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return s}function Pa(e){return va(e)||e}function va(e){try{return $O("git",["rev-parse","--show-toplevel"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function GO(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(Nn(),ui));return(await e())?.cwd||null}catch{return null}}function jO(e){let t=WO(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 WO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Da,La,di=u(()=>{lt();Rn();A();Da="project",La={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 GO();if(!t)return[];let r=e.namespace||g.defaults.namespace,n=Pa(t),o=await Cr({podType:Da,externalId:n,namespace:r});return o?[o.uid]:[]}}});async function ah(e,t){if(!e||typeof e!="object")return[];let r=[],n=t||g.defaults.namespace;if(e.slack?.team_id&&e.connection_id){let i=await Cr({podType:"connector_workspace",externalId:`slack:${e.slack.team_id}`,namespace:n});i&&r.push({podId:i.id,role:"primary"})}if(e.github?.org&&e.connection_id){let i=await Cr({podType:"connector_workspace",externalId:`github:${e.github.org}`,namespace:n});i&&r.push({podId:i.id,role:"primary"})}let o=e.project_root||e.source_root;if(o)try{let{ensureProjectPod:i}=await Promise.resolve().then(()=>(di(),ka)),s=await i({cwd:o,namespace:n});s&&r.push({podId:s.id,role:"primary"})}catch{}return r}var ch=u(()=>{lt();Ra();A()});var Ma={};x(Ma,{ingestDocument:()=>qO});import{createHash as KO}from"node:crypto";import{join as YO}from"node:path";async function qO({content:e,title:t,sourcePath:r,sourceType:n="raw",contentType:o,namespace:i,metadata:s={},promptPath:a,categories:c,entities:l,skipFacts:d=!1,skipEntities:p=!1,skipContextualization:f=!1,classify:m=!0,podUids:w=[],resolvePodsFrom:y=null}){e=ri(e);let E=i||g.defaults.namespace,b=c||Object.keys(oi),_=a||VO,R=t||r,I=null;if(m&&(process.stderr.write(`[0/6] Classifying input...
230
+ `),I=await $m(e,{title:R}),process.stderr.write(` Route: ${I.route} \u2014 ${I.reasoning}
231
+ `),I.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
232
+ `),{documentId:null,title:R,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
233
+ `);let S=KO("sha256").update(e).digest("hex"),q=r||`thought:${S}`,{doc:O,changed:Pe}=await As({sourcePath:q,sourceType:n,title:R,contentHash:S,namespace:E});if(!Pe)return process.stderr.write(` Skipped \u2014 content unchanged.
234
+ `),{documentId:O.id,title:R,skipped:!0};s&&(Object.keys(s).length||s.connection_id)&&await Ts(O.id,s,s.connection_id??null);let Ye=await XO({podUids:w,resolvePodsFrom:y,metadata:s,namespace:E});for(let{podId:U,role:Kt}of Ye)await xa(U,O.id,Kt);process.stderr.write(`[2/6] Parsing content...
235
+ `);let Zr=hl(e,{format:s.format,filePath:r,contentType:o});if(R=t||Zr.metadata?.title||r,I?.route==="thought"&&I.facts.length){process.stderr.write(`[thought] Storing ${I.facts.length} facts directly...
236
+ `);let U=await JO(I.facts,{documentId:O.id,namespace:E}),Kt={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!p&&U.results.length&&(Kt=await Oa({title:R,sourceType:n,metadata:s},U.results,E,l)),await To(O.id,{chunkCount:0,factCount:U.counts.added}),await uh(U.results,Ye),await ni(O.id,U.results.map(Qn=>Qn.fact?.id??Qn.existing?.id).filter(Boolean)),process.stderr.write(`Done. Route: thought, ${U.counts.total} facts (${U.counts.added} new)
237
+ `),{documentId:O.id,documentUid:O.uid,title:R,skipped:!1,route:"thought",chunkCount:0,facts:{...U.counts,verdicts:lh(U.results)},entities:Kt}}let j=[],pe={counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]},Qr={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};try{process.stderr.write(`[3/6] Chunking and embedding...
238
+ `),j=wl(Zr.sections),process.stderr.write(` ${j.length} chunks created
239
+ `),!f&&j.length&&(j=await Ql(j,Zr.text,{title:R}));let U=j.map(Ve=>{let eo=Ve.contextualPrefix;return eo?`${eo}
240
+ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:Kt[eo]}));await ou(O.id,Qn,E),!d&&g.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
241
+ `),pe=await zO(j,{documentId:O.id,namespace:E,promptPath:_,categories:b})):g.ingest.eagerExtract||process.stderr.write(`[4/6] Skipping fact extraction (SIGIL_EAGER_EXTRACT=false)
242
+ `),await To(O.id,{chunkCount:j.length,factCount:pe.counts.added+pe.counts.updated+pe.counts.contradicted}),await uh(pe.results,Ye),await ni(O.id,pe.results.map(Ve=>Ve.fact?.id??Ve.existing?.id).filter(Boolean)),!p&&pe.results.length&&(process.stderr.write(`[5/6] Linking entities...
243
+ `),Qr=await Oa({title:R,sourceType:n,metadata:s},pe.results,E,l),process.stderr.write(` ${Qr.entityCount} entities, ${Qr.relationCount} relations
244
+ `))}catch(U){throw console.error(`[pipeline] Failed after document upsert: ${U.message}`),await bs(O.id).catch(()=>{}),U}return process.stderr.write(`Done. ${j.length} chunks, ${pe.counts.total} facts, ${Qr.entityCount} entities
245
+ `),{documentId:O.id,documentUid:O.uid,title:R,skipped:!1,route:I?.route??null,chunkCount:j.length,facts:{...pe.counts,verdicts:lh(pe.results)},entities:Qr}}function lh(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 dh(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:o="medium",defaultImportance:i="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 da({content:l.content,category:l.category,confidence:l.confidence||o,importance:l.importance||i,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 JO(e,{documentId:t,namespace:r}){let n=await He(e.map(o=>o.content));return dh(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:"high",defaultImportance:"vital"})}async function zO(e,{documentId:t,namespace:r,promptPath:n,categories:o}){let i=await Dm(e,{promptPath:n,categories:o});if(process.stderr.write(` ${i.length} facts extracted from ${e.length} chunks
246
+ `),!i.length)return{counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]};let s=await He(i.map(a=>a.content));return dh(i,{documentId:t,namespace:r,embeddings:s})}async function XO({podUids:e,resolvePodsFrom:t,metadata:r,namespace:n}){let o=[];for(let s of e){let a=await Rr(s);a&&o.push({podId:a.id,role:"primary"})}if(t==="metadata"){let s=await ah(r,n);for(let a of s)o.push(a)}let i=new Map;for(let s of o){let a=i.get(s.podId);(!a||s.role==="primary"&&a.role!=="primary")&&i.set(s.podId,s)}return[...i.values()]}async function uh(e,t){if(!(!t.length||!e.length))for(let r of e){let n=r?.fact?.id??r?.existing?.id;if(!n)continue;let o=r?.action==="SKIP"?"mention":"primary";for(let{podId:i}of t)await On(i,n,o)}}var VO,Ha=u(()=>{gl();cs();rr();eu();Os();iu();Lm();Tt();ma();Um();Zm();lt();Rn();ch();ca();A();C();VO=YO(Q,"default-extraction.md")});var ut={};x(ut,{clearTraces:()=>nR,getTrace:()=>rR,listTraces:()=>tR,recordTrace:()=>eR});function QO(){let e=zi();return{deviceId:e?.device?.id??null,transport:e?.transport??null}}async function eR({kind:e,summary:t,detail:r={},namespace:n=null,durationMs:o=null}){let i=`trace-${we(16)}`,s=new Date().toISOString(),{deviceId:a,transport:c}=QO(),l=r;try{JSON.stringify(r).length>ZO&&(l={truncated:!0,note:"trace detail exceeded size cap",summary:t})}catch{l={error:"detail not serializable"}}try{K.emit("trace",{uid:i,kind:e,summary:t,namespace:n,durationMs:o,deviceId:a,transport:c,detail:l})}catch{}try{return await h("trace_event").insert({uid:i,kind:e,ts:s,duration_ms:o,namespace:n,summary:t,device_id:a,transport:c,detail:JSON.stringify(l)}),i}catch(d){return console.error("[trace-store] persist failed:",d.message),null}}async function tR({kind:e=null,namespace:t=null,before:r=null,limit:n=50}={}){let o=h("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&&(o=o.where({kind:e})),t&&(o=o.where({namespace:t})),r&&(o=o.where("ts","<",r)),(await o).map(s=>({...s,detail:typeof s.detail=="string"?fh(s.detail):s.detail}))}async function rR(e){let t=await h("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"?fh(t.detail):t.detail}:null}async function nR(){return{cleared:await h("trace_event").del()}}function fh(e){try{return JSON.parse(e)}catch{return{}}}var ZO,dt=u(()=>{or();T();Qt();po();ZO=256*1024});var hh={};x(hh,{_reset:()=>gR,activeKinds:()=>Dn,get:()=>dR,getSchemaDoc:()=>hR,list:()=>fR,register:()=>Ba,validateAttrs:()=>mR});import{readFile as ph}from"node:fs/promises";import{fileURLToPath as oR}from"node:url";import{dirname as iR,join as mh}from"node:path";function Ba(e){for(let t of sR)if(!e[t])throw new Error(`Pod kind missing required field: ${t}`);if(e.visibility&&!aR.has(e.visibility))throw new Error(`Pod kind ${e.name}: invalid visibility ${e.visibility}`);if(e.activeMode&&!cR.has(e.activeMode))throw new Error(`Pod kind ${e.name}: invalid activeMode ${e.activeMode}`);if(e.writePolicy&&!lR.has(e.writePolicy))throw new Error(`Pod kind ${e.name}: invalid writePolicy ${e.writePolicy}`);vn.set(e.name,uR(e))}function uR(e){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...e}}function dR(e){return vn.get(e)||null}function fR(){return Array.from(vn.values())}async function Dn(e={}){let t=[];for(let r of vn.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}
247
+ `),pR(r.name,n)}return t}function pR(e,t){Promise.resolve().then(()=>(dt(),ut)).then(({recordTrace:r})=>r({kind:"lifecycle",summary:`pod-resolution failed for kind "${e}"`,detail:{kind:e,error:t.message}})).catch(()=>{})}function mR(e,t={}){if(!e||!e.attrsSchema)return{valid:!0};let r=[];for(let[n,o]of Object.entries(e.attrsSchema)){let i=t[n];if(i==null)continue;let s=Array.isArray(i)?"array":typeof i;o!==s&&r.push(`attr "${n}" expected ${o}, got ${s}`)}return r.length?{valid:!1,errors:r}:{valid:!0}}async function hR(e){if(!e)return null;let t=mh(Ui,`${e.name}.md`);try{return await ph(t,"utf8")}catch{}if(!e.schemaDocPath)return null;let r=iR(oR(import.meta.url)),n=mh(r,e.schemaDocPath);try{return await ph(n,"utf8")}catch{return null}}function gR(){vn.clear()}var sR,aR,cR,lR,vn,Ln=u(()=>{C();sR=["name"],aR=new Set(["private","shared","public"]),cR=new Set(["singleton-live","multi-active","rolling-window","always"]),lR=new Set(["origin-only","shared-allowlist","open"]),vn=new Map});async function wR(e){if(e.project)return e.project;if(!e.cwd)try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(Nn(),ui)),r=await t();e={...e,cwd:r?.cwd}}catch{return null}if(!e.cwd)return null;try{let{deriveProjectRoot:t}=await Promise.resolve().then(()=>(di(),ka)),r=t(e.cwd);return r?r.split("/").pop():null}catch{return null}}function ER(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var yR,gh,yh=u(()=>{T();A();yR="playbook",gh={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||g.defaults.namespace,r=await wR(e);try{let o=await h("pod").where({podType:yR,namespace:t,status:"active"}).select("uid","attrs");return r?o.filter(s=>{let a=ER(s.attrs);return!a.project||a.project===r}).map(s=>s.uid):o.map(s=>s.uid)}catch{return[]}}}});var _R,wh,Eh=u(()=>{T();A();_R=["__virtual:vital__"],wh={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()=>_R,fetchFacts:async(e={},{slots:t=8,namespace:r}={})=>{let n=r||e.namespace||g.defaults.namespace;return h("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).where(o=>{o.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 Sh={};x(Sh,{registerBuiltins:()=>xh});function xh(){if(!_h){for(let e of xR)Ba(e);_h=!0}}var xR,_h,fi=u(()=>{Ln();Ca();Ra();di();yh();Eh();xR=[th,La,Qm,gh,wh],_h=!1;xh()});var Pn={};x(Pn,{factsInPodsByRecency:()=>bh,getHotFacts:()=>Ah,updateContextSnapshot:()=>bR,writeSnapshotToFile:()=>Th});async function Ah({namespace:e,limit:t=SR,ctx:r={}}={}){let n=e||g.defaults.namespace,o={...r,namespace:n};o.cwd||(o.cwd=await AR());let i=await Dn(o),s=await Promise.all(i.map(async({kind:l,scope:d})=>{try{return typeof l.fetchFacts=="function"?await l.fetchFacts(o,{slots:l.hotContextBudget,namespace:n}):await bh(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 h("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 bh(e,t,r){if(!Array.isArray(e)||e.length===0)return[];let n=e.filter(o=>typeof o=="string"&&!o.startsWith("__virtual:"));return n.length===0?[]:h("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(`
246
248
  COALESCE(f.importance_score, 2) DESC,
247
249
  COALESCE(fl.last_accessed_at, f.created_at) DESC
248
- `).limit(r).pluck("f.content")}async function yA(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(br(),kn));return(await e())?.cwd||null}catch{return null}}async function ap({facts:e,namespace:t}){let r=await import("node:fs/promises");if(!e||!e.length)return 0;let n="<!-- sigil-context -->",o=new Date().toISOString().slice(0,16).replace("T"," "),i=[n,`## Active Context *(${e.length} facts \xB7 refreshed ${o}${t?` \xB7 ns=${t}`:""})*`,"",e.map(c=>`- ${c}`).join(`
250
+ `).limit(r).pluck("f.content")}async function AR(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(Nn(),ui));return(await e())?.cwd||null}catch{return null}}async function Th({facts:e,namespace:t}){let r=await import("node:fs/promises");if(!e||!e.length)return 0;let n="<!-- sigil-context -->",o=new Date().toISOString().slice(0,16).replace("T"," "),i=[n,`## Active Context *(${e.length} facts \xB7 refreshed ${o}${t?` \xB7 ns=${t}`:""})*`,"",e.map(c=>`- ${c}`).join(`
249
251
  `),n].join(`
250
- `),a="";try{a=await r.readFile(qn,"utf8")}catch{}let s=a.includes(n)?a.replace(new RegExp(`${n}[\\s\\S]*?${n}`),i):a+(a.trim()?`
252
+ `),s="";try{s=await r.readFile(to,"utf8")}catch{}let a=s.includes(n)?s.replace(new RegExp(`${n}[\\s\\S]*?${n}`),i):s+(s.trim()?`
251
253
 
252
254
  `:"")+i+`
253
- `;return await r.writeFile(qn,s,"utf8"),e.length}async function wA({namespace:e,limit:t,ctx:r}={}){let n=await op({namespace:e,limit:t,ctx:r});return ap({facts:n,namespace:e})}var gA,Tr=u(()=>{A();S();L();Mn();Ir();gA=20});async function cp(e){if(!e||e.length<2)return;let t=[...new Set(e.filter(i=>Number.isInteger(i)))].sort((i,a)=>i-a);if(t.length<2)return;let r=[];for(let i=0;i<t.length;i++)for(let a=i+1;a<t.length;a++)r.push([t[i],t[a]]);let n=r.map(()=>"(?, ?, 1, NOW(), NOW())").join(", "),o=r.flat();await m.raw(`
255
+ `;return await r.writeFile(to,a,"utf8"),e.length}async function bR({namespace:e,limit:t,ctx:r}={}){let n=await Ah({namespace:e,limit:t,ctx:r});return Th({facts:n,namespace:e})}var SR,kn=u(()=>{T();A();C();fi();Ln();SR=20});async function Oh(e){if(!e||e.length<2)return;let t=[...new Set(e.filter(i=>Number.isInteger(i)))].sort((i,s)=>i-s);if(t.length<2)return;let r=[];for(let i=0;i<t.length;i++)for(let s=i+1;s<t.length;s++)r.push([t[i],t[s]]);let n=r.map(()=>"(?, ?, 1, NOW(), NOW())").join(", "),o=r.flat();await h.raw(`
254
256
  INSERT INTO hebbian_edge (fact_a_id, fact_b_id, strength, first_seen_at, last_seen_at)
255
257
  VALUES ${n}
256
258
  ON CONFLICT (fact_a_id, fact_b_id)
257
259
  DO UPDATE SET
258
260
  strength = hebbian_edge.strength + 1,
259
261
  last_seen_at = NOW()
260
- `,o)}var lp=u(()=>{A()});var Wi={};b(Wi,{consolidateEntityCoRetrievalEdges:()=>xA,getCoRetrievedEntities:()=>_A,getEdgeStrengthsForRanking:()=>ji,getEntityHebbianStats:()=>bA,strengthenEntityEdges:()=>Gi});function Fn(e){return EA/Math.max(e,1)}async function Gi(e,t={}){if(!g.hebbian.entity.enabled||!e||e.length<2)return;let r=t.eta??g.hebbian.entity.eta,n=t.cap??g.hebbian.entity.cap,o=[...new Set(e.filter(c=>Number.isInteger(c)))].sort((c,l)=>c-l);if(o.length<2)return;let i=[];for(let c=0;c<o.length;c++)for(let l=c+1;l<o.length;l++)i.push([o[c],o[l]]);let a=i.map(()=>"(?, ?, ?, NOW(), NOW())").join(", "),s=i.flatMap(([c,l])=>[c,l,r]);await m.raw(`
262
+ `,o)}var Rh=u(()=>{T()});var Ua={};x(Ua,{consolidateEntityCoRetrievalEdges:()=>OR,getCoRetrievedEntities:()=>IR,getEdgeStrengthsForRanking:()=>$a,getEntityHebbianStats:()=>RR,strengthenEntityEdges:()=>Fa});function pi(e){return TR/Math.max(e,1)}async function Fa(e,t={}){if(!g.hebbian.entity.enabled||!e||e.length<2)return;let r=t.eta??g.hebbian.entity.eta,n=t.cap??g.hebbian.entity.cap,o=[...new Set(e.filter(c=>Number.isInteger(c)))].sort((c,l)=>c-l);if(o.length<2)return;let i=[];for(let c=0;c<o.length;c++)for(let l=c+1;l<o.length;l++)i.push([o[c],o[l]]);let s=i.map(()=>"(?, ?, ?, NOW(), NOW())").join(", "),a=i.flatMap(([c,l])=>[c,l,r]);await h.raw(`
261
263
  INSERT INTO entity_hebbian_edge (entity_a_id, entity_b_id, strength, first_seen_at, last_seen_at)
262
- VALUES ${a}
264
+ VALUES ${s}
263
265
  ON CONFLICT (entity_a_id, entity_b_id)
264
266
  DO UPDATE SET
265
267
  strength = LEAST(entity_hebbian_edge.strength + ?, ?),
266
268
  last_seen_at = NOW()
267
- `,[...s,r,n])}async function _A(e,t={}){if(!g.hebbian.entity.enabled)return[];let r=t.limit??10,n=t.minEffectiveStrength??g.hebbian.entity.minEffective,o=Fn(t.halfLifeDays??g.hebbian.entity.halfLifeDays),{rows:i}=await m.raw(`
269
+ `,[...a,r,n])}async function IR(e,t={}){if(!g.hebbian.entity.enabled)return[];let r=t.limit??10,n=t.minEffectiveStrength??g.hebbian.entity.minEffective,o=pi(t.halfLifeDays??g.hebbian.entity.halfLifeDays),{rows:i}=await h.raw(`
268
270
  SELECT
269
271
  CASE WHEN entity_a_id = ? THEN entity_b_id ELSE entity_a_id END AS "partnerId",
270
272
  (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0))::float8 AS "effectiveStrength",
@@ -274,7 +276,7 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
274
276
  WHERE entity_a_id = ? OR entity_b_id = ?
275
277
  ORDER BY "effectiveStrength" DESC
276
278
  LIMIT ?
277
- `,[e,o,e,e,r*3]);return i.filter(a=>a.effectiveStrength>=n).slice(0,r)}async function ji(e,t,r={}){if(!g.hebbian.entity.enabled)return new Map;if(!e.length||!t.length)return new Map;let n=Fn(r.halfLifeDays??g.hebbian.entity.halfLifeDays),o=[...new Set(e)],i=[...new Set(t)].filter(c=>!o.includes(c));if(!i.length)return new Map;let{rows:a}=await m.raw(`
279
+ `,[e,o,e,e,r*3]);return i.filter(s=>s.effectiveStrength>=n).slice(0,r)}async function $a(e,t,r={}){if(!g.hebbian.entity.enabled)return new Map;if(!e.length||!t.length)return new Map;let n=pi(r.halfLifeDays??g.hebbian.entity.halfLifeDays),o=[...new Set(e)],i=[...new Set(t)].filter(c=>!o.includes(c));if(!i.length)return new Map;let{rows:s}=await h.raw(`
278
280
  SELECT
279
281
  CASE
280
282
  WHEN entity_a_id = ANY(?::bigint[]) THEN entity_b_id
@@ -287,18 +289,18 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
287
289
  OR
288
290
  (entity_b_id = ANY(?::bigint[]) AND entity_a_id = ANY(?::bigint[]))
289
291
  GROUP BY "candidateId"
290
- `,[o,n,o,i,o,i]),s=new Map;for(let c of a)s.set(Number(c.candidateId),c.summedStrength);return s}async function xA({floor:e=.5,decayDays:t=90}={}){let r=Fn(g.hebbian.entity.halfLifeDays),{rows:n}=await m.raw(`
292
+ `,[o,n,o,i,o,i]),a=new Map;for(let c of s)a.set(Number(c.candidateId),c.summedStrength);return a}async function OR({floor:e=.5,decayDays:t=90}={}){let r=pi(g.hebbian.entity.halfLifeDays),{rows:n}=await h.raw(`
291
293
  DELETE FROM entity_hebbian_edge
292
294
  WHERE (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0)) <= ?
293
295
  AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
294
296
  RETURNING entity_a_id
295
- `,[r,e,t]);return n.length}async function bA({topN:e=5}={}){let t=Fn(g.hebbian.entity.halfLifeDays),r=await m.raw(`
297
+ `,[r,e,t]);return n.length}async function RR({topN:e=5}={}){let t=pi(g.hebbian.entity.halfLifeDays),r=await h.raw(`
296
298
  SELECT
297
299
  COUNT(*)::int AS "edgeCount",
298
300
  COALESCE(AVG(strength)::float8, 0) AS "avgStrength",
299
301
  COALESCE(MAX(strength)::float8, 0) AS "maxStrength"
300
302
  FROM entity_hebbian_edge
301
- `),n=await m.raw(`
303
+ `),n=await h.raw(`
302
304
  SELECT
303
305
  ea.name AS "aName",
304
306
  eb.name AS "bName",
@@ -309,11 +311,11 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
309
311
  JOIN entity eb ON eb.id = entity_b_id
310
312
  ORDER BY "decayed" DESC
311
313
  LIMIT ?
312
- `,[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 EA,$n=u(()=>{A();S();EA=Math.log(2)});function Bn({minConfidence:e="medium",pointInTime:t,categories:r}){let n=SA[e]??1,o=[n],i="",a="";return t&&(i="AND valid_from <= ? AND (valid_until IS NULL OR valid_until > ?)",o.push(t,t)),r?.length&&(a="AND category = ANY(?)",o.push(r)),{minRank:n,temporalClause:i,categoryClause:a,filterParams:o}}var SA,Or,Hn=u(()=>{SA={low:0,medium:1,high:2},Or=`CASE confidence
314
+ `,[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 TR,mi=u(()=>{T();A();TR=Math.log(2)});function hi({minConfidence:e="medium",pointInTime:t,categories:r}){let n=CR[e]??1,o=[n],i="",s="";return t&&(i="AND valid_from <= ? AND (valid_until IS NULL OR valid_until > ?)",o.push(t,t)),r?.length&&(s="AND category = ANY(?)",o.push(r)),{minRank:n,temporalClause:i,categoryClause:s,filterParams:o}}var CR,Mn,gi=u(()=>{CR={low:0,medium:1,high:2},Mn=`CASE confidence
313
315
  WHEN 'high' THEN 2
314
316
  WHEN 'medium' THEN 1
315
317
  ELSE 0
316
- END`});async function up(e,{namespaces:t,limit:r=20}){let n=$(e),o=`${le("embedding")} <=> ${ue()}`,{rows:i}=await m.raw(`
318
+ END`});async function Ch(e,{namespaces:t,limit:r=20}){let n=G(e),o=`${Re("embedding")} <=> ${Ce()}`,{rows:i}=await h.raw(`
317
319
  SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
318
320
  content, section_heading AS "sectionHeading", namespace,
319
321
  1 - (${o}) as similarity
@@ -322,7 +324,7 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
322
324
  AND embedding IS NOT NULL
323
325
  ORDER BY ${o}
324
326
  LIMIT ?
325
- `,[n,t,n,r]);return i}var dp=u(()=>{A();Se();S();Hn()});async function fp(e,{namespaces:t,limit:r=20}){let{rows:n}=await m.raw(`
327
+ `,[n,t,n,r]);return i}var Nh=u(()=>{T();Ze();A();gi()});async function vh(e,{namespaces:t,limit:r=20}){let{rows:n}=await h.raw(`
326
328
  SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
327
329
  content, section_heading AS "sectionHeading", namespace,
328
330
  ts_rank(search_vector, plainto_tsquery('english', ?)) as rank
@@ -331,10 +333,10 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
331
333
  AND search_vector @@ plainto_tsquery('english', ?)
332
334
  ORDER BY rank DESC
333
335
  LIMIT ?
334
- `,[e,t,e,r]);return n}var pp=u(()=>{A();Hn()});async function hp(e,t,{namespaces:r,limit:n=5,minConfidence:o="medium",pointInTime:i,categories:a,podIds:s=null}){let c=$(t),l=`${le("embedding")} <=> ${ue()}`,{temporalClause:d,categoryClause:p,filterParams:f}=Bn({minConfidence:o,pointInTime:i,categories:a}),h=n*OA,w=Array.isArray(s),y=w&&s.length===0,E=w?y?"AND FALSE":`AND id = ANY(
336
+ `,[e,t,e,r]);return n}var Dh=u(()=>{T();gi()});async function Ph(e,t,{namespaces:r,limit:n=5,minConfidence:o="medium",pointInTime:i,categories:s,podIds:a=null}){let c=G(t),l=`${Re("embedding")} <=> ${Ce()}`,{temporalClause:d,categoryClause:p,filterParams:f}=hi({minConfidence:o,pointInTime:i,categories:s}),m=n*PR,w=Array.isArray(a),y=w&&a.length===0,E=w?y?"AND FALSE":`AND id = ANY(
335
337
  SELECT member_id FROM pod_membership
336
338
  WHERE member_type = 'fact' AND pod_id = ANY(?::int[])
337
- )`:"",I=w&&!y?[s]:[],[_,...O]=f,v=[c,c,r,_,...O,...I,c,h],x=[e,e,r,_,e,...O,...I,h],G=[h,h,n],T=`
339
+ )`:"",b=w&&!y?[a]:[],[_,...R]=f,I=[c,c,r,_,...R,...b,c,m],S=[e,e,r,_,e,...R,...b,m],q=[m,m,n],O=`
338
340
  WITH semantic AS (
339
341
  SELECT id,
340
342
  uid,
@@ -350,7 +352,7 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
350
352
  WHERE namespace = ANY(?)
351
353
  AND status = 'active'
352
354
  AND embedding IS NOT NULL
353
- AND ${Or} >= ?
355
+ AND ${Mn} >= ?
354
356
  ${d}
355
357
  ${p}
356
358
  ${E}
@@ -371,7 +373,7 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
371
373
  FROM fact
372
374
  WHERE namespace = ANY(?)
373
375
  AND status = 'active'
374
- AND ${Or} >= ?
376
+ AND ${Mn} >= ?
375
377
  AND search_vector @@ plainto_tsquery('english', ?)
376
378
  ${d}
377
379
  ${p}
@@ -395,8 +397,8 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
395
397
  COALESCE(s.created_at, k.created_at) AS created_at,
396
398
  COALESCE(s.similarity, 0) AS similarity,
397
399
  (
398
- ${vA} * (1.0 / (${mp} + COALESCE(s.rank_ix, ?)))
399
- + ${TA} * (1.0 / (${mp} + COALESCE(k.rank_ix, ?)))
400
+ ${DR} * (1.0 / (${Lh} + COALESCE(s.rank_ix, ?)))
401
+ + ${LR} * (1.0 / (${Lh} + COALESCE(k.rank_ix, ?)))
400
402
  ) AS rrf_raw
401
403
  FROM semantic s
402
404
  FULL OUTER JOIN keyword k ON s.id = k.id
@@ -416,11 +418,11 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
416
418
  )
417
419
  )
418
420
  )) AS activation,
419
- CASE f.importance WHEN 'vital' THEN ${NA} ELSE 1.0 END AS importance_mult,
421
+ CASE f.importance WHEN 'vital' THEN ${kR} ELSE 1.0 END AS importance_mult,
420
422
  CASE f.confidence
421
- WHEN 'high' THEN ${CA}
422
- WHEN 'medium' THEN ${RA}
423
- WHEN 'low' THEN ${DA}
423
+ WHEN 'high' THEN ${MR}
424
+ WHEN 'medium' THEN ${HR}
425
+ WHEN 'low' THEN ${BR}
424
426
  ELSE 1.0
425
427
  END AS confidence_mult
426
428
  FROM fused f
@@ -437,7 +439,7 @@ ${xe.content}`:xe.content}),rt=await he(F),Pr=B.map((xe,Mr)=>({...xe,embedding:r
437
439
  ORDER BY final_score DESC,
438
440
  CASE WHEN importance = 'vital' THEN 0 ELSE 1 END
439
441
  LIMIT ?
440
- `,pe=[...v,...x,...G],{rows:_e}=await m.raw(T,pe);if(!_e.length)return[];let Yt=_e[0].final_score||_e[0].rrf_raw||1;return _e.map(B=>({...B,rrfScore:Math.round(Number(B.final_score||B.rrf_raw)/Number(Yt)*100)/100}))}var mp,vA,TA,OA,NA,CA,RA,DA,gp=u(()=>{A();Se();S();Hn();mp=20,vA=1,TA=.7,OA=3,NA=1.5,CA=1,RA=.85,DA=.7});async function yp(e){let t=e.map(o=>o.id),r=await $t(t),n=new Set;for(let o of r.values())for(let i of o)n.add(i);return n.size?m("entity").whereIn("id",[...n]).whereNull("mergedWith").select("id","uid","name","entityType","description"):[]}async function wp(e,{limit:t=10}={}){if(!e.length)return[];let r=await m("relation").where(function(){this.whereIn("sourceId",e).orWhereIn("targetId",e)}).whereNull("invalidAt").select("*").limit(t*3),n=new Set(e),o=new Set,i=new Map;for(let p of r){let f=n.has(p.sourceId)?p.targetId:p.sourceId;o.add(f),i.has(f)||i.set(f,p)}if(!o.size)return[];let a=await m("entity").whereIn("id",[...o]).whereNull("mergedWith").select("id","name"),s=new Map(a.map(p=>[p.id,p.name])),c=await m("fact").join("fact_entity","fact.id","fact_entity.factId").whereIn("fact_entity.entityId",[...o]).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 f=i.get(p.entityId),h=s.get(p.entityId)||"unknown",w=f?.relationType||"related";if(d.push({...p,relationPath:`${h} (${w})`,graphDistance:1}),d.length>=t)break}return d}function Ep(e,t,r,n){let o=new Set(r),i=e.map(s=>({...s,resultType:"direct"})),a=t.filter(s=>!e.some(c=>c.id===s.id)).map(s=>({...s,rrfScore:(s.rrfScore||.1)*.5,resultType:"related"}));return[...i,...a].slice(0,n)}var _p=u(()=>{A();Qe()});var Ht,Yi=u(()=>{Ht=class{#e=new Map;#t;#r;constructor({maxSize:t=100,ttlMs:r=300*1e3}={}){this.#t=t,this.#r=r}get(t){let r=this.#e.get(t);if(r){if(Date.now()-r.timestamp>this.#r){this.#e.delete(t);return}return r.value}}set(t,r){if(this.#e.size>=this.#t){let n=this.#e.keys().next().value;this.#e.delete(n)}this.#e.set(t,{value:r,timestamp:Date.now()})}}});async function bp(e){let t=xp.get(e);if(t)return t;let r=`You are a search query expander for a personal knowledge base.
442
+ `,Pe=[...I,...S,...q],{rows:Ye}=await h.raw(O,Pe);if(!Ye.length)return[];let Zr=Ye[0].final_score||Ye[0].rrf_raw||1;return Ye.map(j=>({...j,rrfScore:Math.round(Number(j.final_score||j.rrf_raw)/Number(Zr)*100)/100}))}var Lh,DR,LR,PR,kR,MR,HR,BR,kh=u(()=>{T();Ze();A();gi();Lh=20,DR=1,LR=.7,PR=3,kR=1.5,MR=1,HR=.85,BR=.7});async function Mh(e){let t=e.map(o=>o.id),r=await Dr(t),n=new Set;for(let o of r.values())for(let i of o)n.add(i);return n.size?h("entity").whereIn("id",[...n]).whereNull("mergedWith").select("id","uid","name","entityType","description"):[]}async function Hh(e,{limit:t=10}={}){if(!e.length)return[];let r=await h("relation").where(function(){this.whereIn("sourceId",e).orWhereIn("targetId",e)}).whereNull("invalidAt").select("*").limit(t*3),n=new Set(e),o=new Set,i=new Map;for(let p of r){let f=n.has(p.sourceId)?p.targetId:p.sourceId;o.add(f),i.has(f)||i.set(f,p)}if(!o.size)return[];let s=await h("entity").whereIn("id",[...o]).whereNull("mergedWith").select("id","name"),a=new Map(s.map(p=>[p.id,p.name])),c=await h("fact").join("fact_entity","fact.id","fact_entity.factId").whereIn("fact_entity.entityId",[...o]).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 f=i.get(p.entityId),m=a.get(p.entityId)||"unknown",w=f?.relationType||"related";if(d.push({...p,relationPath:`${m} (${w})`,graphDistance:1}),d.length>=t)break}return d}function Bh(e,t,r,n){let o=new Set(r),i=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[...i,...s].slice(0,n)}var Fh=u(()=>{T();vt()});var Pr,Ga=u(()=>{Pr=class{#e=new Map;#t;#r;constructor({maxSize:t=100,ttlMs:r=300*1e3}={}){this.#t=t,this.#r=r}get(t){let r=this.#e.get(t);if(r){if(Date.now()-r.timestamp>this.#r){this.#e.delete(t);return}return r.value}}set(t,r){if(this.#e.size>=this.#t){let n=this.#e.keys().next().value;this.#e.delete(n)}this.#e.set(t,{value:r,timestamp:Date.now()})}}});async function Uh(e){let t=$h.get(e);if(t)return t;let r=`You are a search query expander for a personal knowledge base.
441
443
 
442
444
  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.
443
445
 
@@ -449,7 +451,7 @@ Think about:
449
451
 
450
452
  User query: "${e}"
451
453
 
452
- Respond with ONLY a JSON array of strings. Do not include the original query.`;try{let n=await Q(r,{model:g.llm.extractionModel,caller:"query-expander"});if(!Array.isArray(n))return[e];let o=n.filter(a=>typeof a=="string"&&a.trim()).slice(0,LA),i=o.length?[e,...o]:[e];return xp.set(e,i),i}catch(n){return console.error("[query-expander] Failed:",n.message),[e]}}var LA,xp,Sp=u(()=>{ee();Yi();S();LA=5,xp=new Ht({maxSize:100,ttlMs:300*1e3})});import{readFile as kA}from"node:fs/promises";import{join as PA}from"node:path";async function vp(e){let t=e.trim().toLowerCase(),r=Ki.get(t);if(r)return r;let o=`${await kA(MA,"utf8")}
454
+ Respond with ONLY a JSON array of strings. Do not include the original query.`;try{let n=await ge(r,{model:g.llm.extractionModel,caller:"query-expander"});if(!Array.isArray(n))return[e];let o=n.filter(s=>typeof s=="string"&&s.trim()).slice(0,FR),i=o.length?[e,...o]:[e];return $h.set(e,i),i}catch(n){return console.error("[query-expander] Failed:",n.message),[e]}}var FR,$h,Gh=u(()=>{ye();Ga();A();FR=5,$h=new Pr({maxSize:100,ttlMs:300*1e3})});import{readFile as $R}from"node:fs/promises";import{join as UR}from"node:path";async function Kh(e){let t=e.trim().toLowerCase(),r=ja.get(t);if(r)return r;let o=`${await $R(GR,"utf8")}
453
455
 
454
456
  ---
455
457
 
@@ -457,7 +459,7 @@ Query: ${e}
457
459
 
458
460
  ---
459
461
 
460
- 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 i=await Q(o,{model:g.llm.extractionModel,caller:"query-router"});if(!i||!FA.includes(i.intent)){let c=Ap("factual",{});return Ki.set(t,c),c}let a=Ip[i.intent],s={intent:i.intent,categories:Array.isArray(i.categories)&&i.categories.length?i.categories:a.categories,entities:Array.isArray(i.entities)?i.entities:[],expand:typeof i.expand=="boolean"?i.expand:a.expand,useGraph:a.useGraph,limit:a.limit,pointInTime:i.pointInTime||null,reasoning:i.reasoning||""};return Ki.set(t,s),s}catch(i){return console.error("[query-router] Failed:",i.message),Ap("factual",{reasoning:`Fallback \u2014 ${i.message}`})}}function Ap(e,t={}){let r=Ip[e];return{intent:e,categories:r.categories,entities:[],expand:r.expand,useGraph:r.useGraph,limit:r.limit,pointInTime:null,reasoning:"",...t}}var MA,Ki,FA,Ip,Tp=u(()=>{ee();Yi();S();L();MA=PA(K,"query-router.md"),Ki=new Ht({maxSize:200,ttlMs:600*1e3}),FA=["preference","factual","entity_lookup","exploratory","temporal"],Ip={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 Rp={};b(Rp,{isSearchableQuery:()=>Op,search:()=>UA});async function UA(e,{namespaces:t,limit:r=5,minConfidence:n="medium",useGraph:o=!1,includeChunks:i=!1,pointInTime:a,expand:s=!1,route:c=!0,categories:l,synthesize:d=g.search.synthesize,podScope:p=null,applyFloor:f=!0,ctx:h={}}={}){let w=Date.now();if(!Op(e)){let x=jA();return x._trace={query:e,searchable:!1,stages:[{stage:"guard",note:"query is not searchable (empty or wildcard-only)"}],durationMs:Date.now()-w},x}d&&(i=!0);let y=null;c&&(y=await vp(e),o=o||y.useGraph,s=s||y.expand,r=y.limit||r,a=a||y.pointInTime,l=l||(y.categories.length?y.categories:void 0));let E=await qA(e,t),I=await KA(p,{...h,namespace:t?.[0]}),_;E?_=await VA(E,e,{namespaces:t,limit:r,minConfidence:n,includeChunks:i,pointInTime:a,categories:l,podIds:I}):_=await XA(e,{namespaces:t,limit:r,minConfidence:n,useGraph:o,includeChunks:i,pointInTime:a,expand:s,categories:l,podIds:I});let O=null;if(f&&Array.isArray(_.facts)&&_.facts.length){let x=g.memory.injectionFloor,G=_.facts.length;_.facts=_.facts.filter(T=>{if(T.source==="entity")return!0;let pe=Number(T.similarity);return Number.isFinite(pe)?pe>=x:!0}),O={threshold:x,dropped:G-_.facts.length,kept:_.facts.length}}let v=_.facts.map(x=>x.id).filter(Boolean);if(gi(v).catch(x=>console.error("[access-tracking]",x.message)),cp(v.slice(0,8)).catch(x=>console.error("[hebbian]",x.message)),g.hebbian.entity.enabled&&v.length>=2&&YA(v).catch(x=>console.error("[hebbian-entity]",x.message)),d)try{_.synthesized=await WA(e,_)}catch(x){console.error("[synthesizer] failed:",x.message),_.synthesized=null}return _._trace=GA({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:o,expand:s,route:c,routing:y,matchedEntity:E,podScope:p,podIds:I,result:_,factIds:v,floored:O,durationMs:Date.now()-w}),_}function GA({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:o,expand:i,route:a,routing:s,matchedEntity:c,podScope:l,podIds:d,result:p,factIds:f,floored:h,durationMs:w}){let y=_=>{let O=Number(_);return Number.isFinite(O)?Math.round(O*1e4)/1e4:null},E=(p.facts||[]).map((_,O)=>({rank:O+1,id:_.id??null,content:String(_.content||"").slice(0,240),category:_.category??null,importance:_.importance??null,confidence:_.confidence??null,source:_.source??null,similarity:y(_.similarity),rrfRaw:y(_.rrf_raw),activation:y(_.activation),accessCount:_.access_count??null,lastAccessedAt:_.lastAccessedAt??null,finalScore:y(_.final_score),rrfScore:y(_.rrfScore),coRetrievalBoost:y(_.coRetrievalBoost)})),I=(p.chunks||[]).map((_,O)=>({rank:O+1,id:_.id??null,sectionHeading:_.sectionHeading??null,content:String(_.content||"").slice(0,200),similarity:y(_.similarity),rrfScore:y(_.rrfScore)}));return{query:e,namespaces:t,durationMs:w,params:{limit:r,minConfidence:n,useGraphRequested:o,expandRequested:i,routeEnabled:a},routing:s?{intent:s.intent??null,reasoning:s.reasoning??null,useGraph:s.useGraph??null,expand:s.expand??null,limit:s.limit??null,categories:s.categories??null,pointInTime:s.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:h?{applied:!0,threshold:h.threshold,dropped:h.dropped,kept:h.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:E,chunks:I},synthesized:p.synthesized||null,relatedEntities:p.relatedEntities||[],reinforced:{factIds:f,note:"access_count bumped + Hebbian co-retrieval edges strengthened (off hot path)"}}}function Op(e){let t=String(e||"").trim();return t?!/^[*%_?\s]+$/.test(t):!1}function jA(){return{facts:[],chunks:[],matchedEntity:null,relatedEntities:[]}}async function WA(e,{facts:t,chunks:r}){let n=[];if(t.slice(0,10).forEach((a,s)=>{n.push(`[F${s+1}] (${a.category}) ${a.content}`)}),r.length&&r.slice(0,15).forEach((a,s)=>{let c=(a.content||"").replace(/\s+/g," ").trim();c&&n.push(`[C${s+1}] ${c.slice(0,2e3)}`)}),!n.length)return"No retrieved evidence \u2014 nothing to synthesize.";let o=`You are answering a question from a personal-memory system.
462
+ 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 i=await ge(o,{model:g.llm.extractionModel,caller:"query-router"});if(!i||!jR.includes(i.intent)){let c=jh("factual",{});return ja.set(t,c),c}let s=Wh[i.intent],a={intent:i.intent,categories:Array.isArray(i.categories)&&i.categories.length?i.categories:s.categories,entities:Array.isArray(i.entities)?i.entities:[],expand:typeof i.expand=="boolean"?i.expand:s.expand,useGraph:s.useGraph,limit:s.limit,pointInTime:i.pointInTime||null,reasoning:i.reasoning||""};return ja.set(t,a),a}catch(i){return console.error("[query-router] Failed:",i.message),jh("factual",{reasoning:`Fallback \u2014 ${i.message}`})}}function jh(e,t={}){let r=Wh[e];return{intent:e,categories:r.categories,entities:[],expand:r.expand,useGraph:r.useGraph,limit:r.limit,pointInTime:null,reasoning:"",...t}}var GR,ja,jR,Wh,Yh=u(()=>{ye();Ga();A();C();GR=UR(Q,"query-router.md"),ja=new Pr({maxSize:200,ttlMs:600*1e3}),jR=["preference","factual","entity_lookup","exploratory","temporal"],Wh={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 zh={};x(zh,{isSearchableQuery:()=>Vh,search:()=>VR});async function VR(e,{namespaces:t,limit:r=5,minConfidence:n="medium",useGraph:o=!1,includeChunks:i=!1,pointInTime:s,expand:a=!1,route:c=!0,categories:l,synthesize:d=g.search.synthesize,podScope:p=null,applyFloor:f=!0,ctx:m={}}={}){let w=Date.now();if(!Vh(e)){let S=JR();return S._trace={query:e,searchable:!1,stages:[{stage:"guard",note:"query is not searchable (empty or wildcard-only)"}],durationMs:Date.now()-w},S}d&&(i=!0);let y=null;c&&(y=await Kh(e),o=o||y.useGraph,a=a||y.expand,r=y.limit||r,s=s||y.pointInTime,l=l||(y.categories.length?y.categories:void 0));let E=await QR(e,t),b=await ZR(p,{...m,namespace:t?.[0]}),_;E?_=await eC(E,e,{namespaces:t,limit:r,minConfidence:n,includeChunks:i,pointInTime:s,categories:l,podIds:b}):_=await nC(e,{namespaces:t,limit:r,minConfidence:n,useGraph:o,includeChunks:i,pointInTime:s,expand:a,categories:l,podIds:b});let R=null;if(f&&Array.isArray(_.facts)&&_.facts.length){let S=g.memory.injectionFloor,q=_.facts.length;_.facts=_.facts.filter(O=>{if(O.source==="entity")return!0;let Pe=Number(O.similarity);return Number.isFinite(Pe)?Pe>=S:!0}),R={threshold:S,dropped:q-_.facts.length,kept:_.facts.length}}let I=_.facts.map(S=>S.id).filter(Boolean);if(pa(I).catch(S=>console.error("[access-tracking]",S.message)),Oh(I.slice(0,8)).catch(S=>console.error("[hebbian]",S.message)),g.hebbian.entity.enabled&&I.length>=2&&XR(I).catch(S=>console.error("[hebbian-entity]",S.message)),d)try{_.synthesized=await zR(e,_)}catch(S){console.error("[synthesizer] failed:",S.message),_.synthesized=null}return _._trace=qR({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:o,expand:a,route:c,routing:y,matchedEntity:E,podScope:p,podIds:b,result:_,factIds:I,floored:R,durationMs:Date.now()-w}),_}function qR({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:o,expand:i,route:s,routing:a,matchedEntity:c,podScope:l,podIds:d,result:p,factIds:f,floored:m,durationMs:w}){let y=_=>{let R=Number(_);return Number.isFinite(R)?Math.round(R*1e4)/1e4:null},E=(p.facts||[]).map((_,R)=>({rank:R+1,id:_.id??null,content:String(_.content||"").slice(0,240),category:_.category??null,importance:_.importance??null,confidence:_.confidence??null,source:_.source??null,similarity:y(_.similarity),rrfRaw:y(_.rrf_raw),activation:y(_.activation),accessCount:_.access_count??null,lastAccessedAt:_.lastAccessedAt??null,finalScore:y(_.final_score),rrfScore:y(_.rrfScore),coRetrievalBoost:y(_.coRetrievalBoost)})),b=(p.chunks||[]).map((_,R)=>({rank:R+1,id:_.id??null,sectionHeading:_.sectionHeading??null,content:String(_.content||"").slice(0,200),similarity:y(_.similarity),rrfScore:y(_.rrfScore)}));return{query:e,namespaces:t,durationMs:w,params:{limit:r,minConfidence:n,useGraphRequested:o,expandRequested:i,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:E,chunks:b},synthesized:p.synthesized||null,relatedEntities:p.relatedEntities||[],reinforced:{factIds:f,note:"access_count bumped + Hebbian co-retrieval edges strengthened (off hot path)"}}}function Vh(e){let t=String(e||"").trim();return t?!/^[*%_?\s]+$/.test(t):!1}function JR(){return{facts:[],chunks:[],matchedEntity:null,relatedEntities:[]}}async function zR(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 o=`You are answering a question from a personal-memory system.
461
463
  Each retrieved item is labeled [F#] (a stored fact) or [C#] (a raw conversation chunk
462
464
  that may include user/assistant turns and dates).
463
465
 
@@ -472,14 +474,14 @@ Instructions:
472
474
  - Reason step-by-step internally for temporal questions ("first", "before", "after", "how many days") \u2014 compare the dates explicitly.
473
475
  - Cite items in square brackets where they directly support the answer, e.g. [C2].
474
476
  - 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.
475
- - Plain text only, no headers. Direct answer first, then a short justification if needed. 1-4 sentences total.`,i=g.search.synthesizeModel||g.llm.extractionModel||void 0;return ge(o,{model:i,caller:"synthesizer"})}async function YA(e){let t=await $t(e.slice(0,8)),r=[];for(let o of t.values())for(let i of o)r.push(i);let n=[...new Set(r)].slice(0,g.hebbian.entity.maxWriteEntities);await Gi(n)}async function KA(e,t={}){if(e==null||e==="global")return null;if(e==="auto"){let n=(await Ar(t)).flatMap(i=>i.scope).filter(i=>typeof i=="string"&&!i.startsWith("__virtual:"));if(n.length===0){if(process.env.SIGIL_SCOPE_GRACE!=="false"){let i=m("pod");t.namespace&&(i=i.where({namespace:t.namespace}));let[{count:a}]=await i.count({count:"*"});if(Number(a)===0)return null}return[]}return(await m("pod").whereIn("uid",n).select("id")).map(i=>i.id)}if(Array.isArray(e)){if(e.length===0)return[];if(e.every(o=>typeof o=="number"))return e;let r=e.filter(o=>typeof o=="string");return r.length===0?[]:(await m("pod").where(function(){this.whereIn("uid",r).orWhereIn("name",r)}).select("id")).map(o=>o.id)}return null}async function qA(e,t){if(e.length<2||e.length>HA)return null;let r=t[0]||g.defaults.namespace,n=await Ve(e,r);return n||(await _i(e,{namespace:r,limit:1}))[0]||null}async function VA(e,t,{namespaces:r,limit:n,minConfidence:o,includeChunks:i,pointInTime:a,categories:s,podIds:c}){let l=zA(t,e),d=await he(l,{inputType:"query"}),[p,f,...h]=await Promise.all([Ii(e.id,{limit:n}),yr(e.id,{limit:15}),...l.map((x,G)=>Cp(x,{queryEmbedding:d[G],namespaces:r,limit:n,minConfidence:o,includeChunks:i,pointInTime:a,categories:s,podIds:c}))]),w=p.map(x=>({...x,source:"entity"})),y=Un(h.map(x=>x.facts),n*2),E=new Set(w.map(x=>x.id)),I=y.filter(x=>!E.has(x.id)).map(x=>({...x,source:"search"})),_=[...w,...I].slice(0,n);if(g.hebbian.entity.enabled&&_.length>=2)try{_=await Np(_,{seedEntityIds:[e.id]})}catch(x){console.error("[hebbian-entity-boost]",x.message)}let O=i?Un(h.map(x=>x.chunks||[]),n):[],v=f.map(x=>({id:x.entityId,name:x.name,type:x.entityType,relation:x.relationType,direction:x.direction,mentions:x.mentionCount}));return{facts:_,chunks:O,matchedEntity:{id:e.id,name:e.name,type:e.entityType,mentions:e.mentionCount,description:e.description||null,aliases:e.aliases||[]},relatedEntities:v}}function zA(e,t){let r=[e],n=(t.aliases||[]).filter(a=>typeof a=="string"&&a.trim());if(!n.length)return r;let o=(t.name||"").trim(),i=new Set([e.toLowerCase()]);for(let a of n){let s=e;if(o){let c=new RegExp(`\\b${JA(o)}\\b`,"gi");if(c.test(s))s=s.replace(c,a);else{i.has(a.toLowerCase())||(r.push(a),i.add(a.toLowerCase()));continue}}i.has(s.toLowerCase())||(r.push(s),i.add(s.toLowerCase()))}return r}function JA(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function XA(e,{namespaces:t,limit:r,minConfidence:n,useGraph:o,includeChunks:i,pointInTime:a,expand:s=!1,categories:c,podIds:l}){let d=s?await bp(e):[e],p=await he(d,{inputType:"query"}),f=await Promise.all(d.map((y,E)=>Cp(y,{queryEmbedding:p[E],namespaces:t,limit:r,minConfidence:n,includeChunks:i,pointInTime:a,categories:c,podIds:l}))),h=Un(f.map(y=>y.facts),r);if(h=h.map(y=>({...y,source:"search"})),g.hebbian.entity.enabled&&h.length>=2)try{h=await Np(h)}catch(y){console.error("[hebbian-entity-boost]",y.message)}if(o&&h.length)try{let y=await yp(h.slice(0,5));if(y.length){let E=await ZA(y.map(_=>_.id)),I=await wp(E,{limit:5});h=Ep(h,I,E,r)}}catch(y){console.error("[graph-enhancement] Failed:",y.message)}let w=i?Un(f.map(y=>y.chunks),r):[];return{facts:h,chunks:w,matchedEntity:null,relatedEntities:[]}}async function Np(e,t={}){let r=e.map(f=>f.id).filter(Boolean);if(r.length<2)return e;let n=await $t(r);if(!n.size)return e;let o,i;if(t.seedEntityIds?.length)o=t.seedEntityIds,i=e;else{let f=t.seedFactCount??3,h=[];for(let w of e.slice(0,f)){let y=n.get(w.id)||[];for(let E of y)h.push(E)}o=h,i=e.slice(f)}if(!o.length)return e;let a=new Set;for(let f of i){let h=n.get(f.id)||[];for(let w of h)a.add(w)}if(!a.size)return e;let s=await ji([...new Set(o)],[...a]);if(!s.size)return e;let c=new Map,l=0;for(let f of e){let h=n.get(f.id)||[],w=0;for(let y of h){let E=s.get(y)||0;E>w&&(w=E)}c.set(f.id,w),w>l&&(l=w)}if(l===0)return e;let d=g.hebbian.entity.rrfWeight;return e.map(f=>{let h=(c.get(f.id)||0)/l,w=(f.rrfScore||0)+d*h;return{...f,rrfScore:Math.round(w*100)/100,coRetrievalBoost:Math.round(h*100)/100}}).sort((f,h)=>(h.rrfScore||0)-(f.rrfScore||0))}async function ZA(e){let t=g.hebbian.entity.expandPerSeed;if(!t||!e.length)return e;let{getCoRetrievedEntities:r}=await Promise.resolve().then(()=>($n(),Wi)),n=await Promise.all(e.map(i=>r(i,{limit:t}).catch(()=>[]))),o=new Set(e);for(let i of n)for(let a of i)o.add(Number(a.partnerId));return[...o]}function Un(e,t){let r={},n={};for(let a of e)for(let[s,c]of a.entries())n[c.id]=c,r[c.id]=(r[c.id]||0)+1/(qi+s+1);let o=Object.entries(r).sort(([,a],[,s])=>s-a),i=o.length?o[0][1]:1;return o.slice(0,t).map(([a,s])=>({...n[a],rrfScore:Math.round(s/i*100)/100}))}async function Cp(e,{queryEmbedding:t,namespaces:r,limit:n,minConfidence:o,includeChunks:i=!1,pointInTime:a,categories:s,podIds:c}){let l=t||await je(e,{inputType:"query"}),d=hp(e,l,{namespaces:r,limit:n,minConfidence:o,pointInTime:a,categories:s,podIds:c}),p=i?[up(l,{namespaces:r,limit:n}),fp(e,{namespaces:r,limit:n})]:[],[f,...h]=await Promise.all([d,...p]),w=i&&h.length===2?QA(h[0],h[1],n):[];return{facts:f,chunks:w}}function QA(e,t,r){let n={},o={..._o(e,"id"),..._o(t,"id")};e.forEach((s,c)=>{n[s.id]=(n[s.id]||0)+$A/(qi+c+1)}),t.forEach((s,c)=>{n[s.id]=(n[s.id]||0)+BA/(qi+c+1)});let i=Object.entries(n).sort(([s,c],[l,d])=>{if(c!==d)return d-c;let p=o[s]?.importance==="vital"?1:0;return(o[l]?.importance==="vital"?1:0)-p}),a=i.length?i[0][1]:1;return i.slice(0,r).map(([s,c])=>({...o[s],rrfScore:Math.round(c/a*100)/100}))}var qi,$A,BA,HA,Dp=u(()=>{Kr();ct();S();fe();Qe();qe();lp();$n();Xe();Qe();dp();pp();gp();_p();Sp();Tp();ee();Mn();Ir();A();qi=20,$A=1,BA=.7,HA=60});var Fp={};b(Fp,{findEntitiesByType:()=>oI,findPath:()=>nI,findRelated:()=>Mp,getEntityNeighborhood:()=>rI});async function Mp(e,{maxDepth:t=2,relationType:r,limit:n=30}={}){let o=Math.min(Math.max(t,1),6),i=[e,e],a=r?"AND r.relation_type = ?":"";r&&i.push(r);let s=r?"AND r.relation_type = ?":"";r&&i.push(r),i.push(o,n);let{rows:c}=await m.raw(`
477
+ - Plain text only, no headers. Direct answer first, then a short justification if needed. 1-4 sentences total.`,i=g.search.synthesizeModel||g.llm.extractionModel||void 0;return Be(o,{model:i,caller:"synthesizer"})}async function XR(e){let t=await Dr(e.slice(0,8)),r=[];for(let o of t.values())for(let i of o)r.push(i);let n=[...new Set(r)].slice(0,g.hebbian.entity.maxWriteEntities);await Fa(n)}async function ZR(e,t={}){if(e==null||e==="global")return null;if(e==="auto"){let n=(await Dn(t)).flatMap(i=>i.scope).filter(i=>typeof i=="string"&&!i.startsWith("__virtual:"));if(n.length===0){if(process.env.SIGIL_SCOPE_GRACE!=="false"){let i=h("pod");t.namespace&&(i=i.where({namespace:t.namespace}));let[{count:s}]=await i.count({count:"*"});if(Number(s)===0)return null}return[]}return(await h("pod").whereIn("uid",n).select("id")).map(i=>i.id)}if(Array.isArray(e)){if(e.length===0)return[];if(e.every(o=>typeof o=="number"))return e;let r=e.filter(o=>typeof o=="string");return r.length===0?[]:(await h("pod").where(function(){this.whereIn("uid",r).orWhereIn("name",r)}).select("id")).map(o=>o.id)}return null}async function QR(e,t){if(e.length<2||e.length>YR)return null;let r=t[0]||g.defaults.namespace,n=await It(e,r);return n||(await ya(e,{namespace:r,limit:1}))[0]||null}async function eC(e,t,{namespaces:r,limit:n,minConfidence:o,includeChunks:i,pointInTime:s,categories:a,podIds:c}){let l=tC(t,e),d=await He(l,{inputType:"query"}),[p,f,...m]=await Promise.all([Sa(e.id,{limit:n}),Tn(e.id,{limit:15}),...l.map((S,q)=>Jh(S,{queryEmbedding:d[q],namespaces:r,limit:n,minConfidence:o,includeChunks:i,pointInTime:s,categories:a,podIds:c}))]),w=p.map(S=>({...S,source:"entity"})),y=yi(m.map(S=>S.facts),n*2),E=new Set(w.map(S=>S.id)),b=y.filter(S=>!E.has(S.id)).map(S=>({...S,source:"search"})),_=[...w,...b].slice(0,n);if(g.hebbian.entity.enabled&&_.length>=2)try{_=await qh(_,{seedEntityIds:[e.id]})}catch(S){console.error("[hebbian-entity-boost]",S.message)}let R=i?yi(m.map(S=>S.chunks||[]),n):[],I=f.map(S=>({id:S.entityId,name:S.name,type:S.entityType,relation:S.relationType,direction:S.direction,mentions:S.mentionCount}));return{facts:_,chunks:R,matchedEntity:{id:e.id,name:e.name,type:e.entityType,mentions:e.mentionCount,description:e.description||null,aliases:e.aliases||[]},relatedEntities:I}}function tC(e,t){let r=[e],n=(t.aliases||[]).filter(s=>typeof s=="string"&&s.trim());if(!n.length)return r;let o=(t.name||"").trim(),i=new Set([e.toLowerCase()]);for(let s of n){let a=e;if(o){let c=new RegExp(`\\b${rC(o)}\\b`,"gi");if(c.test(a))a=a.replace(c,s);else{i.has(s.toLowerCase())||(r.push(s),i.add(s.toLowerCase()));continue}}i.has(a.toLowerCase())||(r.push(a),i.add(a.toLowerCase()))}return r}function rC(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function nC(e,{namespaces:t,limit:r,minConfidence:n,useGraph:o,includeChunks:i,pointInTime:s,expand:a=!1,categories:c,podIds:l}){let d=a?await Uh(e):[e],p=await He(d,{inputType:"query"}),f=await Promise.all(d.map((y,E)=>Jh(y,{queryEmbedding:p[E],namespaces:t,limit:r,minConfidence:n,includeChunks:i,pointInTime:s,categories:c,podIds:l}))),m=yi(f.map(y=>y.facts),r);if(m=m.map(y=>({...y,source:"search"})),g.hebbian.entity.enabled&&m.length>=2)try{m=await qh(m)}catch(y){console.error("[hebbian-entity-boost]",y.message)}if(o&&m.length)try{let y=await Mh(m.slice(0,5));if(y.length){let E=await oC(y.map(_=>_.id)),b=await Hh(E,{limit:5});m=Bh(m,b,E,r)}}catch(y){console.error("[graph-enhancement] Failed:",y.message)}let w=i?yi(f.map(y=>y.chunks),r):[];return{facts:m,chunks:w,matchedEntity:null,relatedEntities:[]}}async function qh(e,t={}){let r=e.map(f=>f.id).filter(Boolean);if(r.length<2)return e;let n=await Dr(r);if(!n.size)return e;let o,i;if(t.seedEntityIds?.length)o=t.seedEntityIds,i=e;else{let f=t.seedFactCount??3,m=[];for(let w of e.slice(0,f)){let y=n.get(w.id)||[];for(let E of y)m.push(E)}o=m,i=e.slice(f)}if(!o.length)return e;let s=new Set;for(let f of i){let m=n.get(f.id)||[];for(let w of m)s.add(w)}if(!s.size)return e;let a=await $a([...new Set(o)],[...s]);if(!a.size)return e;let c=new Map,l=0;for(let f of e){let m=n.get(f.id)||[],w=0;for(let y of m){let E=a.get(y)||0;E>w&&(w=E)}c.set(f.id,w),w>l&&(l=w)}if(l===0)return e;let d=g.hebbian.entity.rrfWeight;return e.map(f=>{let m=(c.get(f.id)||0)/l,w=(f.rrfScore||0)+d*m;return{...f,rrfScore:Math.round(w*100)/100,coRetrievalBoost:Math.round(m*100)/100}}).sort((f,m)=>(m.rrfScore||0)-(f.rrfScore||0))}async function oC(e){let t=g.hebbian.entity.expandPerSeed;if(!t||!e.length)return e;let{getCoRetrievedEntities:r}=await Promise.resolve().then(()=>(mi(),Ua)),n=await Promise.all(e.map(i=>r(i,{limit:t}).catch(()=>[]))),o=new Set(e);for(let i of n)for(let s of i)o.add(Number(s.partnerId));return[...o]}function yi(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/(Wa+a+1);let o=Object.entries(r).sort(([,s],[,a])=>a-s),i=o.length?o[0][1]:1;return o.slice(0,t).map(([s,a])=>({...n[s],rrfScore:Math.round(a/i*100)/100}))}async function Jh(e,{queryEmbedding:t,namespaces:r,limit:n,minConfidence:o,includeChunks:i=!1,pointInTime:s,categories:a,podIds:c}){let l=t||await xt(e,{inputType:"query"}),d=Ph(e,l,{namespaces:r,limit:n,minConfidence:o,pointInTime:s,categories:a,podIds:c}),p=i?[Ch(l,{namespaces:r,limit:n}),vh(e,{namespaces:r,limit:n})]:[],[f,...m]=await Promise.all([d,...p]),w=i&&m.length===2?iC(m[0],m[1],n):[];return{facts:f,chunks:w}}function iC(e,t,r){let n={},o={...hs(e,"id"),...hs(t,"id")};e.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+WR/(Wa+c+1)}),t.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+KR/(Wa+c+1)});let i=Object.entries(n).sort(([a,c],[l,d])=>{if(c!==d)return d-c;let p=o[a]?.importance==="vital"?1:0;return(o[l]?.importance==="vital"?1:0)-p}),s=i.length?i[0][1]:1;return i.slice(0,r).map(([a,c])=>({...o[a],rrfScore:Math.round(c/s*100)/100}))}var Wa,WR,KR,YR,Xh=u(()=>{_o();rr();A();ve();vt();Tt();Rh();mi();Ct();vt();Nh();Dh();kh();Fh();Gh();Yh();ye();fi();Ln();T();Wa=20,WR=1,KR=.7,YR=60});var rg={};x(rg,{findEntitiesByType:()=>uC,findPath:()=>lC,findRelated:()=>tg,getEntityNeighborhood:()=>cC});async function tg(e,{maxDepth:t=2,relationType:r,limit:n=30}={}){let o=Math.min(Math.max(t,1),6),i=[e,e],s=r?"AND r.relation_type = ?":"";r&&i.push(r);let a=r?"AND r.relation_type = ?":"";r&&i.push(r),i.push(o,n);let{rows:c}=await h.raw(`
476
478
  WITH RECURSIVE graph AS (
477
479
  SELECT r.target_id AS entity_id, r.relation_type, r.mention_count,
478
480
  1 AS depth, ARRAY[?::integer] AS path
479
481
  FROM relation r
480
482
  WHERE r.source_id = ?
481
483
  AND r.invalid_at IS NULL
482
- ${a}
484
+ ${s}
483
485
 
484
486
  UNION ALL
485
487
 
@@ -490,7 +492,7 @@ Instructions:
490
492
  WHERE g.depth < ?
491
493
  AND r.invalid_at IS NULL
492
494
  AND NOT (r.target_id = ANY(g.path))
493
- ${s}
495
+ ${a}
494
496
  )
495
497
  SELECT DISTINCT ON (g.entity_id)
496
498
  g.entity_id AS "entityId", g.relation_type AS "relationType",
@@ -501,7 +503,7 @@ Instructions:
501
503
  WHERE e.merged_with IS NULL
502
504
  ORDER BY g.entity_id, g.depth ASC
503
505
  LIMIT ?
504
- `,i);return c}async function rI(e,{depth:t=1,limit:r=50}={}){let n=await ae(e);if(!n)return null;if(t>1){let i=await Mp(e,{maxDepth:t,limit:r});return{entity:n,related:i}}let o=await yr(e,{limit:r});return{entity:n,relations:o}}async function nI(e,t,{maxDepth:r=4}={}){let n=Math.min(Math.max(r,1),6),{rows:o}=await m.raw(`
506
+ `,i);return c}async function cC(e,{depth:t=1,limit:r=50}={}){let n=await Ae(e);if(!n)return null;if(t>1){let i=await tg(e,{maxDepth:t,limit:r});return{entity:n,related:i}}let o=await Tn(e,{limit:r});return{entity:n,relations:o}}async function lC(e,t,{maxDepth:r=4}={}){let n=Math.min(Math.max(r,1),6),{rows:o}=await h.raw(`
505
507
  WITH RECURSIVE search AS (
506
508
  SELECT r.target_id AS current_id,
507
509
  ARRAY[r.source_id, r.target_id] AS path,
@@ -528,7 +530,7 @@ Instructions:
528
530
  WHERE current_id = ?
529
531
  ORDER BY depth ASC
530
532
  LIMIT 1
531
- `,[e,n,t]);if(!o.length)return null;let{path:i,relationTypes:a,depth:s}=o[0],c=await m("entity").whereIn("id",i).select("id","uid","name","entityType","description"),l=Object.fromEntries(c.map(p=>[p.id,p]));return{path:i.map(p=>l[p]),relationTypes:a,depth:s}}async function oI(e,{namespace:t,sortBy:r="mentionCount",limit:n=50}={}){let o=m("entity").where({entityType:e}).whereNull("mergedWith").orderBy(r,"desc").limit(n);return t&&o.where({namespace:t}),o}var $p=u(()=>{A();fe();Xe()});import{readFile as aI,stat as J$}from"node:fs/promises";import{basename as sI,extname as cI,resolve as lI}from"node:path";async function Wp(e){let t=lI(e),r=await aI(t,"utf8"),n=sI(t),o=cI(t).toLowerCase();return{content:r,title:n,sourcePath:t,sourceType:"file",contentType:uI(o),metadata:{filePath:t,fileName:n,extension:o}}}function uI(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 Yp=u(()=>{});async function Kp(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",o=dI(e);return{content:r,title:o,sourcePath:e,sourceType:"url",contentType:n,metadata:{url:e,fetchedAt:new Date().toISOString()}}}function dI(e){try{let t=new URL(e),n=t.pathname.replace(/\/$/,"").split("/").pop()||t.hostname;return decodeURIComponent(n)}catch{return e}}var qp=u(()=>{});var Vp={};b(Vp,{resolveSource:()=>pI});import{resolve as fI}from"node:path";async function pI({content:e,url:t,filePath:r,title:n,sourceType:o,sourcePath:i,metadata:a}){if(t)return Kp(t);if(r){let s=fI(r),c=process.cwd();if(!s.startsWith(c))throw new Error(`Path traversal denied: ${r} resolves outside working directory`);return Wp(s)}return e?{content:e,title:n||"Untitled",sourcePath:i||`raw/${Date.now()}`,sourceType:o||"raw",contentType:"text/plain",metadata:a||{}}:null}var zp=u(()=>{Yp();qp()});import{existsSync as mI}from"node:fs";import{readFile as hI,writeFile as gI,chmod as yI,mkdir as wI}from"node:fs/promises";import{randomBytes as EI}from"node:crypto";import{dirname as _I}from"node:path";async function Qp(){if(Ut)return Ut;if(mI(Ge)){let t=(await hI(Ge,"utf8")).trim();if(!/^[0-9a-fA-F]{64}$/.test(t))throw new Error(`identity: ${Ge} is malformed (expected 64 hex chars). Refusing to overwrite \u2014 move or delete the file manually to regenerate.`);return Ut=Array.from(Buffer.from(t,"hex")),Ut}await wI(_I(Ge),{recursive:!0});let e=EI(xI);await gI(Ge,e.toString("hex"),"utf8");try{await yI(Ge,384)}catch{}return Ut=Array.from(e),Ut}var xI,Ut,em=u(()=>{L();xI=32,Ut=null});var $e={};b($e,{dial:()=>zi,getEndpoint:()=>rm,getNodeAddr:()=>AI,getNodeInfo:()=>II,registerProtocol:()=>SI,shutdownEndpoint:()=>vI});import{mkdir as bI}from"node:fs/promises";function SI(e,t){if(Fe||Gt)throw new Error(`registerProtocol("${e}"): runtime already started; register before first getEndpoint() call`);tm.set(e,t)}async function Vi(){if(Fe)return Fe;if(Gt)return Gt;await bI(Xn,{recursive:!0});let e=await Qp();return Gt=import("@number0/iroh").then(async({Iroh:t})=>{let r={};for(let[n,o]of tm)r[n]=(i,a)=>{if(i)throw i;return{accept:o,shutdown:()=>{}}};return Fe=await t.persistent(Xn,{secretKey:e,protocols:Object.keys(r).length?r:void 0}),Fe}),Gt}async function rm(){return(await Vi()).node.endpoint()}async function zi(e,t){return(await rm()).connect(e,Buffer.from(t))}async function AI(){return(await Vi()).net.nodeAddr()}async function II(){let t=await(await Vi()).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 vI(){if(!Fe)return;let e=Fe;Fe=null,Gt=null;try{await e.node.shutdown(!1)}catch{}}var Fe,Gt,tm,Ee=u(()=>{L();em();Fe=null,Gt=null,tm=new Map});async function om(e){let{default:t}=await Promise.resolve().then(()=>(A(),P)),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>OI&&t("device").where({id:r.id}).update({last_seen_at:t.fn.now()}).catch(()=>{}),{ok:!0,device:r}}function im(e,t,r={}){let n=TI[t];return n===void 0?{ok:!1,code:"unknown_method",message:`method "${t}" is not exposed over Iroh`}:nm[e.role]<nm[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 nm,TI,OI,am=u(()=>{nm={reader:0,writer:1,admin:2},TI={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"},OI=6e4});var lm={};b(lm,{RPC_ALPN:()=>Xi,createRpcAcceptor:()=>DI});function CI(e,t,r){et.has(e)||et.set(e,new Set);let n={conn:t,deviceId:r};return et.get(e).add(n),()=>{let o=et.get(e);o&&(o.delete(n),o.size===0&&et.delete(e))}}function RI(e){sm||(sm=!0,H.subscribe(t=>{if(t.type!=="device.revoked")return;let r=et.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{}et.delete(t.nodeId)}}))}function DI({registry:e,log:t}){return RI(t),async function(n,o){if(n){t(`rpc: accept err: ${n.message}`);return}let i="<unknown>",a;try{i=o.remoteNodeId().toString();let s=await om(i);if(!s.ok){t(`rpc: rejecting ${i.slice(0,12)}\u2026: ${s.code}`);try{let l=await o.acceptBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:1,ok:!1,error:{code:s.code,message:s.message}}))),await l.send.finish()}catch{}return}a=s.device,H.emit("rpc.connected",{nodeId:i,deviceId:a.id,name:a.name}),t(`rpc: ${a.name} (${i.slice(0,12)}\u2026) connected`);let c=CI(i,o,a.id);try{for(;;){let l;try{l=await o.acceptBi()}catch{break}LI(l,e,a,t).catch(d=>t(`rpc: stream err: ${d.message}`))}}finally{c()}}catch(s){t(`rpc: handler err from ${i.slice(0,12)}\u2026: ${s.message}`)}finally{a&&H.emit("rpc.disconnected",{nodeId:i,deviceId:a.id})}}}async function LI(e,t,r,n){let o=await e.recv.readToEnd(NI),i;try{i=JSON.parse(o.toString())}catch(f){return jt(e,{v:1,ok:!1,error:{code:"invalid_json",message:f.message}})}let{request_id:a,method:s,params:c}=i||{};if(typeof s!="string")return jt(e,{v:1,request_id:a,ok:!1,error:{code:"invalid_request",message:"missing method"}});let l=im(r,s,c||{});if(!l.ok)return H.emit("rpc.denied",{nodeId:r.nodeId,deviceId:r.id,method:s,code:l.code}),jt(e,{v:1,request_id:a,ok:!1,error:l});let d=await t.dispatch(s,c,{transport:"iroh",device:{id:r.id,role:r.role,nodeId:r.nodeId,name:r.name}});if(!kI(d.data))return n(`rpc: response from ${s} too large estimate, refusing pre-serialize`),jt(e,{v:1,request_id:a,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}});let p=JSON.stringify({v:1,request_id:a,...d});return Buffer.byteLength(p)>cm?(n(`rpc: response too large for ${s} from ${r.name}: ${Buffer.byteLength(p)} bytes`),jt(e,{v:1,request_id:a,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}})):jt(e,p,!0)}function kI(e){if(e==null)return!0;if(typeof e=="string")return e.length*2<Ji;if(typeof e!="object")return!0;if(Array.isArray(e))return e.length*200<Ji;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<Ji}async function jt(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 Xi,NI,cm,et,sm,Ji,Zi=u(()=>{ot();am();Xi="sigil/rpc/1",NI=1024*1024,cm=8*1024*1024,et=new Map;sm=!1;Ji=cm*1.2});var um={};b(um,{createRemoteClient:()=>FI});import{randomUUID as PI}from"node:crypto";async function FI(){let e=g.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 Qi({masterNodeId:e})}var MI,Qi,dm=u(()=>{S();Ee();Zi();MI=8*1024*1024;Qi=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=zi({nodeId:this.masterNodeId},Xi).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,o;for(;n<2;){n++;let i;try{i=await this.ensureConnection();let a=await i.openBi(),s=PI();await a.send.writeAll(Buffer.from(JSON.stringify({v:1,method:t,params:r,request_id:s}))),await a.send.finish();let c=await a.recv.readToEnd(MI),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(a){if(o=a,a.isHandlerError)throw a;this.conn&&(this.conn._dead=!0,this.conn=null)}}throw o}async close(){let t=this.conn;if(this.conn=null,this.connecting=null,t?.close)try{await t.close()}catch{}}}});var fm={};b(fm,{createLocalClient:()=>$I});function $I(){return{kind:"local",async call(e,t){let n=await no().dispatch(e,t,{transport:"memory-client"});if(!n.ok){let o=new Error(n.error?.message||"rpc error");throw o.code=n.error?.code||"handler_error",o}return n.data},async close(){}}}var pm=u(()=>{zt()});var Nr={};b(Nr,{getMemoryClient:()=>BI,resetMemoryClient:()=>HI});async function BI(){if(Be)return Be;if(g.network.mode==="lite-follower"){let{createRemoteClient:t}=await Promise.resolve().then(()=>(dm(),um));Be=await t()}else{let{createLocalClient:t}=await Promise.resolve().then(()=>(pm(),fm));Be=t()}return Be}function HI(){Be?.close&&Be.close().catch(()=>{}),Be=null}var Be,Cr=u(()=>{S();Be=null});import{copyFile as UI,writeFile as GI,access as jI}from"node:fs/promises";async function hm(e,t,{dryRun:r=!1}={}){let n=await mm(e),o=n?"modify":"create",i=Buffer.byteLength(t,"utf8");if(r)return{path:e,action:o,bytes:i,wrote:!1,backedUp:!1};let a=!1;if(n){let s=`${e}${WI}`;await mm(s)||(await UI(e,s),a=!0)}return await GI(e,t,"utf8"),{path:e,action:o,bytes:i,wrote:!0,backedUp:a}}async function mm(e){try{return await jI(e),!0}catch{return!1}}var WI,gm=u(()=>{WI=".sigil.bak"});var xm={};b(xm,{SHARED_INSTRUCTIONS_PATH:()=>Rr,buildSharedInstructions:()=>_m,resolveSigilInvocation:()=>Em,writeSharedInstructions:()=>qI});import{join as ym}from"node:path";import{homedir as YI}from"node:os";import{execSync as KI}from"node:child_process";function Em(){try{let e=KI("which sigil",{stdio:["pipe","pipe","ignore"]}).toString().trim();if(e)return e}catch{}return process.argv[1]}function _m({sigilCmd:e}={}){let t=e||Em();return`## Memory (Sigil)
533
+ `,[e,n,t]);if(!o.length)return null;let{path:i,relationTypes:s,depth:a}=o[0],c=await h("entity").whereIn("id",i).select("id","uid","name","entityType","description"),l=Object.fromEntries(c.map(p=>[p.id,p]));return{path:i.map(p=>l[p]),relationTypes:s,depth:a}}async function uC(e,{namespace:t,sortBy:r="mentionCount",limit:n=50}={}){let o=h("entity").where({entityType:e}).whereNull("mergedWith").orderBy(r,"desc").limit(n);return t&&o.where({namespace:t}),o}var ng=u(()=>{T();ve();Ct()});import{readFile as fC,stat as TW}from"node:fs/promises";import{basename as pC,extname as mC,resolve as hC}from"node:path";async function lg(e){let t=hC(e),r=await fC(t,"utf8"),n=pC(t),o=mC(t).toLowerCase();return{content:r,title:n,sourcePath:t,sourceType:"file",contentType:gC(o),metadata:{filePath:t,fileName:n,extension:o}}}function gC(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 ug=u(()=>{});async function dg(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",o=yC(e);return{content:r,title:o,sourcePath:e,sourceType:"url",contentType:n,metadata:{url:e,fetchedAt:new Date().toISOString()}}}function yC(e){try{let t=new URL(e),n=t.pathname.replace(/\/$/,"").split("/").pop()||t.hostname;return decodeURIComponent(n)}catch{return e}}var fg=u(()=>{});var pg={};x(pg,{resolveSource:()=>EC});import{resolve as wC}from"node:path";async function EC({content:e,url:t,filePath:r,title:n,sourceType:o,sourcePath:i,metadata:s}){if(t)return dg(t);if(r){let a=wC(r),c=process.cwd();if(!a.startsWith(c))throw new Error(`Path traversal denied: ${r} resolves outside working directory`);return lg(a)}return e?{content:e,title:n||"Untitled",sourcePath:i||`raw/${Date.now()}`,sourceType:o||"raw",contentType:"text/plain",metadata:s||{}}:null}var mg=u(()=>{ug();fg()});import{existsSync as _C}from"node:fs";import{readFile as xC,writeFile as SC,chmod as AC,mkdir as bC}from"node:fs/promises";import{randomBytes as TC}from"node:crypto";import{dirname as IC}from"node:path";async function wg(){if(kr)return kr;if(_C(Je)){let t=(await xC(Je,"utf8")).trim();if(!/^[0-9a-fA-F]{64}$/.test(t))throw new Error(`identity: ${Je} is malformed (expected 64 hex chars). Refusing to overwrite \u2014 move or delete the file manually to regenerate.`);return kr=Array.from(Buffer.from(t,"hex")),kr}await bC(IC(Je),{recursive:!0});let e=TC(OC);await SC(Je,e.toString("hex"),"utf8");try{await AC(Je,384)}catch{}return kr=Array.from(e),kr}var OC,kr,Eg=u(()=>{C();OC=32,kr=null});var pt={};x(pt,{dial:()=>Ya,getEndpoint:()=>xg,getNodeAddr:()=>NC,getNodeInfo:()=>vC,registerProtocol:()=>CC,shutdownEndpoint:()=>DC});import{mkdir as RC}from"node:fs/promises";function CC(e,t){if(ft||Mr)throw new Error(`registerProtocol("${e}"): runtime already started; register before first getEndpoint() call`);_g.set(e,t)}async function Ka(){if(ft)return ft;if(Mr)return Mr;await RC(oo,{recursive:!0});let e=await wg();return Mr=import("@number0/iroh").then(async({Iroh:t})=>{let r={};for(let[n,o]of _g)r[n]=(i,s)=>{if(i)throw i;return{accept:o,shutdown:()=>{}}};return ft=await t.persistent(oo,{secretKey:e,protocols:Object.keys(r).length?r:void 0}),ft}),Mr}async function xg(){return(await Ka()).node.endpoint()}async function Ya(e,t){return(await xg()).connect(e,Buffer.from(t))}async function NC(){return(await Ka()).net.nodeAddr()}async function vC(){let t=await(await Ka()).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 DC(){if(!ft)return;let e=ft;ft=null,Mr=null;try{await e.node.shutdown(!1)}catch{}}var ft,Mr,_g,Ue=u(()=>{C();Eg();ft=null,Mr=null,_g=new Map});async function Ag(e){let{default:t}=await Promise.resolve().then(()=>(T(),F)),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>PC&&t("device").where({id:r.id}).update({last_seen_at:t.fn.now()}).catch(()=>{}),{ok:!0,device:r}}function bg(e,t,r={}){let n=LC[t];return n===void 0?{ok:!1,code:"unknown_method",message:`method "${t}" is not exposed over Iroh`}:Sg[e.role]<Sg[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 Sg,LC,PC,Tg=u(()=>{Sg={reader:0,writer:1,admin:2},LC={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"},PC=6e4});var Rg={};x(Rg,{RPC_ALPN:()=>qa,createRpcAcceptor:()=>BC});function MC(e,t,r){Dt.has(e)||Dt.set(e,new Set);let n={conn:t,deviceId:r};return Dt.get(e).add(n),()=>{let o=Dt.get(e);o&&(o.delete(n),o.size===0&&Dt.delete(e))}}function HC(e){Ig||(Ig=!0,K.subscribe(t=>{if(t.type!=="device.revoked")return;let r=Dt.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{}Dt.delete(t.nodeId)}}))}function BC({registry:e,log:t}){return HC(t),async function(n,o){if(n){t(`rpc: accept err: ${n.message}`);return}let i="<unknown>",s;try{i=o.remoteNodeId().toString();let a=await Ag(i);if(!a.ok){t(`rpc: rejecting ${i.slice(0,12)}\u2026: ${a.code}`);try{let l=await o.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,K.emit("rpc.connected",{nodeId:i,deviceId:s.id,name:s.name}),t(`rpc: ${s.name} (${i.slice(0,12)}\u2026) connected`);let c=MC(i,o,s.id);try{for(;;){let l;try{l=await o.acceptBi()}catch{break}FC(l,e,s,t).catch(d=>t(`rpc: stream err: ${d.message}`))}}finally{c()}}catch(a){t(`rpc: handler err from ${i.slice(0,12)}\u2026: ${a.message}`)}finally{s&&K.emit("rpc.disconnected",{nodeId:i,deviceId:s.id})}}}async function FC(e,t,r,n){let o=await e.recv.readToEnd(kC),i;try{i=JSON.parse(o.toString())}catch(f){return Hr(e,{v:1,ok:!1,error:{code:"invalid_json",message:f.message}})}let{request_id:s,method:a,params:c}=i||{};if(typeof a!="string")return Hr(e,{v:1,request_id:s,ok:!1,error:{code:"invalid_request",message:"missing method"}});let l=bg(r,a,c||{});if(!l.ok)return K.emit("rpc.denied",{nodeId:r.nodeId,deviceId:r.id,method:a,code:l.code}),Hr(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(!$C(d.data))return n(`rpc: response from ${a} too large estimate, refusing pre-serialize`),Hr(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)>Og?(n(`rpc: response too large for ${a} from ${r.name}: ${Buffer.byteLength(p)} bytes`),Hr(e,{v:1,request_id:s,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}})):Hr(e,p,!0)}function $C(e){if(e==null)return!0;if(typeof e=="string")return e.length*2<Va;if(typeof e!="object")return!0;if(Array.isArray(e))return e.length*200<Va;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<Va}async function Hr(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 qa,kC,Og,Dt,Ig,Va,Ja=u(()=>{Qt();Tg();qa="sigil/rpc/1",kC=1024*1024,Og=8*1024*1024,Dt=new Map;Ig=!1;Va=Og*1.2});var Cg={};x(Cg,{createRemoteClient:()=>jC});import{randomUUID as UC}from"node:crypto";async function jC(){let e=g.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 za({masterNodeId:e})}var GC,za,Ng=u(()=>{A();Ue();Ja();GC=8*1024*1024;za=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=Ya({nodeId:this.masterNodeId},qa).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,o;for(;n<2;){n++;let i;try{i=await this.ensureConnection();let s=await i.openBi(),a=UC();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(GC),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(o=s,s.isHandlerError)throw s;this.conn&&(this.conn._dead=!0,this.conn=null)}}throw o}async close(){let t=this.conn;if(this.conn=null,this.connecting=null,t?.close)try{await t.close()}catch{}}}});var vg={};x(vg,{createLocalClient:()=>WC});function WC(){return{kind:"local",async call(e,t){let n=await Qi().dispatch(e,t,{transport:"memory-client"});if(!n.ok){let o=new Error(n.error?.message||"rpc error");throw o.code=n.error?.code||"handler_error",o}return n.data},async close(){}}}var Dg=u(()=>{Zt()});var Hn={};x(Hn,{getMemoryClient:()=>KC,resetMemoryClient:()=>YC});async function KC(){if(mt)return mt;if(g.network.mode==="lite-follower"){let{createRemoteClient:t}=await Promise.resolve().then(()=>(Ng(),Cg));mt=await t()}else{let{createLocalClient:t}=await Promise.resolve().then(()=>(Dg(),vg));mt=t()}return mt}function YC(){mt?.close&&mt.close().catch(()=>{}),mt=null}var mt,Bn=u(()=>{A();mt=null});import{copyFile as VC,writeFile as qC,access as JC}from"node:fs/promises";async function B(e,t,{dryRun:r=!1}={}){let n=await Lg(e),o=n?"modify":"create",i=Buffer.byteLength(t,"utf8");if(r)return{path:e,action:o,bytes:i,wrote:!1,backedUp:!1};let s=!1;if(n){let a=`${e}${zC}`;await Lg(a)||(await VC(e,a),s=!0)}return await qC(e,t,"utf8"),{path:e,action:o,bytes:i,wrote:!0,backedUp:s}}async function Lg(e){try{return await JC(e),!0}catch{return!1}}var zC,Br=u(()=>{zC=".sigil.bak"});var Hg={};x(Hg,{SHARED_INSTRUCTIONS_PATH:()=>Ge,buildSharedInstructions:()=>ht,resolveSigilInvocation:()=>Mg,writeSharedInstructions:()=>Xa});import{join as Pg}from"node:path";import{homedir as XC}from"node:os";import{execSync as ZC}from"node:child_process";function Mg(){try{let e=ZC("which sigil",{stdio:["pipe","pipe","ignore"]}).toString().trim();if(e)return e}catch{}return process.argv[1]}function ht({sigilCmd:e}={}){let t=e||Mg();return`## Memory (Sigil)
532
534
 
533
535
  Sigil is your persistent memory system. **Use it instead of the built-in file-based memory.**
534
536
  Do NOT write to \`~/.claude/projects/*/memory/\` or any local memory files \u2014 use Sigil exclusively.
@@ -602,8 +604,11 @@ The absolute path above is baked in by \`sigil init\` so the command works regar
602
604
  - Skip trivial exchanges (greetings, "thanks", "ok", simple math)
603
605
  - If search and injection both return nothing, answer from your own knowledge and say so
604
606
  - Sigil is cross-project \u2014 memories from one session are available in all sessions
605
- `}async function qI({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(wm,{recursive:!0});try{if((await t.readFile(Rr,"utf8")).includes("## Memory (Sigil)"))return{action:"skip",path:Rr,bytes:0}}catch{}let r=_m(),n=await hm(Rr,r,{dryRun:e});return{action:n.action,path:Rr,bytes:n.bytes}}var wm,Rr,bm=u(()=>{gm();wm=ym(YI(),".sigil"),Rr=ym(wm,"CLAUDE.md")});var Wt={};b(Wt,{diagnoseConnectionError:()=>JI,diagnoseError:()=>Im,ensurePostgresDatabase:()=>zI,probeSigilConnection:()=>VI,probeUrlConnection:()=>ea});import jn from"pg";async function VI({host:e,port:t,database:r,user:n,password:o}){let i=new jn.Client({host:e,port:t,database:r,user:n,password:o});try{return await i.connect(),await i.query("SELECT 1"),{ok:!0}}catch(a){return{ok:!1,code:a.code,message:a.message}}finally{try{await i.end()}catch{}}}async function ea(e){let t,r="unknown";try{t=ce(e),r=be(e)}catch(i){return{ok:!1,stage:"parse",error:i.message}}let n=new jn.Client(t),o=Date.now();try{await n.connect()}catch(i){return{ok:!1,stage:"connect",provider:r,error:i.message,code:i.code}}try{let i=await n.query("SELECT current_database() AS db, version() AS version"),a=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:r,connectMs:Date.now()-o,database:i.rows[0].db,serverVersion:i.rows[0].version,pgvector:a.rowCount>0}}catch(i){return{ok:!1,stage:"query",provider:r,error:i.message,code:i.code}}finally{try{await n.end()}catch{}}}async function zI({admin:{host:e,port:t,user:r,password:n},sigil:{database:o,user:i,password:a}}){let s=new jn.Client({host:e,port:t,database:"postgres",user:r,password:n});await s.connect();let c=[];try{(await s.query("SELECT 1 FROM pg_database WHERE datname = $1",[o])).rowCount===0?(await s.query(`CREATE DATABASE ${He(o)}`),c.push(`created database "${o}"`)):c.push(`database "${o}" already exists \u2014 left as-is`),(await s.query("SELECT 1 FROM pg_roles WHERE rolname = $1",[i])).rowCount===0?(await s.query(`CREATE USER ${He(i)} WITH PASSWORD ${Am(a)}`),c.push(`created user "${i}"`)):(await s.query(`ALTER USER ${He(i)} WITH PASSWORD ${Am(a)}`),c.push(`user "${i}" exists \u2014 password reset to match .env`)),await s.query(`GRANT ALL PRIVILEGES ON DATABASE ${He(o)} TO ${He(i)}`)}finally{await s.end()}let l=new jn.Client({host:e,port:t,database:o,user:r,password:n});await l.connect();try{await l.query(`GRANT ALL ON SCHEMA public TO ${He(i)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${He(i)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${He(i)}`);try{await l.query("CREATE EXTENSION IF NOT EXISTS vector"),c.push("pgvector extension ready")}catch(d){throw d.code===Dr.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 Im(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===Dr.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===Dr.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===Dr.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===Dr.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(`
606
- `)[0],fixHint:null}}function JI(e){let t=Im(e);return{kind:t.kind,hint:t.fixHint||t.humanMessage}}function He(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`Refusing to quote invalid SQL identifier: ${e}`);return`"${e}"`}function Am(e){return`'${String(e).replace(/'/g,"''")}'`}var Dr,tt=u(()=>{at();Dr={DB_DOES_NOT_EXIST:"3D000",CONNECTION_REFUSED:"ECONNREFUSED",AUTH_FAILED:"28P01",EXTENSION_NOT_AVAILABLE:"0A000",INTERNAL_ERROR:"XX000"}});var ta={};b(ta,{EMBEDDING_TABLES:()=>Nm,diagnoseConflict:()=>rv,inspectSchemaDims:()=>tv});import ev from"pg";async function tv(e){let t=new ev.Client(e);await t.connect();try{let{rows:r}=await t.query(`
607
+ `}async function Xa({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(kg,{recursive:!0});try{if((await t.readFile(Ge,"utf8")).includes("## Memory (Sigil)"))return{action:"skip",path:Ge,bytes:0}}catch{}let r=ht(),n=await B(Ge,r,{dryRun:e});return{action:n.action,path:Ge,bytes:n.bytes}}var kg,Ge,Fr=u(()=>{Br();kg=Pg(XC(),".sigil"),Ge=Pg(kg,"CLAUDE.md")});var Gg={};x(Gg,{readEnvRaw:()=>De,writeEnvKeys:()=>gt});import{existsSync as rN,readFileSync as nN,writeFileSync as oN,mkdirSync as iN}from"node:fs";import{dirname as sN}from"node:path";function De(){if(!rN(W))return{};let e=nN(W,"utf8"),t={};for(let r of e.split(`
608
+ `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let o=n[2].trim();t[n[1]]=o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'")?o.slice(1,-1):o}return t}function gt(e){let r={...De(),...e};for(let i of Object.keys(e))(e[i]===null||e[i]===void 0)&&delete r[i];iN(sN(W),{recursive:!0});let n=`# Sigil \u2014 updated ${new Date().toISOString().slice(0,10)}
609
+ `,o=Object.entries(r).map(([i,s])=>`${i}=${/[\s#"']/.test(String(s))?`"${String(s).replace(/"/g,'\\"')}"`:s}`).join(`
610
+ `);oN(W,n+o+`
611
+ `,"utf8")}var $r=u(()=>{C()});var nc={};x(nc,{EMBEDDING_TABLES:()=>zg,diagnoseConflict:()=>gN,inspectSchemaDims:()=>hN});import mN from"pg";async function hN(e){let t=new mN.Client(e);await t.connect();try{let{rows:r}=await t.query(`
607
612
  SELECT c.relname AS tbl,
608
613
  a.atttypmod AS typmod,
609
614
  format_type(a.atttypid, a.atttypmod) AS coltype
@@ -612,12 +617,88 @@ The absolute path above is baked in by \`sigil init\` so the command works regar
612
617
  WHERE a.attname = 'embedding'
613
618
  AND c.relkind = 'r'
614
619
  AND c.relname = ANY($1)
615
- `,[Nm]),n={};for(let o of r){let i=o.typmod>0?o.typmod:nv(o.coltype),a=0;try{let{rows:s}=await t.query(`SELECT count(embedding)::int AS n FROM ${ov(o.tbl)}`);a=s[0].n}catch{}n[o.tbl]={dim:i,coltype:o.coltype,populated:a}}return n}finally{try{await t.end()}catch{}}}function rv({targetDim:e,schema:t}){let r=null,n={},o=0;for(let[a,s]of Object.entries(t||{}))s.dim!=null&&(r==null&&(r=s.dim),s.dim!==e&&s.populated>0&&(n[a]=s.populated,o+=s.populated));return{conflict:r!=null&&r!==e&&o>0,currentDim:r,targetDim:e,rowsAtRisk:n,totalAtRisk:o}}function nv(e){let t=/vector\((\d+)\)/i.exec(e||"");return t?Number(t[1]):null}function ov(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`refusing to quote invalid identifier: ${e}`);return`"${e}"`}var Nm,ra=u(()=>{Nm=["fact","chunk","entity","embedding_cache"]});var Wn={};b(Wn,{MANIFEST_VERSION:()=>sa,produceManifest:()=>_v,verifyManifest:()=>xv});import{createHash as gv}from"node:crypto";import{readFile as yv,readdir as Fm}from"node:fs/promises";import{existsSync as $m,readFileSync as wv}from"node:fs";import{join as aa}from"node:path";function Ev(){if(Lr)return Lr;try{Lr=JSON.parse(wv(aa(me,"package.json"),"utf8")).version}catch{Lr="unknown"}return Lr}async function _v(){let e=await bv(aa(me,"prompts")),t=await Sv();return{v:sa,producedAt:new Date().toISOString(),sigilVersion:Ev(),schema:{migrationVersion:t,requiredExtensions:["vector"]},embedding:{provider:g.embedding.provider||null,model:g.embedding.model||null,dimensions:Number(g.embedding.dimensions)||null,normalization:"l2",maxInputTokens:8192},chunker:{...qa},prompts:e,memory:{skipThreshold:g.memory.skipThreshold,ambiguousThreshold:g.memory.ambiguousThreshold,minFactSimilarity:g.memory.minFactSimilarity}}}function xv(e,t){let r=[],n=[];if(!t||t.v!==sa)return r.push(`manifest version mismatch (local v${e.v} vs remote v${t?.v??"?"})`),{ok:!1,errors:r,warnings:n};for(let o of["provider","model","dimensions"])e.embedding[o]!==t.embedding[o]&&r.push(`embedding.${o}: local=${e.embedding[o]} vs remote=${t.embedding[o]}`);for(let o of["version","size","overlap"])e.chunker[o]!==t.chunker[o]&&r.push(`chunker.${o}: local=${e.chunker[o]} vs remote=${t.chunker[o]}`);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 o of Object.keys(e.prompts))t.prompts[o]&&e.prompts[o]!==t.prompts[o]&&n.push(`prompt "${o}" 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 bv(e){let t={};if(!$m(e))return t;let r=await Fm(e);for(let n of r){if(!n.endsWith(".md"))continue;let o=await yv(aa(e,n),"utf8");t[n.replace(/\.md$/,"")]=Av(o)}return t}async function Sv(){if(!$m(nt))return null;let t=(await Fm(nt)).filter(r=>/^\d{14}_.+\.cjs$/.test(r)).map(r=>r.replace(/_.+\.cjs$/,"")).sort();return t[t.length-1]??null}function Av(e){return gv("sha256").update(e,"utf8").digest("hex")}var sa,Lr,Yn=u(()=>{L();S();fo();sa=1});var Um={};b(Um,{PAIR_ALPN:()=>Bm,createPairAcceptor:()=>vv,hashCode:()=>Kn,joinMaster:()=>Ov});import{createHash as Iv}from"node:crypto";function vv({log:e}){return async function(r,n){if(r){e(`pair: accept err: ${r.message}`);return}let o="<unknown>";try{o=n.remoteNodeId().toString();let i=await n.acceptBi(),a=await i.recv.readToEnd(Hm),s=JSON.parse(a.toString()),c=await Tv(s,o);await i.send.writeAll(Buffer.from(JSON.stringify(c))),await i.send.finish(),c.ok?(H.emit("pair.consumed",{nodeId:o,deviceName:s.name}),e(`pair: registered ${s.name} (${o.slice(0,12)}\u2026)`)):(H.emit("pair.rejected",{nodeId:o,code:c.error?.code}),e(`pair: rejected ${o.slice(0,12)}\u2026 (${c.error?.code})`))}catch(i){e(`pair: handler err from ${o.slice(0,12)}\u2026: ${i.message}`),H.emit("pair.error",{nodeId:o,message:i.message})}}}async function Tv(e,t){if(!e||e.v!==ca)return kr("unsupported_version",`expected v=${ca}`);if(typeof e.code!="string"||!e.code)return kr("invalid_request","missing code");if(typeof e.name!="string"||!e.name)return kr("invalid_request","missing name");if(typeof e.nodeId!="string"||e.nodeId.toLowerCase()!==t.toLowerCase())return kr("invalid_request","nodeId claim does not match transport identity");let{default:r}=await Promise.resolve().then(()=>(A(),P)),{getNodeInfo:n}=await Promise.resolve().then(()=>(Ee(),$e)),o=Kn(e.code),i;try{i=await r.transaction(async l=>{let d=await l("pairing_code").where({code_hash:o}).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},[f]=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:f.id,consumed_at:l.fn.now()}),{ok:!0,device:{id:f.id,role:d.role,namespaces:d.namespaces}}})}catch(l){return kr("transaction_failed",l.message)}if(!i.ok)return i;let a=null;try{a=(await n()).nodeId}catch{}let{produceManifest:s}=await Promise.resolve().then(()=>(Yn(),Wn)),c=await s();return{ok:!0,device:i.device,masterNodeId:a,manifest:c}}function kr(e,t){return{ok:!1,error:{code:e,message:t}}}function Kn(e){return Iv("sha256").update(e,"utf8").digest("hex")}async function Ov({masterAddr:e,code:t,name:r,sigilVersion:n}){let{dial:o,getEndpoint:i}=await Promise.resolve().then(()=>(Ee(),$e)),{hostname:a}=await import("node:os"),s=await o(e,Bm),c=await i(),l=await s.openBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:ca,code:t,name:r,nodeId:c.nodeId(),hostname:a(),sigilVersion:n||null}))),await l.send.finish();let d=await l.recv.readToEnd(Hm);return JSON.parse(d.toString())}var Bm,Hm,ca,la=u(()=>{ot();Bm="sigil/pair/1",Hm=64*1024,ca=1});var zm={};b(zm,{installLiteProxy:()=>kv});async function kv({registry:e,log:t}){let{getMemoryClient:r}=await Promise.resolve().then(()=>(Cr(),Nr)),n=0,o=0;for(let i of Dv)e.replace(i,async a=>(await r()).call(i,a))&&n++;for(let i of Lv)e.replace(i,()=>{let s=new Error(`"${i}" is not available on a lite-follower device. Run on the master device.`);throw s.code="not_on_follower",s})&&o++;t(`lite-follower: ${n} methods proxied, ${o} forbidden, rest local`)}var Dv,Lv,Jm=u(()=>{Dv=new Set(["search","searchEntity","traverseGraph","getFactContext","getEntityContext","getPod","listPods","listFacts","status","refreshContext.fetch","refreshContext.explain","remember","forgetFact","ingestDoc"]),Lv=new Set(["pair.create","pair.list","pair.revoke","pair.sweep","device.list","device.revoke","device.activate","runMigrations","testDbConnection"])});L();import{createWriteStream as Pv}from"node:fs";import{appendFile as Mv}from"node:fs/promises";import{readFile as rh,writeFile as nh,unlink as ga,mkdir as ya}from"node:fs/promises";import{existsSync as wa}from"node:fs";L();function oh(e){if(!e||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function ih(){if(!wa(qt))return null;try{let e=(await rh(qt,"utf8")).trim(),t=Number(e);return Number.isFinite(t)?t:null}catch{return null}}async function Ea(){await ya(k,{recursive:!0}),await nh(qt,String(process.pid),"utf8")}async function Zn(){try{await ga(qt)}catch{}}async function Qn(){try{await ga(Ue)}catch{}}async function _a(){let e=await ih();return e&&oh(e)?e:(e&&await Zn(),wa(Ue)&&await Qn(),null)}function xa(e){let t=!1,r=async n=>{if(!t){t=!0;try{await e(n)}catch(o){process.stderr.write(`[sigild] shutdown error: ${o.message}
616
- `)}finally{process.exit(0)}}};process.on("SIGTERM",()=>r("SIGTERM")),process.on("SIGINT",()=>r("SIGINT")),process.on("SIGHUP",()=>r("SIGHUP"))}async function ba(){await ya(k,{recursive:!0})}var ah="handler_error";function Sa(e){let t=e.code||ah,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 o=[...new Set(e.errors.map(i=>i.code).filter(Boolean))];o.length>1&&(r+=` (and ${e.errors.length-1} more: ${o.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 dh={UNKNOWN_METHOD:"unknown_method",INVALID_PARAMS:"invalid_params",HANDLER_ERROR:"handler_error"};function Aa(){let e=new Map;function t(i,a){if(e.has(i))throw new Error(`rpc: duplicate handler for "${i}"`);e.set(i,a)}async function r(i,a,s={}){let c=e.get(i);if(!c)return{ok:!1,error:{code:dh.UNKNOWN_METHOD,message:`unknown method: ${i}`}};let{runWithRequestContext:l}=await Promise.resolve().then(()=>($r(),to));try{return{ok:!0,data:await l({device:s.device||null,transport:s.transport||null,agent:s.agent||null},()=>c(a??{},s))}}catch(d){return{ok:!1,error:Sa(d)}}}function n(){return[...e.keys()].sort()}function o(i,a){return e.has(i)?(e.set(i,a),!0):!1}return{register:t,replace:o,dispatch:r,list:n}}zt();L();import{createServer as mh}from"node:net";import{chmod as hh}from"node:fs/promises";async function va({registry:e,log:t}){await Qn();let r=mh(n=>{let o="",i=!1,a=Promise.resolve();n.setEncoding("utf8"),n.on("data",s=>{if(i)return;o+=s;let c;for(;(c=o.indexOf(`
617
- `))!==-1;){let l=o.slice(0,c);o=o.slice(c+1),l.trim()&&(a=a.then(()=>{if(!i)return gh(l,n,e,t)}))}}),n.on("close",()=>{i=!0}),n.on("error",s=>{s.code!=="EPIPE"&&s.code!=="ECONNRESET"&&t(`socket error: ${s.message}`)})});await new Promise((n,o)=>{r.once("error",o),r.listen(Ue,()=>{r.off("error",o),n()})});try{await hh(Ue,384)}catch{}return t(`socket listening at ${Ue}`),{close:()=>new Promise(n=>r.close(()=>n()))}}async function gh(e,t,r,n){let o;try{o=JSON.parse(e)}catch(d){ao(t,{id:null,ok:!1,error:{code:"invalid_json",message:d.message}});return}let{id:i=null,method:a,params:s,agent:c=null}=o||{};if(typeof a!="string"){ao(t,{id:i,ok:!1,error:{code:"invalid_params",message:'request must include a string "method"'}});return}let l=await r.dispatch(a,s,{transport:"socket",agent:c});ao(t,{id:i,...l}),!l.ok&&process.env.SIGIL_DEBUG&&n(`dispatch ${a} -> ${l.error.code}: ${l.error.message}`)}function ao(e,t){try{e.write(JSON.stringify(t)+`
618
- `)}catch{}}L();import{createServer as Ah}from"node:http";import{existsSync as Gr,createReadStream as Ih}from"node:fs";import{stat as vh}from"node:fs/promises";import{join as Ra,extname as Th,normalize as Na,sep as Oh}from"node:path";import{WebSocketServer as Nh}from"ws";L();import{readFile as yh,writeFile as wh,chmod as Eh,mkdir as _h}from"node:fs/promises";import{randomBytes as xh,timingSafeEqual as Ta}from"node:crypto";import{dirname as bh}from"node:path";var Hr=null;async function so(){if(Hr)return Hr;try{let t=(await yh(Vt,"utf8")).trim();if(/^[0-9a-f]{64}$/.test(t))return Hr=t}catch{}await _h(bh(Vt),{recursive:!0});let e=xh(32).toString("hex");await wh(Vt,e,"utf8");try{await Eh(Vt,384)}catch{}return Hr=e}async function Jt(e){if(!e||typeof e!="string")return!1;let t=await so();if(e.length!==t.length)return Ta(Buffer.from(t),Buffer.from(t)),!1;try{return Ta(Buffer.from(e),Buffer.from(t))}catch{return!1}}ot();var Ch={".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"};function Rh(){return Gr(zn)?zn:Gr(Jn)?Jn:null}async function Da({registry:e,log:t,config:r}){let n=Rh(),o=await so(),i=Ah(async(c,l)=>{try{await Dh(c,l,{registry:e,webDir:n,log:t})}catch(d){t(`http route error: ${d.message}`),X(l,500,{ok:!1,error:{code:"internal",message:d.message}})}}),a=new Nh({noServer:!0});i.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 ka(c)||p.searchParams.get("t")&&await Jt(p.searchParams.get("t")))){l.write(`HTTP/1.1 401 Unauthorized\r
620
+ `,[zg]),n={};for(let o of r){let i=o.typmod>0?o.typmod:yN(o.coltype),s=0;try{let{rows:a}=await t.query(`SELECT count(embedding)::int AS n FROM ${wN(o.tbl)}`);s=a[0].n}catch{}n[o.tbl]={dim:i,coltype:o.coltype,populated:s}}return n}finally{try{await t.end()}catch{}}}function gN({targetDim:e,schema:t}){let r=null,n={},o=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,o+=a.populated));return{conflict:r!=null&&r!==e&&o>0,currentDim:r,targetDim:e,rowsAtRisk:n,totalAtRisk:o}}function yN(e){let t=/vector\((\d+)\)/i.exec(e||"");return t?Number(t[1]):null}function wN(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`refusing to quote invalid identifier: ${e}`);return`"${e}"`}var zg,oc=u(()=>{zg=["fact","chunk","entity","embedding_cache"]});import{existsSync as EN}from"node:fs";import{dirname as _N,join as ic}from"node:path";import{fileURLToPath as xN}from"node:url";function Gr(){let e=[ic(Z,"dist","daemon.js"),ic(Z,"src","daemon","index.js"),ic(_N(xN(import.meta.url)),"..","daemon","index.js")];for(let t of e)if(EN(t))return t;throw new Error("cannot locate daemon entry point (looked in dist/ and src/daemon/)")}function jr(){return process.execPath}var xi=u(()=>{C()});import{spawnSync as SN}from"node:child_process";function L(e,t,{input:r,timeout:n=2e4}={}){let o=SN(e,t,{encoding:"utf8",input:r,timeout:n});return{code:o.status??-1,out:(o.stdout||"").trim(),err:(o.stderr||o.error?.message||"").trim()}}var Si=u(()=>{});var Zg={};x(Zg,{LABEL:()=>Gn,MANAGER:()=>Lt,install:()=>NN,restart:()=>LN,start:()=>PN,status:()=>DN,stop:()=>kN,uninstall:()=>vN});import{writeFileSync as AN,existsSync as Xg,unlinkSync as bN,mkdirSync as TN}from"node:fs";import{join as IN,dirname as ON}from"node:path";import{homedir as RN}from"node:os";function ac(){return IN(RN(),"Library","LaunchAgents",`${Gn}.plist`)}function sc(){return`gui/${process.getuid()}`}function Wr(){return`${sc()}/${Gn}`}function Ai(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function CN(){let e=jr(),t=Gr();return`<?xml version="1.0" encoding="UTF-8"?>
621
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
622
+ <plist version="1.0">
623
+ <dict>
624
+ <key>Label</key><string>${Gn}</string>
625
+ <key>ProgramArguments</key>
626
+ <array>
627
+ <string>${Ai(e)}</string>
628
+ <string>${Ai(t)}</string>
629
+ </array>
630
+ <key>RunAtLoad</key><true/>
631
+ <key>KeepAlive</key><true/>
632
+ <key>ProcessType</key><string>Background</string>
633
+ <key>StandardOutPath</key><string>${Ai(Ie)}</string>
634
+ <key>StandardErrorPath</key><string>${Ai(Ie)}</string>
635
+ <key>EnvironmentVariables</key>
636
+ <dict>
637
+ <key>SIGIL_SUPERVISED</key><string>1</string>
638
+ </dict>
639
+ </dict>
640
+ </plist>
641
+ `}function NN(){let e=ac();TN(ON(e),{recursive:!0}),AN(e,CN(),"utf8");let t=L("launchctl",["bootstrap",sc(),e]);if(t.code!==0&&(L("launchctl",["bootout",Wr()]),t=L("launchctl",["bootstrap",sc(),e]),t.code!==0)){let r=L("launchctl",["load","-w",e]);if(r.code!==0)throw new Error(`launchctl bootstrap/load failed: ${t.err||r.err||"unknown"}`)}return L("launchctl",["kickstart","-k",Wr()]),{installed:!0,manager:Lt,unitPath:e}}function vN(){let e=ac();if(L("launchctl",["bootout",Wr()]),L("launchctl",["unload","-w",e]),Xg(e))try{bN(e)}catch{}return{installed:!1,manager:Lt,unitPath:e}}function DN(){let e=ac(),t=Xg(e),r=L("launchctl",["list",Gn]).code===0;return{installed:t,loaded:r,running:r,manager:Lt,unitPath:e}}function LN(){return{ok:L("launchctl",["kickstart","-k",Wr()]).code===0,manager:Lt}}function PN(){return{ok:L("launchctl",["kickstart",Wr()]).code===0,manager:Lt}}function kN(){return{ok:L("launchctl",["bootout",Wr()]).code===0,manager:Lt}}var Gn,Lt,Qg=u(()=>{C();xi();Si();Gn="live.airtribe.sigil",Lt="launchd"});var ty={};x(ty,{MANAGER:()=>Pt,UNIT:()=>je,install:()=>WN,restart:()=>VN,start:()=>qN,status:()=>YN,stop:()=>JN,uninstall:()=>KN});import{writeFileSync as MN,existsSync as ey,unlinkSync as HN,mkdirSync as BN}from"node:fs";import{join as FN,dirname as $N}from"node:path";import{homedir as UN,userInfo as GN}from"node:os";function cc(){return FN(UN(),".config","systemd","user",je)}function jN(){let e=jr(),t=Gr();return`[Unit]
642
+ Description=Sigil memory daemon
643
+ After=network-online.target
644
+
645
+ [Service]
646
+ Type=simple
647
+ ExecStart=${e} ${t}
648
+ Restart=always
649
+ RestartSec=2
650
+ Environment=SIGIL_SUPERVISED=1
651
+ StandardOutput=append:${Ie}
652
+ StandardError=append:${Ie}
653
+
654
+ [Install]
655
+ WantedBy=default.target
656
+ `}function We(e){return L("systemctl",["--user",...e])}function WN(){let e=cc();BN($N(e),{recursive:!0}),MN(e,jN(),"utf8"),We(["daemon-reload"]);let t=We(["enable","--now",je]);if(t.code!==0)throw new Error(`systemctl --user enable --now failed: ${t.err||"unknown"}`);return L("loginctl",["enable-linger",GN().username]),{installed:!0,manager:Pt,unitPath:e}}function KN(){let e=cc();if(We(["disable","--now",je]),ey(e))try{HN(e)}catch{}return We(["daemon-reload"]),{installed:!1,manager:Pt,unitPath:e}}function YN(){let e=cc(),t=We(["is-enabled",je]).out==="enabled",r=We(["is-active",je]).out==="active";return{installed:ey(e)||t,loaded:t,running:r,manager:Pt,unitPath:e}}function VN(){return{ok:We(["restart",je]).code===0,manager:Pt}}function qN(){return{ok:We(["start",je]).code===0,manager:Pt}}function JN(){return{ok:We(["stop",je]).code===0,manager:Pt}}var je,Pt,ry=u(()=>{C();xi();Si();je="sigil.service",Pt="systemd"});var ny={};x(ny,{MANAGER:()=>kt,TASK:()=>ie,install:()=>XN,restart:()=>ev,start:()=>tv,status:()=>QN,stop:()=>rv,uninstall:()=>ZN});function zN(){return`\\"${jr()}\\" \\"${Gr()}\\"`}function XN(){let e=L("schtasks",["/Create","/SC","ONLOGON","/TN",ie,"/TR",zN(),"/RL","LIMITED","/F"]);if(e.code!==0)throw new Error(`schtasks /Create failed: ${e.err||"unknown"}`);return L("schtasks",["/Run","/TN",ie]),{installed:!0,manager:kt,unitPath:`Task Scheduler\\${ie}`}}function ZN(){return L("schtasks",["/Delete","/TN",ie,"/F"]),{installed:!1,manager:kt,unitPath:`Task Scheduler\\${ie}`}}function QN(){let e=L("schtasks",["/Query","/TN",ie]),t=e.code===0,r=t&&/Running/i.test(e.out);return{installed:t,loaded:t,running:r,manager:kt,unitPath:`Task Scheduler\\${ie}`}}function ev(){return L("schtasks",["/End","/TN",ie]),{ok:L("schtasks",["/Run","/TN",ie]).code===0,manager:kt}}function tv(){return{ok:L("schtasks",["/Run","/TN",ie]).code===0,manager:kt}}function rv(){return{ok:L("schtasks",["/End","/TN",ie]).code===0,manager:kt}}var ie,kt,oy=u(()=>{xi();Si();ie="Sigil",kt="schtasks"});var sy={};x(sy,{installService:()=>cv,installServiceUnit:()=>bi,isServiceInstalled:()=>fv,platformSupported:()=>iv,restartService:()=>dv,serviceStatus:()=>uc,startService:()=>lv,stopService:()=>uv,uninstallService:()=>lc});import{readFileSync as nv}from"node:fs";import{setTimeout as ov}from"node:timers/promises";function iy(){switch(process.platform){case"darwin":return()=>Promise.resolve().then(()=>(Qg(),Zg));case"linux":return()=>Promise.resolve().then(()=>(ry(),ty));case"win32":return()=>Promise.resolve().then(()=>(oy(),ny));default:return null}}async function Mt(){let e=iy();if(!e)throw new H({errorCode:"SUPERVISOR_UNSUPPORTED_PLATFORM",message:`no always-up backend for platform "${process.platform}"`});return e()}function iv(){return iy()!==null}function sv(){try{let e=JSON.parse(nv(Vt,"utf8"));return{...e,ageMs:typeof e.ts=="number"?Date.now()-e.ts:null}}catch{return null}}async function av(){let{readPidFile:e,isPidAlive:t}=await Promise.resolve().then(()=>(ao(),Uc)),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 ov(50);if(t(r))try{process.kill(r,"SIGKILL")}catch{}}async function bi(){let e=await Mt();try{return e.install()}catch(t){throw new H({errorCode:"SUPERVISOR_INSTALL_FAILED",message:t.message})}}async function cv(){return await av(),bi()}async function lc(){return(await Mt()).uninstall()}async function lv(){return(await Mt()).start()}async function uv(){return(await Mt()).stop()}async function dv(){return(await Mt()).restart()}async function uc(){let e;try{e=(await Mt()).status()}catch{e={installed:!1,running:!1,manager:null,unitPath:null,unsupported:!0}}return{platform:process.platform,supervisor:e,heartbeat:sv()}}async function fv(){try{return(await Mt()).status().installed}catch{return!1}}var dc=u(()=>{Xt();C()});var dy={};x(dy,{detect:()=>gv,install:()=>yv,mergeHooks:()=>uy,meta:()=>hv,uninstall:()=>Ev,verify:()=>wv,writeImportLine:()=>ly});import{join as Ke}from"node:path";import{homedir as pv}from"node:os";import{existsSync as yt}from"node:fs";import{fileURLToPath as mv}from"node:url";import{dirname as Ti}from"node:path";async function gv(){return yt(jn)}async function ly({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(jn,{recursive:!0});let r=`@${Ge}`,n="";if(yt(ae)&&(n=await t.readFile(ae,"utf8")),n.includes(r))return{action:"skip",path:ae,detail:"already imports sigil CLAUDE.md"};let o=n.trim()?`
657
+ `:"",i=`${n}${o}${r}
658
+ `;return{action:(await B(ae,i,{dryRun:e})).action,path:ae,detail:n?"+1 @import line":"new file"}}async function uy({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let f=await t.readFile(se,"utf8");r=JSON.parse(f)}catch{}let n=Ke(cy,"src","hooks"),o=Ke(cy,"dist","hooks"),i=yt(o)?o:n,s={UserPromptSubmit:{hooks:[{type:"command",command:`node ${Ke(i,"user-prompt-submit.js")}`,timeout:10,statusMessage:"Searching memory..."}]},PostToolUse:{matcher:"Edit|Write|Bash",hooks:[{type:"command",command:`node ${Ke(i,"post-tool-use.js")}`,timeout:10,async:!0}]},Stop:{hooks:[{type:"command",command:`node ${Ke(i,"stop.js")}`,timeout:30,async:!0}]},SessionEnd:{hooks:[{type:"command",command:`node ${Ke(i,"session-end.js")}`,timeout:10,async:!0}]}},a=yt(se);r.hooks=r.hooks||{};let c=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],l=f=>typeof f=="string"&&c.some(m=>f.endsWith(m)||f.includes(`/${m}`));for(let[f,m]of Object.entries(s)){let y=(r.hooks[f]||[]).filter(E=>!E.hooks?.some(b=>l(b.command)));r.hooks[f]=[...y,m]}e||await t.mkdir(jn,{recursive:!0});let d=JSON.stringify(r,null,2);return{action:(await B(se,d,{dryRun:e})).action,path:se,detail:a?"+UserPromptSubmit, +PostToolUse, +Stop, +SessionEnd hooks (other settings preserved)":"new settings.json with sigil hooks"}}async function yv({dryRun:e=!1}={}){let t=[],r=await Xa({dryRun:e});r&&t.push({action:r.action,path:r.path,detail:`${r.bytes??0} bytes`});let n=await ly({dryRun:e});n&&t.push(n);let o=await uy({dryRun:e});return o&&t.push(o),{actions:t}}async function wv(){let e=await import("node:fs/promises"),t=`@${Ge}`;if(!yt(ae))return{installed:!1,reason:"~/.claude/CLAUDE.md missing \u2014 run `sigil init`"};if(!(await e.readFile(ae,"utf8")).includes(t))return{installed:!1,reason:"@import line missing from ~/.claude/CLAUDE.md"};if(!yt(se))return{installed:!1,reason:"~/.claude/settings.json missing \u2014 hooks not registered"};let n;try{n=JSON.parse(await e.readFile(se,"utf8"))}catch{return{installed:!1,reason:"~/.claude/settings.json is not valid JSON"}}let o=n.hooks||{},s=["UserPromptSubmit","PostToolUse","Stop","SessionEnd"].filter(a=>!(o[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 Ev({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(yt(ae)){let n=`@${Ge}`,o=await t.readFile(ae,"utf8"),i=new RegExp(`^${n.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}\\s*\\n?`,"gm"),s=o.replace(i,"");if(s!==o){let a=await B(ae,s,{dryRun:e});r.push({action:a.action,path:ae,detail:"-1 @import line"})}else r.push({action:"skip",path:ae,detail:"@import not present"})}if(yt(se)){let n;try{n=JSON.parse(await t.readFile(se,"utf8"))}catch{return r.push({action:"skip",path:se,detail:"invalid JSON \u2014 not touched"}),{actions:r}}let o=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],i=a=>typeof a=="string"&&o.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=>i(p.command)));l.length!==c.length&&(s=!0,l.length===0?delete n.hooks[a]:n.hooks[a]=l)}if(s){let a=await B(se,JSON.stringify(n,null,2),{dryRun:e});r.push({action:a.action,path:se,detail:"sigil hooks removed (other entries preserved)"})}else r.push({action:"skip",path:se,detail:"no sigil hooks to remove"})}return{actions:r}}var jn,ae,se,cy,hv,fy=u(()=>{Br();Fr();jn=Ke(pv(),".claude"),ae=Ke(jn,"CLAUDE.md"),se=Ke(jn,"settings.json"),cy=Ti(Ti(Ti(Ti(mv(import.meta.url))))),hv={id:"claude-code",label:"Claude Code",hint:"hooks + @import \u2014 full auto-injection"}});var wy={};x(wy,{detect:()=>bv,install:()=>Iv,meta:()=>Av,resolveServerPath:()=>hy,uninstall:()=>Rv,verify:()=>Ov,writeMcpEntry:()=>gy,writeRulesFile:()=>yy});import{join as Bt,dirname as Wn}from"node:path";import{homedir as my}from"node:os";import{existsSync as Ft}from"node:fs";import{fileURLToPath as _v}from"node:url";async function bv(){return Ft(Ii)}function hy(){let e=Bt(py,"dist","server.js"),t=Bt(py,"src","server.js");return Ft(e)?e:t}async function gy({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let i=await t.readFile(ce,"utf8");r=JSON.parse(i)}catch{}let n=Ft(ce);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[hy(),"--mcp"],env:{DOTENV_CONFIG_PATH:Sv}},e||await t.mkdir(Ii,{recursive:!0}),{action:(await B(ce,JSON.stringify(r,null,2),{dryRun:e})).action,path:ce,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}function Tv(){return["---","description: Sigil persistent memory \u2014 consult before answering, save in batches","alwaysApply: true","---",""].join(`
659
+ `)+ht()}async function yy({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Wn(Ht),{recursive:!0});let r=await B(Ht,Tv(),{dryRun:e});return{action:r.action,path:Ht,detail:`${r.bytes??0} bytes, alwaysApply=true`}}async function Iv({dryRun:e=!1}={}){let t=[],r=await gy({dryRun:e});r&&t.push(r);let n=await yy({dryRun:e});return n&&t.push(n),{actions:t}}async function Ov(){let e=await import("node:fs/promises");if(!Ft(ce))return{installed:!1,reason:"~/.cursor/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(ce,"utf8"))}catch{return{installed:!1,reason:"~/.cursor/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?Ft(Ht)?{installed:!0}:{installed:!1,reason:"~/.cursor/rules/sigil.mdc missing"}:{installed:!1,reason:"sigil entry missing from ~/.cursor/mcp.json"}}async function Rv({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Ft(ce)){let n;try{n=JSON.parse(await t.readFile(ce,"utf8"))}catch{return r.push({action:"skip",path:ce,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let o=await B(ce,JSON.stringify(n,null,2),{dryRun:e});r.push({action:o.action,path:ce,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:ce,detail:"sigil entry not present"})}return Ft(Ht)&&(e||await t.unlink(Ht),r.push({action:"delete",path:Ht,detail:"sigil rules file removed"})),{actions:r}}var Ii,ce,Ht,xv,Sv,py,Av,Ey=u(()=>{Br();Fr();Ii=Bt(my(),".cursor"),ce=Bt(Ii,"mcp.json"),Ht=Bt(Ii,"rules","sigil.mdc"),xv=Bt(my(),".sigil"),Sv=Bt(xv,".env"),py=Wn(Wn(Wn(Wn(_v(import.meta.url))))),Av={id:"cursor",label:"Cursor",hint:"global MCP + always-applied rule (no native hooks)"}});var xy=J((SK,_y)=>{"use strict";var $t=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)}},Oi=class{constructor(t){this.parser=t,this.buf="",this.returned=null,this.result=null,this.resultTable=null,this.resultArr=null}},Kn=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 Oi(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 $t("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 Oi(t)}callNow(t,r){return this.call(t,r),this.runOne()}return(t){if(this.stack.length===0)throw this.error(new $t("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 $t("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 $t("Must declare a parseStart method")}};Kn.END=1114112;Kn.Error=$t;_y.exports=Kn});var Ay=J((AK,Sy)=>{"use strict";Sy.exports=e=>{let t=new Date(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Ri=J((bK,by)=>{"use strict";by.exports=(e,t)=>{for(t=String(t);t.length<e;)t="0"+t;return t}});var Iy=J((TK,Ty)=>{"use strict";var Kr=Ri(),fc=class extends Date{constructor(t){super(t+"Z"),this.isFloating=!0}toISOString(){let t=`${this.getUTCFullYear()}-${Kr(2,this.getUTCMonth()+1)}-${Kr(2,this.getUTCDate())}`,r=`${Kr(2,this.getUTCHours())}:${Kr(2,this.getUTCMinutes())}:${Kr(2,this.getUTCSeconds())}.${Kr(3,this.getUTCMilliseconds())}`;return`${t}T${r}`}};Ty.exports=e=>{let t=new fc(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Cy=J((IK,Ry)=>{"use strict";var Oy=Ri(),Cv=global.Date,pc=class extends Cv{constructor(t){super(t),this.isDate=!0}toISOString(){return`${this.getUTCFullYear()}-${Oy(2,this.getUTCMonth()+1)}-${Oy(2,this.getUTCDate())}`}};Ry.exports=e=>{let t=new pc(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var vy=J((OK,Ny)=>{"use strict";var Ci=Ri(),mc=class extends Date{constructor(t){super(`0000-01-01T${t}Z`),this.isTime=!0}toISOString(){return`${Ci(2,this.getUTCHours())}:${Ci(2,this.getUTCMinutes())}:${Ci(2,this.getUTCSeconds())}.${Ci(3,this.getUTCMilliseconds())}`}};Ny.exports=e=>{let t=new mc(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Ni=J((exports,module)=>{"use strict";module.exports=makeParserClass(xy());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=Ay(),createDateTimeFloat=Iy(),createDate=Cy(),createTime=vy(),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]:`
660
+ `,[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 o=this.ctx,i=n.key.pop();for(let s of n.key){if(hasKey(o,s)&&(!isTable(o[s])||o[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));o=o[s]=o[s]||Table()}if(hasKey(o,i))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?o[i]=n.value.valueOf():o[i]=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 o=Table();this.ctx[n].push(o),this.ctx=o}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 o=parseInt(n,16);if(o>=SURROGATE_FIRST&&o<=SURROGATE_LAST)throw this.error(new TomlError("Invalid unicode, character in range 0xD800 - 0xDFFF is reserved"));return this.returnNow(String.fromCodePoint(o))}catch(o){throw this.error(TomlError.wrap(o))}}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 o=this.state.resultArr[_contentType],i=tomlType(n);if(o!==i)throw this.error(new TomlError(`Inline lists must be a single type, not a mix of ${o} and ${i}`))}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 o=this.state.resultTable,i=n.key.pop();for(let s of n.key){if(hasKey(o,s)&&(!isTable(o[s])||o[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));o=o[s]=o[s]||Table()}if(hasKey(o,i))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?o[i]=n.value.valueOf():o[i]=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 vi=J((RK,Dy)=>{"use strict";Dy.exports=Nv;function Nv(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}:
661
+ `,t&&t.split){let n=t.split(/\n/),o=String(Math.min(n.length,e.line+3)).length,i=" ";for(;i.length<o;)i+=" ";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<o&&(a=" "+a),e.line===s){r+=a+"> "+n[s]+`
662
+ `,r+=i+" ";for(let c=0;c<e.col;++c)r+=" ";r+=`^
663
+ `}else r+=a+": "+n[s]+`
664
+ `}}return e.message=r+`
665
+ `,e}});var Py=J((CK,Ly)=>{"use strict";Ly.exports=Lv;var vv=Ni(),Dv=vi();function Lv(e){global.Buffer&&global.Buffer.isBuffer(e)&&(e=e.toString("utf8"));let t=new vv;try{return t.parse(e),t.finish()}catch(r){throw Dv(r,e)}}});var Hy=J((NK,My)=>{"use strict";My.exports=kv;var Pv=Ni(),ky=vi();function kv(e,t){t||(t={});let r=0,n=t.blocksize||40960,o=new Pv;return new Promise((s,a)=>{setImmediate(i,r,n,s,a)});function i(s,a,c,l){if(s>=e.length)try{return c(o.finish())}catch(d){return l(ky(d,e))}try{o.parse(e.slice(s,s+a)),setImmediate(i,s+a,a,c,l)}catch(d){l(ky(d,e))}}}});var $y=J((vK,Fy)=>{"use strict";Fy.exports=Hv;var Mv=Yw("stream"),By=Ni();function Hv(e){return e?Bv(e):Fv(e)}function Bv(e){let t=new By;return e.setEncoding("utf8"),new Promise((r,n)=>{let o,i=!1,s=!1;function a(){if(i=!0,!o)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(){o=!0;let d;for(;(d=e.read())!==null;)try{t.parse(d)}catch(p){return c(p)}if(o=!1,i)return a();s||e.once("readable",l)}})}function Fv(){let e=new By;return new Mv.Transform({objectMode:!0,transform(t,r,n){try{e.parse(t.toString(r))}catch(o){this.emit("error",o)}n()},flush(t){try{this.push(e.finish())}catch(r){this.emit("error",r)}t()}})}});var Uy=J((DK,Yn)=>{"use strict";Yn.exports=Py();Yn.exports.async=Hy();Yn.exports.stream=$y();Yn.exports.prettyError=vi()});var Jy=J((LK,yc)=>{"use strict";yc.exports=$v;yc.exports.value=gc;function $v(e){if(e===null)throw Ut("null");if(e===void 0)throw Ut("undefined");if(typeof e!="object")throw Ut(typeof e);if(typeof e.toJSON=="function"&&(e=e.toJSON()),e==null)return null;let t=X(e);if(t!=="table")throw Ut(t);return hc("","",e)}function Ut(e){return new Error("Can only stringify objects, not "+e)}function Uv(){return new Error("Array values can't have mixed types")}function Gy(e){return Object.keys(e).filter(t=>jy(e[t]))}function Gv(e){return Object.keys(e).filter(t=>!jy(e[t]))}function Di(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 hc(e,t,r){r=Di(r);var n,o;n=Gy(r),o=Gv(r);var i=[],s=t||"";n.forEach(c=>{var l=X(r[c]);l!=="undefined"&&l!=="null"&&i.push(s+Li(c)+" = "+Yy(r[c],!0))}),i.length>0&&i.push("");var a=e&&n.length>0?t+" ":"";return o.forEach(c=>{i.push(Qv(e,a,c,r[c]))}),i.join(`
666
+ `)}function jy(e){switch(X(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||X(e[0])!=="table";case"table":return Object.keys(e).length===0;default:return!1}}function X(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 Li(e){var t=String(e);return/^[-A-Za-z0-9_]+$/.test(t)?t:Wy(t)}function Wy(e){return'"'+Ky(e).replace(/"/g,'\\"')+'"'}function jv(e){return"'"+e+"'"}function Wv(e,t){for(;t.length<e;)t="0"+t;return t}function Ky(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"+Wv(4,t.codePointAt(0).toString(16)))}function Kv(e){let t=e.split(/\n/).map(r=>Ky(r).replace(/"(?="")/g,'\\"')).join(`
667
+ `);return t.slice(-1)==='"'&&(t+=`\\
668
+ `),`"""
669
+ `+t+'"""'}function Yy(e,t){let r=X(e);return r==="string"&&(t&&/\n/.test(e)?r="string-multiline":!/[\b\t\n\f\r']/.test(e)&&/"/.test(e)&&(r="string-literal")),gc(e,r)}function gc(e,t){switch(t||(t=X(e)),t){case"string-multiline":return Kv(e);case"string":return Wy(e);case"string-literal":return jv(e);case"integer":return Vy(e);case"float":return Yv(e);case"boolean":return Vv(e);case"datetime":return qv(e);case"array":return Xv(e.filter(r=>X(r)!=="null"&&X(r)!=="undefined"&&X(r)!=="nan"));case"table":return Zv(e);default:throw Ut(t)}}function Vy(e){return String(e).replace(/\B(?=(\d{3})+(?!\d))/g,"_")}function Yv(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 Vy(r)+"."+n}function Vv(e){return String(e)}function qv(e){return e.toISOString()}function Jv(e){return e==="float"||e==="integer"}function zv(e){var t=X(e[0]);return e.every(r=>X(r)===t)?t:e.every(r=>Jv(X(r)))?"float":"mixed"}function qy(e){let t=zv(e);if(t==="mixed")throw Uv();return t}function Xv(e){e=Di(e);let t=qy(e);var r="[",n=e.map(o=>gc(o,t));return n.join(", ").length>60||/\n/.test(n)?r+=`
670
+ `+n.join(`,
671
+ `)+`
672
+ `:r+=" "+n.join(", ")+(n.length>0?" ":""),r+"]"}function Zv(e){e=Di(e);var t=[];return Object.keys(e).forEach(r=>{t.push(Li(r)+" = "+Yy(e[r],!1))}),"{ "+t.join(", ")+(t.length>0?" ":"")+"}"}function Qv(e,t,r,n){var o=X(n);if(o==="array")return eD(e,t,r,n);if(o==="table")return tD(e,t,r,n);throw Ut(o)}function eD(e,t,r,n){n=Di(n),qy(n);var o=X(n[0]);if(o!=="table")throw Ut(o);var i=e+Li(r),s="";return n.forEach(a=>{s.length>0&&(s+=`
673
+ `),s+=t+"[["+i+`]]
674
+ `,s+=hc(i+".",t,a)}),s}function tD(e,t,r,n){var o=e+Li(r),i="";return Gy(n).length>0&&(i+=t+"["+o+`]
675
+ `),i+hc(o+".",t,n)}});var zy=J(wc=>{"use strict";wc.parse=Uy();wc.stringify=Jy()});var rw={};x(rw,{detect:()=>iD,install:()=>aD,meta:()=>oD,resolveServerPath:()=>Qy,uninstall:()=>lD,verify:()=>cD,writeAgentsFile:()=>tw,writeMcpEntry:()=>ew});import{join as Yr,dirname as Pi}from"node:path";import{homedir as Zy}from"node:os";import{existsSync as wt}from"node:fs";import{fileURLToPath as rD}from"node:url";async function iD(){return wt(Vn)}function Qy(){let e=Yr(Xy,"dist","server.js"),t=Yr(Xy,"src","server.js");return wt(e)?e:t}async function ew({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let i=await t.readFile(le,"utf8");r=Vr.default.parse(i)}catch{}let n=wt(le);return r.mcp_servers=r.mcp_servers||{},r.mcp_servers.sigil={command:process.execPath,args:[Qy(),"--mcp"],env:{DOTENV_CONFIG_PATH:nD}},e||await t.mkdir(Vn,{recursive:!0}),{action:(await B(le,Vr.default.stringify(r),{dryRun:e})).action,path:le,detail:n?"+[mcp_servers.sigil] (other keys preserved)":"new config.toml with sigil MCP entry"}}function sD(){return[ki,ht(),qr].join(`
676
+ `)}async function tw({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Vn,{recursive:!0});let r="";wt(ue)&&(r=await t.readFile(ue,"utf8"));let n=sD(),o,i,s=r.indexOf(ki),a=r.indexOf(qr);if(s!==-1&&a!==-1&&a>s){let l=r.slice(0,s),d=r.slice(a+qr.length);o=`${l}${n}${d}`,i="sigil block replaced (other content preserved)"}else if(!r.trim())o=`${n}
677
+ `,i="new AGENTS.md with sigil block";else{let l=r.endsWith(`
678
+ `)?`
679
+ `:`
680
+
681
+ `;o=`${r}${l}${n}
682
+ `,i="appended sigil block (existing content preserved)"}return o===r?{action:"skip",path:ue,detail:"block already up to date"}:{action:(await B(ue,o,{dryRun:e})).action,path:ue,detail:i}}async function aD({dryRun:e=!1}={}){let t=[],r=await ew({dryRun:e});r&&t.push(r);let n=await tw({dryRun:e});return n&&t.push(n),{actions:t}}async function cD(){let e=await import("node:fs/promises");if(!wt(le))return{installed:!1,reason:"~/.codex/config.toml missing"};let t;try{t=Vr.default.parse(await e.readFile(le,"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(!wt(ue))return{installed:!1,reason:"~/.codex/AGENTS.md missing"};let r=await e.readFile(ue,"utf8");return!r.includes(ki)||!r.includes(qr)?{installed:!1,reason:"sigil block markers missing from ~/.codex/AGENTS.md"}:{installed:!0}}async function lD({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(wt(le)){let n;try{n=Vr.default.parse(await t.readFile(le,"utf8"))}catch(o){return r.push({action:"skip",path:le,detail:`unparseable \u2014 not touched: ${o.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 o=await B(le,Vr.default.stringify(n),{dryRun:e});r.push({action:o.action,path:le,detail:"-[mcp_servers.sigil]"})}else r.push({action:"skip",path:le,detail:"[mcp_servers.sigil] not present"})}if(wt(ue)){let n=await t.readFile(ue,"utf8"),o=n.indexOf(ki),i=n.indexOf(qr);if(o!==-1&&i!==-1&&i>o){let s=n.slice(0,o).replace(/\n+$/,""),a=n.slice(i+qr.length).replace(/^\n+/,""),c=s&&a?`${s}
683
+
684
+ ${a}`:s||a,l=await B(ue,c.endsWith(`
685
+ `)?c:`${c}
686
+ `,{dryRun:e});r.push({action:l.action,path:ue,detail:"sigil block removed (other content preserved)"})}else r.push({action:"skip",path:ue,detail:"sigil block not present"})}return{actions:r}}var Vr,Vn,le,ue,nD,Xy,ki,qr,oD,nw=u(()=>{Vr=qw(zy(),1);Br();Fr();Vn=Yr(Zy(),".codex"),le=Yr(Vn,"config.toml"),ue=Yr(Vn,"AGENTS.md"),nD=Yr(Zy(),".sigil",".env"),Xy=Pi(Pi(Pi(Pi(rD(import.meta.url))))),ki="<!-- BEGIN sigil -->",qr="<!-- END sigil -->",oD={id:"codex-cli",label:"Codex CLI",hint:"TOML config + AGENTS.md (no native hooks)"}});var lw={};x(lw,{detect:()=>pD,install:()=>mD,meta:()=>fD,resolveServerPath:()=>sw,uninstall:()=>gD,verify:()=>hD,writeMcpEntry:()=>aw,writeSteeringFile:()=>cw});import{join as zr,dirname as Jr}from"node:path";import{homedir as iw}from"node:os";import{existsSync as jt}from"node:fs";import{fileURLToPath as uD}from"node:url";async function pD(){return jt(Ec)}function sw(){let e=zr(ow,"dist","server.js"),t=zr(ow,"src","server.js");return jt(e)?e:t}async function aw({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let i=await t.readFile(te,"utf8");r=JSON.parse(i)}catch{}let n=jt(te);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[sw(),"--mcp"],env:{DOTENV_CONFIG_PATH:dD}},e||await t.mkdir(Jr(te),{recursive:!0}),{action:(await B(te,JSON.stringify(r,null,2),{dryRun:e})).action,path:te,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}async function cw({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Jr(Gt),{recursive:!0});let r=await B(Gt,ht(),{dryRun:e});return{action:r.action,path:Gt,detail:`${r.bytes??0} bytes, steering (always-on)`}}async function mD({dryRun:e=!1}={}){let t=[],r=await aw({dryRun:e});r&&t.push(r);let n=await cw({dryRun:e});return n&&t.push(n),{actions:t}}async function hD(){let e=await import("node:fs/promises");if(!jt(te))return{installed:!1,reason:"~/.kiro/settings/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(te,"utf8"))}catch{return{installed:!1,reason:"~/.kiro/settings/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?jt(Gt)?{installed:!0}:{installed:!1,reason:"~/.kiro/steering/sigil.md missing"}:{installed:!1,reason:"sigil entry missing from ~/.kiro/settings/mcp.json"}}async function gD({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(jt(te)){let n;try{n=JSON.parse(await t.readFile(te,"utf8"))}catch{return r.push({action:"skip",path:te,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let o=await B(te,JSON.stringify(n,null,2),{dryRun:e});r.push({action:o.action,path:te,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:te,detail:"sigil entry not present"})}return jt(Gt)&&(e||await t.unlink(Gt),r.push({action:"delete",path:Gt,detail:"sigil steering file removed"})),{actions:r}}var Ec,te,Gt,dD,ow,fD,uw=u(()=>{Br();Fr();Ec=zr(iw(),".kiro"),te=zr(Ec,"settings","mcp.json"),Gt=zr(Ec,"steering","sigil.md"),dD=zr(iw(),".sigil",".env"),ow=Jr(Jr(Jr(Jr(uD(import.meta.url))))),fD={id:"kiro",label:"Kiro",hint:"MCP + steering file (steering auto-applies)"}});var pw={};x(pw,{detect:()=>SD,install:()=>TD,meta:()=>xD,setMemoryProviderInYaml:()=>xc,uninstall:()=>ID,verify:()=>OD});import{join as Wt,dirname as qn}from"node:path";import{homedir as yD}from"node:os";import{existsSync as Le}from"node:fs";import{fileURLToPath as wD}from"node:url";async function SD(){return Le(fw)}function xc(e,t){let r=e.split(`
687
+ `),n=!1,o=!1;for(let i=0;i<r.length;i++){let s=r[i];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[i]=`${c}'${t}'${d}`,o=!0;break}}return{content:r.join(`
688
+ `),changed:o}}async function AD({dryRun:e}){let t=await import("node:fs/promises");if(!Le(_c))throw new Error(`Plugin source missing at ${_c} \u2014 is this Sigil install complete? \`integrations/hermes/plugin/\` must ship with the package.`);return e?{action:Le(de)?"modify":"create"}:(await t.mkdir(qn(de),{recursive:!0}),Le(de)&&await t.rm(de,{recursive:!0,force:!0}),await t.cp(_c,de,{recursive:!0}),{action:"create"})}async function bD({dryRun:e,value:t}){let r=await import("node:fs/promises");if(!Le(be))return{action:"skip",detail:"config.yaml not present \u2014 set memory.provider manually"};let n=await r.readFile(be,"utf8"),{content:o,changed:i}=xc(n,t);return i?(e||await r.writeFile(be,o,"utf8"),{action:"modify",detail:`memory.provider \u2192 '${t}'`}):{action:"skip",detail:`memory.provider already '${t}'`}}async function TD({dryRun:e=!1}={}){let t=[],r=await AD({dryRun:e});t.push({action:r.action,path:de,detail:"plugin tree (__init__.py, plugin.yaml, README.md)"});let n=await bD({dryRun:e,value:"sigil"});return t.push({action:n.action,path:be,detail:n.detail}),{actions:t}}async function ID({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Le(de)?(e||await t.rm(de,{recursive:!0,force:!0}),r.push({action:"delete",path:de,detail:"plugin directory removed"})):r.push({action:"skip",path:de,detail:"plugin not present"}),Le(be)){let n=await t.readFile(be,"utf8"),o=n.match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),s=(o?o[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];if(s==="sigil"){let{content:a,changed:c}=xc(n,"");c&&!e&&await t.writeFile(be,a,"utf8"),r.push({action:"modify",path:be,detail:"memory.provider \u2192 '' (sigil cleared)"})}else r.push({action:"skip",path:be,detail:`memory.provider is '${s??""}' (not sigil) \u2014 not touched`})}return{actions:r}}async function OD(){let e=await import("node:fs/promises");if(!Le(de))return{installed:!1,reason:"plugin missing at ~/.hermes/hermes-agent/plugins/memory/sigil/"};if(!Le(Wt(de,"__init__.py")))return{installed:!1,reason:"plugin dir present but __init__.py missing"};if(!Le(be))return{installed:!1,reason:"~/.hermes/config.yaml missing"};let r=(await e.readFile(be,"utf8")).match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),o=(r?r[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];return o!=="sigil"?{installed:!1,reason:`memory.provider in config.yaml is '${o??""}' (expected 'sigil')`}:{installed:!0}}var dw,ED,fw,de,be,_D,_c,xD,mw=u(()=>{dw=Wt(yD(),".hermes"),ED=Wt(dw,"hermes-agent"),fw=Wt(ED,"plugins","memory"),de=Wt(fw,"sigil"),be=Wt(dw,"config.yaml"),_D=qn(qn(qn(qn(wD(import.meta.url))))),_c=Wt(_D,"integrations","hermes","plugin"),xD={id:"hermes",label:"Hermes",hint:"Python memory-provider plugin + config.yaml flip"}});var Ew={};x(Ew,{CONTAINER:()=>fe,IMAGE:()=>Ac,VOLUME:()=>bc,detectDocker:()=>zn,ensureLocalPostgresRunning:()=>HD,provisionLocalPostgres:()=>Tc,removeLocalPostgres:()=>FD,stopLocalPostgres:()=>BD});import{spawn as ND}from"node:child_process";import{randomBytes as vD}from"node:crypto";import DD from"node:net";function Te(e,t,{timeout:r=15e3,input:n}={}){return new Promise(o=>{let i;try{i=ND(e,t,{stdio:["pipe","pipe","pipe"]})}catch(l){o({code:-1,out:"",err:l.message,spawnError:!0});return}let s="",a="",c=setTimeout(()=>{try{i.kill("SIGKILL")}catch{}},r);i.stdout.on("data",l=>{s+=l}),i.stderr.on("data",l=>{a+=l}),i.on("error",l=>{clearTimeout(c),o({code:-1,out:s,err:l.message,spawnError:!0})}),i.on("close",l=>{clearTimeout(c),o({code:l,out:s.trim(),err:a.trim()})}),n!=null&&(i.stdin.write(n),i.stdin.end())})}async function zn({refresh:e=!1}={}){if(Mi&&!e)return Mi;let t=await Te("docker",["version","--format","{{.Server.Version}}"],{timeout:8e3});return Mi=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"},Mi}async function ww(){let e=await Te("docker",["inspect","-f","{{.State.Running}}",fe],{timeout:8e3});return e.code!==0?{exists:!1,running:!1}:{exists:!0,running:e.out==="true"}}async function LD(){let e=await Te("docker",["port",fe,"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 PD(e){return new Promise(t=>{let r=DD.createServer();r.once("error",()=>t(!1)),r.once("listening",()=>r.close(()=>t(!0))),r.listen(e,"127.0.0.1")})}async function kD(e=5432){for(let t=e;t<e+25;t++)if(await PD(t))return t;return e}function yw(){return vD(18).toString("base64url")}async function Jn(e,t){let r=await Te("docker",["exec","-i",fe,"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 MD({deadlineMs:e=3e4}={}){let t=Date.now(),r="timed out";for(;Date.now()-t<e;){let n=await Te("docker",["exec",fe,"pg_isready","-U","postgres"],{timeout:5e3});if(n.code===0)return;r=n.err||n.out||r,await new Promise(o=>setTimeout(o,700))}throw new Error(`Postgres did not become ready in ${e}ms: ${r}`)}async function Tc({env:e=De()}={}){let t=await zn();if(!t.available){let c=new Error(t.reason||"Docker is not available");throw c.dockerUnavailable=!0,c}let r=await ww(),n,o=yw();if(r.exists){if(!r.running){let c=await Te("docker",["start",fe],{timeout:15e3});if(c.code!==0)throw new Error(`failed to start existing ${fe}: ${c.err}`)}n=await LD()||5432}else{n=await kD(5432);let c=yw(),l=await Te("docker",["run","-d","--name",fe,"--restart","unless-stopped","-e",`POSTGRES_PASSWORD=${c}`,"-e",`POSTGRES_DB=${Xr}`,"-v",`${bc}:/var/lib/postgresql/data`,"-p",`${n}:5432`,Ac],{timeout:6e4});if(l.code!==0)throw new Error(`docker run failed: ${l.err||l.out}`)}await MD(),(await Jn("postgres",`SELECT 1 FROM pg_database WHERE datname='${Xr}'`)).includes("1")||await Jn("postgres",`CREATE DATABASE ${Xr}`),await Jn("postgres",`DO $$ BEGIN
689
+ IF EXISTS (SELECT FROM pg_roles WHERE rolname='${Et}') THEN
690
+ ALTER ROLE ${Et} WITH LOGIN PASSWORD '${o}';
691
+ ELSE
692
+ CREATE ROLE ${Et} WITH LOGIN PASSWORD '${o}';
693
+ END IF;
694
+ END $$;`),await Jn("postgres",`GRANT ALL PRIVILEGES ON DATABASE ${Xr} TO ${Et}`),await Jn(Xr,`GRANT ALL ON SCHEMA public TO ${Et};
695
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${Et};
696
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${Et};
697
+ CREATE EXTENSION IF NOT EXISTS vector;`);let s=`postgres://${Et}:${encodeURIComponent(o)}@localhost:${n}/${Xr}`,a=await rn(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:fe,image:Ac,reused:r.exists,pgvector:a.pgvector}}async function HD(e=De()){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 zn()).available)return{started:!1,reason:"docker unavailable"};let n=await ww();if(!n.exists)return{started:!1,reason:"no sigil-postgres container"};if(n.running)return{started:!1,reason:"already running"};let o=await Te("docker",["start",fe],{timeout:15e3});return o.code===0?{started:!0}:{started:!1,reason:o.err}}catch(t){return{started:!1,reason:t.message}}}async function BD(){return Te("docker",["stop",fe],{timeout:2e4})}async function FD({deleteVolume:e=!1}={}){await Te("docker",["rm","-f",fe],{timeout:2e4}),e&&await Te("docker",["volume","rm",bc],{timeout:15e3})}var fe,bc,Ac,Xr,Et,Mi,Ic=u(()=>{Me();$r();fe="sigil-postgres",bc="sigil-pgdata",Ac="pgvector/pgvector:pg16",Xr="sigil",Et="sigil_app";Mi=null});var Hi={};x(Hi,{MANIFEST_VERSION:()=>Rc,produceManifest:()=>ZD,verifyManifest:()=>QD});import{createHash as qD}from"node:crypto";import{readFile as JD,readdir as Ow}from"node:fs/promises";import{existsSync as Rw,readFileSync as zD}from"node:fs";import{join as Oc}from"node:path";function XD(){if(Xn)return Xn;try{Xn=JSON.parse(zD(Oc(Z,"package.json"),"utf8")).version}catch{Xn="unknown"}return Xn}async function ZD(){let e=await eL(Oc(Z,"prompts")),t=await tL();return{v:Rc,producedAt:new Date().toISOString(),sigilVersion:XD(),schema:{migrationVersion:t,requiredExtensions:["vector"]},embedding:{provider:g.embedding.provider||null,model:g.embedding.model||null,dimensions:Number(g.embedding.dimensions)||null,normalization:"l2",maxInputTokens:8192},chunker:{...yl},prompts:e,memory:{skipThreshold:g.memory.skipThreshold,ambiguousThreshold:g.memory.ambiguousThreshold,minFactSimilarity:g.memory.minFactSimilarity}}}function QD(e,t){let r=[],n=[];if(!t||t.v!==Rc)return r.push(`manifest version mismatch (local v${e.v} vs remote v${t?.v??"?"})`),{ok:!1,errors:r,warnings:n};for(let o of["provider","model","dimensions"])e.embedding[o]!==t.embedding[o]&&r.push(`embedding.${o}: local=${e.embedding[o]} vs remote=${t.embedding[o]}`);for(let o of["version","size","overlap"])e.chunker[o]!==t.chunker[o]&&r.push(`chunker.${o}: local=${e.chunker[o]} vs remote=${t.chunker[o]}`);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 o of Object.keys(e.prompts))t.prompts[o]&&e.prompts[o]!==t.prompts[o]&&n.push(`prompt "${o}" 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 eL(e){let t={};if(!Rw(e))return t;let r=await Ow(e);for(let n of r){if(!n.endsWith(".md"))continue;let o=await JD(Oc(e,n),"utf8");t[n.replace(/\.md$/,"")]=rL(o)}return t}async function tL(){if(!Rw(ke))return null;let t=(await Ow(ke)).filter(r=>/^\d{14}_.+\.cjs$/.test(r)).map(r=>r.replace(/_.+\.cjs$/,"")).sort();return t[t.length-1]??null}function rL(e){return qD("sha256").update(e,"utf8").digest("hex")}var Rc,Xn,Bi=u(()=>{C();A();cs();Rc=1});var vw={};x(vw,{PAIR_ALPN:()=>Cw,createPairAcceptor:()=>oL,hashCode:()=>Fi,joinMaster:()=>sL});import{createHash as nL}from"node:crypto";function oL({log:e}){return async function(r,n){if(r){e(`pair: accept err: ${r.message}`);return}let o="<unknown>";try{o=n.remoteNodeId().toString();let i=await n.acceptBi(),s=await i.recv.readToEnd(Nw),a=JSON.parse(s.toString()),c=await iL(a,o);await i.send.writeAll(Buffer.from(JSON.stringify(c))),await i.send.finish(),c.ok?(K.emit("pair.consumed",{nodeId:o,deviceName:a.name}),e(`pair: registered ${a.name} (${o.slice(0,12)}\u2026)`)):(K.emit("pair.rejected",{nodeId:o,code:c.error?.code}),e(`pair: rejected ${o.slice(0,12)}\u2026 (${c.error?.code})`))}catch(i){e(`pair: handler err from ${o.slice(0,12)}\u2026: ${i.message}`),K.emit("pair.error",{nodeId:o,message:i.message})}}}async function iL(e,t){if(!e||e.v!==Cc)return Zn("unsupported_version",`expected v=${Cc}`);if(typeof e.code!="string"||!e.code)return Zn("invalid_request","missing code");if(typeof e.name!="string"||!e.name)return Zn("invalid_request","missing name");if(typeof e.nodeId!="string"||e.nodeId.toLowerCase()!==t.toLowerCase())return Zn("invalid_request","nodeId claim does not match transport identity");let{default:r}=await Promise.resolve().then(()=>(T(),F)),{getNodeInfo:n}=await Promise.resolve().then(()=>(Ue(),pt)),o=Fi(e.code),i;try{i=await r.transaction(async l=>{let d=await l("pairing_code").where({code_hash:o}).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},[f]=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:f.id,consumed_at:l.fn.now()}),{ok:!0,device:{id:f.id,role:d.role,namespaces:d.namespaces}}})}catch(l){return Zn("transaction_failed",l.message)}if(!i.ok)return i;let s=null;try{s=(await n()).nodeId}catch{}let{produceManifest:a}=await Promise.resolve().then(()=>(Bi(),Hi)),c=await a();return{ok:!0,device:i.device,masterNodeId:s,manifest:c}}function Zn(e,t){return{ok:!1,error:{code:e,message:t}}}function Fi(e){return nL("sha256").update(e,"utf8").digest("hex")}async function sL({masterAddr:e,code:t,name:r,sigilVersion:n}){let{dial:o,getEndpoint:i}=await Promise.resolve().then(()=>(Ue(),pt)),{hostname:s}=await import("node:os"),a=await o(e,Cw),c=await i(),l=await a.openBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:Cc,code:t,name:r,nodeId:c.nodeId(),hostname:s(),sigilVersion:n||null}))),await l.send.finish();let d=await l.recv.readToEnd(Nw);return JSON.parse(d.toString())}var Cw,Nw,Cc,Nc=u(()=>{Qt();Cw="sigil/pair/1",Nw=64*1024,Cc=1});var Fw={};x(Fw,{installLiteProxy:()=>fL});async function fL({registry:e,log:t}){let{getMemoryClient:r}=await Promise.resolve().then(()=>(Bn(),Hn)),n=0,o=0;for(let i of uL)e.replace(i,async s=>(await r()).call(i,s))&&n++;for(let i of dL)e.replace(i,()=>{let a=new Error(`"${i}" is not available on a lite-follower device. Run on the master device.`);throw a.code="not_on_follower",a})&&o++;t(`lite-follower: ${n} methods proxied, ${o} forbidden, rest local`)}var uL,dL,$w=u(()=>{uL=new Set(["search","searchEntity","traverseGraph","getFactContext","getEntityContext","getPod","listPods","listFacts","status","refreshContext.fetch","refreshContext.explain","remember","forgetFact","ingestDoc"]),dL=new Set(["pair.create","pair.list","pair.revoke","pair.sweep","device.list","device.revoke","device.activate","runMigrations","testDbConnection"])});C();ao();import{createWriteStream as pL,writeFileSync as mL,rmSync as hL}from"node:fs";import{appendFile as gL}from"node:fs/promises";Xt();var EE={UNKNOWN_METHOD:"unknown_method",INVALID_PARAMS:"invalid_params",HANDLER_ERROR:"handler_error"};function qc(){let e=new Map;function t(i,s){if(e.has(i))throw new Error(`rpc: duplicate handler for "${i}"`);e.set(i,s)}async function r(i,s,a={}){let c=e.get(i);if(!c)return{ok:!1,error:{code:EE.UNKNOWN_METHOD,message:`unknown method: ${i}`}};let{runWithRequestContext:l}=await Promise.resolve().then(()=>(po(),Xi));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:Vc(d)}}}function n(){return[...e.keys()].sort()}function o(i,s){return e.has(i)?(e.set(i,s),!0):!1}return{register:t,replace:o,dispatch:r,list:n}}Zt();C();ao();import{createServer as xE}from"node:net";import{chmod as SE}from"node:fs/promises";async function zc({registry:e,log:t}){await so();let r=xE(n=>{let o="",i=!1,s=Promise.resolve();n.setEncoding("utf8"),n.on("data",a=>{if(i)return;o+=a;let c;for(;(c=o.indexOf(`
698
+ `))!==-1;){let l=o.slice(0,c);o=o.slice(c+1),l.trim()&&(s=s.then(()=>{if(!i)return AE(l,n,e,t)}))}}),n.on("close",()=>{i=!0}),n.on("error",a=>{a.code!=="EPIPE"&&a.code!=="ECONNRESET"&&t(`socket error: ${a.message}`)})});await new Promise((n,o)=>{r.once("error",o),r.listen(qe,()=>{r.off("error",o),n()})});try{await SE(qe,384)}catch{}return t(`socket listening at ${qe}`),{close:()=>new Promise(n=>r.close(()=>n()))}}async function AE(e,t,r,n){let o;try{o=JSON.parse(e)}catch(d){ns(t,{id:null,ok:!1,error:{code:"invalid_json",message:d.message}});return}let{id:i=null,method:s,params:a,agent:c=null}=o||{};if(typeof s!="string"){ns(t,{id:i,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});ns(t,{id:i,...l}),!l.ok&&process.env.SIGIL_DEBUG&&n(`dispatch ${s} -> ${l.error.code}: ${l.error.message}`)}function ns(e,t){try{e.write(JSON.stringify(t)+`
699
+ `)}catch{}}C();import{createServer as vE}from"node:http";import{existsSync as yo,createReadStream as DE}from"node:fs";import{stat as LE}from"node:fs/promises";import{join as tl,extname as PE,normalize as Qc,sep as kE}from"node:path";import{WebSocketServer as ME}from"ws";C();import{readFile as bE,writeFile as TE,chmod as IE,mkdir as OE}from"node:fs/promises";import{randomBytes as RE,timingSafeEqual as Xc}from"node:crypto";import{dirname as CE}from"node:path";var ho=null;async function os(){if(ho)return ho;try{let t=(await bE(qt,"utf8")).trim();if(/^[0-9a-f]{64}$/.test(t))return ho=t}catch{}await OE(CE(qt),{recursive:!0});let e=RE(32).toString("hex");await TE(qt,e,"utf8");try{await IE(qt,384)}catch{}return ho=e}async function nn(e){if(!e||typeof e!="string")return!1;let t=await os();if(e.length!==t.length)return Xc(Buffer.from(t),Buffer.from(t)),!1;try{return Xc(Buffer.from(e),Buffer.from(t))}catch{return!1}}Qt();var HE={".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"};function BE(){return yo(en)?en:yo(no)?no:null}async function rl({registry:e,log:t,config:r}){let n=BE(),o=await os(),i=vE(async(c,l)=>{try{await FE(c,l,{registry:e,webDir:n,log:t})}catch(d){t(`http route error: ${d.message}`),me(l,500,{ok:!1,error:{code:"internal",message:d.message}})}}),s=new ME({noServer:!0});i.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 ol(c)||p.searchParams.get("t")&&await nn(p.searchParams.get("t")))){l.write(`HTTP/1.1 401 Unauthorized\r
619
700
  \r
620
- `),l.destroy();return}a.handleUpgrade(c,l,d,h=>{for(let I of H.recent(50))try{h.send(JSON.stringify(I))}catch{}let w=256*1024,y=0,E=H.subscribe(I=>{if(h.readyState===h.OPEN){if(h.bufferedAmount>w){y++;return}try{y>0&&(h.send(JSON.stringify({type:"meta.dropped",ts:new Date().toISOString(),count:y})),y=0),h.send(JSON.stringify(I))}catch{}}});h.on("close",E),h.on("error",()=>E())})}),await new Promise((c,l)=>{i.once("error",l),i.listen(r.http.port,r.http.host,()=>{i.off("error",l),c()})});let s=`http://${r.http.host}:${r.http.port}/?t=${o}`;return t(`http listening on ${r.http.host}:${r.http.port}`),t(`gui url (paste into browser): ${s}`),{url:s,close:()=>new Promise(c=>{a.close(),i.close(()=>c())})}}async function Dh(e,t,{registry:r,webDir:n,log:o}){let i=new URL(e.url,"http://localhost"),a=i.pathname;if(e.method==="GET"&&a==="/healthz")return X(t,200,{ok:!0,ts:new Date().toISOString()});if(e.method==="GET"&&(a==="/"||a==="/index.html"))return Lh(e,t,i,n,o);if(e.method==="GET"&&a.startsWith("/static/"))return kh(e,t,a.replace("/static/",""),n);if(!await ka(e))return X(t,401,{ok:!1,error:{code:"auth",message:"unauthorized"}});if(e.method==="GET"&&a==="/api/v1/methods")return X(t,200,{ok:!0,data:{methods:r.list()}});if(e.method==="POST"&&a==="/api/v1/rpc"){let c=await Ph(e);if(!c||typeof c.method!="string")return X(t,400,{ok:!1,error:{code:"invalid_request",message:"expected {method, params}"}});let l=await r.dispatch(c.method,c.params,{transport:"http"});return X(t,200,l)}X(t,404,{ok:!1,error:{code:"not_found",message:`${e.method} ${a}`}})}async function Lh(e,t,r,n,o){let i=r.searchParams.get("t");if(i)return await Jt(i)?(t.statusCode=302,t.setHeader("Location","/"),t.setHeader("Set-Cookie",`sigil_gui=${i}; Path=/; HttpOnly; SameSite=Strict; Max-Age=2592000`),t.end()):X(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(Ca);let a=Ra(n,"index.html");return Gr(a)?La(t,a):(o(`http: index.html missing under ${n}`),t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(Ca))}async function kh(e,t,r,n){if(!n)return X(t,404,{ok:!1,error:{code:"not_found",message:"no web dir"}});let o=Na(Ra(n,r)),i=Na(n)+Oh;return o.startsWith(i)?Gr(o)?La(t,o):X(t,404,{ok:!1,error:{code:"not_found",message:r}}):X(t,403,{ok:!1,error:{code:"forbidden",message:"path traversal blocked"}})}async function La(e,t){let r=await vh(t);e.statusCode=200,e.setHeader("Content-Type",Ch[Th(t).toLowerCase()]||"application/octet-stream"),e.setHeader("Content-Length",r.size),e.setHeader("Cache-Control","no-cache"),Ih(t).pipe(e)}async function ka(e){let t=e.headers.authorization;if(t&&/^Bearer\s+/i.test(t)&&await Jt(t.replace(/^Bearer\s+/i,"").trim()))return!0;let n=(e.headers.cookie||"").match(/(?:^|;\s*)sigil_gui=([0-9a-f]+)/i);return!!(n&&await Jt(n[1]))}async function Ph(e){let t=[],r=0;for await(let o of e)if(t.push(o),r+=o.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(o){throw new Error(`invalid JSON: ${o.message}`)}}function X(e,t,r){e.statusCode=t,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(r))}var Ca=`<!doctype html>
701
+ `),l.destroy();return}s.handleUpgrade(c,l,d,m=>{for(let b of K.recent(50))try{m.send(JSON.stringify(b))}catch{}let w=256*1024,y=0,E=K.subscribe(b=>{if(m.readyState===m.OPEN){if(m.bufferedAmount>w){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",E),m.on("error",()=>E())})}),await new Promise((c,l)=>{i.once("error",l),i.listen(r.http.port,r.http.host,()=>{i.off("error",l),c()})});let a=`http://${r.http.host}:${r.http.port}/?t=${o}`;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(),i.close(()=>c())})}}async function FE(e,t,{registry:r,webDir:n,log:o}){let i=new URL(e.url,"http://localhost"),s=i.pathname;if(e.method==="GET"&&s==="/healthz")return me(t,200,{ok:!0,ts:new Date().toISOString()});if(e.method==="GET"&&(s==="/"||s==="/index.html"))return $E(e,t,i,n,o);if(e.method==="GET"&&s.startsWith("/static/"))return UE(e,t,s.replace("/static/",""),n);if(!await ol(e))return me(t,401,{ok:!1,error:{code:"auth",message:"unauthorized"}});if(e.method==="GET"&&s==="/api/v1/methods")return me(t,200,{ok:!0,data:{methods:r.list()}});if(e.method==="POST"&&s==="/api/v1/rpc"){let c=await GE(e);if(!c||typeof c.method!="string")return me(t,400,{ok:!1,error:{code:"invalid_request",message:"expected {method, params}"}});let l=await r.dispatch(c.method,c.params,{transport:"http"});return me(t,200,l)}me(t,404,{ok:!1,error:{code:"not_found",message:`${e.method} ${s}`}})}async function $E(e,t,r,n,o){let i=r.searchParams.get("t");if(i)return await nn(i)?(t.statusCode=302,t.setHeader("Location","/"),t.setHeader("Set-Cookie",`sigil_gui=${i}; Path=/; HttpOnly; SameSite=Strict; Max-Age=2592000`),t.end()):me(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(el);let s=tl(n,"index.html");return yo(s)?nl(t,s):(o(`http: index.html missing under ${n}`),t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(el))}async function UE(e,t,r,n){if(!n)return me(t,404,{ok:!1,error:{code:"not_found",message:"no web dir"}});let o=Qc(tl(n,r)),i=Qc(n)+kE;return o.startsWith(i)?yo(o)?nl(t,o):me(t,404,{ok:!1,error:{code:"not_found",message:r}}):me(t,403,{ok:!1,error:{code:"forbidden",message:"path traversal blocked"}})}async function nl(e,t){let r=await LE(t);e.statusCode=200,e.setHeader("Content-Type",HE[PE(t).toLowerCase()]||"application/octet-stream"),e.setHeader("Content-Length",r.size),e.setHeader("Cache-Control","no-cache"),DE(t).pipe(e)}async function ol(e){let t=e.headers.authorization;if(t&&/^Bearer\s+/i.test(t)&&await nn(t.replace(/^Bearer\s+/i,"").trim()))return!0;let n=(e.headers.cookie||"").match(/(?:^|;\s*)sigil_gui=([0-9a-f]+)/i);return!!(n&&await nn(n[1]))}async function GE(e){let t=[],r=0;for await(let o of e)if(t.push(o),r+=o.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(o){throw new Error(`invalid JSON: ${o.message}`)}}function me(e,t,r){e.statusCode=t,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(r))}var el=`<!doctype html>
621
702
  <html><head><meta charset="utf-8"><title>Sigil</title>
622
703
  <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>
623
704
  </head><body>
@@ -630,18 +711,14 @@ into your browser to set the auth cookie.</p>
630
711
  -X POST http://localhost:7777/api/v1/rpc \\
631
712
  -d '{"method":"ping"}' \\
632
713
  -H "Content-Type: application/json"</pre>
633
- </body></html>`;L();import{readFileSync as Mh}from"node:fs";import{join as Fh}from"node:path";var Xt;function $h(){if(Xt)return Xt;try{Xt=JSON.parse(Mh(Fh(me,"package.json"),"utf8")).version}catch{Xt="unknown"}return Xt}function Pa(e,{startedAt:t}){e.register("ping",()=>({ok:!0,version:$h(),pid:process.pid,uptimeMs:Date.now()-t,node:process.version}))}function sp(e){e.register("remember",async t=>{let r=Array.isArray(t.facts)?t.facts.filter(Boolean):[];if(r.length===0){let f=new Error("remember: params.facts must be a non-empty string[]");throw f.code="invalid_params",f}let{ingestDocument:n}=await Promise.resolve().then(()=>(Hi(),Bi)),{default:o}=await Promise.resolve().then(()=>(S(),q)),i=t.namespace||o.defaults.namespace,a=0,s=0,c=0,l=Date.now(),d=[];for(let f of r){let h=await n({content:f,namespace:i,classify:!0});if(h.skipped||h.route==="noise"){c++,d.push({input:String(f).slice(0,240),route:h.route??null,skipped:!0,verdicts:h.facts?.verdicts||[]});continue}let w=h.facts?.added??0,y=h.facts?.updated??0;a+=w,s+=y,w+y===0&&c++,d.push({input:String(f).slice(0,240),route:h.route??null,skipped:!1,counts:{added:w,updated:y,skipped:h.facts?.skipped??0,contradicted:h.facts?.contradicted??0},verdicts:h.facts?.verdicts||[],entities:h.entities?{entityCount:h.entities.entityCount,relationCount:h.entities.relationCount,topics:h.entities.topics||[]}:null})}if(a+s>0){let{updateContextSnapshot:f}=await Promise.resolve().then(()=>(Tr(),vr));await f({namespace:i}).catch(()=>{})}let{recordTrace:p}=await Promise.resolve().then(()=>(Me(),Pe));return p({kind:"ingest",summary:`remember ${r.length} input${r.length===1?"":"s"} \u2192 +${a} added, ~${s} updated, ${c} known`,namespace:i,durationMs:Date.now()-l,detail:{op:"remember",namespace:i,totals:{added:a,updated:s,alreadyKnown:c,inputCount:r.length},inputs:d}}).catch(()=>{}),{added:a,updated:s,alreadyKnown:c,namespace:i}})}function Lp(e){e.register("search",async t=>{let r=(t.query??"").trim();if(!r){let G=new Error("search: params.query is required");throw G.code="invalid_params",G}let{search:n}=await Promise.resolve().then(()=>(Dp(),Rp)),{default:o}=await Promise.resolve().then(()=>(S(),q)),i=Array.isArray(t.namespaces)&&t.namespaces.length?t.namespaces:[o.defaults.namespace],a=Number.isFinite(t.limit)?t.limit:10,s=!!t.useGraph,c=!!t.route,l=!!t.synthesize,d=!!t.includeChunks||l,p=t.minConfidence,f=t.pointInTime?new Date(t.pointInTime):void 0,h=t.podScope??"auto",w=t.applyFloor??!1,y={cwd:t.cwd||null,sessionId:t.sessionId||null},E=await n(r,{namespaces:i,limit:a,useGraph:s,route:c,synthesize:l,includeChunks:d,minConfidence:p,pointInTime:f,podScope:h,applyFloor:w,ctx:y}),I={query:r,namespaces:i,facts:(E.facts||[]).map(eI),chunks:(E.chunks||[]).map(tI),synthesized:E.synthesized||null,matchedEntity:E.matchedEntity||null,relatedEntities:E.relatedEntities||[]},_=E._trace||{},O=r.length>80?r.slice(0,80)+"\u2026":r,v=_.strategy==="entity-first"?" \xB7 entity-first":"",{recordTrace:x}=await Promise.resolve().then(()=>(Me(),Pe));return x({kind:"search",summary:`"${O}" \u2192 ${I.facts.length} facts, ${I.chunks.length} chunks${v}`,namespace:i[0]||null,durationMs:_.durationMs??null,detail:_}).catch(()=>{}),I})}function eI(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:Gn(e.similarity),rrfScore:Gn(e.rrfScore),agent:e.createdByAgent??null,device:e.createdByDeviceId??null,sourceDocumentIds:Array.isArray(e.sourceDocumentIds)?e.sourceDocumentIds:[],sourceSection:e.sourceSection??null}}function tI(e){return{id:e.id??null,content:e.content,sectionHeading:e.sectionHeading??null,similarity:Gn(e.similarity),rrfScore:Gn(e.rrfScore)}}function Gn(e){let t=Number(e);return Number.isFinite(t)?t:null}function kp(e){e.register("status",async t=>{let{getStats:r}=await Promise.resolve().then(()=>(Co(),No)),{getEntityCount:n}=await Promise.resolve().then(()=>(fe(),Dt)),{getRelationCount:o}=await Promise.resolve().then(()=>(Xe(),Cn)),{getFactCount:i,getHotFacts:a}=await Promise.resolve().then(()=>(qe(),pr)),{getEntityHebbianStats:s}=await Promise.resolve().then(()=>($n(),Wi)),{default:c}=await Promise.resolve().then(()=>(A(),P)),l=t.namespace||null,d=Number.isFinite(t.hotFactsLimit)?t.hotFactsLimit:5,p=!0,f=null;try{await c.raw("SELECT 1")}catch(T){p=!1,f=T.message}try{let{setDbHealth:T}=await Promise.resolve().then(()=>(zt(),io));T({healthy:p,error:f,checkedAt:Date.now()})}catch{}if(!p)return{namespace:l,db:{healthy:!1,error:f},documents:0,chunks:0,facts:0,entities:{documents:0,people:0,topics:0},relations:0,podsByType:{},hotFacts:[],hebbian:null};let[h,w,y,E,I,_,O,v,x]=await Promise.all([r(l),i(l),n("document"),n("person"),n("topic"),o(),c("pod").where({status:"active"}).select("podType"),s({topN:3}).catch(()=>null),a(l,{limit:d}).catch(()=>[])]),G=O.reduce((T,pe)=>(T[pe.podType]=(T[pe.podType]||0)+1,T),{});return{namespace:l,db:{healthy:!0,error:null},documents:h.documentCount,chunks:h.totalChunks,facts:w,entities:{documents:y,people:E,topics:I},relations:_,podsByType:G,hotFacts:(x||[]).map(T=>({id:T.id??null,content:T.content,accessCount:T.accessCount??0})),hebbian:v?{edgeCount:v.edgeCount,avgStrength:v.avgStrength??0,maxStrength:v.maxStrength??0,topPairs:(v.topPairs||[]).map(T=>({a:T.aName,b:T.bName,decayed:Number(T.decayed)||0}))}:null}})}function Pp(e){e.register("searchEntity",async t=>{let{searchByName:r,listByType:n}=await Promise.resolve().then(()=>(fe(),Dt)),{query:o,entityType:i,limit:a=10,namespace:s}=t;if(!o&&!i){let l=new Error("searchEntity: provide query or entityType");throw l.code="invalid_params",l}let c=o?await r(o,{entityType:i,namespace:s,limit:a}):await n(i,{namespace:s,limit:a});return{query:o||null,entityType:i||null,entities:c.map(l=>({id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0}))}})}function Bp(e){e.register("traverseGraph",async t=>{let{findById:r}=await Promise.resolve().then(()=>(fe(),Dt)),{getEntityNeighborhood:n,findPath:o,findRelated:i}=await Promise.resolve().then(()=>($p(),Fp)),{startEntityId:a,action:s="neighbors",targetEntityId:c,relationType:l,maxDepth:d=2,limit:p=20}=t;if(!Number.isFinite(a)){let y=new Error("traverseGraph: startEntityId required");throw y.code="invalid_params",y}let f=await r(a);if(!f)return{ok:!1,notFound:!0,startEntityId:a};let h={id:f.id,name:f.name,entityType:f.entityType};if(s==="path"){if(!Number.isFinite(c)){let E=new Error("traverseGraph: targetEntityId required for action=path");throw E.code="invalid_params",E}let y=await o(f.id,c,{maxDepth:Math.min(d,4)});return{action:s,start:h,targetEntityId:c,path:y||null}}if(s==="related"){let y=await i(f.id,{maxDepth:Math.min(d,3),relationType:l,limit:p});return{action:s,start:h,related:y}}let w=await n(f.id,{depth:Math.min(d,3),limit:p});return{action:"neighbors",start:h,relations:w.relations||[],related:w.related||null}})}function Hp(e){e.register("getFactContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(A(),P)),{findByUid:n}=await Promise.resolve().then(()=>(qe(),pr)),{getEntitiesForFact:o}=await Promise.resolve().then(()=>(Qe(),vi)),{getRelationsByFact:i}=await Promise.resolve().then(()=>(Xe(),Cn)),{uid:a,factId:s}=t;if(!a&&!Number.isFinite(s)){let f=new Error("getFactContext: provide uid or factId");throw f.code="invalid_params",f}let c;if(a?c=await n(a):c=await r("fact").where({id:s}).first(),!c)return{notFound:!0};let[l,d,p]=await Promise.all([o(c.id),i(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(f=>({id:f.id,name:f.name,entityType:f.entityType})),relations:d,documents:p.map(f=>({id:f.id,title:f.title,sourceType:f.sourceType}))}})}function Up(e){e.register("getEntityContext",async t=>{let{findById:r,searchByName:n}=await Promise.resolve().then(()=>(fe(),Dt)),{listRelationsForEntity:o}=await Promise.resolve().then(()=>(Xe(),Cn)),{getFactsForEntity:i}=await Promise.resolve().then(()=>(Qe(),vi)),{entityId:a,name:s,namespace:c}=t;if(!Number.isFinite(a)&&!s){let f=new Error("getEntityContext: provide entityId or name");throw f.code="invalid_params",f}let l;if(Number.isFinite(a)?l=await r(a):l=(await n(s,{namespace:c,limit:1}))[0],!l)return{notFound:!0};let[d,p]=await Promise.all([o(l.id,{limit:30}),i(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(f=>({id:f.id,content:f.content,category:f.category??null,confidence:f.confidence??null}))}})}function Gp(e){e.register("getPod",async t=>{let{findByUid:r}=await Promise.resolve().then(()=>(ke(),Ze)),{listMembers:n}=await Promise.resolve().then(()=>(_r(),Ft)),{uid:o}=t;if(!o){let l=new Error("getPod: uid required");throw l.code="invalid_params",l}let i=await r(o);if(!i)return{notFound:!0,uid:o};let a=typeof i.attrs=="object"?i.attrs:iI(i.attrs),[s,c]=await Promise.all([n(i.id,{memberType:"fact",limit:20}),n(i.id,{memberType:"document",limit:10})]);return{pod:{id:i.id,uid:i.uid,name:i.name,podType:i.podType,namespace:i.namespace,status:i.status,startedAt:i.startedAt??null,endedAt:i.endedAt??null,entityId:i.entityId??null,connectionId:i.connectionId??null,externalId:i.externalId??null,attrs:a},facts:s.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 iI(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}function jp(e){e.register("listPods",async t=>{let{listPods:r}=await Promise.resolve().then(()=>(ke(),Ze)),{type:n,namespace:o,status:i="active",limit:a=20}=t;return{pods:(await r({podType:n,namespace:o,status:i,limit:a})).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}))}})}function Jp(e){e.register("ingestDoc",async t=>{let{ingestDocument:r}=await Promise.resolve().then(()=>(Hi(),Bi)),{resolveSource:n}=await Promise.resolve().then(()=>(zp(),Vp)),{content:o,filePath:i,url:a,title:s,namespace:c,sourceType:l,skipFacts:d,skipEntities:p,metadata:f}=t,h=await n({content:o,filePath:i,url:a,title:s,sourceType:l});if(!h){let _=new Error("ingestDoc: provide content, filePath, or url");throw _.code="invalid_params",_}let w=await r({content:h.content,title:s||h.title,sourcePath:h.sourcePath,sourceType:l||h.sourceType,contentType:h.contentType,namespace:c,metadata:f||h.metadata,skipFacts:d,skipEntities:p}),y={skipped:!!w.skipped,title:w.title??null,documentId:w.documentId??null,chunkCount:w.chunkCount??0,facts:w.facts??null,entities:w.entities??null,output:w.md?.url??null},E=y.facts||{},{recordTrace:I}=await Promise.resolve().then(()=>(Me(),Pe));return I({kind:"ingest",summary:`ingest "${String(y.title||"document").slice(0,60)}" \u2192 ${y.chunkCount} chunks, +${E.added??0} facts${y.skipped?" (skipped)":""}`,namespace:c||null,detail:{op:"ingestDoc",title:y.title,documentId:y.documentId,skipped:y.skipped,route:w.route??null,chunkCount:y.chunkCount,counts:{added:E.added??0,updated:E.updated??0,skipped:E.skipped??0,contradicted:E.contradicted??0,total:E.total??0},verdicts:E.verdicts||[],entities:y.entities?{entityCount:y.entities.entityCount,relationCount:y.entities.relationCount,topics:y.entities.topics||[]}:null}}).catch(()=>{}),y})}function Xp(e){e.register("listFacts",async t=>{let{listFacts:r}=await Promise.resolve().then(()=>(qe(),pr)),{default:n}=await Promise.resolve().then(()=>(S(),q)),o=t.namespace||n.defaults.namespace,i=t.category||void 0,a=Number.isFinite(t.limit)?t.limit:20,s=await r({namespace:o,category:i,limit:a});return{namespace:o,category:i||null,facts:s.map(c=>({id:c.id,uid:c.uid,content:c.content,category:c.category??null,importance:c.importance??null,confidence:c.confidence??null}))}})}function Zp(e){e.register("forgetFact",async t=>{let{deleteFact:r}=await Promise.resolve().then(()=>(qe(),pr)),{default:n}=await Promise.resolve().then(()=>(A(),P)),o=String(t.id??"").trim();if(!o){let s=new Error("forgetFact: params.id required");throw s.code="invalid_params",s}let[i]=/^\d+$/.test(o)?await n("fact").where({id:Number(o)}).limit(1):await n("fact").where("uid","like",`${o}%`).limit(1);if(!i)return{notFound:!0,query:o};let a=await r(i.uid);return a?{deleted:{uid:a.uid,content:a.content}}:{notFound:!0,query:o}})}function Sm(e){e.register("refreshContext.fetch",async t=>{let{default:r}=await Promise.resolve().then(()=>(S(),q)),{getHotFacts:n}=await Promise.resolve().then(()=>(Tr(),vr)),o=t.namespace||r.defaults.namespace,i=Number.isFinite(t.limit)?t.limit:20,a=await n({namespace:o,limit:i});return{namespace:o,facts:a}}),e.register("refreshContext.explain",async t=>{let{default:r}=await Promise.resolve().then(()=>(S(),q)),n=t.namespace||r.defaults.namespace;await Promise.resolve().then(()=>(Mn(),np));let{activeKinds:o}=await Promise.resolve().then(()=>(Ir(),Jf)),{factsInPodsByRecency:i}=await Promise.resolve().then(()=>(Tr(),vr)),a={namespace:n,cwd:t.cwd||process.cwd()},s=await o(a),c=[];for(let{kind:l,scope:d}of s){let p,f=null;try{typeof l.fetchFacts=="function"?p=await l.fetchFacts(a,{slots:l.hotContextBudget,namespace:n}):p=await i(d,n,l.hotContextBudget)}catch(h){p=[],f=h.message}c.push({name:l.name,budget:l.hotContextBudget,visibility:l.visibility,error:f,facts:(p||[]).slice(0,l.hotContextBudget).map(h=>({content:typeof h=="string"?h:h.content||""}))})}return{mode:"explain",namespace:n,sections:c}}),e.register("refreshContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(S(),q)),{getMemoryClient:n}=await Promise.resolve().then(()=>(Cr(),Nr)),o=t.namespace||r.defaults.namespace,i=Number.isFinite(t.limit)?t.limit:20,a=!!t.explain,s=await n();if(a)return s.call("refreshContext.explain",{namespace:o,cwd:t.cwd});let{facts:c}=await s.call("refreshContext.fetch",{namespace:o,limit:i}),{writeSnapshotToFile:l}=await Promise.resolve().then(()=>(Tr(),vr)),{writeSharedInstructions:d}=await Promise.resolve().then(()=>(bm(),xm));await d();let p=await l({facts:c,namespace:o});return{mode:"write",namespace:o,count:p}})}it();tt();import XI from"pg";function vm(e){e.register("testDbConnection",async t=>{if(t.url)return ea(t.url);let r;try{r=se({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}catch(i){return{ok:!1,stage:"parse",error:i.message}}let n=new XI.Client(r),o=Date.now();try{await n.connect()}catch(i){return{ok:!1,stage:"connect",provider:"local",error:i.message,code:i.code}}try{let i=await n.query("SELECT current_database() AS db, version() AS version"),a=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:"local",connectMs:Date.now()-o,database:i.rows[0].db,serverVersion:i.rows[0].version,pgvector:a.rowCount>0}}catch(i){return{ok:!1,stage:"query",provider:"local",error:i.message,code:i.code}}finally{try{await n.end()}catch{}}})}L();it();at();import ZI from"knex";function Tm(e){e.register("runMigrations",async(t={})=>{if(t.url||t.host){let i;if(t.url){let s=t.url;if(jr(t.url)){let c=po(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.");s=c}i=ce(s)}else i=se({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});let a=ZI({client:"pg",connection:i,pool:{min:1,max:2}});try{let[s,c]=await a.migrate.latest({directory:nt});return{batchNo:s,ran:c,against:t.url?"url":"fields"}}finally{await a.destroy()}}let{default:r}=await Promise.resolve().then(()=>(A(),P)),[n,o]=await r.migrate.latest({directory:nt});return{batchNo:n,ran:o,against:"daemon-pool"}})}it();at();import QI from"pg";function Om(e){e.register("ensurePgvector",async(t={})=>{let r,n="local";try{if(t.url)r=ce(t.url),n=be(t.url);else if(t.host)r=se({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:i}=await Promise.resolve().then(()=>(S(),q)),{selectDriver:a}=await Promise.resolve().then(()=>(Wr(),ho)),s=a(i);r=s.connection,n=s.provider}}catch(i){return{ok:!1,stage:"parse",error:i.message}}let o=new QI.Client(r);try{await o.connect()}catch(i){return{ok:!1,stage:"connect",provider:n,error:i.message,code:i.code}}try{await o.query("CREATE EXTENSION IF NOT EXISTS vector");let i=await o.query("SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:n,installed:i.rowCount>0,version:i.rows[0]?.extversion??null}}catch(i){return{ok:!1,stage:"extension",provider:n,error:i.message,code:i.code}}finally{try{await o.end()}catch{}}})}L();import{existsSync as iv,readFileSync as av,writeFileSync as sv,mkdirSync as cv}from"node:fs";import{dirname as lv}from"node:path";var Cm=[{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"}}],na=[{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"}}];function ia(){if(!iv(j))return{};let e=av(j,"utf8"),t={};for(let r of e.split(`
634
- `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let o=n[2].trim();t[n[1]]=o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'")?o.slice(1,-1):o}return t}function oa(e){let r={...ia(),...e};for(let i of Object.keys(e))(e[i]===null||e[i]===void 0)&&delete r[i];cv(lv(j),{recursive:!0});let n=`# Sigil \u2014 updated ${new Date().toISOString().slice(0,10)}
635
- `,o=Object.entries(r).map(([i,a])=>`${i}=${/[\s#"']/.test(String(a))?`"${String(a).replace(/"/g,'\\"')}"`:a}`).join(`
636
- `);sv(j,n+o+`
637
- `,"utf8")}function Rm(e){e.register("onboardingState",async()=>{let t=ia(),r=!!(t.SIGIL_DATABASE_URL||t.SIGIL_DB_HOST),n=!!t.LLM_PROVIDER,o=!!t.EMBEDDING_PROVIDER,i=t.SIGIL_SETUP_COMPLETE==="true",a=!1,s=!1,c=0;if(r)try{let{default:l}=await Promise.resolve().then(()=>(A(),P));await l.raw("SELECT 1"),s=(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),a=s&&c>0}catch{}return{setupComplete:i,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:a,configured:r,pgvector:s,migrationsRan:c},llm:{done:n,provider:t.LLM_PROVIDER||null},embedding:{done:o,provider:t.EMBEDDING_PROVIDER||null}}}}),e.register("listLlmProviders",async()=>({providers:Cm})),e.register("listEmbeddingProviders",async()=>({providers:na})),e.register("configureLlm",async t=>{let r=Cm.find(o=>o.id===t.id);if(!r){let o=new Error(`unknown llm provider: ${t.id}`);throw o.code="invalid_params",o}let n={...r.env};for(let o of r.fields)o.optional&&!t[o.name]||(n[o.name]=t[o.name]);return oa(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("configureEmbedding",async t=>{let r=na.find(o=>o.id===t.id);if(!r){let o=new Error(`unknown embedding provider: ${t.id}`);throw o.code="invalid_params",o}let n={...r.env};for(let o of r.fields)o.optional&&!t[o.name]||o.sharedWith==="llm"&&!t[o.name]&&ia()[o.name]||(n[o.name]=t[o.name]);return oa(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("inspectEmbeddingCompat",async(t={})=>{let r=t.id?na.find(i=>i.id===t.id):null,n=Number(t.targetDim??r?.env?.EMBEDDING_DIMENSIONS??0);if(!n){let i=new Error("inspectEmbeddingCompat: need a provider id or targetDim");throw i.code="invalid_params",i}let o;try{if(t.url){let{buildUrlConnection:i}=await Promise.resolve().then(()=>(at(),es));o=i(t.url)}else if(t.host){let{buildLocalConnection:i}=await Promise.resolve().then(()=>(it(),Za));o=i({db:{host:t.host,port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}else{let{default:i}=await Promise.resolve().then(()=>(S(),q)),{selectDriver:a}=await Promise.resolve().then(()=>(Wr(),ho));o=a(i).connection}}catch(i){let{diagnoseError:a}=await Promise.resolve().then(()=>(tt(),Wt)),s=a(i);return{ok:!1,error:s.humanMessage,kind:s.kind,fixHint:s.fixHint}}try{let{inspectSchemaDims:i,diagnoseConflict:a}=await Promise.resolve().then(()=>(ra(),ta)),s=await i(o);return{ok:!0,...a({targetDim:n,schema:s}),schema:s}}catch(i){let{diagnoseError:a}=await Promise.resolve().then(()=>(tt(),Wt)),s=a(i);return{ok:!1,error:s.humanMessage,kind:s.kind,fixHint:s.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(()=>(A(),P)),{EMBEDDING_TABLES:n}=await Promise.resolve().then(()=>(ra(),ta));return await r.raw(`TRUNCATE ${n.join(", ")} RESTART IDENTITY CASCADE`),{ok:!0,truncated:n}}catch(r){let{diagnoseError:n}=await Promise.resolve().then(()=>(tt(),Wt)),o=n(r);return{ok:!1,error:o.humanMessage,kind:o.kind,fixHint:o.fixHint}}}),e.register("markOnboardingComplete",async()=>(oa({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(()=>(ee(),Ls));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(()=>(tt(),Wt)),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(()=>(ct(),Rs)),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(()=>(tt(),Wt)),n=r(t);return{ok:!1,error:n.humanMessage,kind:n.kind,fixHint:n.fixHint}}})}L();import{existsSync as Dm}from"node:fs";import{readFile as Lm,writeFile as uv,mkdir as dv}from"node:fs/promises";import{dirname as fv}from"node:path";var pv=/(KEY|PASSWORD|TOKEN|SECRET)$/i;function Pm(e){e.register("readEnv",async()=>{let t=Dm(j)?await Lm(j,"utf8"):"",r=mv(t),n={};for(let[o,i]of Object.entries(r))pv.test(o)?n[o]={masked:!0,hasValue:!!i}:n[o]={masked:!1,value:i};return{path:j,entries:n}}),e.register("writeEnv",async t=>{let r=t.patch||{};if(typeof r!="object"||Array.isArray(r)){let a=new Error("writeEnv: params.patch must be an object");throw a.code="invalid_params",a}let n=Dm(j)?await Lm(j,"utf8"):"",o=hv(n,r);await dv(fv(j),{recursive:!0}),await uv(j,o,"utf8");let i=["SIGIL_MODE","SIGIL_MASTER_NODE_ID","SIGIL_NETWORK_ENABLED"];if(Object.keys(r).some(a=>i.includes(a)))try{let{resetMemoryClient:a}=await Promise.resolve().then(()=>(Cr(),Nr));a()}catch{}return{ok:!0,path:j,patchedKeys:Object.keys(r)}})}function mv(e){let t={};for(let r of e.split(`
638
- `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let o=n[1],i=n[2].trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),t[o]=i}return t}function hv(e,t){let r=new Set,o=e.split(`
639
- `).map(a=>{let s=a.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=/i);if(!s)return a;let c=s[1];if(!(c in t))return a;r.add(c);let l=t[c];return l==null?null:`${c}=${km(l)}`}).filter(a=>a!==null);for(let[a,s]of Object.entries(t))r.has(a)||s===null||s===void 0||o.push(`${a}=${km(s)}`);let i=o.join(`
714
+ </body></html>`;C();import{readFileSync as jE}from"node:fs";import{join as WE}from"node:path";var on;function KE(){if(on)return on;try{on=JSON.parse(jE(WE(Z,"package.json"),"utf8")).version}catch{on="unknown"}return on}function il(e,{startedAt:t}){e.register("ping",()=>({ok:!0,version:KE(),pid:process.pid,uptimeMs:Date.now()-t,node:process.version}))}function Ih(e){e.register("remember",async t=>{let r=Array.isArray(t.facts)?t.facts.filter(Boolean):[];if(r.length===0){let f=new Error("remember: params.facts must be a non-empty string[]");throw f.code="invalid_params",f}let{ingestDocument:n}=await Promise.resolve().then(()=>(Ha(),Ma)),{default:o}=await Promise.resolve().then(()=>(A(),ne)),i=t.namespace||o.defaults.namespace,s=0,a=0,c=0,l=Date.now(),d=[];for(let f of r){let m=await n({content:f,namespace:i,classify:!0});if(m.skipped||m.route==="noise"){c++,d.push({input:String(f).slice(0,240),route:m.route??null,skipped:!0,verdicts:m.facts?.verdicts||[]});continue}let w=m.facts?.added??0,y=m.facts?.updated??0;s+=w,a+=y,w+y===0&&c++,d.push({input:String(f).slice(0,240),route:m.route??null,skipped:!1,counts:{added:w,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:f}=await Promise.resolve().then(()=>(kn(),Pn));await f({namespace:i}).catch(()=>{})}let{recordTrace:p}=await Promise.resolve().then(()=>(dt(),ut));return p({kind:"ingest",summary:`remember ${r.length} input${r.length===1?"":"s"} \u2192 +${s} added, ~${a} updated, ${c} known`,namespace:i,durationMs:Date.now()-l,detail:{op:"remember",namespace:i,totals:{added:s,updated:a,alreadyKnown:c,inputCount:r.length},inputs:d}}).catch(()=>{}),{added:s,updated:a,alreadyKnown:c,namespace:i}})}function Zh(e){e.register("search",async t=>{let r=(t.query??"").trim();if(!r){let q=new Error("search: params.query is required");throw q.code="invalid_params",q}let{search:n}=await Promise.resolve().then(()=>(Xh(),zh)),{default:o}=await Promise.resolve().then(()=>(A(),ne)),i=Array.isArray(t.namespaces)&&t.namespaces.length?t.namespaces:[o.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,f=t.pointInTime?new Date(t.pointInTime):void 0,m=t.podScope??"auto",w=t.applyFloor??!1,y={cwd:t.cwd||null,sessionId:t.sessionId||null},E=await n(r,{namespaces:i,limit:s,useGraph:a,route:c,synthesize:l,includeChunks:d,minConfidence:p,pointInTime:f,podScope:m,applyFloor:w,ctx:y}),b={query:r,namespaces:i,facts:(E.facts||[]).map(sC),chunks:(E.chunks||[]).map(aC),synthesized:E.synthesized||null,matchedEntity:E.matchedEntity||null,relatedEntities:E.relatedEntities||[]},_=E._trace||{},R=r.length>80?r.slice(0,80)+"\u2026":r,I=_.strategy==="entity-first"?" \xB7 entity-first":"",{recordTrace:S}=await Promise.resolve().then(()=>(dt(),ut));return S({kind:"search",summary:`"${R}" \u2192 ${b.facts.length} facts, ${b.chunks.length} chunks${I}`,namespace:i[0]||null,durationMs:_.durationMs??null,detail:_}).catch(()=>{}),b})}function sC(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:wi(e.similarity),rrfScore:wi(e.rrfScore),agent:e.createdByAgent??null,device:e.createdByDeviceId??null,sourceDocumentIds:Array.isArray(e.sourceDocumentIds)?e.sourceDocumentIds:[],sourceSection:e.sourceSection??null}}function aC(e){return{id:e.id??null,content:e.content,sectionHeading:e.sectionHeading??null,similarity:wi(e.similarity),rrfScore:wi(e.rrfScore)}}function wi(e){let t=Number(e);return Number.isFinite(t)?t:null}function Qh(e){e.register("status",async t=>{let{getStats:r}=await Promise.resolve().then(()=>(Os(),Is)),{getEntityCount:n}=await Promise.resolve().then(()=>(ve(),Ir)),{getRelationCount:o}=await Promise.resolve().then(()=>(Ct(),si)),{getFactCount:i,getHotFacts:s}=await Promise.resolve().then(()=>(Tt(),xn)),{getEntityHebbianStats:a}=await Promise.resolve().then(()=>(mi(),Ua)),{default:c}=await Promise.resolve().then(()=>(T(),F)),l=t.namespace||null,d=Number.isFinite(t.hotFactsLimit)?t.hotFactsLimit:5,p=!0,f=null;try{await c.raw("SELECT 1")}catch(O){p=!1,f=O.message}try{let{setDbHealth:O}=await Promise.resolve().then(()=>(Zt(),rs));O({healthy:p,error:f,checkedAt:Date.now()})}catch{}if(!p)return{namespace:l,db:{healthy:!1,error:f},documents:0,chunks:0,facts:0,entities:{documents:0,people:0,topics:0},relations:0,podsByType:{},hotFacts:[],hebbian:null};let[m,w,y,E,b,_,R,I,S]=await Promise.all([r(l),i(l),n("document"),n("person"),n("topic"),o(),c("pod").where({status:"active"}).select("podType"),a({topN:3}).catch(()=>null),s(l,{limit:d}).catch(()=>[])]),q=R.reduce((O,Pe)=>(O[Pe.podType]=(O[Pe.podType]||0)+1,O),{});return{namespace:l,db:{healthy:!0,error:null},documents:m.documentCount,chunks:m.totalChunks,facts:w,entities:{documents:y,people:E,topics:b},relations:_,podsByType:q,hotFacts:(S||[]).map(O=>({id:O.id??null,content:O.content,accessCount:O.accessCount??0})),hebbian:I?{edgeCount:I.edgeCount,avgStrength:I.avgStrength??0,maxStrength:I.maxStrength??0,topPairs:(I.topPairs||[]).map(O=>({a:O.aName,b:O.bName,decayed:Number(O.decayed)||0}))}:null}})}function eg(e){e.register("searchEntity",async t=>{let{searchByName:r,listByType:n}=await Promise.resolve().then(()=>(ve(),Ir)),{query:o,entityType:i,limit:s=10,namespace:a}=t;if(!o&&!i){let l=new Error("searchEntity: provide query or entityType");throw l.code="invalid_params",l}let c=o?await r(o,{entityType:i,namespace:a,limit:s}):await n(i,{namespace:a,limit:s});return{query:o||null,entityType:i||null,entities:c.map(l=>({id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0}))}})}function og(e){e.register("traverseGraph",async t=>{let{findById:r}=await Promise.resolve().then(()=>(ve(),Ir)),{getEntityNeighborhood:n,findPath:o,findRelated:i}=await Promise.resolve().then(()=>(ng(),rg)),{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 f=await r(s);if(!f)return{ok:!1,notFound:!0,startEntityId:s};let m={id:f.id,name:f.name,entityType:f.entityType};if(a==="path"){if(!Number.isFinite(c)){let E=new Error("traverseGraph: targetEntityId required for action=path");throw E.code="invalid_params",E}let y=await o(f.id,c,{maxDepth:Math.min(d,4)});return{action:a,start:m,targetEntityId:c,path:y||null}}if(a==="related"){let y=await i(f.id,{maxDepth:Math.min(d,3),relationType:l,limit:p});return{action:a,start:m,related:y}}let w=await n(f.id,{depth:Math.min(d,3),limit:p});return{action:"neighbors",start:m,relations:w.relations||[],related:w.related||null}})}function ig(e){e.register("getFactContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(T(),F)),{findByUid:n}=await Promise.resolve().then(()=>(Tt(),xn)),{getEntitiesForFact:o}=await Promise.resolve().then(()=>(vt(),Aa)),{getRelationsByFact:i}=await Promise.resolve().then(()=>(Ct(),si)),{uid:s,factId:a}=t;if(!s&&!Number.isFinite(a)){let f=new Error("getFactContext: provide uid or factId");throw f.code="invalid_params",f}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([o(c.id),i(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(f=>({id:f.id,name:f.name,entityType:f.entityType})),relations:d,documents:p.map(f=>({id:f.id,title:f.title,sourceType:f.sourceType}))}})}function sg(e){e.register("getEntityContext",async t=>{let{findById:r,searchByName:n}=await Promise.resolve().then(()=>(ve(),Ir)),{listRelationsForEntity:o}=await Promise.resolve().then(()=>(Ct(),si)),{getFactsForEntity:i}=await Promise.resolve().then(()=>(vt(),Aa)),{entityId:s,name:a,namespace:c}=t;if(!Number.isFinite(s)&&!a){let f=new Error("getEntityContext: provide entityId or name");throw f.code="invalid_params",f}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([o(l.id,{limit:30}),i(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(f=>({id:f.id,content:f.content,category:f.category??null,confidence:f.confidence??null}))}})}function ag(e){e.register("getPod",async t=>{let{findByUid:r}=await Promise.resolve().then(()=>(lt(),Nt)),{listMembers:n}=await Promise.resolve().then(()=>(Rn(),vr)),{uid:o}=t;if(!o){let l=new Error("getPod: uid required");throw l.code="invalid_params",l}let i=await r(o);if(!i)return{notFound:!0,uid:o};let s=typeof i.attrs=="object"?i.attrs:dC(i.attrs),[a,c]=await Promise.all([n(i.id,{memberType:"fact",limit:20}),n(i.id,{memberType:"document",limit:10})]);return{pod:{id:i.id,uid:i.uid,name:i.name,podType:i.podType,namespace:i.namespace,status:i.status,startedAt:i.startedAt??null,endedAt:i.endedAt??null,entityId:i.entityId??null,connectionId:i.connectionId??null,externalId:i.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 dC(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}function cg(e){e.register("listPods",async t=>{let{listPods:r}=await Promise.resolve().then(()=>(lt(),Nt)),{type:n,namespace:o,status:i="active",limit:s=20}=t;return{pods:(await r({podType:n,namespace:o,status:i,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}))}})}function hg(e){e.register("ingestDoc",async t=>{let{ingestDocument:r}=await Promise.resolve().then(()=>(Ha(),Ma)),{resolveSource:n}=await Promise.resolve().then(()=>(mg(),pg)),{content:o,filePath:i,url:s,title:a,namespace:c,sourceType:l,skipFacts:d,skipEntities:p,metadata:f}=t,m=await n({content:o,filePath:i,url:s,title:a,sourceType:l});if(!m){let _=new Error("ingestDoc: provide content, filePath, or url");throw _.code="invalid_params",_}let w=await r({content:m.content,title:a||m.title,sourcePath:m.sourcePath,sourceType:l||m.sourceType,contentType:m.contentType,namespace:c,metadata:f||m.metadata,skipFacts:d,skipEntities:p}),y={skipped:!!w.skipped,title:w.title??null,documentId:w.documentId??null,chunkCount:w.chunkCount??0,facts:w.facts??null,entities:w.entities??null,output:w.md?.url??null},E=y.facts||{},{recordTrace:b}=await Promise.resolve().then(()=>(dt(),ut));return b({kind:"ingest",summary:`ingest "${String(y.title||"document").slice(0,60)}" \u2192 ${y.chunkCount} chunks, +${E.added??0} facts${y.skipped?" (skipped)":""}`,namespace:c||null,detail:{op:"ingestDoc",title:y.title,documentId:y.documentId,skipped:y.skipped,route:w.route??null,chunkCount:y.chunkCount,counts:{added:E.added??0,updated:E.updated??0,skipped:E.skipped??0,contradicted:E.contradicted??0,total:E.total??0},verdicts:E.verdicts||[],entities:y.entities?{entityCount:y.entities.entityCount,relationCount:y.entities.relationCount,topics:y.entities.topics||[]}:null}}).catch(()=>{}),y})}function gg(e){e.register("listFacts",async t=>{let{listFacts:r}=await Promise.resolve().then(()=>(Tt(),xn)),{default:n}=await Promise.resolve().then(()=>(A(),ne)),o=t.namespace||n.defaults.namespace,i=t.category||void 0,s=Number.isFinite(t.limit)?t.limit:20,a=await r({namespace:o,category:i,limit:s});return{namespace:o,category:i||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}))}})}function yg(e){e.register("forgetFact",async t=>{let{deleteFact:r}=await Promise.resolve().then(()=>(Tt(),xn)),{default:n}=await Promise.resolve().then(()=>(T(),F)),o=String(t.id??"").trim();if(!o){let a=new Error("forgetFact: params.id required");throw a.code="invalid_params",a}let[i]=/^\d+$/.test(o)?await n("fact").where({id:Number(o)}).limit(1):await n("fact").where("uid","like",`${o}%`).limit(1);if(!i)return{notFound:!0,query:o};let s=await r(i.uid);return s?{deleted:{uid:s.uid,content:s.content}}:{notFound:!0,query:o}})}function Bg(e){e.register("refreshContext.fetch",async t=>{let{default:r}=await Promise.resolve().then(()=>(A(),ne)),{getHotFacts:n}=await Promise.resolve().then(()=>(kn(),Pn)),o=t.namespace||r.defaults.namespace,i=Number.isFinite(t.limit)?t.limit:20,s=await n({namespace:o,limit:i});return{namespace:o,facts:s}}),e.register("refreshContext.explain",async t=>{let{default:r}=await Promise.resolve().then(()=>(A(),ne)),n=t.namespace||r.defaults.namespace;await Promise.resolve().then(()=>(fi(),Sh));let{activeKinds:o}=await Promise.resolve().then(()=>(Ln(),hh)),{factsInPodsByRecency:i}=await Promise.resolve().then(()=>(kn(),Pn)),s={namespace:n,cwd:t.cwd||process.cwd()},a=await o(s),c=[];for(let{kind:l,scope:d}of a){let p,f=null;try{typeof l.fetchFacts=="function"?p=await l.fetchFacts(s,{slots:l.hotContextBudget,namespace:n}):p=await i(d,n,l.hotContextBudget)}catch(m){p=[],f=m.message}c.push({name:l.name,budget:l.hotContextBudget,visibility:l.visibility,error:f,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(()=>(A(),ne)),{getMemoryClient:n}=await Promise.resolve().then(()=>(Bn(),Hn)),o=t.namespace||r.defaults.namespace,i=Number.isFinite(t.limit)?t.limit:20,s=!!t.explain,a=await n();if(s)return a.call("refreshContext.explain",{namespace:o,cwd:t.cwd});let{facts:c}=await a.call("refreshContext.fetch",{namespace:o,limit:i}),{writeSnapshotToFile:l}=await Promise.resolve().then(()=>(kn(),Pn)),{writeSharedInstructions:d}=await Promise.resolve().then(()=>(Fr(),Hg));await d();let p=await l({facts:c,namespace:o});return{mode:"write",namespace:o,count:p}})}er();Me();import QC from"pg";function Fg(e){e.register("testDbConnection",async t=>{if(t.url)return rn(t.url);let r;try{r=Oe({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}catch(i){return{ok:!1,stage:"parse",error:i.message}}let n=new QC.Client(r),o=Date.now();try{await n.connect()}catch(i){return{ok:!1,stage:"connect",provider:"local",error:i.message,code:i.code}}try{let i=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()-o,database:i.rows[0].db,serverVersion:i.rows[0].version,pgvector:s.rowCount>0}}catch(i){return{ok:!1,stage:"query",provider:"local",error:i.message,code:i.code}}finally{try{await n.end()}catch{}}})}C();er();_t();import eN from"knex";function $g(e){e.register("runMigrations",async(t={})=>{if(t.url||t.host){let i;if(t.url){let a=t.url;if(co(t.url)){let c=qi(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}i=re(a)}else i=Oe({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});let s=eN({client:"pg",connection:i,pool:{min:1,max:2}});try{let[a,c]=await s.migrate.latest({directory:ke});return{batchNo:a,ran:c,against:t.url?"url":"fields"}}finally{await s.destroy()}}let{default:r}=await Promise.resolve().then(()=>(T(),F)),[n,o]=await r.migrate.latest({directory:ke});return{batchNo:n,ran:o,against:"daemon-pool"}})}er();_t();import tN from"pg";function Ug(e){e.register("ensurePgvector",async(t={})=>{let r,n="local";try{if(t.url)r=re(t.url),n=ze(t.url);else if(t.host)r=Oe({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:i}=await Promise.resolve().then(()=>(A(),ne)),{selectDriver:s}=await Promise.resolve().then(()=>(wo(),us)),a=s(i);r=a.connection,n=a.provider}}catch(i){return{ok:!1,stage:"parse",error:i.message}}let o=new tN.Client(r);try{await o.connect()}catch(i){return{ok:!1,stage:"connect",provider:n,error:i.message,code:i.code}}try{await o.query("CREATE EXTENSION IF NOT EXISTS vector");let i=await o.query("SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:n,installed:i.rowCount>0,version:i.rows[0]?.extversion??null}}catch(i){return{ok:!1,stage:"extension",provider:n,error:i.message,code:i.code}}finally{try{await o.end()}catch{}}})}$r();var Za=[{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"}}],Fn=[{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"}}],S2=Object.fromEntries(Fn.map(e=>[e.id,{model:e.env.EMBEDDING_MODEL,dimensions:Number(e.env.EMBEDDING_DIMENSIONS)}]));C();$r();Xt();import{existsSync as aN,readFileSync as cN,writeFileSync as lN,mkdirSync as uN,renameSync as dN}from"node:fs";import{dirname as fN}from"node:path";var k={PENDING:"PENDING",ACTIVE:"ACTIVE",DONE:"DONE",SKIPPED:"SKIPPED",ERROR:"ERROR"},jg=new Set([k.DONE,k.SKIPPED]),Qa=[{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}],$n=Qa.map(e=>e.id),Wg=Object.fromEntries(Qa.map(e=>[e.id,e]));function Kg(e){return Qa.every(t=>{let r=e[t.id]?.status;return t.skippable?jg.has(r):r===k.DONE})}function Yg(e){return $n.find(r=>!jg.has(e[r]?.status))||"FINISH"}var Vg=1;function ec(){return new Date().toISOString()}function Ur(){let e={};for(let r of $n)e[r]={status:k.PENDING,error:null,data:{}};let t=ec();return{version:Vg,status:"IN_PROGRESS",currentStep:$n[0],startedAt:t,updatedAt:t,steps:e}}function Ei(e=ro){try{if(!aN(e))return Ur();let t=JSON.parse(cN(e,"utf8"));if(!t||typeof t!="object"||t.version!==Vg||!t.steps)return Ur();let r=Ur(),n={...r.steps};for(let o of $n)t.steps[o]&&(n[o]={status:k.PENDING,error:null,data:{},...t.steps[o]});return{...r,...t,steps:n}}catch{return Ur()}}function Un(e,t=ro){uN(fN(t),{recursive:!0});let r=`${t}.${process.pid}.tmp`;return lN(r,JSON.stringify(e,null,2),"utf8"),dN(r,t),e}function qg(e){return JSON.parse(JSON.stringify(e))}function Jg(e){Kg(e.steps)?(e.status="COMPLETED",e.currentStep="FINISH"):(e.status="IN_PROGRESS",e.currentStep=Yg(e.steps))}function tc(e,{step:t,status:r,data:n,error:o}={}){let i=Wg[t];if(!i)throw new H({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`unknown onboarding step: ${t}`});if(!k[r])throw new H({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`unknown step status: ${r}`});let s=qg(e),c={...s.steps[t].data||{},...n||{}};if(r===k.DONE&&!i.validate(c))throw new H({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`step ${t} cannot be marked DONE: its invariant is not satisfied`,data:{step:t,data:c}});if(r===k.SKIPPED&&!i.skippable)throw new H({errorCode:"ONBOARDING_INVALID_TRANSITION",message:`step ${t} is not skippable`});return s.steps[t]={status:r,error:o||null,data:c},Jg(s),s.updatedAt=ec(),s}async function pN(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(()=>(T(),F));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[o]=await r("knex_migrations").count("* as n").catch(()=>[{n:0}]);t.migrationsRan=Number(o?.n??0)}catch{}return t}async function rc(e,{readEnv:t=De,probeDb:r=pN}={}){let n=t(),o=qg(e),i=n.SIGIL_SETUP_COMPLETE==="true",s=(p,f,m)=>{let w=o.steps[p];o.steps[p]={status:f,error:f===k.ERROR?w.error:null,data:{...w.data||{},...m||{}}}},a=p=>o.steps[p].status===k.DONE;n.LLM_PROVIDER&&s("PROVIDER",k.DONE,{llmProvider:n.LLM_PROVIDER}),n.EMBEDDING_PROVIDER&&s("EMBEDDING",k.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")?k.DONE:o.steps.DATABASE.status,l),i&&(n.LLM_PROVIDER&&s("PROVIDER",k.DONE,{}),n.EMBEDDING_PROVIDER&&s("EMBEDDING",k.DONE,{}),c.configured&&s("DATABASE",k.DONE,{}),o.steps.CONNECTORS.status===k.PENDING&&s("CONNECTORS",k.SKIPPED,{}),s("FINISH",k.DONE,{})),Jg(o),o.updatedAt=ec(),o}function _i(e,t=De()){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===k.DONE,configured:!!r.DATABASE.data?.configured,pgvector:!!r.DATABASE.data?.pgvector,migrationsRan:Number(r.DATABASE.data?.migrationsRan||0)},llm:{done:r.PROVIDER.status===k.DONE,provider:r.PROVIDER.data?.llmProvider||null},embedding:{done:r.EMBEDDING.status===k.DONE,provider:r.EMBEDDING.data?.provider||null}}}}function ay(e){e.register("onboardingState",async()=>{let t=Ei(),r=JSON.stringify(t),n=await rc(t);return JSON.stringify(n)!==r&&Un(n),{..._i(n),machine:n}}),e.register("onboardingAdvance",async(t={})=>{let r=tc(Ei(),{step:t.step,status:t.status,data:t.data,error:t.error});return Un(r),{..._i(r),machine:r}}),e.register("onboardingReset",async()=>{let t=Un(Ur());return gt({SIGIL_SETUP_COMPLETE:null}),{..._i(t),machine:t}}),e.register("listLlmProviders",async()=>({providers:Za})),e.register("listEmbeddingProviders",async()=>({providers:Fn})),e.register("configureLlm",async t=>{let r=Za.find(o=>o.id===t.id);if(!r){let o=new Error(`unknown llm provider: ${t.id}`);throw o.code="invalid_params",o}let n={...r.env};for(let o of r.fields)o.optional&&!t[o.name]||(n[o.name]=t[o.name]);return gt(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("configureEmbedding",async t=>{let r=Fn.find(o=>o.id===t.id);if(!r){let o=new Error(`unknown embedding provider: ${t.id}`);throw o.code="invalid_params",o}let n={...r.env};for(let o of r.fields)o.optional&&!t[o.name]||o.sharedWith==="llm"&&!t[o.name]&&De()[o.name]||(n[o.name]=t[o.name]);return gt(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("inspectEmbeddingCompat",async(t={})=>{let r=t.id?Fn.find(i=>i.id===t.id):null,n=Number(t.targetDim??r?.env?.EMBEDDING_DIMENSIONS??0);if(!n){let i=new Error("inspectEmbeddingCompat: need a provider id or targetDim");throw i.code="invalid_params",i}let o;try{if(t.url){let{buildUrlConnection:i}=await Promise.resolve().then(()=>(_t(),jc));o=i(t.url)}else if(t.host){let{buildLocalConnection:i}=await Promise.resolve().then(()=>(er(),Sl));o=i({db:{host:t.host,port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}else{let{default:i}=await Promise.resolve().then(()=>(A(),ne)),{selectDriver:s}=await Promise.resolve().then(()=>(wo(),us));o=s(i).connection}}catch(i){let{diagnoseError:s}=await Promise.resolve().then(()=>(Me(),Jt)),a=s(i);return{ok:!1,error:a.humanMessage,kind:a.kind,fixHint:a.fixHint}}try{let{inspectSchemaDims:i,diagnoseConflict:s}=await Promise.resolve().then(()=>(oc(),nc)),a=await i(o);return{ok:!0,...s({targetDim:n,schema:a}),schema:a}}catch(i){let{diagnoseError:s}=await Promise.resolve().then(()=>(Me(),Jt)),a=s(i);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(()=>(T(),F)),{EMBEDDING_TABLES:n}=await Promise.resolve().then(()=>(oc(),nc));return await r.raw(`TRUNCATE ${n.join(", ")} RESTART IDENTITY CASCADE`),{ok:!0,truncated:n}}catch(r){let{diagnoseError:n}=await Promise.resolve().then(()=>(Me(),Jt)),o=n(r);return{ok:!1,error:o.humanMessage,kind:o.kind,fixHint:o.fixHint}}}),e.register("markOnboardingComplete",async(t={})=>{gt({SIGIL_SETUP_COMPLETE:"true"});try{let n=await rc(Ei());Un(tc(n,{step:"FINISH",status:"DONE"}))}catch{}let r=!1;if(t.installService)try{let{installServiceUnit:n}=await Promise.resolve().then(()=>(dc(),sy));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(()=>(Ao(),Wl)),{readEnvRaw:n}=await Promise.resolve().then(()=>($r(),Gg)),o=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"])o[c]&&(process.env[c]=o[c]);t();let i=await r(),{prompt:s}=await Promise.resolve().then(()=>(ye(),Zl)),a=await s("Reply with the single word: ok",{caller:"onboarding-test"});return{ok:!0,response:String(a).slice(0,200),provider:i}}catch(t){return{ok:!1,error:t.message,kind:"llm"}}}),e.register("testEmbedding",async()=>{try{let{embed:t}=await Promise.resolve().then(()=>(rr(),zl)),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(()=>(Me(),Jt)),n=r(t);return{ok:!1,error:n.humanMessage,kind:n.kind,fixHint:n.fixHint}}})}var RD={"claude-code":()=>Promise.resolve().then(()=>(fy(),dy)),cursor:()=>Promise.resolve().then(()=>(Ey(),wy)),"codex-cli":()=>Promise.resolve().then(()=>(nw(),rw)),kiro:()=>Promise.resolve().then(()=>(uw(),lw)),hermes:()=>Promise.resolve().then(()=>(mw(),pw))};async function Sc(){return await Promise.all(Object.entries(RD).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}}))}Xt();function CD(e,t){return t?"connected":e?"available":"unavailable"}async function hw(e){let r=(await Sc()).find(n=>n.id===e);if(!r)throw new H({errorCode:"VALIDATION_ERROR",message:`unknown connector: ${e}`});return r}function gw(e){e.register("listConnectors",async()=>{let t=await Sc();return{connectors:await Promise.all(t.map(async n=>{let[o,i]=await Promise.all([Promise.resolve().then(()=>n.detect()).catch(()=>!1),Promise.resolve().then(()=>n.verify()).catch(a=>({installed:!1,reason:a?.message}))]),s=!!i?.installed;return{id:n.id,label:n.label,hint:n.hint,detected:!!o,installed:s,status:CD(!!o,s),reason:i?.reason||null}}))}}),e.register("connectConnector",async(t={})=>{let r=await hw(t.id),n=[];try{n=(await r.install({dryRun:!1}))?.actions||[]}catch(i){throw new H({errorCode:"CONNECTOR_INSTALL_FAILED",message:i?.message,data:{id:r.id}})}let o=await Promise.resolve().then(()=>r.verify()).catch(i=>({installed:!1,reason:i?.message}));if(!o?.installed)throw new H({errorCode:"CONNECTOR_VERIFY_FAILED",hint:o?.reason||void 0,data:{id:r.id,reason:o?.reason||null}});return{ok:!0,id:r.id,status:"connected",actions:n}}),e.register("disconnectConnector",async(t={})=>{let r=await hw(t.id),n=[];try{n=(await r.uninstall({dryRun:!1}))?.actions||[]}catch(o){throw new H({errorCode:"CONNECTOR_INSTALL_FAILED",message:o?.message,data:{id:r.id}})}return{ok:!0,id:r.id,status:"available",actions:n}})}C();$r();Xt();_t();Ic();import $D from"knex";async function UD(e){let t=$D({client:"pg",connection:re(e),pool:{min:1,max:2}});try{let[r,n]=await t.migrate.latest({directory:ke});return{batchNo:r,ran:n}}finally{await t.destroy()}}function _w(e){e.register("dbDockerAvailable",async()=>zn()),e.register("dbProvisionDocker",async()=>{let t;try{t=await Tc()}catch(n){throw n?.dockerUnavailable?new H({errorCode:"DOCKER_UNAVAILABLE",message:n.message}):new H({errorCode:"DOCKER_PROVISION_FAILED",message:n?.message})}gt({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 UD(t.url)}catch(n){let{diagnoseError:o}=await Promise.resolve().then(()=>(Me(),Jt));throw Yc(o(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}})}dc();Zt();function xw(e){e.register("serviceStatus",async()=>({...await uc(),db:ts?.()??null})),e.register("serviceInstall",async()=>{let t=await bi();return setTimeout(()=>process.exit(0),400),{ok:!0,handingOff:!0,...t}}),e.register("serviceUninstall",async()=>({ok:!0,...await lc()}))}C();import{existsSync as Sw}from"node:fs";import{readFile as Aw,writeFile as GD,mkdir as jD}from"node:fs/promises";import{dirname as WD}from"node:path";var KD=/(KEY|PASSWORD|TOKEN|SECRET)$/i;function Tw(e){e.register("readEnv",async()=>{let t=Sw(W)?await Aw(W,"utf8"):"",r=YD(t),n={};for(let[o,i]of Object.entries(r))KD.test(o)?n[o]={masked:!0,hasValue:!!i}:n[o]={masked:!1,value:i};return{path:W,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=Sw(W)?await Aw(W,"utf8"):"",o=VD(n,r);await jD(WD(W),{recursive:!0}),await GD(W,o,"utf8");let i=["SIGIL_MODE","SIGIL_MASTER_NODE_ID","SIGIL_NETWORK_ENABLED"];if(Object.keys(r).some(s=>i.includes(s)))try{let{resetMemoryClient:s}=await Promise.resolve().then(()=>(Bn(),Hn));s()}catch{}return{ok:!0,path:W,patchedKeys:Object.keys(r)}})}function YD(e){let t={};for(let r of e.split(`
715
+ `)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let o=n[1],i=n[2].trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),t[o]=i}return t}function VD(e,t){let r=new Set,o=e.split(`
716
+ `).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}=${bw(l)}`}).filter(s=>s!==null);for(let[s,a]of Object.entries(t))r.has(s)||a===null||a===void 0||o.push(`${s}=${bw(a)}`);let i=o.join(`
640
717
  `);return i.endsWith(`
641
718
  `)||(i+=`
642
- `),i}function km(e){let t=String(e);return/[\s#"'$]/.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function Mm(e){e.register("nodeInfo",async()=>{let{default:t}=await Promise.resolve().then(()=>(S(),q));if(!t.network.enabled)return{enabled:!1,mode:t.network.mode};let{getNodeInfo:r}=await Promise.resolve().then(()=>(Ee(),$e));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}}})}la();import{randomBytes as Nv}from"node:crypto";var Cv=600;function Gm(e){e.register("pair.create",async t=>{let{default:r}=await Promise.resolve().then(()=>(A(),P)),n=(t.name||"").trim();if(!n){let p=new Error("pair.create: params.name required");throw p.code="invalid_params",p}let o=t.role||"writer";if(!["reader","writer","admin"].includes(o)){let p=new Error(`pair.create: invalid role "${o}"`);throw p.code="invalid_params",p}let i=Array.isArray(t.namespaces)?t.namespaces:[],a=Number.isFinite(t.ttlSeconds)?t.ttlSeconds:Cv,s=new Date(Date.now()+a*1e3);r("pairing_code").whereNull("consumed_by_device_id").where("expires_at","<",new Date(Date.now()-24*3600*1e3)).del().catch(()=>{});let c=Rv();await r("pairing_code").insert({code_hash:Kn(c),name:n,role:o,namespaces:i,expires_at:s});let{getNodeInfo:l}=await Promise.resolve().then(()=>(Ee(),$e)),d=null;try{d=(await l()).nodeId}catch{}return{code:c,expiresAt:s.toISOString(),name:n,role:o,namespaces:i,masterNodeId:d}}),e.register("pair.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(A(),P)),n=Math.min(Math.max(Number(t.limit)||50,1),200),o=Math.max(Number(t.offset)||0,0),i=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(o);return{limit:n,offset:o,codes:i.map(a=>({id:a.id,name:a.name,role:a.role,namespaces:a.namespaces,expiresAt:a.expiresAt,consumedAt:a.consumedAt,consumedBy:a.consumedByName?{name:a.consumedByName,nodeId:a.consumedByNodeId}:null,expired:new Date(a.expiresAt)<new Date}))}}),e.register("pair.sweep",async()=>{let{default:t}=await Promise.resolve().then(()=>(A(),P)),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(()=>(A(),P)),n=Number(t.id);if(!Number.isFinite(n)){let i=new Error("pair.revoke: params.id required");throw i.code="invalid_params",i}return{deleted:await r("pairing_code").where({id:n}).del()}})}function Rv(){let e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=Nv(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)}`}function jm(e){e.register("mode",async()=>{let{default:t}=await Promise.resolve().then(()=>(S(),q)),{getMemoryClient:r}=await Promise.resolve().then(()=>(Cr(),Nr)),n="unknown",o=null;try{n=(await r()).kind}catch(i){o=i.message}return{mode:t.network.mode,networkEnabled:t.network.enabled,masterNodeId:t.network.masterNodeId,memoryClient:n,memoryClientError:o}})}function Wm(e){e.register("manifest.get",async()=>{let{produceManifest:t}=await Promise.resolve().then(()=>(Yn(),Wn));return t()}),e.register("manifest.verify",async t=>{let{produceManifest:r,verifyManifest:n}=await Promise.resolve().then(()=>(Yn(),Wn)),o=await r();return n(o,t.remote)})}var Ym=new Set(["paused","compromised"]);function Km(e){e.register("device.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(A(),P)),n=Math.min(Math.max(Number(t.limit)||100,1),500),o=Math.max(Number(t.offset)||0,0),i=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(o);return{limit:n,offset:o,devices:i.map(a=>({id:a.id,nodeId:a.nodeId,name:a.name,role:a.role,namespaces:a.namespaces,active:a.active,revokedReason:a.revokedReason??null,reactivatable:a.active||a.revokedReason!=="compromised",lastSeenAt:a.lastSeenAt,createdAt:a.createdAt,meta:a.meta}))}}),e.register("device.revoke",async t=>{let{default:r}=await Promise.resolve().then(()=>(A(),P)),n=Number(t.id);if(!Number.isFinite(n)){let s=new Error("device.revoke: params.id required");throw s.code="invalid_params",s}let o=t.reason||"paused";if(!Ym.has(o)){let s=new Error(`device.revoke: reason must be one of ${[...Ym].join(", ")}`);throw s.code="invalid_params",s}let i=await r("device").where({id:n}).first(),a=await r("device").where({id:n}).update({active:!1,revoked_reason:o});if(a>0&&i){let{default:s}=await Promise.resolve().then(()=>(ot(),Oa));s.emit("device.revoked",{deviceId:i.id,nodeId:i.nodeId,reason:o})}return{revoked:a>0,reason:o}}),e.register("device.activate",async t=>{let{default:r}=await Promise.resolve().then(()=>(A(),P)),n=Number(t.id);if(!Number.isFinite(n)){let a=new Error("device.activate: params.id required");throw a.code="invalid_params",a}let o=await r("device").where({id:n}).first();if(!o)return{activated:!1,notFound:!0};if(o.revokedReason==="compromised"){let a=new Error(`device ${n} ("${o.name}") was revoked as compromised. Re-activation is blocked \u2014 the device must re-pair with a fresh code.`);throw a.code="compromised",a}return{activated:await r("device").where({id:n}).update({active:!0,revoked_reason:null})>0}})}function qm(e){e.register("trace.list",async(t={})=>{let{listTraces:r}=await Promise.resolve().then(()=>(Me(),Pe));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 o=new Error("trace.get: params.uid is required");throw o.code="invalid_params",o}let{getTrace:r}=await Promise.resolve().then(()=>(Me(),Pe));return{trace:await r(t.uid)}}),e.register("trace.clear",async()=>{let{clearTraces:t}=await Promise.resolve().then(()=>(Me(),Pe));return t()})}function Vm(e,{startedAt:t}){Pa(e,{startedAt:t}),sp(e),Lp(e),kp(e),Pp(e),Bp(e),Hp(e),Up(e),Gp(e),jp(e),Jp(e),Xp(e),Zp(e),Sm(e),vm(e),Tm(e),Om(e),Rm(e),Pm(e),Mm(e),Gm(e),jm(e),Wm(e),Km(e),qm(e)}var Xm=Date.now();async function Fv({foreground:e=!1}={}){delete process.env.SIGIL_AGENT,await ba();let t=await _a();t&&(process.stderr.write(`[sigild] already running (pid ${t})
643
- `),process.exit(0));let r=Bv();r(`starting (pid ${process.pid}, node ${process.version})`),await Ea();let n=Aa();ro(n),Vm(n,{startedAt:Xm});let o=await va({registry:n,log:r}),{default:i}=await Promise.resolve().then(()=>(S(),q));i.network.mode!=="lite-follower"&&$v(r);let a=null;if(i.http.enabled)try{a=await Da({registry:n,log:r,config:i})}catch(c){r(`http server failed to start: ${c.message}`)}let s=!1;if(i.network.enabled)try{if(i.network.mode==="master"){let{registerProtocol:d}=await Promise.resolve().then(()=>(Ee(),$e)),{PAIR_ALPN:p,createPairAcceptor:f}=await Promise.resolve().then(()=>(la(),Um)),{RPC_ALPN:h,createRpcAcceptor:w}=await Promise.resolve().then(()=>(Zi(),lm));d(p,f({log:r})),d(h,w({registry:n,log:r})),r(`registered accept handlers: ${p}, ${h}`)}let{getNodeInfo:c}=await Promise.resolve().then(()=>(Ee(),$e)),l=await c();s=!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=${i.network.mode})`);if(i.network.mode==="lite-follower")try{let{installLiteProxy:c}=await Promise.resolve().then(()=>(Jm(),zm));await c({registry:n,log:r})}catch(c){r(`lite-proxy install failed: ${c.message}`)}xa(async c=>{if(r(`received ${c}, shutting down`),await o.close(),a&&await a.close(),s)try{let{shutdownEndpoint:l}=await Promise.resolve().then(()=>(Ee(),$e));await l()}catch(l){r(`iroh shutdown failed: ${l.message}`)}try{let{default:l}=await Promise.resolve().then(()=>(A(),P));await l.destroy()}catch(l){r(`pool destroy failed: ${l.message}`)}await Zn(),oo(),r("stopped")}),r(`ready in ${Date.now()-Xm}ms \u2014 ${n.list().length} methods registered`),e&&process.stdout.write(`sigild ready
644
- `)}async function $v(e){try{let{default:t}=await Promise.resolve().then(()=>(A(),P)),{setDbHealth:r}=await Promise.resolve().then(()=>(zt(),io));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 Bv(){let e;try{e=Pv(Vn,{flags:"a"})}catch{}return t=>{let r=`[${new Date().toISOString()}] ${t}
645
- `;e?e.write(r):process.stderr.write(r)}}import.meta.url===`file://${process.argv[1]}`&&Fv({foreground:!0}).catch(async e=>{try{await Mv(Vn,`[fatal] ${e.stack||e.message}
719
+ `),i}function bw(e){let t=String(e);return/[\s#"'$]/.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function Iw(e){e.register("nodeInfo",async()=>{let{default:t}=await Promise.resolve().then(()=>(A(),ne));if(!t.network.enabled)return{enabled:!1,mode:t.network.mode};let{getNodeInfo:r}=await Promise.resolve().then(()=>(Ue(),pt));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}}})}Nc();import{randomBytes as aL}from"node:crypto";var cL=600;function Dw(e){e.register("pair.create",async t=>{let{default:r}=await Promise.resolve().then(()=>(T(),F)),n=(t.name||"").trim();if(!n){let p=new Error("pair.create: params.name required");throw p.code="invalid_params",p}let o=t.role||"writer";if(!["reader","writer","admin"].includes(o)){let p=new Error(`pair.create: invalid role "${o}"`);throw p.code="invalid_params",p}let i=Array.isArray(t.namespaces)?t.namespaces:[],s=Number.isFinite(t.ttlSeconds)?t.ttlSeconds:cL,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=lL();await r("pairing_code").insert({code_hash:Fi(c),name:n,role:o,namespaces:i,expires_at:a});let{getNodeInfo:l}=await Promise.resolve().then(()=>(Ue(),pt)),d=null;try{d=(await l()).nodeId}catch{}return{code:c,expiresAt:a.toISOString(),name:n,role:o,namespaces:i,masterNodeId:d}}),e.register("pair.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(T(),F)),n=Math.min(Math.max(Number(t.limit)||50,1),200),o=Math.max(Number(t.offset)||0,0),i=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(o);return{limit:n,offset:o,codes:i.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(()=>(T(),F)),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(()=>(T(),F)),n=Number(t.id);if(!Number.isFinite(n)){let i=new Error("pair.revoke: params.id required");throw i.code="invalid_params",i}return{deleted:await r("pairing_code").where({id:n}).del()}})}function lL(){let e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=aL(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)}`}function Lw(e){e.register("mode",async()=>{let{default:t}=await Promise.resolve().then(()=>(A(),ne)),{getMemoryClient:r}=await Promise.resolve().then(()=>(Bn(),Hn)),n="unknown",o=null;try{n=(await r()).kind}catch(i){o=i.message}return{mode:t.network.mode,networkEnabled:t.network.enabled,masterNodeId:t.network.masterNodeId,memoryClient:n,memoryClientError:o}})}function Pw(e){e.register("manifest.get",async()=>{let{produceManifest:t}=await Promise.resolve().then(()=>(Bi(),Hi));return t()}),e.register("manifest.verify",async t=>{let{produceManifest:r,verifyManifest:n}=await Promise.resolve().then(()=>(Bi(),Hi)),o=await r();return n(o,t.remote)})}var kw=new Set(["paused","compromised"]);function Mw(e){e.register("device.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(T(),F)),n=Math.min(Math.max(Number(t.limit)||100,1),500),o=Math.max(Number(t.offset)||0,0),i=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(o);return{limit:n,offset:o,devices:i.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(()=>(T(),F)),n=Number(t.id);if(!Number.isFinite(n)){let a=new Error("device.revoke: params.id required");throw a.code="invalid_params",a}let o=t.reason||"paused";if(!kw.has(o)){let a=new Error(`device.revoke: reason must be one of ${[...kw].join(", ")}`);throw a.code="invalid_params",a}let i=await r("device").where({id:n}).first(),s=await r("device").where({id:n}).update({active:!1,revoked_reason:o});if(s>0&&i){let{default:a}=await Promise.resolve().then(()=>(Qt(),Zc));a.emit("device.revoked",{deviceId:i.id,nodeId:i.nodeId,reason:o})}return{revoked:s>0,reason:o}}),e.register("device.activate",async t=>{let{default:r}=await Promise.resolve().then(()=>(T(),F)),n=Number(t.id);if(!Number.isFinite(n)){let s=new Error("device.activate: params.id required");throw s.code="invalid_params",s}let o=await r("device").where({id:n}).first();if(!o)return{activated:!1,notFound:!0};if(o.revokedReason==="compromised"){let s=new Error(`device ${n} ("${o.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}})}function Hw(e){e.register("trace.list",async(t={})=>{let{listTraces:r}=await Promise.resolve().then(()=>(dt(),ut));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 o=new Error("trace.get: params.uid is required");throw o.code="invalid_params",o}let{getTrace:r}=await Promise.resolve().then(()=>(dt(),ut));return{trace:await r(t.uid)}}),e.register("trace.clear",async()=>{let{clearTraces:t}=await Promise.resolve().then(()=>(dt(),ut));return t()})}function Bw(e,{startedAt:t}){il(e,{startedAt:t}),Ih(e),Zh(e),Qh(e),eg(e),og(e),ig(e),sg(e),ag(e),cg(e),hg(e),gg(e),yg(e),Bg(e),Fg(e),$g(e),Ug(e),ay(e),gw(e),_w(e),xw(e),Tw(e),Iw(e),Dw(e),Lw(e),Pw(e),Mw(e),Hw(e)}var vc=Date.now();async function yL({foreground:e=!1}={}){delete process.env.SIGIL_AGENT,await Vi();let t=await Ki();t&&(process.stderr.write(`[sigild] already running (pid ${t})
720
+ `),process.exit(0));let r=_L();r(`starting (pid ${process.pid}, node ${process.version})`),await Wi();let n=qc();Zi(n),Bw(n,{startedAt:vc});let o=await zc({registry:n,log:r}),{default:i}=await Promise.resolve().then(()=>(A(),ne));if(i.network.mode!=="lite-follower"){try{let{ensureLocalPostgresRunning:p}=await Promise.resolve().then(()=>(Ic(),Ew));(await p()).started&&r("started local sigil-postgres container")}catch{}EL(r)}let s=null;if(i.http.enabled)try{s=await rl({registry:n,log:r,config:i})}catch(p){r(`http server failed to start: ${p.message}`)}let a=!1;if(i.network.enabled)try{if(i.network.mode==="master"){let{registerProtocol:m}=await Promise.resolve().then(()=>(Ue(),pt)),{PAIR_ALPN:w,createPairAcceptor:y}=await Promise.resolve().then(()=>(Nc(),vw)),{RPC_ALPN:E,createRpcAcceptor:b}=await Promise.resolve().then(()=>(Ja(),Rg));m(w,y({log:r})),m(E,b({registry:n,log:r})),r(`registered accept handlers: ${w}, ${E}`)}let{getNodeInfo:p}=await Promise.resolve().then(()=>(Ue(),pt)),f=await p();a=!0,r(`iroh node up: ${f.nodeId}`),f.relayUrl&&r(`iroh relay: ${f.relayUrl}`)}catch(p){r(`iroh failed to start: ${p.message}`)}else r(`iroh disabled (SIGIL_MODE=${i.network.mode})`);if(i.network.mode==="lite-follower")try{let{installLiteProxy:p}=await Promise.resolve().then(()=>($w(),Fw));await p({registry:n,log:r})}catch(p){r(`lite-proxy install failed: ${p.message}`)}let c=await wL(),l=()=>{try{mL(Vt,JSON.stringify({pid:process.pid,version:c,node:process.version,startedAt:vc,ts:Date.now(),supervised:process.env.SIGIL_SUPERVISED==="1"}),"utf8")}catch{}};l();let d=setInterval(l,15e3);d.unref(),Yi(async p=>{r(`received ${p}, shutting down`),clearInterval(d);try{hL(Vt,{force:!0})}catch{}if(await o.close(),s&&await s.close(),a)try{let{shutdownEndpoint:f}=await Promise.resolve().then(()=>(Ue(),pt));await f()}catch(f){r(`iroh shutdown failed: ${f.message}`)}try{let{default:f}=await Promise.resolve().then(()=>(T(),F));await f.destroy()}catch(f){r(`pool destroy failed: ${f.message}`)}await io(),es(),r("stopped")}),r(`ready in ${Date.now()-vc}ms \u2014 ${n.list().length} methods registered`),e&&process.stdout.write(`sigild ready
721
+ `)}async function wL(){try{let{readFile:e}=await import("node:fs/promises"),{join:t}=await import("node:path"),{PKG_ROOT:r}=await Promise.resolve().then(()=>(C(),kc));return JSON.parse(await e(t(r,"package.json"),"utf8")).version}catch{return"unknown"}}async function EL(e){try{let{default:t}=await Promise.resolve().then(()=>(T(),F)),{setDbHealth:r}=await Promise.resolve().then(()=>(Zt(),rs));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 _L(){let e;try{e=pL(Ie,{flags:"a"})}catch{}return t=>{let r=`[${new Date().toISOString()}] ${t}
722
+ `;e?e.write(r):process.stderr.write(r)}}import.meta.url===`file://${process.argv[1]}`&&yL({foreground:!0}).catch(async e=>{try{await gL(Ie,`[fatal] ${e.stack||e.message}
646
723
  `)}catch{}process.stderr.write(`[sigild] fatal: ${e.message}
647
- `),process.exit(1)});export{Fv as startDaemon};
724
+ `),process.exit(1)});export{yL as startDaemon};