@anmol-srv/sigil 0.12.1 → 0.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +218 -218
- package/dist/daemon.js +113 -113
- package/package.json +1 -1
package/dist/daemon.js
CHANGED
|
@@ -1,49 +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
|
|
4
|
-
`)}finally{process.exit(0)}}};process.on("SIGTERM",()=>r("SIGTERM")),process.on("SIGINT",()=>r("SIGINT")),process.on("SIGHUP",()=>r("SIGHUP"))}async function
|
|
5
|
-
`)[0],fixHint:null}}function
|
|
3
|
+
var Kw=Object.create;var $i=Object.defineProperty;var Yw=Object.getOwnPropertyDescriptor;var Vw=Object.getOwnPropertyNames;var qw=Object.getPrototypeOf,Jw=Object.prototype.hasOwnProperty;var zw=(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})},Xw=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Vw(t))!Jw.call(e,o)&&o!==r&&$i(e,o,{get:()=>t[o],enumerable:!(n=Yw(t,o))||n.enumerable});return e};var Zw=(e,t,r)=>(r=e!=null?Kw(qw(e)):{},Xw(t||!e||!e.__esModule?$i(r,"default",{value:e,enumerable:!0}):r,e));var Fc={};x(Fc,{CLAUDE_HOME:()=>Ki,CLAUDE_MD_PATH:()=>fE,CLAUDE_SETTINGS_PATH:()=>dE,GUI_WEB_DIR:()=>uE,GUI_WEB_DIR_BUILT:()=>en,GUI_WEB_DIR_DEV:()=>no,MIGRATIONS_DIR:()=>ke,PKG_ROOT:()=>Z,PROMPTS_DIR:()=>Q,SIGIL_ACTIVE_SESSION_CURSOR:()=>Wi,SIGIL_DAEMON_LOG:()=>Ie,SIGIL_DAEMON_PID:()=>Yt,SIGIL_DAEMON_SOCK:()=>qe,SIGIL_DB_PATH:()=>iE,SIGIL_ENV_PATH:()=>W,SIGIL_GUI_TOKEN:()=>qt,SIGIL_HEARTBEAT:()=>Vt,SIGIL_HOME:()=>M,SIGIL_HOOK_DEDUP:()=>lE,SIGIL_HOOK_ERRORS_LOG:()=>sE,SIGIL_IDENTITY_KEY:()=>Je,SIGIL_IROH_DIR:()=>oo,SIGIL_LAST_CLEAN_DOCTOR:()=>aE,SIGIL_MD_PATH:()=>to,SIGIL_ONBOARDING_STATE:()=>ro,SIGIL_SCHEMAS_DIR:()=>ji,SIGIL_STOP_CURSOR:()=>cE});import{fileURLToPath as rE}from"node:url";import{dirname as Mc,join as N}from"node:path";import{existsSync as Hc}from"node:fs";import{homedir as nE}from"node:os";function oE(){let e=Mc(rE(import.meta.url));for(let t=0;t<10;t++){if(Hc(N(e,"package.json"))&&Hc(N(e,"prompts")))return e;let r=Mc(e);if(r===e)break;e=r}return process.cwd()}var Z,Q,ke,Bc,M,W,iE,to,ji,sE,aE,Wi,cE,lE,qe,Yt,Ie,Vt,ro,qt,en,no,uE,oo,Je,Ki,dE,fE,C=u(()=>{Z=oE(),Q=N(Z,"prompts"),ke=N(Z,"src","db","migrations"),Bc=nE(),M=N(Bc,".sigil"),W=N(M,".env"),iE=N(M,"db"),to=N(M,"CLAUDE.md"),ji=N(M,"schemas"),sE=N(M,".hook-errors.log"),aE=N(M,".last-clean-doctor"),Wi=N(M,".active-session.json"),cE=N(M,".stop-cursor.json"),lE=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"),uE=en,oo=N(M,"iroh"),Je=N(M,"identity.key"),Ki=N(Bc,".claude"),dE=N(Ki,"settings.json"),fE=N(Ki,"CLAUDE.md")});var Kc={};x(Kc,{detectRunningDaemon:()=>Vi,dirname:()=>hE,ensureSigilHome:()=>Ji,installShutdownHooks:()=>qi,isPidAlive:()=>jc,readPidFile:()=>Wc,removePidFile:()=>io,removeSocketFile:()=>so,writePidFile:()=>Yi});import{readFile as pE,writeFile as mE,unlink as $c,mkdir as Uc}from"node:fs/promises";import{existsSync as Gc}from"node:fs";import{dirname as hE}from"node:path";function jc(e){if(!e||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function Wc(){if(!Gc(Yt))return null;try{let e=(await pE(Yt,"utf8")).trim(),t=Number(e);return Number.isFinite(t)?t:null}catch{return null}}async function Yi(){await Uc(M,{recursive:!0}),await mE(Yt,String(process.pid),"utf8")}async function io(){try{await $c(Yt)}catch{}}async function so(){try{await $c(qe)}catch{}}async function Vi(){let e=await Wc();return e&&jc(e)?e:(e&&await io(),Gc(qe)&&await so(),null)}function qi(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 Ji(){await Uc(M,{recursive:!0})}var ao=u(()=>{C()});var Vc={};x(Vc,{buildUrlConnection:()=>re,classifyProvider:()=>ze,directMigrationUrl:()=>zi,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=yE(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 yE(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(!Yc.some(r=>r.test(e)))return gE.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 zi(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":Yc.some(r=>r.test(t))?"local":"unknown"}catch{return"unknown"}}var gE,Yc,_t=u(()=>{gE=[/\.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],Yc=[/^localhost$/i,/^127\.0\.0\.1$/,/^::1$/,/\.local$/i]});var Jt={};x(Jt,{diagnoseConnectionError:()=>_E,diagnoseError:()=>uo,ensurePostgresDatabase:()=>EE,probeSigilConnection:()=>wE,probeUrlConnection:()=>rn});import lo from"pg";async function wE({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 EE({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 ${qc(s)}`),c.push(`created user "${i}"`)):(await a.query(`ALTER USER ${Xe(i)} WITH PASSWORD ${qc(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 _E(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 qc(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 zc(e,{data:t}={}){let r=Jc[e?.kind]||"DB_ERROR";return new H({errorCode:r,message:e?.humanMessage,hint:e?.fixHint,data:t})}function Xi(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 Xc(e){if(e instanceof H)return Xi({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=Jc[o.kind]||"DB_ERROR";return Xi({code:i,message:o.humanMessage+n,hint:o.fixHint??zt[i]?.hint??void 0},e)}return Xi({code:t?.code||e?.code||xE,message:r+n,hint:void 0},e)}var xE,zt,Jc,H,Xt=u(()=>{Me();xE="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."}},Jc={"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 Qi={};x(Qi,{currentAgent:()=>TE,currentDeviceId:()=>bE,currentRequestContext:()=>Zi,runWithRequestContext:()=>AE});import{AsyncLocalStorage as SE}from"node:async_hooks";function AE(e,t){return fo.run(e,t)}function Zi(){return fo.getStore()||null}function bE(){return fo.getStore()?.device?.id??null}function TE(){return fo.getStore()?.agent??process.env.SIGIL_AGENT??null}var fo,po=u(()=>{fo=new SE});var os={};x(os,{clearRegistry:()=>rs,getDbHealth:()=>ns,getRegistry:()=>ts,setDbHealth:()=>OE,setRegistry:()=>es});function es(e){mo=e}function ts(){if(!mo)throw new Error("rpc registry not initialised \u2014 is the daemon running?");return mo}function rs(){mo=null}function OE(e){Qc={healthy:null,error:null,checkedAt:null,...e}}function ns(){return Qc}var mo,Qc,Zt=u(()=>{mo=null;Qc={healthy:null,error:null,checkedAt:null}});var rl={};x(rl,{EventBus:()=>go,default:()=>K});var go,HE,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}},HE=new go,K=HE});function ul(e){let t=e.split(`
|
|
6
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
7
|
`).trim()}),n=c[2].trim(),o=[]):o.push(a)}o.length&&r.push({heading:n||"Content",text:o.join(`
|
|
8
8
|
`).trim()});let i=r.map(a=>a.text).join(`
|
|
9
9
|
|
|
10
|
-
`),s=
|
|
10
|
+
`),s=QE(t)||null;return{text:i,sections:r,metadata:{title:s}}}function QE(e){for(let t of e){let r=t.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var dl=u(()=>{});function as(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 fl=u(()=>{});function pl(e){let t=e_(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,`
|
|
11
11
|
`),r=r.replace(/<br\s*\/?>/gi,`
|
|
12
12
|
`),r=r.replace(/<[^>]+>/g,""),r=r.replace(/&/g,"&"),r=r.replace(/</g,"<"),r=r.replace(/>/g,">"),r=r.replace(/"/g,'"'),r=r.replace(/'/g,"'"),r=r.replace(/ /g," "),r=r.replace(/[ \t]+/g," "),r=r.replace(/\n{3,}/g,`
|
|
13
13
|
|
|
14
|
-
`),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:t}}}function
|
|
15
|
-
`),n=[],o="Header",i=[],s=!1,a=0;for(let c of r){let l=
|
|
14
|
+
`),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:t}}}function e_(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return t?t[1].trim():null}var ml=u(()=>{});function hl(e,{language:t}={}){let r=t||o_(e),n=t_(e,r);return{text:e.trim(),sections:n,metadata:{language:r}}}function t_(e,t){let r=e.split(`
|
|
15
|
+
`),n=[],o="Header",i=[],s=!1,a=0;for(let c of r){let l=r_(c,t);l&&a===0?(i.length&&n.push({heading:o,text:i.join(`
|
|
16
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?
|
|
18
|
-
${
|
|
17
|
+
`).trim()}),n.length<=1?n_(e):n.filter(c=>c.text)}function r_(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 n_(e){return e.split(/\n{2,}/).map((r,n)=>({heading:`Block ${n+1}`,text:r.trim()})).filter(r=>r.text)}function o_(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 gl=u(()=>{});function yl(e){let t;try{t=typeof e=="string"?JSON.parse(e):e}catch{return{text:e,sections:[{heading:"Content",text:e}],metadata:{}}}let r=cs(t);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function cs(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
|
+
${cs(r,t+1)}`:`- ${r}`).join(`
|
|
19
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}:
|
|
20
|
-
${
|
|
21
|
-
`)}return String(e)}var
|
|
20
|
+
${cs(o,t+1)}`:`${r}${n}: ${o}`).join(`
|
|
21
|
+
`)}return String(e)}var wl=u(()=>{});function El(e,{format:t,filePath:r,contentType:n}={}){let o=t||c_(n)||l_(r)||u_(e);return(a_[o]||as)(e)}function c_(e){if(!e)return null;let t=e.split(";")[0].trim();return s_[t]||null}function l_(e){if(!e)return null;let t=e.match(/\.[^.]+$/)?.[0]?.toLowerCase();return t&&i_[t]||null}function u_(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 i_,s_,a_,_l=u(()=>{dl();fl();ml();gl();wl();i_={".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"},s_={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},a_={markdown:ul,text:as,html:pl,code:hl,json:yl}});function d_(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=f_(e),s=[],a="",c="";for(let l of i){if(l.length>n){a.trim()&&(s.push({content:a.trim(),index:s.length}),c=ls(a,o),a="");let d=p_(l,n,o);for(let p of d)s.push({content:p.trim(),index:s.length});c=ls(s[s.length-1].content,o);continue}(a+l).length>n?(s.push({content:a.trim(),index:s.length}),c=ls(a,o),a=c+l):a+=l}return a.trim()&&s.push({content:a.trim(),index:s.length}),s}function Sl(e,t={}){let r=[];for(let{heading:n,text:o}of e){if(!o?.trim())continue;let i=d_(o,t);for(let s of i)r.push({content:s.content,index:r.length,sectionHeading:n})}return r}function f_(e){return e.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function p_(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 ls(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 xl,us=u(()=>{xl=Object.freeze({version:3,size:512,overlap:50,contextualPrefix:!0})});var ne={};x(ne,{default:()=>g});var v,Al,m_,g,A=u(()=>{v=(e,t)=>process.env[e]??t,Al=v("SIGIL_DB_TYPE","postgres");if(Al!=="postgres")throw new Error(`SIGIL_DB_TYPE=${Al} is no longer supported. Sigil 0.10.0+ is Postgres-only.
|
|
22
22
|
PGlite was deprecated; existing PGlite data at ~/.sigil/db is preserved but unreachable from this version.
|
|
23
23
|
Set SIGIL_DB_TYPE=postgres in ~/.sigil/.env and configure SIGIL_DB_HOST / PORT / NAME / USER / PASSWORD.
|
|
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.
|
|
24
|
+
Run \`sigil init\` for an interactive setup.`);m_={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=m_});var bl={};x(bl,{chat:()=>h_,meta:()=>g_,setup:()=>y_});async function h_(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 y_({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 g_,Tl=u(()=>{A();g_={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});var Il={};x(Il,{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 fs={};x(fs,{buildLocalConnection:()=>Oe,buildUrlConnection:()=>re,classifyProvider:()=>ze,selectDriver:()=>ds});function ds(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 w_ from"knex";function E_(e){return Array.isArray(e)?e.map(ps):e&&typeof e=="object"?ps(e):e}function __(e,t){return t(x_(e))}function ps(e){if(!e||typeof e!="object"||e instanceof Date)return e;if(Array.isArray(e))return e.map(ps);let t={};for(let[r,n]of Object.entries(e))t[r.replace(/_([a-z])/g,(o,i)=>i.toUpperCase())]=n;return t}function x_(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}var Ol,Rl,h,T=u(()=>{A();wo();Ol=ds(g),Rl=w_({client:"pg",connection:Ol.connection,pool:{min:2,max:10},postProcessResponse:E_,wrapIdentifier:__});Rl.__sigilDriver=Ol;h=Rl});function he(e){return Math.ceil((e||"").length/4)}function ms(e,t,r){let n=S_[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 hs(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 S_,an=u(()=>{T();S_={"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 Cl={};x(Cl,{chat:()=>b_,meta:()=>T_,setup:()=>I_});async function A_(){if(!gs){let{default:e}=await import("@anthropic-ai/sdk");gs=new e({apiKey:g.llm.apiKey})}return gs}async function b_(e,{model:t,jsonMode:r=!1}={}){let n=t||"claude-haiku-4-5-20251001",o=await A_(),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 I_({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 gs,T_,Nl=u(()=>{A();an();gs=null;T_={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var Dl={};x(Dl,{chat:()=>R_,meta:()=>C_,setup:()=>N_});async function R_(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||O_).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 N_({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||vl,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||vl;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.
|
|
25
25
|
You will pick an embedding provider in the next step \u2014 "openrouter" is an option,
|
|
26
|
-
or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var
|
|
26
|
+
or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var O_,C_,vl,tr,Ll=u(()=>{A();O_="https://openrouter.ai/api/v1";C_={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},vl="google/gemini-flash-latest",tr={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var Pl={};x(Pl,{chat:()=>k_,meta:()=>M_,setup:()=>H_});import{spawn as v_}from"node:child_process";function P_(e,t){let r=g.llm.cliTimeout||12e4;return new Promise((n,o)=>{let i=v_("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 k_(e,{model:t,jsonMode:r=!1}={}){let n=t||g.llm.cliModel||"haiku",o=D_[n]||n,i=["-p","--model",o,"--output-format","json"];r&&i.push("--json-schema",L_);let{stdout:s,stderr:a,code:c}=await P_(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 H_(){return{env:{}}}var D_,L_,M_,kl=u(()=>{A();an();D_={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},L_=JSON.stringify({type:"object",additionalProperties:!0});M_={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var Ml={};x(Ml,{chat:()=>B_,meta:()=>F_,setup:()=>$_});async function B_(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 $_({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 F_,Hl=u(()=>{A();an();F_={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function ys(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 Bl={};x(Bl,{embedBatch:()=>G_});async function G_(e,{model:t,ollamaHost:r}){let n=Eo(e,U_),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 U_,Fl=u(()=>{_o();U_=50});var $l={};x($l,{embedBatch:()=>j_});async function j_(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 Ul=u(()=>{});var Gl={};x(Gl,{embedBatch:()=>K_});async function K_(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,W_),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 W_,jl=u(()=>{_o();W_=50});var Wl={};x(Wl,{embedBatch:()=>V_});async function V_(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||Y_).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 Y_,Kl=u(()=>{Y_="https://openrouter.ai/api/v1"});var ql={};x(ql,{detectEmbeddingProvider:()=>bs,detectProvider:()=>As,getEmbedder:()=>_s,getProvider:()=>So,isClaudeCliAvailable:()=>Vl,isOllamaReachable:()=>Ss,listProvidersForSetup:()=>z_,resetDetection:()=>J_,resolveProviderAndModel:()=>xs});import{spawn as q_}from"node:child_process";async function So(e){if(!ws[e]){let t=xo[e];if(!t)throw new Error(`Unknown LLM provider: "${e}". Available: ${Object.keys(xo).join(", ")}`);let r=await t();ws[e]=r.chat}return ws[e]}async function _s(e){if(!Es[e]){let t=Yl[e];if(!t)throw new Error(`Unknown embedding provider: "${e}". Available: ${Object.keys(Yl).join(", ")}`);let r=await t();Es[e]=r.embedBatch}return Es[e]}function xs(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 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 Vl(){return new Promise(e=>{let t=q_("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(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 Ss())return Y="ollama",Y;if(await Vl())return Y="claude-cli",Y;throw new Error(`No LLM provider available. Either:
|
|
27
27
|
- Set LLM_PROVIDER (openai, anthropic, openrouter, ollama, claude-cli)
|
|
28
28
|
- Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY
|
|
29
29
|
- Start Ollama locally
|
|
30
|
-
- Install the Claude CLI (claude)`)}async function
|
|
30
|
+
- Install the Claude CLI (claude)`)}async function bs(){if(ee)return ee;if(g.embedding.provider)return ee=g.embedding.provider,ee;if(g.embedding.voyageApiKey)return ee="voyage",ee;if(await Ss())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:
|
|
31
31
|
- Set EMBEDDING_PROVIDER (voyage, ollama, openai, openrouter)
|
|
32
32
|
- Set VOYAGE_API_KEY (recommended \u2014 best quality)
|
|
33
33
|
- Start Ollama locally
|
|
34
34
|
- Set OPENAI_API_KEY
|
|
35
|
-
- Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function
|
|
35
|
+
- Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function J_(){Y=null,ee=null}async function z_(){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,Yl,ws,Es,Y,ee,Ao=u(()=>{A();xo={openai:()=>Promise.resolve().then(()=>(Tl(),bl)),anthropic:()=>Promise.resolve().then(()=>(Nl(),Cl)),openrouter:()=>Promise.resolve().then(()=>(Ll(),Dl)),"claude-cli":()=>Promise.resolve().then(()=>(kl(),Pl)),ollama:()=>Promise.resolve().then(()=>(Hl(),Ml))},Yl={ollama:()=>Promise.resolve().then(()=>(Fl(),Bl)),openai:()=>Promise.resolve().then(()=>(Ul(),$l)),voyage:()=>Promise.resolve().then(()=>(jl(),Gl)),openrouter:()=>Promise.resolve().then(()=>(Kl(),Wl))},ws={},Es={};Y=null,ee=null});function G(e){return e?`[${e.join(",")}]`:null}function Jl(){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(${Jl()}))`}function Ce(){return`?::halfvec(${Jl()})`}var Ze=u(()=>{A()});import{createHash as X_}from"node:crypto";function Q_(e,t,r,n="document"){let o=X_("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 ex(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,tx(r.embedding)]))}function tx(e){return Array.isArray(e)||typeof e!="string"?e:(e.startsWith("[")?e.slice(1,-1):e).split(",").map(Number)}async function rx(e){e.length&&await h("embedding_cache").whereIn("key",e).update({hits:h.raw("hits + 1"),lastUsedAt:h.fn.now()})}async function nx(e,t,r){if(e.length){for(let{key:n,embedding:o}of e)await h.raw(`
|
|
36
36
|
INSERT INTO embedding_cache (key, provider, model, embedding, hits, created_at, last_used_at)
|
|
37
37
|
VALUES (?, ?, ?, ?, 0, NOW(), NOW())
|
|
38
38
|
ON CONFLICT (key) DO UPDATE
|
|
39
39
|
SET last_used_at = NOW(),
|
|
40
40
|
hits = embedding_cache.hits + 1
|
|
41
|
-
`,[n,t,r,G(o)]);await
|
|
41
|
+
`,[n,t,r,G(o)]);await ix()}}async function ix(){let e=Date.now();if(e-Xl<ox)return;Xl=e;let[{count:t}]=await h("embedding_cache").count("key as count"),r=Number(t);if(r<=zl)return;let n=Math.min(r-zl,Z_);await h.raw(`
|
|
42
42
|
DELETE FROM embedding_cache WHERE key IN (
|
|
43
43
|
SELECT key FROM embedding_cache ORDER BY last_used_at ASC LIMIT ?
|
|
44
44
|
)
|
|
45
|
-
`,[n])}async function
|
|
46
|
-
`)})}let f=a.filter(m=>c.has(m));return f.length&&
|
|
45
|
+
`,[n])}async function Zl(e,t,r,n,o,i={}){if(!e.length)return[];let s=i.inputType||o?.inputType||"document",a=e.map(m=>Q_(t,r,m,s)),c=await ex(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]})}nx(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&&rx(f).catch(()=>{}),p}var zl,Z_,Xl,ox,Ql=u(()=>{Ze();T();zl=1e4,Z_=500;Xl=0,ox=6e4});var eu={};x(eu,{dimensions:()=>sx,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 bs(),n=await _s(r),o=g.embedding.model,i={...g.embedding,inputType:t};return Zl(e,r,o,n,i,{inputType:t})}var sx,rr=u(()=>{A();Ao();Ql();({dimensions:sx}=g.embedding)});var ru={};x(ru,{parseJson:()=>bo,prompt:()=>Be,promptJson:()=>ge});async function tu(e){let t=await As();return xs(e,t)}async function Be(e,{model:t,caller:r}={}){let{provider:n,model:o}=await tu(t),i=await So(n),s=Date.now();try{let a=await hs(()=>i(e,{model:o,jsonMode:!1}),g.llm.maxRetries),c=a.cost||ms(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 tu(t),i=await So(n),s=Date.now();try{let a=await hs(()=>i(e,{model:o,jsonMode:!0}),g.llm.maxRetries),c=a.cost||ms(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 ax}from"node:fs/promises";import{join as cx}from"node:path";async function nu(e,t,{title:r}){if(!e.length)return e;let n=await ax(lx,"utf8"),o=e.map((s,a)=>`Chunk ${a+1}: ${s.content.slice(0,200)}`),i=`${n}
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
@@ -58,7 +58,7 @@ ${o.join(`
|
|
|
58
58
|
|
|
59
59
|
---
|
|
60
60
|
|
|
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
|
|
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 lx,ou=u(()=>{ye();A();C();lx=cx(Q,"chunk-context.md")});var iu,su=u(()=>{iu="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as au}from"node:crypto";function dx(e){if(e<0||e>1024)throw new RangeError("Wrong ID size");!St||St.length<e?(St=Buffer.allocUnsafe(e*ux),au.getRandomValues(St),nr=0):nr+e>St.length&&(au.getRandomValues(St),nr=0),nr+=e}function we(e=21){dx(e|=0);let t="";for(let r=nr-e;r<nr;r++)t+=iu[St[r]&63];return t}var ux,St,nr,or=u(()=>{su();ux=128});var Rs={};x(Rs,{deleteDocument:()=>gx,findBySourcePath:()=>fx,findByUid:()=>px,getStats:()=>mx,listDocuments:()=>hx,resetHash:()=>Is,updateCounts:()=>To,updateSourceMetadata:()=>Os,upsert:()=>Ts});async function fx(e){let[t]=await h("document").where({sourcePath:e});return t||null}async function px(e){let[t]=await h("document").where({uid:e});return t||null}async function Ts({sourcePath:e,sourceType:t,title:r=null,contentHash:n,namespace:o}){let i=`doc-${we(16)}`,{rows:[s]}=await h.raw(`
|
|
62
62
|
INSERT INTO document (uid, source_path, source_type, title, content_hash, namespace, last_ingested_at, created_at, updated_at)
|
|
63
63
|
VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), NOW())
|
|
64
64
|
ON CONFLICT (source_path, namespace) DO UPDATE SET
|
|
@@ -67,12 +67,12 @@ Respond with a JSON array of ${e.length} context prefix strings.`;try{let s=awai
|
|
|
67
67
|
last_ingested_at = NOW(),
|
|
68
68
|
updated_at = NOW()
|
|
69
69
|
RETURNING *, (xmax = 0) AS "isNew", content_hash != ? AS "contentChanged"
|
|
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
|
|
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 mx(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 hx({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 gx(e){await h("chunk").where({documentId:e}).del(),await h("document").where({id:e}).del()}async function Is(e){await h("document").where({id:e}).update({contentHash:null})}async function Os(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 Cs=u(()=>{or();T()});async function cu(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(`
|
|
71
71
|
UPDATE chunk
|
|
72
72
|
SET search_vector = to_tsvector('english', COALESCE(contextual_prefix, '') || ' ' || content)
|
|
73
73
|
WHERE document_id = ?
|
|
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
|
|
74
|
+
`,[e]),o}var lu=u(()=>{T();Ze()});var wx,Io,Ns=u(()=>{wx=typeof global=="object"&&global&&global.Object===Object&&global,Io=wx});var Ex,_x,$,Ne=u(()=>{Ns();Ex=typeof self=="object"&&self&&self.Object===Object&&self,_x=Io||Ex||Function("return this")(),$=_x});var xx,V,ir=u(()=>{Ne();xx=$.Symbol,V=xx});function bx(e){var t=Sx.call(e,cn),r=e[cn];try{e[cn]=void 0;var n=!0}catch{}var o=Ax.call(e);return n&&(t?e[cn]=r:delete e[cn]),o}var uu,Sx,Ax,cn,du,fu=u(()=>{ir();uu=Object.prototype,Sx=uu.hasOwnProperty,Ax=uu.toString,cn=V?V.toStringTag:void 0;du=bx});function Ox(e){return Ix.call(e)}var Tx,Ix,pu,mu=u(()=>{Tx=Object.prototype,Ix=Tx.toString;pu=Ox});function Nx(e){return e==null?e===void 0?Cx:Rx:hu&&hu in Object(e)?du(e):pu(e)}var Rx,Cx,hu,Ee,sr=u(()=>{ir();fu();mu();Rx="[object Null]",Cx="[object Undefined]",hu=V?V.toStringTag:void 0;Ee=Nx});function vx(e){return e!=null&&typeof e=="object"}var _e,ar=u(()=>{_e=vx});function Lx(e){return typeof e=="symbol"||_e(e)&&Ee(e)==Dx}var Dx,xe,cr=u(()=>{sr();ar();Dx="[object Symbol]";xe=Lx});function Px(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,vs=u(()=>{lr=Px});var kx,P,oe=u(()=>{kx=Array.isArray,P=kx});function wu(e){if(typeof e=="string")return e;if(P(e))return lr(e,wu)+"";if(xe(e))return yu?yu.call(e):"";var t=e+"";return t=="0"&&1/e==-Mx?"-0":t}var Mx,gu,yu,Eu,_u=u(()=>{ir();vs();oe();cr();Mx=1/0,gu=V?V.prototype:void 0,yu=gu?gu.toString:void 0;Eu=wu});function Bx(e){for(var t=e.length;t--&&Hx.test(e.charAt(t)););return t}var Hx,xu,Su=u(()=>{Hx=/\s/;xu=Bx});function $x(e){return e&&e.slice(0,xu(e)+1).replace(Fx,"")}var Fx,Au,bu=u(()=>{Su();Fx=/^\s+/;Au=$x});function Ux(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var Se,ur=u(()=>{Se=Ux});function Yx(e){if(typeof e=="number")return e;if(xe(e))return Tu;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=Au(e);var r=jx.test(e);return r||Wx.test(e)?Kx(e.slice(2),r?2:8):Gx.test(e)?Tu:+e}var Tu,Gx,jx,Wx,Kx,Iu,Ou=u(()=>{bu();ur();cr();Tu=NaN,Gx=/^[-+]0x[0-9a-f]+$/i,jx=/^0b[01]+$/i,Wx=/^0o[0-7]+$/i,Kx=parseInt;Iu=Yx});function qx(e){if(!e)return e===0?e:0;if(e=Iu(e),e===Ru||e===-Ru){var t=e<0?-1:1;return t*Vx}return e===e?e:0}var Ru,Vx,Cu,Nu=u(()=>{Ou();Ru=1/0,Vx=17976931348623157e292;Cu=qx});function Jx(e){var t=Cu(e),r=t%1;return t===t?r?t-r:t:0}var vu,Du=u(()=>{Nu();vu=Jx});function zx(e){return e}var Qe,ln=u(()=>{Qe=zx});function tS(e){if(!Se(e))return!1;var t=Ee(e);return t==Zx||t==Qx||t==Xx||t==eS}var Xx,Zx,Qx,eS,Oo,Ds=u(()=>{sr();ur();Xx="[object AsyncFunction]",Zx="[object Function]",Qx="[object GeneratorFunction]",eS="[object Proxy]";Oo=tS});var rS,Ro,Lu=u(()=>{Ne();rS=$["__core-js_shared__"],Ro=rS});function nS(e){return!!Pu&&Pu in e}var Pu,ku,Mu=u(()=>{Lu();Pu=(function(){var e=/[^.]+$/.exec(Ro&&Ro.keys&&Ro.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();ku=nS});function sS(e){if(e!=null){try{return iS.call(e)}catch{}try{return e+""}catch{}}return""}var oS,iS,Fe,Ls=u(()=>{oS=Function.prototype,iS=oS.toString;Fe=sS});function mS(e){if(!Se(e)||ku(e))return!1;var t=Oo(e)?pS:cS;return t.test(Fe(e))}var aS,cS,lS,uS,dS,fS,pS,Hu,Bu=u(()=>{Ds();Mu();ur();Ls();aS=/[\\^$.*+?()[\]{}|]/g,cS=/^\[object .+?Constructor\]$/,lS=Function.prototype,uS=Object.prototype,dS=lS.toString,fS=uS.hasOwnProperty,pS=RegExp("^"+dS.call(fS).replace(aS,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");Hu=mS});function hS(e,t){return e?.[t]}var Fu,$u=u(()=>{Fu=hS});function gS(e,t){var r=Fu(e,t);return Hu(r)?r:void 0}var z,et=u(()=>{Bu();$u();z=gS});var yS,Co,Uu=u(()=>{et();Ne();yS=z($,"WeakMap"),Co=yS});function wS(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 Gu,ju=u(()=>{Gu=wS});function ES(){}var Wu,Ku=u(()=>{Wu=ES});function AS(e){var t=0,r=0;return function(){var n=SS(),o=xS-(n-r);if(r=n,o>0){if(++t>=_S)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var _S,xS,SS,Yu,Vu=u(()=>{_S=800,xS=16,SS=Date.now;Yu=AS});function bS(e){return function(){return e}}var qu,Ju=u(()=>{qu=bS});var TS,dr,Ps=u(()=>{et();TS=(function(){try{var e=z(Object,"defineProperty");return e({},"",{}),e}catch{}})(),dr=TS});var IS,zu,Xu=u(()=>{Ju();Ps();ln();IS=dr?function(e,t){return dr(e,"toString",{configurable:!0,enumerable:!1,value:qu(t),writable:!0})}:Qe,zu=IS});var OS,Zu,Qu=u(()=>{Xu();Vu();OS=Yu(zu),Zu=OS});function RS(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 ed,td=u(()=>{ed=RS});function CS(e){return e!==e}var rd,nd=u(()=>{rd=CS});function NS(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}var od,id=u(()=>{od=NS});function vS(e,t,r){return t===t?od(e,t,r):ed(e,rd,r)}var sd,ad=u(()=>{td();nd();id();sd=vS});function DS(e,t){var r=e==null?0:e.length;return!!r&&sd(e,t,0)>-1}var cd,ld=u(()=>{ad();cd=DS});function kS(e,t){var r=typeof e;return t=t??LS,!!t&&(r=="number"||r!="symbol"&&PS.test(e))&&e>-1&&e%1==0&&e<t}var LS,PS,fr,No=u(()=>{LS=9007199254740991,PS=/^(?:0|[1-9]\d*)$/;fr=kS});function MS(e,t,r){t=="__proto__"&&dr?dr(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var ud,dd=u(()=>{Ps();ud=MS});function HS(e,t){return e===t||e!==e&&t!==t}var pr,vo=u(()=>{pr=HS});function BS(e,t,r){return t=fd(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=fd(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),Gu(e,this,a)}}var fd,pd,md=u(()=>{ju();fd=Math.max;pd=BS});function FS(e,t){return Zu(pd(e,t,Qe),e+"")}var hd,gd=u(()=>{ln();md();Qu();hd=FS});function US(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=$S}var $S,mr,Do=u(()=>{$S=9007199254740991;mr=US});function GS(e){return e!=null&&mr(e.length)&&!Oo(e)}var tt,un=u(()=>{Ds();Do();tt=GS});function jS(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,ks=u(()=>{vo();un();No();ur();dn=jS});function KS(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||WS;return e===r}var WS,yd,wd=u(()=>{WS=Object.prototype;yd=KS});function YS(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var Ed,_d=u(()=>{Ed=YS});function qS(e){return _e(e)&&Ee(e)==VS}var VS,Ms,xd=u(()=>{sr();ar();VS="[object Arguments]";Ms=qS});var Sd,JS,zS,XS,hr,Lo=u(()=>{xd();ar();Sd=Object.prototype,JS=Sd.hasOwnProperty,zS=Sd.propertyIsEnumerable,XS=Ms((function(){return arguments})())?Ms:function(e){return _e(e)&&JS.call(e,"callee")&&!zS.call(e,"callee")},hr=XS});function ZS(){return!1}var Ad,bd=u(()=>{Ad=ZS});var Od,Td,QS,Id,eA,tA,fn,Hs=u(()=>{Ne();bd();Od=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Td=Od&&typeof module=="object"&&module&&!module.nodeType&&module,QS=Td&&Td.exports===Od,Id=QS?$.Buffer:void 0,eA=Id?Id.isBuffer:void 0,tA=eA||Ad,fn=tA});function IA(e){return _e(e)&&mr(e.length)&&!!D[Ee(e)]}var rA,nA,oA,iA,sA,aA,cA,lA,uA,dA,fA,pA,mA,hA,gA,yA,wA,EA,_A,xA,SA,AA,bA,TA,D,Rd,Cd=u(()=>{sr();Do();ar();rA="[object Arguments]",nA="[object Array]",oA="[object Boolean]",iA="[object Date]",sA="[object Error]",aA="[object Function]",cA="[object Map]",lA="[object Number]",uA="[object Object]",dA="[object RegExp]",fA="[object Set]",pA="[object String]",mA="[object WeakMap]",hA="[object ArrayBuffer]",gA="[object DataView]",yA="[object Float32Array]",wA="[object Float64Array]",EA="[object Int8Array]",_A="[object Int16Array]",xA="[object Int32Array]",SA="[object Uint8Array]",AA="[object Uint8ClampedArray]",bA="[object Uint16Array]",TA="[object Uint32Array]",D={};D[yA]=D[wA]=D[EA]=D[_A]=D[xA]=D[SA]=D[AA]=D[bA]=D[TA]=!0;D[rA]=D[nA]=D[hA]=D[oA]=D[gA]=D[iA]=D[sA]=D[aA]=D[cA]=D[lA]=D[uA]=D[dA]=D[fA]=D[pA]=D[mA]=!1;Rd=IA});function OA(e){return function(t){return e(t)}}var Po,Bs=u(()=>{Po=OA});var Nd,pn,RA,Fs,CA,$s,vd=u(()=>{Ns();Nd=typeof exports=="object"&&exports&&!exports.nodeType&&exports,pn=Nd&&typeof module=="object"&&module&&!module.nodeType&&module,RA=pn&&pn.exports===Nd,Fs=RA&&Io.process,CA=(function(){try{var e=pn&&pn.require&&pn.require("util").types;return e||Fs&&Fs.binding&&Fs.binding("util")}catch{}})(),$s=CA});var Dd,NA,ko,Us=u(()=>{Cd();Bs();vd();Dd=$s&&$s.isTypedArray,NA=Dd?Po(Dd):Rd,ko=NA});function LA(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?Ed(e.length,String):[],c=a.length;for(var l in e)(t||DA.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 vA,DA,Ld,Pd=u(()=>{_d();Lo();oe();Hs();No();Us();vA=Object.prototype,DA=vA.hasOwnProperty;Ld=LA});function PA(e,t){return function(r){return e(t(r))}}var kd,Md=u(()=>{kd=PA});var kA,Hd,Bd=u(()=>{Md();kA=kd(Object.keys,Object),Hd=kA});function BA(e){if(!yd(e))return Hd(e);var t=[];for(var r in Object(e))HA.call(e,r)&&r!="constructor"&&t.push(r);return t}var MA,HA,Fd,$d=u(()=>{wd();Bd();MA=Object.prototype,HA=MA.hasOwnProperty;Fd=BA});function FA(e){return tt(e)?Ld(e):Fd(e)}var gr,Mo=u(()=>{Pd();$d();un();gr=FA});function GA(e,t){if(P(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||xe(e)?!0:UA.test(e)||!$A.test(e)||t!=null&&e in Object(t)}var $A,UA,yr,Ho=u(()=>{oe();cr();$A=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,UA=/^\w*$/;yr=GA});var jA,$e,mn=u(()=>{et();jA=z(Object,"create"),$e=jA});function WA(){this.__data__=$e?$e(null):{},this.size=0}var Ud,Gd=u(()=>{mn();Ud=WA});function KA(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var jd,Wd=u(()=>{jd=KA});function JA(e){var t=this.__data__;if($e){var r=t[e];return r===YA?void 0:r}return qA.call(t,e)?t[e]:void 0}var YA,VA,qA,Kd,Yd=u(()=>{mn();YA="__lodash_hash_undefined__",VA=Object.prototype,qA=VA.hasOwnProperty;Kd=JA});function ZA(e){var t=this.__data__;return $e?t[e]!==void 0:XA.call(t,e)}var zA,XA,Vd,qd=u(()=>{mn();zA=Object.prototype,XA=zA.hasOwnProperty;Vd=ZA});function eb(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=$e&&t===void 0?QA:t,this}var QA,Jd,zd=u(()=>{mn();QA="__lodash_hash_undefined__";Jd=eb});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 Gs,Xd=u(()=>{Gd();Wd();Yd();qd();zd();wr.prototype.clear=Ud;wr.prototype.delete=jd;wr.prototype.get=Kd;wr.prototype.has=Vd;wr.prototype.set=Jd;Gs=wr});function tb(){this.__data__=[],this.size=0}var Zd,Qd=u(()=>{Zd=tb});function rb(e,t){for(var r=e.length;r--;)if(pr(e[r][0],t))return r;return-1}var rt,hn=u(()=>{vo();rt=rb});function ib(e){var t=this.__data__,r=rt(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():ob.call(t,r,1),--this.size,!0}var nb,ob,ef,tf=u(()=>{hn();nb=Array.prototype,ob=nb.splice;ef=ib});function sb(e){var t=this.__data__,r=rt(t,e);return r<0?void 0:t[r][1]}var rf,nf=u(()=>{hn();rf=sb});function ab(e){return rt(this.__data__,e)>-1}var of,sf=u(()=>{hn();of=ab});function cb(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 af,cf=u(()=>{hn();af=cb});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(()=>{Qd();tf();nf();sf();cf();Er.prototype.clear=Zd;Er.prototype.delete=ef;Er.prototype.get=rf;Er.prototype.has=of;Er.prototype.set=af;nt=Er});var lb,ot,Bo=u(()=>{et();Ne();lb=z($,"Map"),ot=lb});function ub(){this.size=0,this.__data__={hash:new Gs,map:new(ot||nt),string:new Gs}}var lf,uf=u(()=>{Xd();gn();Bo();lf=ub});function db(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var df,ff=u(()=>{df=db});function fb(e,t){var r=e.__data__;return df(t)?r[typeof t=="string"?"string":"hash"]:r.map}var it,yn=u(()=>{ff();it=fb});function pb(e){var t=it(this,e).delete(e);return this.size-=t?1:0,t}var pf,mf=u(()=>{yn();pf=pb});function mb(e){return it(this,e).get(e)}var hf,gf=u(()=>{yn();hf=mb});function hb(e){return it(this,e).has(e)}var yf,wf=u(()=>{yn();yf=hb});function gb(e,t){var r=it(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var Ef,_f=u(()=>{yn();Ef=gb});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(()=>{uf();mf();gf();wf();_f();_r.prototype.clear=lf;_r.prototype.delete=pf;_r.prototype.get=hf;_r.prototype.has=yf;_r.prototype.set=Ef;At=_r});function js(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(yb);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(js.Cache||At),r}var yb,xf,Sf=u(()=>{Fo();yb="Expected a function";js.Cache=At;xf=js});function Eb(e){var t=xf(e,function(n){return r.size===wb&&r.clear(),n}),r=t.cache;return t}var wb,Af,bf=u(()=>{Sf();wb=500;Af=Eb});var _b,xb,Sb,Tf,If=u(()=>{bf();_b=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xb=/\\(\\)?/g,Sb=Af(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(_b,function(r,n,o,i){t.push(o?i.replace(xb,"$1"):n||r)}),t}),Tf=Sb});function Ab(e){return e==null?"":Eu(e)}var Of,Rf=u(()=>{_u();Of=Ab});function bb(e,t){return P(e)?e:yr(e,t)?[e]:Tf(Of(e))}var $o,Ws=u(()=>{oe();Ho();If();Rf();$o=bb});function Ib(e){if(typeof e=="string"||xe(e))return e;var t=e+"";return t=="0"&&1/e==-Tb?"-0":t}var Tb,st,wn=u(()=>{cr();Tb=1/0;st=Ib});function Ob(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(()=>{Ws();wn();xr=Ob});function Rb(e,t,r){var n=e==null?void 0:xr(e,t);return n===void 0?r:n}var Cf,Nf=u(()=>{Uo();Cf=Rb});function Cb(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var Go,Ks=u(()=>{Go=Cb});function Nb(e){return P(e)||hr(e)||!!(vf&&e&&e[vf])}var vf,Df,Lf=u(()=>{ir();Lo();oe();vf=V?V.isConcatSpreadable:void 0;Df=Nb});function Pf(e,t,r,n,o){var i=-1,s=e.length;for(r||(r=Df),o||(o=[]);++i<s;){var a=e[i];t>0&&r(a)?t>1?Pf(a,t-1,r,n,o):Go(o,a):n||(o[o.length]=a)}return o}var kf,Mf=u(()=>{Ks();Lf();kf=Pf});function vb(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 Hf,Bf=u(()=>{Hf=vb});function Pb(e,t,r){(r?dn(e,t,r):t===void 0)?t=1:t=Lb(vu(t),0);var n=e==null?0:e.length;if(!n||t<1)return[];for(var o=0,i=0,s=Array(Db(n/t));o<n;)s[i++]=Hf(e,o,o+=t);return s}var Db,Lb,Ys,Ff=u(()=>{Bf();ks();Du();Db=Math.ceil,Lb=Math.max;Ys=Pb});function kb(){this.__data__=new nt,this.size=0}var $f,Uf=u(()=>{gn();$f=kb});function Mb(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var Gf,jf=u(()=>{Gf=Mb});function Hb(e){return this.__data__.get(e)}var Wf,Kf=u(()=>{Wf=Hb});function Bb(e){return this.__data__.has(e)}var Yf,Vf=u(()=>{Yf=Bb});function $b(e,t){var r=this.__data__;if(r instanceof nt){var n=r.__data__;if(!ot||n.length<Fb-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 Fb,qf,Jf=u(()=>{gn();Bo();Fo();Fb=200;qf=$b});function Sr(e){var t=this.__data__=new nt(e);this.size=t.size}var Ar,Vs=u(()=>{gn();Uf();jf();Kf();Vf();Jf();Sr.prototype.clear=$f;Sr.prototype.delete=Gf;Sr.prototype.get=Wf;Sr.prototype.has=Yf;Sr.prototype.set=qf;Ar=Sr});function Ub(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 zf,Xf=u(()=>{zf=Ub});function Gb(){return[]}var Zf,Qf=u(()=>{Zf=Gb});var jb,Wb,ep,Kb,tp,rp=u(()=>{Xf();Qf();jb=Object.prototype,Wb=jb.propertyIsEnumerable,ep=Object.getOwnPropertySymbols,Kb=ep?function(e){return e==null?[]:(e=Object(e),zf(ep(e),function(t){return Wb.call(e,t)}))}:Zf,tp=Kb});function Yb(e,t,r){var n=t(e);return P(e)?n:Go(n,r(e))}var np,op=u(()=>{Ks();oe();np=Yb});function Vb(e){return np(e,gr,tp)}var qs,ip=u(()=>{op();rp();Mo();qs=Vb});var qb,jo,sp=u(()=>{et();Ne();qb=z($,"DataView"),jo=qb});var Jb,Wo,ap=u(()=>{et();Ne();Jb=z($,"Promise"),Wo=Jb});var zb,at,Js=u(()=>{et();Ne();zb=z($,"Set"),at=zb});var cp,Xb,lp,up,dp,fp,Zb,Qb,eT,tT,rT,bt,zs,pp=u(()=>{sp();Bo();ap();Js();Uu();sr();Ls();cp="[object Map]",Xb="[object Object]",lp="[object Promise]",up="[object Set]",dp="[object WeakMap]",fp="[object DataView]",Zb=Fe(jo),Qb=Fe(ot),eT=Fe(Wo),tT=Fe(at),rT=Fe(Co),bt=Ee;(jo&&bt(new jo(new ArrayBuffer(1)))!=fp||ot&&bt(new ot)!=cp||Wo&&bt(Wo.resolve())!=lp||at&&bt(new at)!=up||Co&&bt(new Co)!=dp)&&(bt=function(e){var t=Ee(e),r=t==Xb?e.constructor:void 0,n=r?Fe(r):"";if(n)switch(n){case Zb:return fp;case Qb:return cp;case eT:return lp;case tT:return up;case rT:return dp}return t});zs=bt});var nT,Xs,mp=u(()=>{Ne();nT=$.Uint8Array,Xs=nT});function iT(e){return this.__data__.set(e,oT),this}var oT,hp,gp=u(()=>{oT="__lodash_hash_undefined__";hp=iT});function sT(e){return this.__data__.has(e)}var yp,wp=u(()=>{yp=sT});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();gp();wp();Ko.prototype.add=Ko.prototype.push=hp;Ko.prototype.has=yp;Yo=Ko});function aT(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 Ep,_p=u(()=>{Ep=aT});function cT(e,t){return e.has(t)}var Vo,Qs=u(()=>{Vo=cT});function dT(e,t,r,n,o,i){var s=r&lT,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&uT?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(!Ep(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 lT,uT,qo,ea=u(()=>{Zs();_p();Qs();lT=1,uT=2;qo=dT});function fT(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}var xp,Sp=u(()=>{xp=fT});function pT(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var br,Jo=u(()=>{br=pT});function OT(e,t,r,n,o,i,s){switch(r){case IT:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case TT:return!(e.byteLength!=t.byteLength||!i(new Xs(e),new Xs(t)));case gT:case yT:case _T:return pr(+e,+t);case wT:return e.name==t.name&&e.message==t.message;case xT:case AT:return e==t+"";case ET:var a=xp;case ST:var c=n&mT;if(a||(a=br),e.size!=t.size&&!c)return!1;var l=s.get(e);if(l)return l==t;n|=hT,s.set(e,t);var d=qo(a(e),a(t),n,o,i,s);return s.delete(e),d;case bT:if(ta)return ta.call(e)==ta.call(t)}return!1}var mT,hT,gT,yT,wT,ET,_T,xT,ST,AT,bT,TT,IT,Ap,ta,bp,Tp=u(()=>{ir();mp();vo();ea();Sp();Jo();mT=1,hT=2,gT="[object Boolean]",yT="[object Date]",wT="[object Error]",ET="[object Map]",_T="[object Number]",xT="[object RegExp]",ST="[object Set]",AT="[object String]",bT="[object Symbol]",TT="[object ArrayBuffer]",IT="[object DataView]",Ap=V?V.prototype:void 0,ta=Ap?Ap.valueOf:void 0;bp=OT});function vT(e,t,r,n,o,i){var s=r&RT,a=qs(e),c=a.length,l=qs(t),d=l.length;if(c!=d&&!s)return!1;for(var p=c;p--;){var f=a[p];if(!(s?f in t:NT.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 RT,CT,NT,Ip,Op=u(()=>{ip();RT=1,CT=Object.prototype,NT=CT.hasOwnProperty;Ip=vT});function PT(e,t,r,n,o,i){var s=P(e),a=P(t),c=s?Cp:zs(e),l=a?Cp:zs(t);c=c==Rp?zo:c,l=l==Rp?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):bp(e,t,c,r,n,o,i);if(!(r&DT)){var m=d&&Np.call(e,"__wrapped__"),w=p&&Np.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),Ip(e,t,r,n,o,i)):!1}var DT,Rp,Cp,zo,LT,Np,vp,Dp=u(()=>{Vs();ea();Tp();Op();pp();oe();Hs();Us();DT=1,Rp="[object Arguments]",Cp="[object Array]",zo="[object Object]",LT=Object.prototype,Np=LT.hasOwnProperty;vp=PT});function Lp(e,t,r,n,o){return e===t?!0:e==null||t==null||!_e(e)&&!_e(t)?e!==e&&t!==t:vp(e,t,r,n,Lp,o)}var Xo,ra=u(()=>{Dp();ar();Xo=Lp});function HT(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,kT|MT,n,p):f))return!1}}return!0}var kT,MT,Pp,kp=u(()=>{Vs();ra();kT=1,MT=2;Pp=HT});function BT(e){return e===e&&!Se(e)}var Zo,na=u(()=>{ur();Zo=BT});function FT(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 Mp,Hp=u(()=>{na();Mo();Mp=FT});function $T(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var Qo,oa=u(()=>{Qo=$T});function UT(e){var t=Mp(e);return t.length==1&&t[0][2]?Qo(t[0][0],t[0][1]):function(r){return r===e||Pp(r,e,t)}}var Bp,Fp=u(()=>{kp();Hp();oa();Bp=UT});function GT(e,t){return e!=null&&t in Object(e)}var $p,Up=u(()=>{$p=GT});function jT(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 Gp,jp=u(()=>{Ws();Lo();oe();No();Do();wn();Gp=jT});function WT(e,t){return e!=null&&Gp(e,t,$p)}var Wp,Kp=u(()=>{Up();jp();Wp=WT});function VT(e,t){return yr(e)&&Zo(t)?Qo(st(e),t):function(r){var n=Cf(r,e);return n===void 0&&n===t?Wp(r,e):Xo(t,n,KT|YT)}}var KT,YT,Yp,Vp=u(()=>{ra();Nf();Kp();Ho();na();oa();wn();KT=1,YT=2;Yp=VT});function qT(e){return function(t){return t?.[e]}}var qp,Jp=u(()=>{qp=qT});function JT(e){return function(t){return xr(t,e)}}var zp,Xp=u(()=>{Uo();zp=JT});function zT(e){return yr(e)?qp(st(e)):zp(e)}var Zp,Qp=u(()=>{Jp();Xp();Ho();wn();Zp=zT});function XT(e){return typeof e=="function"?e:e==null?Qe:typeof e=="object"?P(e)?Yp(e[0],e[1]):Bp(e):Zp(e)}var ct,En=u(()=>{Fp();Vp();ln();oe();Qp();ct=XT});function ZT(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 em,tm=u(()=>{em=ZT});function QT(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 rm,nm=u(()=>{rm=QT});var eI,om,im=u(()=>{nm();eI=rm(),om=eI});function tI(e,t){return e&&om(e,t,gr)}var sm,am=u(()=>{im();Mo();sm=tI});function rI(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 cm,lm=u(()=>{un();cm=rI});var nI,ei,ia=u(()=>{am();lm();nI=cm(sm),ei=nI});function oI(e,t,r,n){return ei(e,function(o,i,s){t(n,o,r(o),s)}),n}var um,dm=u(()=>{ia();um=oI});function iI(e,t){return function(r,n){var o=P(r)?em:um,i=t?t():{};return o(r,e,ct(n,2),i)}}var fm,pm=u(()=>{tm();dm();En();oe();fm=iI});function sI(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 mm,hm=u(()=>{mm=sI});function aI(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 gm,ym=u(()=>{ia();un();gm=aI});var cI,lI,uI,sa,wm=u(()=>{dd();pm();cI=Object.prototype,lI=cI.hasOwnProperty,uI=fm(function(e,t,r){lI.call(e,r)?e[r].push(t):ud(e,r,[t])}),sa=uI});function dI(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 Em,_m=u(()=>{Em=dI});function fI(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}var xm,Sm=u(()=>{xm=fI});function pI(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 Am,bm=u(()=>{cr();Am=pI});function mI(e,t,r){for(var n=-1,o=e.criteria,i=t.criteria,s=o.length,a=r.length;++n<s;){var c=Am(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 Tm,Im=u(()=>{bm();Tm=mI});function hI(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=gm(e,function(i,s,a){var c=lr(t,function(l){return l(i)});return{criteria:c,index:++n,value:i}});return xm(o,function(i,s){return Tm(i,s,r)})}var Om,Rm=u(()=>{vs();Uo();En();ym();Sm();Bs();Im();ln();oe();Om=hI});var gI,aa,Cm=u(()=>{Mf();Rm();gd();ks();gI=hd(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]]),Om(e,kf(t,1),[])}),aa=gI});function yI(e,t){return e&&e.length?Em(e,ct(t,2)):0}var ca,Nm=u(()=>{En();_m();ca=yI});var wI,EI,vm,Dm=u(()=>{Js();Ku();Jo();wI=1/0,EI=at&&1/br(new at([,-0]))[1]==wI?function(e){return new at(e)}:Wu,vm=EI});function xI(e,t,r){var n=-1,o=cd,i=e.length,s=!0,a=[],c=a;if(r)s=!1,o=mm;else if(i>=_I){var l=t?null:vm(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 _I,Lm,Pm=u(()=>{Zs();ld();hm();Qs();Dm();Jo();_I=200;Lm=xI});function SI(e,t){return e&&e.length?Lm(e,ct(t,2)):[]}var la,km=u(()=>{En();Pm();la=SI});var ti=u(()=>{Ff();wm();Cm();Nm();km();});import{readFile as AI}from"node:fs/promises";function TI(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 II(e,t,r){return`${e}
|
|
76
76
|
|
|
77
77
|
---
|
|
78
78
|
|
|
@@ -86,15 +86,15 @@ Respond with ONLY a JSON array of facts. Each fact object must have exactly thes
|
|
|
86
86
|
- "confidence" (string): one of high, medium, low
|
|
87
87
|
- "importance" (string): "vital" if essential to understanding the topic, "supplementary" if supporting detail
|
|
88
88
|
|
|
89
|
-
Output the JSON array directly, no explanation or wrapping.`}function
|
|
89
|
+
Output the JSON array directly, no explanation or wrapping.`}function OI(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 RI(e,t,r){let n=TI(e),o=II(t,n,r),i=await ge(o,{model:g.llm.extractionModel,caller:"extractor"});return OI(i,r).map(a=>({...a,sourceSection:e.sectionHeading||null}))}async function Mm(e,{promptPath:t,categories:r}){if(!e.length)return[];let n=await AI(t,"utf8"),o=Ys(e,bI),i=[];for(let s of o){let a=await Promise.all(s.map(c=>RI(c,n,r).catch(l=>(console.error(`[extractor] chunk failed: ${l.message}`),[]))));i.push(...a.flat())}return i}var bI,Hm=u(()=>{ti();ye();A();bI=5});function ri(e){if(!e||typeof e!="string")return e;let t=e;for(let r of CI)t=t.replace(r,_n);return t=t.replace(NI,(r,n)=>`${n}=${_n}`),t=t.replace(vI,(r,n)=>`${n}${_n}:${_n}@`),t=t.replace(LI,(r,n)=>`${n}=${_n}`),t}var _n,CI,NI,vI,DI,LI,ua=u(()=>{_n="***MASKED***",CI=[/\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],NI=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"),vI=/(\w+:\/\/)([^:/\s]+):([^@\s]{3,})@/g,DI=["DATABASE_URL","REDIS_URL","MONGODB_URI","MONGO_URI","POSTGRES_URL","DSN","CONNECTION_STRING","ENCRYPTION_KEY","JWT_SECRET","SIGIL_ENCRYPTION_KEY","SESSION_SECRET","WEBHOOK_SECRET"],LI=new RegExp(`\\b(${DI.join("|")})\\s*[=:]\\s*["']?([^\\s"']+)["']?`,"gi")});var xn={};x(xn,{deleteFact:()=>jI,deleteNamespace:()=>KI,findByUid:()=>BI,findSimilar:()=>Um,getFactCount:()=>GI,getHotFacts:()=>$I,insertFact:()=>Tr,listByCategory:()=>FI,listByDocument:()=>Fm,listFacts:()=>UI,listNamespaces:()=>WI,markContradicted:()=>$m,markSuperseded:()=>ma,recordAccess:()=>ha,saveFact:()=>pa,supersedeStaleDocFacts:()=>ni});import{readFile as PI}from"node:fs/promises";import kI from"node:path";async function pa({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 Um(c,{namespace:o}),d={skip:Bm,ambiguous:da};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>=Bm)return{action:"SKIP",existing:p,audm:{...f,decision:"skip-duplicate"}};if(p.similarity>=da){let w=await HI(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 ma(p.id,E.id),await fa({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 $m(p.id,E.id),await fa({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 HI(e,t){let n=`${await PI(MI,"utf8")}
|
|
90
90
|
|
|
91
91
|
**EXISTING FACT:** ${t}
|
|
92
92
|
|
|
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(),
|
|
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(),Qi));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(`
|
|
94
94
|
UPDATE fact
|
|
95
95
|
SET search_vector = to_tsvector('english', content)
|
|
96
96
|
WHERE id = ?
|
|
97
|
-
`,[p.id]),p}async function
|
|
97
|
+
`,[p.id]),p}async function BI(e){let[t]=await h("fact").where({uid:e});return t||null}async function FI(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 Fm(e){return h("fact").whereRaw("? = ANY(source_document_ids)",[e]).where({status:"active"}).orderBy("createdAt","desc")}async function $m(e,t){await h("fact").where({id:e}).update({status:"contradicted",contradictedById:t,validUntil:h.fn.now()})}async function ma(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 Fm(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 ma(s.id,null),await fa({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 Um(e,{namespace:t,threshold:r=da,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(`
|
|
98
98
|
SELECT id, uid, content, category, status,
|
|
99
99
|
1 - (${i}) as similarity
|
|
100
100
|
FROM fact
|
|
@@ -104,12 +104,12 @@ Output the JSON array directly, no explanation or wrapping.`}function _I(e,t){le
|
|
|
104
104
|
AND 1 - (${i}) >= ?
|
|
105
105
|
ORDER BY ${i}
|
|
106
106
|
LIMIT ?
|
|
107
|
-
`,[o,t,o,r,o,n]);return a})}async function
|
|
107
|
+
`,[o,t,o,r,o,n]);return a})}async function fa({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 ha(e){e.length&&await h.raw(`UPDATE fact_lifecycle
|
|
108
108
|
SET access_count = access_count + 1,
|
|
109
109
|
last_accessed_at = NOW(),
|
|
110
110
|
stage = CASE WHEN stage = 'stable' THEN 'editing' ELSE stage END,
|
|
111
111
|
stage_entered_at = CASE WHEN stage = 'stable' THEN NOW() ELSE stage_entered_at END
|
|
112
|
-
WHERE fact_id = ANY(?)`,[e])}async function
|
|
112
|
+
WHERE fact_id = ANY(?)`,[e])}async function $I(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 UI({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 GI(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 jI(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 WI(){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 KI(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 MI,Bm,da,Tt=u(()=>{or();T();rr();ye();Ze();ua();A();C();MI=kI.join(Q,"audm-decision.md"),Bm=g.memory.skipThreshold,da=g.memory.ambiguousThreshold});var oi,YI,kU,Gm,ga=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"},YI=["preference","opinion","personal","experience"],kU=Object.keys(oi).filter(e=>!YI.includes(e)),Gm=oi});import{readFile as VI}from"node:fs/promises";import{join as qI}from"node:path";async function Wm(e,{title:t}={}){if(!e?.trim()||e.trim().length<zI)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(e.length>XI)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let n=`${await VI(JI,"utf8")}
|
|
113
113
|
|
|
114
114
|
---
|
|
115
115
|
|
|
@@ -118,13 +118,13 @@ Input: ${e}
|
|
|
118
118
|
|
|
119
119
|
---
|
|
120
120
|
|
|
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||!
|
|
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||!ZI.includes(o.route))return jm("Invalid classification result");let i=Object.keys(Gm),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),jm(o.message)}}function jm(e){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${e}`}}var JI,zI,XI,ZI,Km=u(()=>{ye();A();ga();C();JI=qI(Q,"input-classifier.md"),zI=3,XI=2e3,ZI=["thought","knowledge","noise"]});var Ir={};x(Ir,{findById:()=>Ae,findByName:()=>It,findByUid:()=>QI,findSimilar:()=>eO,getCanonicalEntity:()=>Rt,getEntityCount:()=>nO,incrementMentionCount:()=>Sn,insertEntity:()=>ya,listByType:()=>rO,pushAlias:()=>ii,searchByName:()=>Ea,updateDescription:()=>tO,updateEntityTypes:()=>Ot,updateName:()=>wa});async function ya({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(`
|
|
122
122
|
UPDATE entity
|
|
123
123
|
SET aliases = (
|
|
124
124
|
SELECT ARRAY(SELECT DISTINCT unnest(aliases || ARRAY[?]::text[]))
|
|
125
125
|
)
|
|
126
126
|
WHERE id = ?
|
|
127
|
-
`,[r,e])}async function
|
|
127
|
+
`,[r,e])}async function wa(e,t){await h("entity").where({id:e}).update({name:t})}async function QI(e){return h("entity").where({uid:e}).first()||null}async function Ae(e){return h("entity").where({id:e}).first()||null}async function eO(e,{entityType:t,namespace:r,threshold:n=.85,limit:o=3}){let i=G(e),s=`${Re("embedding")} <=> ${Ce()}`,{rows:a}=await h.raw(`
|
|
128
128
|
SELECT id, uid, name, entity_type AS "entityType", description,
|
|
129
129
|
mention_count AS "mentionCount",
|
|
130
130
|
1 - (${s}) AS similarity
|
|
@@ -136,7 +136,7 @@ Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts":
|
|
|
136
136
|
AND 1 - (${s}) >= ?
|
|
137
137
|
ORDER BY ${s}
|
|
138
138
|
LIMIT ?
|
|
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
|
|
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 tO(e,t){await h("entity").where({id:e}).update({description:t})}async function rO(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 nO(e){let[{count:t}]=await h("entity").where({entityType:e}).whereNull("mergedWith").count("id as count");return Number(t)}async function Ea(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 Ym(e,t,{namespace:r,threshold:n=oO,limit:o=5}){if(!t)return[];let i=G(t),s=`${Re("embedding")} <=> ${Ce()}`,{rows:a}=await h.raw(`
|
|
140
140
|
SELECT id, name, entity_type AS "entityType", entity_types AS "entityTypes",
|
|
141
141
|
1 - (${s}) AS similarity
|
|
142
142
|
FROM entity
|
|
@@ -147,7 +147,7 @@ Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts":
|
|
|
147
147
|
AND 1 - (${s}) >= ?
|
|
148
148
|
ORDER BY ${s}
|
|
149
149
|
LIMIT ?
|
|
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
|
|
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 _a(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?`
|
|
151
151
|
Source passage where the new mention appeared:
|
|
152
152
|
---
|
|
153
153
|
${n.slice(0,1500)}
|
|
@@ -166,19 +166,19 @@ Decision rules:
|
|
|
166
166
|
- If you cannot tell, "same" is false. Don't guess.
|
|
167
167
|
|
|
168
168
|
Respond as STRICT JSON, no markdown, no prose:
|
|
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=
|
|
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=iO(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 iO(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 oO,Vm=u(()=>{T();ye();Ze();A();oO=.85});var qm={};x(qm,{followMergeChain:()=>lO,mergeEntities:()=>sO});async function sO(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(`
|
|
170
170
|
INSERT INTO fact_entity (fact_id, entity_id, mention_type, mention_count, created_at, updated_at)
|
|
171
171
|
SELECT fact_id, ?, mention_type, mention_count, NOW(), NOW()
|
|
172
172
|
FROM fact_entity
|
|
173
173
|
WHERE entity_id = ?
|
|
174
174
|
ON CONFLICT (fact_id, entity_id, mention_type)
|
|
175
175
|
DO UPDATE SET mention_count = fact_entity.mention_count + EXCLUDED.mention_count
|
|
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
|
|
177
|
-
`),i=`${await
|
|
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 cO(e);let i=aO(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 aO(e){if(!e.entityTypes)return[e.entityType];try{return JSON.parse(e.entityTypes)}catch{return[e.entityType]}}async function cO(e){let t=await h("relation").where(function(){this.where({sourceId:e}).orWhere({targetId:e})}).whereNull("invalidAt"),r=sa(t,n=>`${n.sourceId}-${n.targetId}-${n.relationType}`);for(let n of Object.values(r)){if(n.length<=1)continue;let[o,...i]=aa(n,"id"),s=ca(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 lO(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 Jm=u(()=>{ti();T();ve()});import{readFile as uO}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 Ym(e,d,{namespace:c,limit:3});for(let w of p){let y=await _a(e,t,w,s);if(y.same)return zm(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 _a(e,t,{...y,types:dO(y),similarity:0},s);if(E.same)return zm(y,{newName:e,entityType:t,isRename:E.rename,currentName:E.currentName})}try{return await ya({name:e,entityType:t,description:r,namespace:c,externalId:o,embedding:d})}catch(w){if(Xm(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 Xm(e){return e?!!(e.code==="23505"||typeof e.message=="string"&&e.message.includes("duplicate key value violates unique constraint")):!1}async function zm(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 wa(i.id,l),i.name=l}catch(p){if(Xm(p)){let f=await It(l,i.namespace);if(f&&f.id!==i.id){let{mergeEntities:m}=await Promise.resolve().then(()=>(Jm(),qm));return await m(f.id,i.id),await ii(f.id,i.name),await Rt(f.id)}}throw p}}return i}function dO(e){if(e.entityTypes)try{return JSON.parse(e.entityTypes)}catch{}return[e.entityType]}async function xa(e,{promptPath:t,namespace:r}){if(!e.length)return[];let n=e.map(f=>`- [${f.category}] ${f.content}`).join(`
|
|
177
|
+
`),i=`${await uO(t,"utf8")}
|
|
178
178
|
|
|
179
179
|
---
|
|
180
180
|
|
|
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
|
|
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 fO(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 fO(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 Zm=u(()=>{rr();ye();A();ve();Vm()});var si={};x(si,{createRelation:()=>bn,findRelation:()=>pO,getRelationCount:()=>gO,getRelationsByFact:()=>hO,invalidateRelation:()=>mO,listRelationsForEntity:()=>Tn});async function bn({sourceId:e,targetId:t,relationType:r,sourceFactId:n,validAt:o}){let{rows:[i]}=await h.raw(`
|
|
182
182
|
INSERT INTO relation (source_id, target_id, relation_type, source_fact_id, mention_count, valid_at, created_at, updated_at)
|
|
183
183
|
VALUES (?, ?, ?, ?, 1, ?, NOW(), NOW())
|
|
184
184
|
ON CONFLICT (source_id, target_id, relation_type) DO UPDATE SET
|
|
@@ -186,7 +186,7 @@ ${n}`,s=await Be(i,{model:g.llm.entityModel,caller:"entity-resolver"}),a=bo(s);i
|
|
|
186
186
|
source_fact_id = COALESCE(EXCLUDED.source_fact_id, relation.source_fact_id),
|
|
187
187
|
updated_at = NOW()
|
|
188
188
|
RETURNING *
|
|
189
|
-
`,[e,t,r,n||null,o||null]);return i}async function
|
|
189
|
+
`,[e,t,r,n||null,o||null]);return i}async function pO(e,t,r){return h("relation").where({sourceId:e,targetId:t,relationType:r}).whereNull("invalidAt").first()||null}async function mO(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(`
|
|
190
190
|
SELECT r.id AS "relationId", r.relation_type AS "relationType",
|
|
191
191
|
r.mention_count AS "mentionCount", r.valid_at AS "validAt",
|
|
192
192
|
e.id AS "entityId", e.uid, e.name, e.entity_type AS "entityType",
|
|
@@ -199,7 +199,7 @@ ${n}`,s=await Be(i,{model:g.llm.entityModel,caller:"entity-resolver"}),a=bo(s);i
|
|
|
199
199
|
${r?"AND r.relation_type = ?":""}
|
|
200
200
|
ORDER BY r.mention_count DESC
|
|
201
201
|
LIMIT ?
|
|
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
|
|
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 hO(e){let{rows:t}=await h.raw(`
|
|
203
203
|
SELECT r.id, r.relation_type AS "relationType",
|
|
204
204
|
r.mention_count AS "mentionCount",
|
|
205
205
|
s.name AS "sourceName", s.entity_type AS "sourceType",
|
|
@@ -211,62 +211,62 @@ ${n}`,s=await Be(i,{model:g.llm.entityModel,caller:"entity-resolver"}),a=bo(s);i
|
|
|
211
211
|
AND r.invalid_at IS NULL
|
|
212
212
|
AND s.merged_with IS NULL
|
|
213
213
|
AND t.merged_with IS NULL
|
|
214
|
-
`,[e]);return t}async function
|
|
214
|
+
`,[e]);return t}async function gO(){let[{count:e}]=await h("relation").whereNull("invalidAt").count("id as count");return Number(e)}var Ct=u(()=>{T()});var Nt={};x(Nt,{archivePod:()=>EO,deletePod:()=>_O,findByEntityId:()=>eh,findByExternalId:()=>Cr,findById:()=>yO,findByUid:()=>Rr,incrementCounters:()=>Nr,insertPod:()=>Qm,listPods:()=>wO,patchAttrs:()=>In,reassignEntity:()=>xO,setEndedAt:()=>Sa,upsertPod:()=>Or});async function Qm({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(`
|
|
215
215
|
INSERT INTO pod (uid, pod_type, name, namespace, attrs, entity_id, connection_id, external_id, started_at, created_at, updated_at)
|
|
216
216
|
VALUES (?, ?, ?, ?, ?::jsonb, ?, ?, ?, ?, NOW(), NOW())
|
|
217
217
|
ON CONFLICT (pod_type, external_id, namespace) WHERE external_id IS NOT NULL DO UPDATE SET
|
|
218
218
|
attrs = pod.attrs || EXCLUDED.attrs,
|
|
219
219
|
updated_at = NOW()
|
|
220
220
|
RETURNING *, (xmax = 0) AS "isNew"
|
|
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
|
|
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 yO(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 eh(e){return h("pod").where({entityId:e}).first()||null}async function wO({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 EO(e){await h("pod").where({id:e}).update({status:"archived",updatedAt:h.fn.now()})}async function _O(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 Sa(e,t=new Date){await h("pod").where({id:e}).update({endedAt:t,updatedAt:h.fn.now()})}async function xO(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
|
|
222
222
|
SET member_doc_count = member_doc_count + ?,
|
|
223
223
|
member_fact_count = member_fact_count + ?,
|
|
224
224
|
updated_at = NOW()
|
|
225
|
-
WHERE id = ?`,[t,r,e])}var lt=u(()=>{or();T();A()});var vr={};x(vr,{attach:()=>ai,attachDocument:()=>
|
|
225
|
+
WHERE id = ?`,[t,r,e])}var lt=u(()=>{or();T();A()});var vr={};x(vr,{attach:()=>ai,attachDocument:()=>Aa,attachEntity:()=>SO,attachFact:()=>On,detach:()=>AO,factIdsInPod:()=>IO,listMembers:()=>bO,listPodsForMember:()=>TO});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)
|
|
226
226
|
VALUES (?, ?, ?, ?)
|
|
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
|
|
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=
|
|
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
|
|
230
|
-
`),I=await
|
|
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 AO(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 bO(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 TO(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 IO(e){return await h("pod_membership").where({podId:e,memberType:"fact"}).pluck("memberId")}var On,Aa,SO,Rn=u(()=>{T();lt();On=(e,t,r)=>ai(e,"fact",t,r),Aa=(e,t,r)=>ai(e,"document",t,r),SO=(e,t,r)=>ai(e,"entity",t,r)});var Ta={};x(Ta,{getEntitiesForFact:()=>RO,getEntityIdsForFacts:()=>Dr,getFactsForEntity:()=>ba,linkEntitiesToFact:()=>Cn});async function Cn(e,t){if(!t.length)return;let r=la(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 OO(e,r)}async function OO(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 ba(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 RO(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 CO from"node:path";async function Ca(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?NO({entityDefs:n,factObjects:c,firstFactId:d,namespace:r,today:p}):vO({title:o,sourceType:i,metadata:s,factObjects:c,firstFactId:d,namespace:r,today:p})}async function NO({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=Ia(t,f.source)||Ia(t,f.target);await bn({sourceId:m.id,targetId:w.id,relationType:f.type,sourceFactId:y?.id||r,validAt:o}),s++}let l=await Ra(t,n),d=Oa(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 vO({title:e,sourceType:t,metadata:r,factObjects:n,firstFactId:o,namespace:i,today:s}){if(!e){let E=n.length?await xa(n,{promptPath:th,namespace:i}):[],b=await Ra(n,i),_=Oa(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 xa(n,{promptPath:th,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=Ia(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 Ra(n,i),w=Oa(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 Ia(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${DO(o)}\\b`).test(r):!1)}function DO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Oa(...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 Ra(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 th,rh=u(()=>{Zm();Ct();vt();C();T();th=CO.join(Q,"entity-extraction.md")});var LO,nh,Na=u(()=>{T();A();LO=1440*60*1e3,nh={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()-LO);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 sh({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 ah({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 oh,ih,va=u(()=>{Nn();oh="claude_session",ih={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 Da();return e?[e]:[]}catch{return[]}}}});var ui={};x(ui,{CURSOR_PATH:()=>Lr,endActiveSession:()=>KO,ensureActiveSession:()=>GO,getActiveCursor:()=>WO,getActiveSessionPodUid:()=>Da});import{writeFile as MO,readFile as HO,unlink as BO}from"node:fs/promises";import{existsSync as FO,mkdirSync as $O}from"node:fs";import{dirname as ch}from"node:path";async function li(){try{let e=await HO(Lr,"utf8");return JSON.parse(e)}catch{return null}}async function lh(e){FO(ch(Lr))||$O(ch(Lr),{recursive:!0}),await MO(Lr,JSON.stringify(e,null,2),"utf8")}async function GO({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:(YO(l.attrs)||0)+1}),await jO(s),l}let a=new Date,{pod:c}=await Or({podType:oh,externalId:e,name:ah({sessionId:e,startedAt:a}),namespace:i,attrs:sh({sessionId:e,transcriptPath:t,cwd:r,turnCount:1,model:n}),startedAt:a});return await lh({session_id:e,pod_uid:c.uid,namespace:i,started_at:c.startedAt??a.toISOString(),last_seen_at:new Date().toISOString()}),c}async function jO(e){await lh({...e,last_seen_at:new Date().toISOString()})}async function Da({allowStale:e=!1}={}){let t=await li();return!t||!t.pod_uid||!e&&t.started_at&&Date.now()-new Date(t.started_at).getTime()>UO?null:t.pod_uid}async function WO(){return li()}async function KO({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 Sa(n.id)}try{await BO(Lr)}catch{}return n}function YO(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,UO,Nn=u(()=>{lt();va();A();C();Lr=Wi,UO=360*60*1e3});var Ha={};x(Ha,{POD_TYPE:()=>Pa,deriveProjectRoot:()=>Ma,ensureProjectPod:()=>qO,formatForDisplay:()=>zO,membership:()=>vr,projectKind:()=>ka});import{execFileSync as VO}from"node:child_process";import{basename as uh}from"node:path";async function qO({cwd:e,namespace:t=null}){if(!e)return null;let r=Ma(e),n=t||g.defaults.namespace,i=(r!==e?!1:La(e)===e)?r:La(e),{pod:s}=await Or({podType:Pa,externalId:r,name:uh(r)||r,namespace:n,attrs:{root_path:r,git_root:i||null,display_name:uh(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return s}function Ma(e){return La(e)||e}function La(e){try{return VO("git",["rev-parse","--show-toplevel"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function JO(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(Nn(),ui));return(await e())?.cwd||null}catch{return null}}function zO(e){let t=XO(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 XO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Pa,ka,di=u(()=>{lt();Rn();A();Pa="project",ka={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 JO();if(!t)return[];let r=e.namespace||g.defaults.namespace,n=Ma(t),o=await Cr({podType:Pa,externalId:n,namespace:r});return o?[o.uid]:[]}}});async function dh(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(),Ha)),s=await i({cwd:o,namespace:n});s&&r.push({podId:s.id,role:"primary"})}catch{}return r}var fh=u(()=>{lt();Na();A()});var Ba={};x(Ba,{ingestDocument:()=>tR});import{createHash as ZO}from"node:crypto";import{join as QO}from"node:path";async function tR({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||eR,R=t||r,I=null;if(m&&(process.stderr.write(`[0/6] Classifying input...
|
|
230
|
+
`),I=await Wm(e,{title:R}),process.stderr.write(` Route: ${I.route} \u2014 ${I.reasoning}
|
|
231
231
|
`),I.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
|
|
232
232
|
`),{documentId:null,title:R,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
|
|
233
|
-
`);let S=
|
|
234
|
-
`),{documentId:O.id,title:R,skipped:!0};s&&(Object.keys(s).length||s.connection_id)&&await
|
|
235
|
-
`);let Zr=
|
|
236
|
-
`);let U=await
|
|
237
|
-
`),{documentId:O.id,documentUid:O.uid,title:R,skipped:!1,route:"thought",chunkCount:0,facts:{...U.counts,verdicts:
|
|
238
|
-
`),j=
|
|
239
|
-
`),!f&&j.length&&(j=await
|
|
240
|
-
${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:Kt[eo]}));await
|
|
241
|
-
`),pe=await
|
|
242
|
-
`),await To(O.id,{chunkCount:j.length,factCount:pe.counts.added+pe.counts.updated+pe.counts.contradicted}),await
|
|
243
|
-
`),Qr=await
|
|
244
|
-
`))}catch(U){throw console.error(`[pipeline] Failed after document upsert: ${U.message}`),await
|
|
245
|
-
`),{documentId:O.id,documentUid:O.uid,title:R,skipped:!1,route:I?.route??null,chunkCount:j.length,facts:{...pe.counts,verdicts:
|
|
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
|
|
247
|
-
`),
|
|
233
|
+
`);let S=ZO("sha256").update(e).digest("hex"),q=r||`thought:${S}`,{doc:O,changed:Pe}=await Ts({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 Os(O.id,s,s.connection_id??null);let Ye=await oR({podUids:w,resolvePodsFrom:y,metadata:s,namespace:E});for(let{podId:U,role:Kt}of Ye)await Aa(U,O.id,Kt);process.stderr.write(`[2/6] Parsing content...
|
|
235
|
+
`);let Zr=El(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 rR(I.facts,{documentId:O.id,namespace:E}),Kt={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!p&&U.results.length&&(Kt=await Ca({title:R,sourceType:n,metadata:s},U.results,E,l)),await To(O.id,{chunkCount:0,factCount:U.counts.added}),await mh(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:ph(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=Sl(Zr.sections),process.stderr.write(` ${j.length} chunks created
|
|
239
|
+
`),!f&&j.length&&(j=await nu(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 cu(O.id,Qn,E),!d&&g.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
|
|
241
|
+
`),pe=await nR(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 mh(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 Ca({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 Is(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:ph(pe.results)},entities:Qr}}function ph(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 hh(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 pa({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 rR(e,{documentId:t,namespace:r}){let n=await He(e.map(o=>o.content));return hh(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:"high",defaultImportance:"vital"})}async function nR(e,{documentId:t,namespace:r,promptPath:n,categories:o}){let i=await Mm(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 hh(i,{documentId:t,namespace:r,embeddings:s})}async function oR({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 dh(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 mh(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 eR,Fa=u(()=>{_l();us();rr();ou();Cs();lu();Hm();Tt();ga();Km();rh();lt();Rn();fh();ua();A();C();eR=QO(Q,"default-extraction.md")});var ut={};x(ut,{clearTraces:()=>uR,getTrace:()=>lR,listTraces:()=>cR,recordTrace:()=>aR});function sR(){let e=Zi();return{deviceId:e?.device?.id??null,transport:e?.transport??null}}async function aR({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}=sR(),l=r;try{JSON.stringify(r).length>iR&&(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 cR({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"?gh(s.detail):s.detail}))}async function lR(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"?gh(t.detail):t.detail}:null}async function uR(){return{cleared:await h("trace_event").del()}}function gh(e){try{return JSON.parse(e)}catch{return{}}}var iR,dt=u(()=>{or();T();Qt();po();iR=256*1024});var Eh={};x(Eh,{_reset:()=>AR,activeKinds:()=>Dn,get:()=>wR,getSchemaDoc:()=>SR,list:()=>ER,register:()=>$a,validateAttrs:()=>xR});import{readFile as yh}from"node:fs/promises";import{fileURLToPath as dR}from"node:url";import{dirname as fR,join as wh}from"node:path";function $a(e){for(let t of pR)if(!e[t])throw new Error(`Pod kind missing required field: ${t}`);if(e.visibility&&!mR.has(e.visibility))throw new Error(`Pod kind ${e.name}: invalid visibility ${e.visibility}`);if(e.activeMode&&!hR.has(e.activeMode))throw new Error(`Pod kind ${e.name}: invalid activeMode ${e.activeMode}`);if(e.writePolicy&&!gR.has(e.writePolicy))throw new Error(`Pod kind ${e.name}: invalid writePolicy ${e.writePolicy}`);vn.set(e.name,yR(e))}function yR(e){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...e}}function wR(e){return vn.get(e)||null}function ER(){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
|
+
`),_R(r.name,n)}return t}function _R(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 xR(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 SR(e){if(!e)return null;let t=wh(ji,`${e.name}.md`);try{return await yh(t,"utf8")}catch{}if(!e.schemaDocPath)return null;let r=fR(dR(import.meta.url)),n=wh(r,e.schemaDocPath);try{return await yh(n,"utf8")}catch{return null}}function AR(){vn.clear()}var pR,mR,hR,gR,vn,Ln=u(()=>{C();pR=["name"],mR=new Set(["private","shared","public"]),hR=new Set(["singleton-live","multi-active","rolling-window","always"]),gR=new Set(["origin-only","shared-allowlist","open"]),vn=new Map});async function TR(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(),Ha)),r=t(e.cwd);return r?r.split("/").pop():null}catch{return null}}function IR(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var bR,_h,xh=u(()=>{T();A();bR="playbook",_h={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 TR(e);try{let o=await h("pod").where({podType:bR,namespace:t,status:"active"}).select("uid","attrs");return r?o.filter(s=>{let a=IR(s.attrs);return!a.project||a.project===r}).map(s=>s.uid):o.map(s=>s.uid)}catch{return[]}}}});var OR,Sh,Ah=u(()=>{T();A();OR=["__virtual:vital__"],Sh={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()=>OR,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 Ih={};x(Ih,{registerBuiltins:()=>Th});function Th(){if(!bh){for(let e of RR)$a(e);bh=!0}}var RR,bh,fi=u(()=>{Ln();va();Na();di();xh();Ah();RR=[ih,ka,nh,_h,Sh],bh=!1;Th()});var Pn={};x(Pn,{factsInPodsByRecency:()=>Rh,getHotFacts:()=>Oh,updateContextSnapshot:()=>vR,writeSnapshotToFile:()=>Ch});async function Oh({namespace:e,limit:t=CR,ctx:r={}}={}){let n=e||g.defaults.namespace,o={...r,namespace:n};o.cwd||(o.cwd=await NR());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 Rh(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 Rh(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(`
|
|
248
248
|
COALESCE(f.importance_score, 2) DESC,
|
|
249
249
|
COALESCE(fl.last_accessed_at, f.created_at) DESC
|
|
250
|
-
`).limit(r).pluck("f.content")}async function
|
|
250
|
+
`).limit(r).pluck("f.content")}async function NR(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(Nn(),ui));return(await e())?.cwd||null}catch{return null}}async function Ch({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(`
|
|
251
251
|
`),n].join(`
|
|
252
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()?`
|
|
253
253
|
|
|
254
254
|
`:"")+i+`
|
|
255
|
-
`;return await r.writeFile(to,a,"utf8"),e.length}async function
|
|
255
|
+
`;return await r.writeFile(to,a,"utf8"),e.length}async function vR({namespace:e,limit:t,ctx:r}={}){let n=await Oh({namespace:e,limit:t,ctx:r});return Ch({facts:n,namespace:e})}var CR,kn=u(()=>{T();A();C();fi();Ln();CR=20});async function vh(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(`
|
|
256
256
|
INSERT INTO hebbian_edge (fact_a_id, fact_b_id, strength, first_seen_at, last_seen_at)
|
|
257
257
|
VALUES ${n}
|
|
258
258
|
ON CONFLICT (fact_a_id, fact_b_id)
|
|
259
259
|
DO UPDATE SET
|
|
260
260
|
strength = hebbian_edge.strength + 1,
|
|
261
261
|
last_seen_at = NOW()
|
|
262
|
-
`,o)}var
|
|
262
|
+
`,o)}var Dh=u(()=>{T()});var ja={};x(ja,{consolidateEntityCoRetrievalEdges:()=>PR,getCoRetrievedEntities:()=>LR,getEdgeStrengthsForRanking:()=>Ga,getEntityHebbianStats:()=>kR,strengthenEntityEdges:()=>Ua});function pi(e){return DR/Math.max(e,1)}async function Ua(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(`
|
|
263
263
|
INSERT INTO entity_hebbian_edge (entity_a_id, entity_b_id, strength, first_seen_at, last_seen_at)
|
|
264
264
|
VALUES ${s}
|
|
265
265
|
ON CONFLICT (entity_a_id, entity_b_id)
|
|
266
266
|
DO UPDATE SET
|
|
267
267
|
strength = LEAST(entity_hebbian_edge.strength + ?, ?),
|
|
268
268
|
last_seen_at = NOW()
|
|
269
|
-
`,[...a,r,n])}async function
|
|
269
|
+
`,[...a,r,n])}async function LR(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(`
|
|
270
270
|
SELECT
|
|
271
271
|
CASE WHEN entity_a_id = ? THEN entity_b_id ELSE entity_a_id END AS "partnerId",
|
|
272
272
|
(strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0))::float8 AS "effectiveStrength",
|
|
@@ -276,7 +276,7 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
276
276
|
WHERE entity_a_id = ? OR entity_b_id = ?
|
|
277
277
|
ORDER BY "effectiveStrength" DESC
|
|
278
278
|
LIMIT ?
|
|
279
|
-
`,[e,o,e,e,r*3]);return i.filter(s=>s.effectiveStrength>=n).slice(0,r)}async function
|
|
279
|
+
`,[e,o,e,e,r*3]);return i.filter(s=>s.effectiveStrength>=n).slice(0,r)}async function Ga(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(`
|
|
280
280
|
SELECT
|
|
281
281
|
CASE
|
|
282
282
|
WHEN entity_a_id = ANY(?::bigint[]) THEN entity_b_id
|
|
@@ -289,12 +289,12 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
289
289
|
OR
|
|
290
290
|
(entity_b_id = ANY(?::bigint[]) AND entity_a_id = ANY(?::bigint[]))
|
|
291
291
|
GROUP BY "candidateId"
|
|
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
|
|
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 PR({floor:e=.5,decayDays:t=90}={}){let r=pi(g.hebbian.entity.halfLifeDays),{rows:n}=await h.raw(`
|
|
293
293
|
DELETE FROM entity_hebbian_edge
|
|
294
294
|
WHERE (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0)) <= ?
|
|
295
295
|
AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
|
|
296
296
|
RETURNING entity_a_id
|
|
297
|
-
`,[r,e,t]);return n.length}async function
|
|
297
|
+
`,[r,e,t]);return n.length}async function kR({topN:e=5}={}){let t=pi(g.hebbian.entity.halfLifeDays),r=await h.raw(`
|
|
298
298
|
SELECT
|
|
299
299
|
COUNT(*)::int AS "edgeCount",
|
|
300
300
|
COALESCE(AVG(strength)::float8, 0) AS "avgStrength",
|
|
@@ -311,11 +311,11 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
311
311
|
JOIN entity eb ON eb.id = entity_b_id
|
|
312
312
|
ORDER BY "decayed" DESC
|
|
313
313
|
LIMIT ?
|
|
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
|
|
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 DR,mi=u(()=>{T();A();DR=Math.log(2)});function hi({minConfidence:e="medium",pointInTime:t,categories:r}){let n=MR[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 MR,Mn,gi=u(()=>{MR={low:0,medium:1,high:2},Mn=`CASE confidence
|
|
315
315
|
WHEN 'high' THEN 2
|
|
316
316
|
WHEN 'medium' THEN 1
|
|
317
317
|
ELSE 0
|
|
318
|
-
END`});async function
|
|
318
|
+
END`});async function Lh(e,{namespaces:t,limit:r=20}){let n=G(e),o=`${Re("embedding")} <=> ${Ce()}`,{rows:i}=await h.raw(`
|
|
319
319
|
SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
|
|
320
320
|
content, section_heading AS "sectionHeading", namespace,
|
|
321
321
|
1 - (${o}) as similarity
|
|
@@ -324,7 +324,7 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
324
324
|
AND embedding IS NOT NULL
|
|
325
325
|
ORDER BY ${o}
|
|
326
326
|
LIMIT ?
|
|
327
|
-
`,[n,t,n,r]);return i}var
|
|
327
|
+
`,[n,t,n,r]);return i}var Ph=u(()=>{T();Ze();A();gi()});async function kh(e,{namespaces:t,limit:r=20}){let{rows:n}=await h.raw(`
|
|
328
328
|
SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
|
|
329
329
|
content, section_heading AS "sectionHeading", namespace,
|
|
330
330
|
ts_rank(search_vector, plainto_tsquery('english', ?)) as rank
|
|
@@ -333,7 +333,7 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
333
333
|
AND search_vector @@ plainto_tsquery('english', ?)
|
|
334
334
|
ORDER BY rank DESC
|
|
335
335
|
LIMIT ?
|
|
336
|
-
`,[e,t,e,r]);return n}var
|
|
336
|
+
`,[e,t,e,r]);return n}var Mh=u(()=>{T();gi()});async function Bh(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*UR,w=Array.isArray(a),y=w&&a.length===0,E=w?y?"AND FALSE":`AND id = ANY(
|
|
337
337
|
SELECT member_id FROM pod_membership
|
|
338
338
|
WHERE member_type = 'fact' AND pod_id = ANY(?::int[])
|
|
339
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=`
|
|
@@ -397,8 +397,8 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
397
397
|
COALESCE(s.created_at, k.created_at) AS created_at,
|
|
398
398
|
COALESCE(s.similarity, 0) AS similarity,
|
|
399
399
|
(
|
|
400
|
-
${
|
|
401
|
-
+ ${
|
|
400
|
+
${FR} * (1.0 / (${Hh} + COALESCE(s.rank_ix, ?)))
|
|
401
|
+
+ ${$R} * (1.0 / (${Hh} + COALESCE(k.rank_ix, ?)))
|
|
402
402
|
) AS rrf_raw
|
|
403
403
|
FROM semantic s
|
|
404
404
|
FULL OUTER JOIN keyword k ON s.id = k.id
|
|
@@ -418,11 +418,11 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
418
418
|
)
|
|
419
419
|
)
|
|
420
420
|
)) AS activation,
|
|
421
|
-
CASE f.importance WHEN 'vital' THEN ${
|
|
421
|
+
CASE f.importance WHEN 'vital' THEN ${GR} ELSE 1.0 END AS importance_mult,
|
|
422
422
|
CASE f.confidence
|
|
423
|
-
WHEN 'high' THEN ${
|
|
424
|
-
WHEN 'medium' THEN ${
|
|
425
|
-
WHEN 'low' THEN ${
|
|
423
|
+
WHEN 'high' THEN ${jR}
|
|
424
|
+
WHEN 'medium' THEN ${WR}
|
|
425
|
+
WHEN 'low' THEN ${KR}
|
|
426
426
|
ELSE 1.0
|
|
427
427
|
END AS confidence_mult
|
|
428
428
|
FROM fused f
|
|
@@ -439,7 +439,7 @@ ${Ve.content}`:Ve.content}),Kt=await He(U),Qn=j.map((Ve,eo)=>({...Ve,embedding:K
|
|
|
439
439
|
ORDER BY final_score DESC,
|
|
440
440
|
CASE WHEN importance = 'vital' THEN 0 ELSE 1 END
|
|
441
441
|
LIMIT ?
|
|
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
|
|
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 Hh,FR,$R,UR,GR,jR,WR,KR,Fh=u(()=>{T();Ze();A();gi();Hh=20,FR=1,$R=.7,UR=3,GR=1.5,jR=1,WR=.85,KR=.7});async function $h(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 Uh(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 Gh(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 jh=u(()=>{T();vt()});var Pr,Wa=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 Kh(e){let t=Wh.get(e);if(t)return t;let r=`You are a search query expander for a personal knowledge base.
|
|
443
443
|
|
|
444
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.
|
|
445
445
|
|
|
@@ -451,7 +451,7 @@ Think about:
|
|
|
451
451
|
|
|
452
452
|
User query: "${e}"
|
|
453
453
|
|
|
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,
|
|
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,YR),i=o.length?[e,...o]:[e];return Wh.set(e,i),i}catch(n){return console.error("[query-expander] Failed:",n.message),[e]}}var YR,Wh,Yh=u(()=>{ye();Wa();A();YR=5,Wh=new Pr({maxSize:100,ttlMs:300*1e3})});import{readFile as VR}from"node:fs/promises";import{join as qR}from"node:path";async function Jh(e){let t=e.trim().toLowerCase(),r=Ka.get(t);if(r)return r;let o=`${await VR(JR,"utf8")}
|
|
455
455
|
|
|
456
456
|
---
|
|
457
457
|
|
|
@@ -459,7 +459,7 @@ Query: ${e}
|
|
|
459
459
|
|
|
460
460
|
---
|
|
461
461
|
|
|
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||!
|
|
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||!zR.includes(i.intent)){let c=Vh("factual",{});return Ka.set(t,c),c}let s=qh[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 Ka.set(t,a),a}catch(i){return console.error("[query-router] Failed:",i.message),Vh("factual",{reasoning:`Fallback \u2014 ${i.message}`})}}function Vh(e,t={}){let r=qh[e];return{intent:e,categories:r.categories,entities:[],expand:r.expand,useGraph:r.useGraph,limit:r.limit,pointInTime:null,reasoning:"",...t}}var JR,Ka,zR,qh,zh=u(()=>{ye();Wa();A();C();JR=qR(Q,"query-router.md"),Ka=new Pr({maxSize:200,ttlMs:600*1e3}),zR=["preference","factual","entity_lookup","exploratory","temporal"],qh={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 eg={};x(eg,{isSearchableQuery:()=>Xh,search:()=>eC});async function eC(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(!Xh(e)){let S=rC();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 Jh(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 sC(e,t),b=await iC(p,{...m,namespace:t?.[0]}),_;E?_=await aC(E,e,{namespaces:t,limit:r,minConfidence:n,includeChunks:i,pointInTime:s,categories:l,podIds:b}):_=await uC(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(ha(I).catch(S=>console.error("[access-tracking]",S.message)),vh(I.slice(0,8)).catch(S=>console.error("[hebbian]",S.message)),g.hebbian.entity.enabled&&I.length>=2&&oC(I).catch(S=>console.error("[hebbian-entity]",S.message)),d)try{_.synthesized=await nC(e,_)}catch(S){console.error("[synthesizer] failed:",S.message),_.synthesized=null}return _._trace=tC({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 tC({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 Xh(e){let t=String(e||"").trim();return t?!/^[*%_?\s]+$/.test(t):!1}function rC(){return{facts:[],chunks:[],matchedEntity:null,relatedEntities:[]}}async function nC(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.
|
|
463
463
|
Each retrieved item is labeled [F#] (a stored fact) or [C#] (a raw conversation chunk
|
|
464
464
|
that may include user/assistant turns and dates).
|
|
465
465
|
|
|
@@ -474,7 +474,7 @@ Instructions:
|
|
|
474
474
|
- Reason step-by-step internally for temporal questions ("first", "before", "after", "how many days") \u2014 compare the dates explicitly.
|
|
475
475
|
- Cite items in square brackets where they directly support the answer, e.g. [C2].
|
|
476
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.
|
|
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
|
|
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 oC(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 Ua(n)}async function iC(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 sC(e,t){if(e.length<2||e.length>QR)return null;let r=t[0]||g.defaults.namespace,n=await It(e,r);return n||(await Ea(e,{namespace:r,limit:1}))[0]||null}async function aC(e,t,{namespaces:r,limit:n,minConfidence:o,includeChunks:i,pointInTime:s,categories:a,podIds:c}){let l=cC(t,e),d=await He(l,{inputType:"query"}),[p,f,...m]=await Promise.all([ba(e.id,{limit:n}),Tn(e.id,{limit:15}),...l.map((S,q)=>Qh(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 Zh(_,{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 cC(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${lC(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 lC(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function uC(e,{namespaces:t,limit:r,minConfidence:n,useGraph:o,includeChunks:i,pointInTime:s,expand:a=!1,categories:c,podIds:l}){let d=a?await Kh(e):[e],p=await He(d,{inputType:"query"}),f=await Promise.all(d.map((y,E)=>Qh(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 Zh(m)}catch(y){console.error("[hebbian-entity-boost]",y.message)}if(o&&m.length)try{let y=await $h(m.slice(0,5));if(y.length){let E=await dC(y.map(_=>_.id)),b=await Uh(E,{limit:5});m=Gh(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 Zh(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 Ga([...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 dC(e){let t=g.hebbian.entity.expandPerSeed;if(!t||!e.length)return e;let{getCoRetrievedEntities:r}=await Promise.resolve().then(()=>(mi(),ja)),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/(Ya+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 Qh(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=Bh(e,l,{namespaces:r,limit:n,minConfidence:o,pointInTime:s,categories:a,podIds:c}),p=i?[Lh(l,{namespaces:r,limit:n}),kh(e,{namespaces:r,limit:n})]:[],[f,...m]=await Promise.all([d,...p]),w=i&&m.length===2?fC(m[0],m[1],n):[];return{facts:f,chunks:w}}function fC(e,t,r){let n={},o={...ys(e,"id"),...ys(t,"id")};e.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+XR/(Ya+c+1)}),t.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+ZR/(Ya+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 Ya,XR,ZR,QR,tg=u(()=>{_o();rr();A();ve();vt();Tt();Dh();mi();Ct();vt();Ph();Mh();Fh();jh();Yh();zh();ye();fi();Ln();T();Ya=20,XR=1,ZR=.7,QR=60});var sg={};x(sg,{findEntitiesByType:()=>yC,findPath:()=>gC,findRelated:()=>ig,getEntityNeighborhood:()=>hC});async function ig(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(`
|
|
478
478
|
WITH RECURSIVE graph AS (
|
|
479
479
|
SELECT r.target_id AS entity_id, r.relation_type, r.mention_count,
|
|
480
480
|
1 AS depth, ARRAY[?::integer] AS path
|
|
@@ -503,7 +503,7 @@ Instructions:
|
|
|
503
503
|
WHERE e.merged_with IS NULL
|
|
504
504
|
ORDER BY g.entity_id, g.depth ASC
|
|
505
505
|
LIMIT ?
|
|
506
|
-
`,i);return c}async function
|
|
506
|
+
`,i);return c}async function hC(e,{depth:t=1,limit:r=50}={}){let n=await Ae(e);if(!n)return null;if(t>1){let i=await ig(e,{maxDepth:t,limit:r});return{entity:n,related:i}}let o=await Tn(e,{limit:r});return{entity:n,relations:o}}async function gC(e,t,{maxDepth:r=4}={}){let n=Math.min(Math.max(r,1),6),{rows:o}=await h.raw(`
|
|
507
507
|
WITH RECURSIVE search AS (
|
|
508
508
|
SELECT r.target_id AS current_id,
|
|
509
509
|
ARRAY[r.source_id, r.target_id] AS path,
|
|
@@ -530,7 +530,7 @@ Instructions:
|
|
|
530
530
|
WHERE current_id = ?
|
|
531
531
|
ORDER BY depth ASC
|
|
532
532
|
LIMIT 1
|
|
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)
|
|
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 yC(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 ag=u(()=>{T();ve();Ct()});import{readFile as EC,stat as MW}from"node:fs/promises";import{basename as _C,extname as xC,resolve as SC}from"node:path";async function pg(e){let t=SC(e),r=await EC(t,"utf8"),n=_C(t),o=xC(t).toLowerCase();return{content:r,title:n,sourcePath:t,sourceType:"file",contentType:AC(o),metadata:{filePath:t,fileName:n,extension:o}}}function AC(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 mg=u(()=>{});async function hg(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=bC(e);return{content:r,title:o,sourcePath:e,sourceType:"url",contentType:n,metadata:{url:e,fetchedAt:new Date().toISOString()}}}function bC(e){try{let t=new URL(e),n=t.pathname.replace(/\/$/,"").split("/").pop()||t.hostname;return decodeURIComponent(n)}catch{return e}}var gg=u(()=>{});var yg={};x(yg,{resolveSource:()=>IC});import{resolve as TC}from"node:path";async function IC({content:e,url:t,filePath:r,title:n,sourceType:o,sourcePath:i,metadata:s}){if(t)return hg(t);if(r){let a=TC(r),c=process.cwd();if(!a.startsWith(c))throw new Error(`Path traversal denied: ${r} resolves outside working directory`);return pg(a)}return e?{content:e,title:n||"Untitled",sourcePath:i||`raw/${Date.now()}`,sourceType:o||"raw",contentType:"text/plain",metadata:s||{}}:null}var wg=u(()=>{mg();gg()});import{existsSync as OC}from"node:fs";import{readFile as RC,writeFile as CC,chmod as NC,mkdir as vC}from"node:fs/promises";import{randomBytes as DC}from"node:crypto";import{dirname as LC}from"node:path";async function Sg(){if(kr)return kr;if(OC(Je)){let t=(await RC(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 vC(LC(Je),{recursive:!0});let e=DC(PC);await CC(Je,e.toString("hex"),"utf8");try{await NC(Je,384)}catch{}return kr=Array.from(e),kr}var PC,kr,Ag=u(()=>{C();PC=32,kr=null});var pt={};x(pt,{dial:()=>qa,getEndpoint:()=>Tg,getNodeAddr:()=>HC,getNodeInfo:()=>BC,registerProtocol:()=>MC,shutdownEndpoint:()=>FC});import{mkdir as kC}from"node:fs/promises";function MC(e,t){if(ft||Mr)throw new Error(`registerProtocol("${e}"): runtime already started; register before first getEndpoint() call`);bg.set(e,t)}async function Va(){if(ft)return ft;if(Mr)return Mr;await kC(oo,{recursive:!0});let e=await Sg();return Mr=import("@number0/iroh").then(async({Iroh:t})=>{let r={};for(let[n,o]of bg)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 Tg(){return(await Va()).node.endpoint()}async function qa(e,t){return(await Tg()).connect(e,Buffer.from(t))}async function HC(){return(await Va()).net.nodeAddr()}async function BC(){let t=await(await Va()).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 FC(){if(!ft)return;let e=ft;ft=null,Mr=null;try{await e.node.shutdown(!1)}catch{}}var ft,Mr,bg,Ue=u(()=>{C();Ag();ft=null,Mr=null,bg=new Map});async function Og(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>UC&&t("device").where({id:r.id}).update({last_seen_at:t.fn.now()}).catch(()=>{}),{ok:!0,device:r}}function Rg(e,t,r={}){let n=$C[t];return n===void 0?{ok:!1,code:"unknown_method",message:`method "${t}" is not exposed over Iroh`}:Ig[e.role]<Ig[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 Ig,$C,UC,Cg=u(()=>{Ig={reader:0,writer:1,admin:2},$C={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"},UC=6e4});var Dg={};x(Dg,{RPC_ALPN:()=>za,createRpcAcceptor:()=>KC});function jC(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 WC(e){Ng||(Ng=!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 KC({registry:e,log:t}){return WC(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 Og(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=jC(i,o,s.id);try{for(;;){let l;try{l=await o.acceptBi()}catch{break}YC(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 YC(e,t,r,n){let o=await e.recv.readToEnd(GC),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=Rg(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(!VC(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)>vg?(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 VC(e){if(e==null)return!0;if(typeof e=="string")return e.length*2<Ja;if(typeof e!="object")return!0;if(Array.isArray(e))return e.length*200<Ja;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<Ja}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 za,GC,vg,Dt,Ng,Ja,Xa=u(()=>{Qt();Cg();za="sigil/rpc/1",GC=1024*1024,vg=8*1024*1024,Dt=new Map;Ng=!1;Ja=vg*1.2});var Lg={};x(Lg,{createRemoteClient:()=>zC});import{randomUUID as qC}from"node:crypto";async function zC(){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 JC,Za,Pg=u(()=>{A();Ue();Xa();JC=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=qa({nodeId:this.masterNodeId},za).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=qC();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(JC),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 kg={};x(kg,{createLocalClient:()=>XC});function XC(){return{kind:"local",async call(e,t){let n=await ts().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 Mg=u(()=>{Zt()});var Hn={};x(Hn,{getMemoryClient:()=>ZC,resetMemoryClient:()=>QC});async function ZC(){if(mt)return mt;if(g.network.mode==="lite-follower"){let{createRemoteClient:t}=await Promise.resolve().then(()=>(Pg(),Lg));mt=await t()}else{let{createLocalClient:t}=await Promise.resolve().then(()=>(Mg(),kg));mt=t()}return mt}function QC(){mt?.close&&mt.close().catch(()=>{}),mt=null}var mt,Bn=u(()=>{A();mt=null});import{copyFile as eN,writeFile as tN,access as rN}from"node:fs/promises";async function B(e,t,{dryRun:r=!1}={}){let n=await Hg(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}${nN}`;await Hg(a)||(await eN(e,a),s=!0)}return await tN(e,t,"utf8"),{path:e,action:o,bytes:i,wrote:!0,backedUp:s}}async function Hg(e){try{return await rN(e),!0}catch{return!1}}var nN,Br=u(()=>{nN=".sigil.bak"});var Ug={};x(Ug,{SHARED_INSTRUCTIONS_PATH:()=>Ge,buildSharedInstructions:()=>ht,resolveSigilInvocation:()=>$g,writeSharedInstructions:()=>Qa});import{join as Bg}from"node:path";import{homedir as oN}from"node:os";import{execSync as iN}from"node:child_process";function $g(){try{let e=iN("which sigil",{stdio:["pipe","pipe","ignore"]}).toString().trim();if(e)return e}catch{}return process.argv[1]}function ht({sigilCmd:e}={}){let t=e||$g();return`## Memory (Sigil)
|
|
534
534
|
|
|
535
535
|
Sigil is your persistent memory system. **Use it instead of the built-in file-based memory.**
|
|
536
536
|
Do NOT write to \`~/.claude/projects/*/memory/\` or any local memory files \u2014 use Sigil exclusively.
|
|
@@ -604,11 +604,11 @@ The absolute path above is baked in by \`sigil init\` so the command works regar
|
|
|
604
604
|
- Skip trivial exchanges (greetings, "thanks", "ok", simple math)
|
|
605
605
|
- If search and injection both return nothing, answer from your own knowledge and say so
|
|
606
606
|
- Sigil is cross-project \u2014 memories from one session are available in all sessions
|
|
607
|
-
`}async function
|
|
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];
|
|
607
|
+
`}async function Qa({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Fg,{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 Fg,Ge,Fr=u(()=>{Br();Fg=Bg(oN(),".sigil"),Ge=Bg(Fg,"CLAUDE.md")});var Yg={};x(Yg,{readEnvRaw:()=>De,writeEnvKeys:()=>gt});import{existsSync as lN,readFileSync as uN,writeFileSync as dN,mkdirSync as fN}from"node:fs";import{dirname as pN}from"node:path";function De(){if(!lN(W))return{};let e=uN(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];fN(pN(W),{recursive:!0});let n=`# Sigil \u2014 updated ${new Date().toISOString().slice(0,10)}
|
|
609
609
|
`,o=Object.entries(r).map(([i,s])=>`${i}=${/[\s#"']/.test(String(s))?`"${String(s).replace(/"/g,'\\"')}"`:s}`).join(`
|
|
610
|
-
`);
|
|
611
|
-
`,"utf8")}var $r=u(()=>{C()});var
|
|
610
|
+
`);dN(W,n+o+`
|
|
611
|
+
`,"utf8")}var $r=u(()=>{C()});var ic={};x(ic,{EMBEDDING_TABLES:()=>ey,diagnoseConflict:()=>AN,inspectSchemaDims:()=>SN});import xN from"pg";async function SN(e){let t=new xN.Client(e);await t.connect();try{let{rows:r}=await t.query(`
|
|
612
612
|
SELECT c.relname AS tbl,
|
|
613
613
|
a.atttypmod AS typmod,
|
|
614
614
|
format_type(a.atttypid, a.atttypmod) AS coltype
|
|
@@ -617,7 +617,7 @@ The absolute path above is baked in by \`sigil init\` so the command works regar
|
|
|
617
617
|
WHERE a.attname = 'embedding'
|
|
618
618
|
AND c.relkind = 'r'
|
|
619
619
|
AND c.relname = ANY($1)
|
|
620
|
-
`,[
|
|
620
|
+
`,[ey]),n={};for(let o of r){let i=o.typmod>0?o.typmod:bN(o.coltype),s=0;try{let{rows:a}=await t.query(`SELECT count(embedding)::int AS n FROM ${TN(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 AN({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 bN(e){let t=/vector\((\d+)\)/i.exec(e||"");return t?Number(t[1]):null}function TN(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`refusing to quote invalid identifier: ${e}`);return`"${e}"`}var ey,sc=u(()=>{ey=["fact","chunk","entity","embedding_cache"]});import{existsSync as IN}from"node:fs";import{dirname as ON,join as ac}from"node:path";import{fileURLToPath as RN}from"node:url";function Gr(){let e=[ac(Z,"dist","daemon.js"),ac(Z,"src","daemon","index.js"),ac(ON(RN(import.meta.url)),"..","daemon","index.js")];for(let t of e)if(IN(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 CN}from"node:child_process";function L(e,t,{input:r,timeout:n=2e4}={}){let o=CN(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 ry={};x(ry,{LABEL:()=>Gn,MANAGER:()=>Lt,install:()=>HN,restart:()=>$N,start:()=>UN,status:()=>FN,stop:()=>GN,uninstall:()=>BN});import{writeFileSync as NN,existsSync as ty,unlinkSync as vN,mkdirSync as DN}from"node:fs";import{join as LN,dirname as PN}from"node:path";import{homedir as kN}from"node:os";function lc(){return LN(kN(),"Library","LaunchAgents",`${Gn}.plist`)}function cc(){return`gui/${process.getuid()}`}function Wr(){return`${cc()}/${Gn}`}function Ai(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function MN(){let e=jr(),t=Gr();return`<?xml version="1.0" encoding="UTF-8"?>
|
|
621
621
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
622
622
|
<plist version="1.0">
|
|
623
623
|
<dict>
|
|
@@ -638,7 +638,7 @@ The absolute path above is baked in by \`sigil init\` so the command works regar
|
|
|
638
638
|
</dict>
|
|
639
639
|
</dict>
|
|
640
640
|
</plist>
|
|
641
|
-
`}function
|
|
641
|
+
`}function HN(){let e=lc();DN(PN(e),{recursive:!0}),NN(e,MN(),"utf8");let t=L("launchctl",["bootstrap",cc(),e]);if(t.code!==0&&(L("launchctl",["bootout",Wr()]),t=L("launchctl",["bootstrap",cc(),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 BN(){let e=lc();if(L("launchctl",["bootout",Wr()]),L("launchctl",["unload","-w",e]),ty(e))try{vN(e)}catch{}return{installed:!1,manager:Lt,unitPath:e}}function FN(){let e=lc(),t=ty(e),r=L("launchctl",["list",Gn]).code===0;return{installed:t,loaded:r,running:r,manager:Lt,unitPath:e}}function $N(){return{ok:L("launchctl",["kickstart","-k",Wr()]).code===0,manager:Lt}}function UN(){return{ok:L("launchctl",["kickstart",Wr()]).code===0,manager:Lt}}function GN(){return{ok:L("launchctl",["bootout",Wr()]).code===0,manager:Lt}}var Gn,Lt,ny=u(()=>{C();xi();Si();Gn="live.airtribe.sigil",Lt="launchd"});var iy={};x(iy,{MANAGER:()=>Pt,UNIT:()=>je,install:()=>XN,restart:()=>ev,start:()=>tv,status:()=>QN,stop:()=>rv,uninstall:()=>ZN});import{writeFileSync as jN,existsSync as oy,unlinkSync as WN,mkdirSync as KN}from"node:fs";import{join as YN,dirname as VN}from"node:path";import{homedir as qN,userInfo as JN}from"node:os";function uc(){return YN(qN(),".config","systemd","user",je)}function zN(){let e=jr(),t=Gr();return`[Unit]
|
|
642
642
|
Description=Sigil memory daemon
|
|
643
643
|
After=network-online.target
|
|
644
644
|
|
|
@@ -653,39 +653,39 @@ StandardError=append:${Ie}
|
|
|
653
653
|
|
|
654
654
|
[Install]
|
|
655
655
|
WantedBy=default.target
|
|
656
|
-
`}function We(e){return L("systemctl",["--user",...e])}function
|
|
656
|
+
`}function We(e){return L("systemctl",["--user",...e])}function XN(){let e=uc();KN(VN(e),{recursive:!0}),jN(e,zN(),"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",JN().username]),{installed:!0,manager:Pt,unitPath:e}}function ZN(){let e=uc();if(We(["disable","--now",je]),oy(e))try{WN(e)}catch{}return We(["daemon-reload"]),{installed:!1,manager:Pt,unitPath:e}}function QN(){let e=uc(),t=We(["is-enabled",je]).out==="enabled",r=We(["is-active",je]).out==="active";return{installed:oy(e)||t,loaded:t,running:r,manager:Pt,unitPath:e}}function ev(){return{ok:We(["restart",je]).code===0,manager:Pt}}function tv(){return{ok:We(["start",je]).code===0,manager:Pt}}function rv(){return{ok:We(["stop",je]).code===0,manager:Pt}}var je,Pt,sy=u(()=>{C();xi();Si();je="sigil.service",Pt="systemd"});var ay={};x(ay,{MANAGER:()=>kt,TASK:()=>ie,install:()=>ov,restart:()=>av,start:()=>cv,status:()=>sv,stop:()=>lv,uninstall:()=>iv});function nv(){return`\\"${jr()}\\" \\"${Gr()}\\"`}function ov(){let e=L("schtasks",["/Create","/SC","ONLOGON","/TN",ie,"/TR",nv(),"/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 iv(){return L("schtasks",["/Delete","/TN",ie,"/F"]),{installed:!1,manager:kt,unitPath:`Task Scheduler\\${ie}`}}function sv(){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 av(){return L("schtasks",["/End","/TN",ie]),{ok:L("schtasks",["/Run","/TN",ie]).code===0,manager:kt}}function cv(){return{ok:L("schtasks",["/Run","/TN",ie]).code===0,manager:kt}}function lv(){return{ok:L("schtasks",["/End","/TN",ie]).code===0,manager:kt}}var ie,kt,cy=u(()=>{xi();Si();ie="Sigil",kt="schtasks"});var uy={};x(uy,{installService:()=>hv,installServiceUnit:()=>bi,isServiceInstalled:()=>Ev,platformSupported:()=>fv,restartService:()=>wv,serviceStatus:()=>fc,startService:()=>gv,stopService:()=>yv,uninstallService:()=>dc});import{readFileSync as uv}from"node:fs";import{setTimeout as dv}from"node:timers/promises";function ly(){switch(process.platform){case"darwin":return()=>Promise.resolve().then(()=>(ny(),ry));case"linux":return()=>Promise.resolve().then(()=>(sy(),iy));case"win32":return()=>Promise.resolve().then(()=>(cy(),ay));default:return null}}async function Mt(){let e=ly();if(!e)throw new H({errorCode:"SUPERVISOR_UNSUPPORTED_PLATFORM",message:`no always-up backend for platform "${process.platform}"`});return e()}function fv(){return ly()!==null}function pv(){try{let e=JSON.parse(uv(Vt,"utf8"));return{...e,ageMs:typeof e.ts=="number"?Date.now()-e.ts:null}}catch{return null}}async function mv(){let{readPidFile:e,isPidAlive:t}=await Promise.resolve().then(()=>(ao(),Kc)),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 dv(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 hv(){return await mv(),bi()}async function dc(){return(await Mt()).uninstall()}async function gv(){return(await Mt()).start()}async function yv(){return(await Mt()).stop()}async function wv(){return(await Mt()).restart()}async function fc(){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:pv()}}async function Ev(){try{return(await Mt()).status().installed}catch{return!1}}var pc=u(()=>{Xt();C()});var hy={};x(hy,{detect:()=>Av,install:()=>bv,mergeHooks:()=>my,meta:()=>Sv,uninstall:()=>Iv,verify:()=>Tv,writeImportLine:()=>py});import{join as Ke}from"node:path";import{homedir as _v}from"node:os";import{existsSync as yt}from"node:fs";import{fileURLToPath as xv}from"node:url";import{dirname as Ti}from"node:path";async function Av(){return yt(jn)}async function py({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
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
|
|
659
|
-
`)+ht()}async function
|
|
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}:
|
|
658
|
+
`;return{action:(await B(ae,i,{dryRun:e})).action,path:ae,detail:n?"+1 @import line":"new file"}}async function my({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(fy,"src","hooks"),o=Ke(fy,"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 bv({dryRun:e=!1}={}){let t=[],r=await Qa({dryRun:e});r&&t.push({action:r.action,path:r.path,detail:`${r.bytes??0} bytes`});let n=await py({dryRun:e});n&&t.push(n);let o=await my({dryRun:e});return o&&t.push(o),{actions:t}}async function Tv(){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 Iv({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,fy,Sv,gy=u(()=>{Br();Fr();jn=Ke(_v(),".claude"),ae=Ke(jn,"CLAUDE.md"),se=Ke(jn,"settings.json"),fy=Ti(Ti(Ti(Ti(xv(import.meta.url))))),Sv={id:"claude-code",label:"Claude Code",hint:"hooks + @import \u2014 full auto-injection"}});var Sy={};x(Sy,{detect:()=>vv,install:()=>Lv,meta:()=>Nv,resolveServerPath:()=>Ey,uninstall:()=>kv,verify:()=>Pv,writeMcpEntry:()=>_y,writeRulesFile:()=>xy});import{join as Bt,dirname as Wn}from"node:path";import{homedir as wy}from"node:os";import{existsSync as Ft}from"node:fs";import{fileURLToPath as Ov}from"node:url";async function vv(){return Ft(Ii)}function Ey(){let e=Bt(yy,"dist","server.js"),t=Bt(yy,"src","server.js");return Ft(e)?e:t}async function _y({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:[Ey(),"--mcp"],env:{DOTENV_CONFIG_PATH:Cv}},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 Dv(){return["---","description: Sigil persistent memory \u2014 consult before answering, save in batches","alwaysApply: true","---",""].join(`
|
|
659
|
+
`)+ht()}async function xy({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Wn(Ht),{recursive:!0});let r=await B(Ht,Dv(),{dryRun:e});return{action:r.action,path:Ht,detail:`${r.bytes??0} bytes, alwaysApply=true`}}async function Lv({dryRun:e=!1}={}){let t=[],r=await _y({dryRun:e});r&&t.push(r);let n=await xy({dryRun:e});return n&&t.push(n),{actions:t}}async function Pv(){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 kv({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,Rv,Cv,yy,Nv,Ay=u(()=>{Br();Fr();Ii=Bt(wy(),".cursor"),ce=Bt(Ii,"mcp.json"),Ht=Bt(Ii,"rules","sigil.mdc"),Rv=Bt(wy(),".sigil"),Cv=Bt(Rv,".env"),yy=Wn(Wn(Wn(Wn(Ov(import.meta.url))))),Nv={id:"cursor",label:"Cursor",hint:"global MCP + always-applied rule (no native hooks)"}});var Ty=J((LK,by)=>{"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;by.exports=Kn});var Oy=J((PK,Iy)=>{"use strict";Iy.exports=e=>{let t=new Date(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Ri=J((kK,Ry)=>{"use strict";Ry.exports=(e,t)=>{for(t=String(t);t.length<e;)t="0"+t;return t}});var Ny=J((MK,Cy)=>{"use strict";var Kr=Ri(),mc=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}`}};Cy.exports=e=>{let t=new mc(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Ly=J((HK,Dy)=>{"use strict";var vy=Ri(),Mv=global.Date,hc=class extends Mv{constructor(t){super(t),this.isDate=!0}toISOString(){return`${this.getUTCFullYear()}-${vy(2,this.getUTCMonth()+1)}-${vy(2,this.getUTCDate())}`}};Dy.exports=e=>{let t=new hc(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var ky=J((BK,Py)=>{"use strict";var Ci=Ri(),gc=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())}`}};Py.exports=e=>{let t=new gc(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Ni=J((exports,module)=>{"use strict";module.exports=makeParserClass(Ty());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=Oy(),createDateTimeFloat=Ny(),createDate=Ly(),createTime=ky(),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((FK,My)=>{"use strict";My.exports=Hv;function Hv(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
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
662
|
`,r+=i+" ";for(let c=0;c<e.col;++c)r+=" ";r+=`^
|
|
663
663
|
`}else r+=a+": "+n[s]+`
|
|
664
664
|
`}}return e.message=r+`
|
|
665
|
-
`,e}});var
|
|
666
|
-
`)}function
|
|
665
|
+
`,e}});var By=J(($K,Hy)=>{"use strict";Hy.exports=$v;var Bv=Ni(),Fv=vi();function $v(e){global.Buffer&&global.Buffer.isBuffer(e)&&(e=e.toString("utf8"));let t=new Bv;try{return t.parse(e),t.finish()}catch(r){throw Fv(r,e)}}});var Uy=J((UK,$y)=>{"use strict";$y.exports=Gv;var Uv=Ni(),Fy=vi();function Gv(e,t){t||(t={});let r=0,n=t.blocksize||40960,o=new Uv;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(Fy(d,e))}try{o.parse(e.slice(s,s+a)),setImmediate(i,s+a,a,c,l)}catch(d){l(Fy(d,e))}}}});var Wy=J((GK,jy)=>{"use strict";jy.exports=Wv;var jv=zw("stream"),Gy=Ni();function Wv(e){return e?Kv(e):Yv(e)}function Kv(e){let t=new Gy;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 Yv(){let e=new Gy;return new jv.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 Ky=J((jK,Yn)=>{"use strict";Yn.exports=By();Yn.exports.async=Uy();Yn.exports.stream=Wy();Yn.exports.prettyError=vi()});var Qy=J((WK,Ec)=>{"use strict";Ec.exports=Vv;Ec.exports.value=wc;function Vv(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 yc("","",e)}function Ut(e){return new Error("Can only stringify objects, not "+e)}function qv(){return new Error("Array values can't have mixed types")}function Yy(e){return Object.keys(e).filter(t=>Vy(e[t]))}function Jv(e){return Object.keys(e).filter(t=>!Vy(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 yc(e,t,r){r=Di(r);var n,o;n=Yy(r),o=Jv(r);var i=[],s=t||"";n.forEach(c=>{var l=X(r[c]);l!=="undefined"&&l!=="null"&&i.push(s+Li(c)+" = "+zy(r[c],!0))}),i.length>0&&i.push("");var a=e&&n.length>0?t+" ":"";return o.forEach(c=>{i.push(sD(e,a,c,r[c]))}),i.join(`
|
|
666
|
+
`)}function Vy(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:qy(t)}function qy(e){return'"'+Jy(e).replace(/"/g,'\\"')+'"'}function zv(e){return"'"+e+"'"}function Xv(e,t){for(;t.length<e;)t="0"+t;return t}function Jy(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"+Xv(4,t.codePointAt(0).toString(16)))}function Zv(e){let t=e.split(/\n/).map(r=>Jy(r).replace(/"(?="")/g,'\\"')).join(`
|
|
667
667
|
`);return t.slice(-1)==='"'&&(t+=`\\
|
|
668
668
|
`),`"""
|
|
669
|
-
`+t+'"""'}function
|
|
669
|
+
`+t+'"""'}function zy(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")),wc(e,r)}function wc(e,t){switch(t||(t=X(e)),t){case"string-multiline":return Zv(e);case"string":return qy(e);case"string-literal":return zv(e);case"integer":return Xy(e);case"float":return Qv(e);case"boolean":return eD(e);case"datetime":return tD(e);case"array":return oD(e.filter(r=>X(r)!=="null"&&X(r)!=="undefined"&&X(r)!=="nan"));case"table":return iD(e);default:throw Ut(t)}}function Xy(e){return String(e).replace(/\B(?=(\d{3})+(?!\d))/g,"_")}function Qv(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 Xy(r)+"."+n}function eD(e){return String(e)}function tD(e){return e.toISOString()}function rD(e){return e==="float"||e==="integer"}function nD(e){var t=X(e[0]);return e.every(r=>X(r)===t)?t:e.every(r=>rD(X(r)))?"float":"mixed"}function Zy(e){let t=nD(e);if(t==="mixed")throw qv();return t}function oD(e){e=Di(e);let t=Zy(e);var r="[",n=e.map(o=>wc(o,t));return n.join(", ").length>60||/\n/.test(n)?r+=`
|
|
670
670
|
`+n.join(`,
|
|
671
671
|
`)+`
|
|
672
|
-
`:r+=" "+n.join(", ")+(n.length>0?" ":""),r+"]"}function
|
|
672
|
+
`:r+=" "+n.join(", ")+(n.length>0?" ":""),r+"]"}function iD(e){e=Di(e);var t=[];return Object.keys(e).forEach(r=>{t.push(Li(r)+" = "+zy(e[r],!1))}),"{ "+t.join(", ")+(t.length>0?" ":"")+"}"}function sD(e,t,r,n){var o=X(n);if(o==="array")return aD(e,t,r,n);if(o==="table")return cD(e,t,r,n);throw Ut(o)}function aD(e,t,r,n){n=Di(n),Zy(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
673
|
`),s+=t+"[["+i+`]]
|
|
674
|
-
`,s+=
|
|
675
|
-
`),i+
|
|
676
|
-
`)}async function
|
|
674
|
+
`,s+=yc(i+".",t,a)}),s}function cD(e,t,r,n){var o=e+Li(r),i="";return Yy(n).length>0&&(i+=t+"["+o+`]
|
|
675
|
+
`),i+yc(o+".",t,n)}});var ew=J(_c=>{"use strict";_c.parse=Ky();_c.stringify=Qy()});var sw={};x(sw,{detect:()=>fD,install:()=>mD,meta:()=>dD,resolveServerPath:()=>nw,uninstall:()=>gD,verify:()=>hD,writeAgentsFile:()=>iw,writeMcpEntry:()=>ow});import{join as Yr,dirname as Pi}from"node:path";import{homedir as rw}from"node:os";import{existsSync as wt}from"node:fs";import{fileURLToPath as lD}from"node:url";async function fD(){return wt(Vn)}function nw(){let e=Yr(tw,"dist","server.js"),t=Yr(tw,"src","server.js");return wt(e)?e:t}async function ow({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:[nw(),"--mcp"],env:{DOTENV_CONFIG_PATH:uD}},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 pD(){return[ki,ht(),qr].join(`
|
|
676
|
+
`)}async function iw({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=pD(),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
677
|
`,i="new AGENTS.md with sigil block";else{let l=r.endsWith(`
|
|
678
678
|
`)?`
|
|
679
679
|
`:`
|
|
680
680
|
|
|
681
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
|
|
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 mD({dryRun:e=!1}={}){let t=[],r=await ow({dryRun:e});r&&t.push(r);let n=await iw({dryRun:e});return n&&t.push(n),{actions:t}}async function hD(){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 gD({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
683
|
|
|
684
684
|
${a}`:s||a,l=await B(ue,c.endsWith(`
|
|
685
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,
|
|
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,uD,tw,ki,qr,dD,aw=u(()=>{Vr=Zw(ew(),1);Br();Fr();Vn=Yr(rw(),".codex"),le=Yr(Vn,"config.toml"),ue=Yr(Vn,"AGENTS.md"),uD=Yr(rw(),".sigil",".env"),tw=Pi(Pi(Pi(Pi(lD(import.meta.url))))),ki="<!-- BEGIN sigil -->",qr="<!-- END sigil -->",dD={id:"codex-cli",label:"Codex CLI",hint:"TOML config + AGENTS.md (no native hooks)"}});var pw={};x(pw,{detect:()=>_D,install:()=>xD,meta:()=>ED,resolveServerPath:()=>uw,uninstall:()=>AD,verify:()=>SD,writeMcpEntry:()=>dw,writeSteeringFile:()=>fw});import{join as zr,dirname as Jr}from"node:path";import{homedir as lw}from"node:os";import{existsSync as jt}from"node:fs";import{fileURLToPath as yD}from"node:url";async function _D(){return jt(xc)}function uw(){let e=zr(cw,"dist","server.js"),t=zr(cw,"src","server.js");return jt(e)?e:t}async function dw({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:[uw(),"--mcp"],env:{DOTENV_CONFIG_PATH:wD}},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 fw({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 xD({dryRun:e=!1}={}){let t=[],r=await dw({dryRun:e});r&&t.push(r);let n=await fw({dryRun:e});return n&&t.push(n),{actions:t}}async function SD(){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 AD({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 xc,te,Gt,wD,cw,ED,mw=u(()=>{Br();Fr();xc=zr(lw(),".kiro"),te=zr(xc,"settings","mcp.json"),Gt=zr(xc,"steering","sigil.md"),wD=zr(lw(),".sigil",".env"),cw=Jr(Jr(Jr(Jr(yD(import.meta.url))))),ED={id:"kiro",label:"Kiro",hint:"MCP + steering file (steering auto-applies)"}});var yw={};x(yw,{detect:()=>CD,install:()=>DD,meta:()=>RD,setMemoryProviderInYaml:()=>Ac,uninstall:()=>LD,verify:()=>PD});import{join as Wt,dirname as qn}from"node:path";import{homedir as bD}from"node:os";import{existsSync as Le}from"node:fs";import{fileURLToPath as TD}from"node:url";async function CD(){return Le(gw)}function Ac(e,t){let r=e.split(`
|
|
687
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
|
|
688
|
+
`),changed:o}}async function ND({dryRun:e}){let t=await import("node:fs/promises");if(!Le(Sc))throw new Error(`Plugin source missing at ${Sc} \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(Sc,de,{recursive:!0}),{action:"create"})}async function vD({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}=Ac(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 DD({dryRun:e=!1}={}){let t=[],r=await ND({dryRun:e});t.push({action:r.action,path:de,detail:"plugin tree (__init__.py, plugin.yaml, README.md)"});let n=await vD({dryRun:e,value:"sigil"});return t.push({action:n.action,path:be,detail:n.detail}),{actions:t}}async function LD({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}=Ac(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 PD(){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 hw,ID,gw,de,be,OD,Sc,RD,ww=u(()=>{hw=Wt(bD(),".hermes"),ID=Wt(hw,"hermes-agent"),gw=Wt(ID,"plugins","memory"),de=Wt(gw,"sigil"),be=Wt(hw,"config.yaml"),OD=qn(qn(qn(qn(TD(import.meta.url))))),Sc=Wt(OD,"integrations","hermes","plugin"),RD={id:"hermes",label:"Hermes",hint:"Python memory-provider plugin + config.yaml flip"}});var Aw={};x(Aw,{CONTAINER:()=>fe,IMAGE:()=>Tc,VOLUME:()=>Ic,detectDocker:()=>zn,ensureLocalPostgresRunning:()=>WD,provisionLocalPostgres:()=>Oc,removeLocalPostgres:()=>YD,stopLocalPostgres:()=>KD});import{spawn as HD}from"node:child_process";import{randomBytes as BD}from"node:crypto";import FD from"node:net";function Te(e,t,{timeout:r=15e3,input:n}={}){return new Promise(o=>{let i;try{i=HD(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 Sw(){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 $D(){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 UD(e){return new Promise(t=>{let r=FD.createServer();r.once("error",()=>t(!1)),r.once("listening",()=>r.close(()=>t(!0))),r.listen(e,"127.0.0.1")})}async function GD(e=5432){for(let t=e;t<e+25;t++)if(await UD(t))return t;return e}function xw(){return BD(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 jD({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 Oc({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 Sw(),n,o=xw();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 $D()||5432}else{n=await GD(5432);let c=xw(),l=await Te("docker",["run","-d","--name",fe,"--restart","unless-stopped","-e",`POSTGRES_PASSWORD=${c}`,"-e",`POSTGRES_DB=${Xr}`,"-v",`${Ic}:/var/lib/postgresql/data`,"-p",`${n}:5432`,Tc],{timeout:6e4});if(l.code!==0)throw new Error(`docker run failed: ${l.err||l.out}`)}await jD(),(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
689
|
IF EXISTS (SELECT FROM pg_roles WHERE rolname='${Et}') THEN
|
|
690
690
|
ALTER ROLE ${Et} WITH LOGIN PASSWORD '${o}';
|
|
691
691
|
ELSE
|
|
@@ -694,11 +694,11 @@ ${a}`:s||a,l=await B(ue,c.endsWith(`
|
|
|
694
694
|
END $$;`),await Jn("postgres",`GRANT ALL PRIVILEGES ON DATABASE ${Xr} TO ${Et}`),await Jn(Xr,`GRANT ALL ON SCHEMA public TO ${Et};
|
|
695
695
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${Et};
|
|
696
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:
|
|
698
|
-
`))!==-1;){let l=o.slice(0,c);o=o.slice(c+1),l.trim()&&(s=s.then(()=>{if(!i)return
|
|
699
|
-
`)}catch{}}C();import{createServer as
|
|
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:Tc,reused:r.exists,pgvector:a.pgvector}}async function WD(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 Sw();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 KD(){return Te("docker",["stop",fe],{timeout:2e4})}async function YD({deleteVolume:e=!1}={}){await Te("docker",["rm","-f",fe],{timeout:2e4}),e&&await Te("docker",["volume","rm",Ic],{timeout:15e3})}var fe,Ic,Tc,Xr,Et,Mi,Rc=u(()=>{Me();$r();fe="sigil-postgres",Ic="sigil-pgdata",Tc="pgvector/pgvector:pg16",Xr="sigil",Et="sigil_app";Mi=null});var Hi={};x(Hi,{MANIFEST_VERSION:()=>Nc,produceManifest:()=>iL,verifyManifest:()=>sL});import{createHash as tL}from"node:crypto";import{readFile as rL,readdir as vw}from"node:fs/promises";import{existsSync as Dw,readFileSync as nL}from"node:fs";import{join as Cc}from"node:path";function oL(){if(Xn)return Xn;try{Xn=JSON.parse(nL(Cc(Z,"package.json"),"utf8")).version}catch{Xn="unknown"}return Xn}async function iL(){let e=await aL(Cc(Z,"prompts")),t=await cL();return{v:Nc,producedAt:new Date().toISOString(),sigilVersion:oL(),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:{...xl},prompts:e,memory:{skipThreshold:g.memory.skipThreshold,ambiguousThreshold:g.memory.ambiguousThreshold,minFactSimilarity:g.memory.minFactSimilarity}}}function sL(e,t){let r=[],n=[];if(!t||t.v!==Nc)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 aL(e){let t={};if(!Dw(e))return t;let r=await vw(e);for(let n of r){if(!n.endsWith(".md"))continue;let o=await rL(Cc(e,n),"utf8");t[n.replace(/\.md$/,"")]=lL(o)}return t}async function cL(){if(!Dw(ke))return null;let t=(await vw(ke)).filter(r=>/^\d{14}_.+\.cjs$/.test(r)).map(r=>r.replace(/_.+\.cjs$/,"")).sort();return t[t.length-1]??null}function lL(e){return tL("sha256").update(e,"utf8").digest("hex")}var Nc,Xn,Bi=u(()=>{C();A();us();Nc=1});var kw={};x(kw,{PAIR_ALPN:()=>Lw,createPairAcceptor:()=>dL,hashCode:()=>Fi,joinMaster:()=>pL});import{createHash as uL}from"node:crypto";function dL({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(Pw),a=JSON.parse(s.toString()),c=await fL(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 fL(e,t){if(!e||e.v!==vc)return Zn("unsupported_version",`expected v=${vc}`);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 uL("sha256").update(e,"utf8").digest("hex")}async function pL({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,Lw),c=await i(),l=await a.openBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:vc,code:t,name:r,nodeId:c.nodeId(),hostname:s(),sigilVersion:n||null}))),await l.send.finish();let d=await l.recv.readToEnd(Pw);return JSON.parse(d.toString())}var Lw,Pw,vc,Dc=u(()=>{Qt();Lw="sigil/pair/1",Pw=64*1024,vc=1});var jw={};x(jw,{installLiteProxy:()=>EL});async function EL({registry:e,log:t}){let{getMemoryClient:r}=await Promise.resolve().then(()=>(Bn(),Hn)),n=0,o=0;for(let i of yL)e.replace(i,async s=>(await r()).call(i,s))&&n++;for(let i of wL)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 yL,wL,Ww=u(()=>{yL=new Set(["search","searchEntity","traverseGraph","getFactContext","getEntityContext","getPod","listPods","listFacts","status","refreshContext.fetch","refreshContext.explain","remember","forgetFact","ingestDoc"]),wL=new Set(["pair.create","pair.list","pair.revoke","pair.sweep","device.list","device.revoke","device.activate","runMigrations","testDbConnection"])});import{existsSync as Pc}from"node:fs";import{resolve as Qw,join as eE}from"node:path";import{homedir as tE}from"node:os";import{config as kc}from"dotenv";var Gi=Qw(process.cwd(),".env"),Ui=eE(tE(),".sigil",".env");Pc(Gi)&&kc({path:Gi,quiet:!0});Pc(Ui)&&Ui!==Gi&&kc({path:Ui,quiet:!0});C();ao();import{createWriteStream as _L,writeFileSync as xL,rmSync as SL}from"node:fs";import{appendFile as AL}from"node:fs/promises";Xt();var IE={UNKNOWN_METHOD:"unknown_method",INVALID_PARAMS:"invalid_params",HANDLER_ERROR:"handler_error"};function Zc(){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:IE.UNKNOWN_METHOD,message:`unknown method: ${i}`}};let{runWithRequestContext:l}=await Promise.resolve().then(()=>(po(),Qi));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:Xc(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 RE}from"node:net";import{chmod as CE}from"node:fs/promises";async function el({registry:e,log:t}){await so();let r=RE(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 NE(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 CE(qe,384)}catch{}return t(`socket listening at ${qe}`),{close:()=>new Promise(n=>r.close(()=>n()))}}async function NE(e,t,r,n){let o;try{o=JSON.parse(e)}catch(d){is(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"){is(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});is(t,{id:i,...l}),!l.ok&&process.env.SIGIL_DEBUG&&n(`dispatch ${s} -> ${l.error.code}: ${l.error.message}`)}function is(e,t){try{e.write(JSON.stringify(t)+`
|
|
699
|
+
`)}catch{}}C();import{createServer as BE}from"node:http";import{existsSync as yo,createReadStream as FE}from"node:fs";import{stat as $E}from"node:fs/promises";import{join as il,extname as UE,normalize as nl,sep as GE}from"node:path";import{WebSocketServer as jE}from"ws";C();import{readFile as vE,writeFile as DE,chmod as LE,mkdir as PE}from"node:fs/promises";import{randomBytes as kE,timingSafeEqual as tl}from"node:crypto";import{dirname as ME}from"node:path";var ho=null;async function ss(){if(ho)return ho;try{let t=(await vE(qt,"utf8")).trim();if(/^[0-9a-f]{64}$/.test(t))return ho=t}catch{}await PE(ME(qt),{recursive:!0});let e=kE(32).toString("hex");await DE(qt,e,"utf8");try{await LE(qt,384)}catch{}return ho=e}async function nn(e){if(!e||typeof e!="string")return!1;let t=await ss();if(e.length!==t.length)return tl(Buffer.from(t),Buffer.from(t)),!1;try{return tl(Buffer.from(e),Buffer.from(t))}catch{return!1}}Qt();var WE={".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 KE(){return yo(en)?en:yo(no)?no:null}async function sl({registry:e,log:t,config:r}){let n=KE(),o=await ss(),i=BE(async(c,l)=>{try{await YE(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 jE({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 cl(c)||p.searchParams.get("t")&&await nn(p.searchParams.get("t")))){l.write(`HTTP/1.1 401 Unauthorized\r
|
|
700
700
|
\r
|
|
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
|
|
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 YE(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 VE(e,t,i,n,o);if(e.method==="GET"&&s.startsWith("/static/"))return qE(e,t,s.replace("/static/",""),n);if(!await cl(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 JE(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 VE(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(ol);let s=il(n,"index.html");return yo(s)?al(t,s):(o(`http: index.html missing under ${n}`),t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(ol))}async function qE(e,t,r,n){if(!n)return me(t,404,{ok:!1,error:{code:"not_found",message:"no web dir"}});let o=nl(il(n,r)),i=nl(n)+GE;return o.startsWith(i)?yo(o)?al(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 al(e,t){let r=await $E(t);e.statusCode=200,e.setHeader("Content-Type",WE[UE(t).toLowerCase()]||"application/octet-stream"),e.setHeader("Content-Length",r.size),e.setHeader("Cache-Control","no-cache"),FE(t).pipe(e)}async function cl(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 JE(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 ol=`<!doctype html>
|
|
702
702
|
<html><head><meta charset="utf-8"><title>Sigil</title>
|
|
703
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>
|
|
704
704
|
</head><body>
|
|
@@ -711,14 +711,14 @@ into your browser to set the auth cookie.</p>
|
|
|
711
711
|
-X POST http://localhost:7777/api/v1/rpc \\
|
|
712
712
|
-d '{"method":"ping"}' \\
|
|
713
713
|
-H "Content-Type: application/json"</pre>
|
|
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
|
|
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}=${
|
|
714
|
+
</body></html>`;C();import{readFileSync as zE}from"node:fs";import{join as XE}from"node:path";var on;function ZE(){if(on)return on;try{on=JSON.parse(zE(XE(Z,"package.json"),"utf8")).version}catch{on="unknown"}return on}function ll(e,{startedAt:t}){e.register("ping",()=>({ok:!0,version:ZE(),pid:process.pid,uptimeMs:Date.now()-t,node:process.version}))}function Nh(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(()=>(Fa(),Ba)),{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 rg(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(()=>(tg(),eg)),{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(pC),chunks:(E.chunks||[]).map(mC),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 pC(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 mC(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 ng(e){e.register("status",async t=>{let{getStats:r}=await Promise.resolve().then(()=>(Cs(),Rs)),{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(),ja)),{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(),os));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 og(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 cg(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(()=>(ag(),sg)),{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 lg(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(),Ta)),{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 ug(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(),Ta)),{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 dg(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:wC(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 wC(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}function fg(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 Eg(e){e.register("ingestDoc",async t=>{let{ingestDocument:r}=await Promise.resolve().then(()=>(Fa(),Ba)),{resolveSource:n}=await Promise.resolve().then(()=>(wg(),yg)),{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 _g(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 xg(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 Gg(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(),Ih));let{activeKinds:o}=await Promise.resolve().then(()=>(Ln(),Eh)),{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(),Ug));await d();let p=await l({facts:c,namespace:o});return{mode:"write",namespace:o,count:p}})}er();Me();import sN from"pg";function jg(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 sN.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 aN from"knex";function Wg(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=zi(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=aN({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 cN from"pg";function Kg(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(),fs)),a=s(i);r=a.connection,n=a.provider}}catch(i){return{ok:!1,stage:"parse",error:i.message}}let o=new cN.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 ec=[{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"}}],L2=Object.fromEntries(Fn.map(e=>[e.id,{model:e.env.EMBEDDING_MODEL,dimensions:Number(e.env.EMBEDDING_DIMENSIONS)}]));C();$r();Xt();import{existsSync as mN,readFileSync as hN,writeFileSync as gN,mkdirSync as yN,renameSync as wN}from"node:fs";import{dirname as EN}from"node:path";var k={PENDING:"PENDING",ACTIVE:"ACTIVE",DONE:"DONE",SKIPPED:"SKIPPED",ERROR:"ERROR"},Vg=new Set([k.DONE,k.SKIPPED]),tc=[{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=tc.map(e=>e.id),qg=Object.fromEntries(tc.map(e=>[e.id,e]));function Jg(e){return tc.every(t=>{let r=e[t.id]?.status;return t.skippable?Vg.has(r):r===k.DONE})}function zg(e){return $n.find(r=>!Vg.has(e[r]?.status))||"FINISH"}var Xg=1;function rc(){return new Date().toISOString()}function Ur(){let e={};for(let r of $n)e[r]={status:k.PENDING,error:null,data:{}};let t=rc();return{version:Xg,status:"IN_PROGRESS",currentStep:$n[0],startedAt:t,updatedAt:t,steps:e}}function Ei(e=ro){try{if(!mN(e))return Ur();let t=JSON.parse(hN(e,"utf8"));if(!t||typeof t!="object"||t.version!==Xg||!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){yN(EN(t),{recursive:!0});let r=`${t}.${process.pid}.tmp`;return gN(r,JSON.stringify(e,null,2),"utf8"),wN(r,t),e}function Zg(e){return JSON.parse(JSON.stringify(e))}function Qg(e){Jg(e.steps)?(e.status="COMPLETED",e.currentStep="FINISH"):(e.status="IN_PROGRESS",e.currentStep=zg(e.steps))}function nc(e,{step:t,status:r,data:n,error:o}={}){let i=qg[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=Zg(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},Qg(s),s.updatedAt=rc(),s}async function _N(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 oc(e,{readEnv:t=De,probeDb:r=_N}={}){let n=t(),o=Zg(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,{})),Qg(o),o.updatedAt=rc(),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 dy(e){e.register("onboardingState",async()=>{let t=Ei(),r=JSON.stringify(t),n=await oc(t);return JSON.stringify(n)!==r&&Un(n),{..._i(n),machine:n}}),e.register("onboardingAdvance",async(t={})=>{let r=nc(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:ec})),e.register("listEmbeddingProviders",async()=>({providers:Fn})),e.register("configureLlm",async t=>{let r=ec.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(),Vc));o=i(t.url)}else if(t.host){let{buildLocalConnection:i}=await Promise.resolve().then(()=>(er(),Il));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(),fs));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(()=>(sc(),ic)),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(()=>(sc(),ic));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 oc(Ei());Un(nc(n,{step:"FINISH",status:"DONE"}))}catch{}let r=!1;if(t.installService)try{let{installServiceUnit:n}=await Promise.resolve().then(()=>(pc(),uy));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(),ql)),{readEnvRaw:n}=await Promise.resolve().then(()=>($r(),Yg)),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(),ru)),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(),eu)),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 kD={"claude-code":()=>Promise.resolve().then(()=>(gy(),hy)),cursor:()=>Promise.resolve().then(()=>(Ay(),Sy)),"codex-cli":()=>Promise.resolve().then(()=>(aw(),sw)),kiro:()=>Promise.resolve().then(()=>(mw(),pw)),hermes:()=>Promise.resolve().then(()=>(ww(),yw))};async function bc(){return await Promise.all(Object.entries(kD).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 MD(e,t){return t?"connected":e?"available":"unavailable"}async function Ew(e){let r=(await bc()).find(n=>n.id===e);if(!r)throw new H({errorCode:"VALIDATION_ERROR",message:`unknown connector: ${e}`});return r}function _w(e){e.register("listConnectors",async()=>{let t=await bc();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:MD(!!o,s),reason:i?.reason||null}}))}}),e.register("connectConnector",async(t={})=>{let r=await Ew(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 Ew(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();Rc();import VD from"knex";async function qD(e){let t=VD({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 bw(e){e.register("dbDockerAvailable",async()=>zn()),e.register("dbProvisionDocker",async()=>{let t;try{t=await Oc()}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 qD(t.url)}catch(n){let{diagnoseError:o}=await Promise.resolve().then(()=>(Me(),Jt));throw zc(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}})}pc();Zt();function Tw(e){e.register("serviceStatus",async()=>({...await fc(),db:ns?.()??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 dc()}))}C();import{existsSync as Iw}from"node:fs";import{readFile as Ow,writeFile as JD,mkdir as zD}from"node:fs/promises";import{dirname as XD}from"node:path";var ZD=/(KEY|PASSWORD|TOKEN|SECRET)$/i;function Cw(e){e.register("readEnv",async()=>{let t=Iw(W)?await Ow(W,"utf8"):"",r=QD(t),n={};for(let[o,i]of Object.entries(r))ZD.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=Iw(W)?await Ow(W,"utf8"):"",o=eL(n,r);await zD(XD(W),{recursive:!0}),await JD(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 QD(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 eL(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}=${Rw(l)}`}).filter(s=>s!==null);for(let[s,a]of Object.entries(t))r.has(s)||a===null||a===void 0||o.push(`${s}=${Rw(a)}`);let i=o.join(`
|
|
717
717
|
`);return i.endsWith(`
|
|
718
718
|
`)||(i+=`
|
|
719
|
-
`),i}function
|
|
720
|
-
`),process.exit(0));let r=
|
|
721
|
-
`)}async function
|
|
722
|
-
`;e?e.write(r):process.stderr.write(r)}}import.meta.url===`file://${process.argv[1]}`&&
|
|
719
|
+
`),i}function Rw(e){let t=String(e);return/[\s#"'$]/.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function Nw(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}}})}Dc();import{randomBytes as mL}from"node:crypto";var hL=600;function Mw(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:hL,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=gL();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 gL(){let e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=mL(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 Hw(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 Bw(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 Fw=new Set(["paused","compromised"]);function $w(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(!Fw.has(o)){let a=new Error(`device.revoke: reason must be one of ${[...Fw].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(),rl));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 Uw(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 Gw(e,{startedAt:t}){ll(e,{startedAt:t}),Nh(e),rg(e),ng(e),og(e),cg(e),lg(e),ug(e),dg(e),fg(e),Eg(e),_g(e),xg(e),Gg(e),jg(e),Wg(e),Kg(e),dy(e),_w(e),bw(e),Tw(e),Cw(e),Nw(e),Mw(e),Hw(e),Bw(e),$w(e),Uw(e)}var Lc=Date.now();async function bL({foreground:e=!1}={}){delete process.env.SIGIL_AGENT,await Ji();let t=await Vi();t&&(process.stderr.write(`[sigild] already running (pid ${t})
|
|
720
|
+
`),process.exit(0));let r=OL();r(`starting (pid ${process.pid}, node ${process.version})`),await Yi();let n=Zc();es(n),Gw(n,{startedAt:Lc});let o=await el({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(()=>(Rc(),Aw));(await p()).started&&r("started local sigil-postgres container")}catch{}IL(r)}let s=null;if(i.http.enabled)try{s=await sl({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(()=>(Dc(),kw)),{RPC_ALPN:E,createRpcAcceptor:b}=await Promise.resolve().then(()=>(Xa(),Dg));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(()=>(Ww(),jw));await p({registry:n,log:r})}catch(p){r(`lite-proxy install failed: ${p.message}`)}let c=await TL(),l=()=>{try{xL(Vt,JSON.stringify({pid:process.pid,version:c,node:process.version,startedAt:Lc,ts:Date.now(),supervised:process.env.SIGIL_SUPERVISED==="1"}),"utf8")}catch{}};l();let d=setInterval(l,15e3);d.unref(),qi(async p=>{r(`received ${p}, shutting down`),clearInterval(d);try{SL(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(),rs(),r("stopped")}),r(`ready in ${Date.now()-Lc}ms \u2014 ${n.list().length} methods registered`),e&&process.stdout.write(`sigild ready
|
|
721
|
+
`)}async function TL(){try{let{readFile:e}=await import("node:fs/promises"),{join:t}=await import("node:path"),{PKG_ROOT:r}=await Promise.resolve().then(()=>(C(),Fc));return JSON.parse(await e(t(r,"package.json"),"utf8")).version}catch{return"unknown"}}async function IL(e){try{let{default:t}=await Promise.resolve().then(()=>(T(),F)),{setDbHealth:r}=await Promise.resolve().then(()=>(Zt(),os));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 OL(){let e;try{e=_L(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]}`&&bL({foreground:!0}).catch(async e=>{try{await AL(Ie,`[fatal] ${e.stack||e.message}
|
|
723
723
|
`)}catch{}process.stderr.write(`[sigild] fatal: ${e.message}
|
|
724
|
-
`),process.exit(1)});export{
|
|
724
|
+
`),process.exit(1)});export{bL as startDaemon};
|