@anmol-srv/sigil 0.10.3 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +18 -12
- package/README.md +90 -82
- package/dist/cli.js +701 -508
- package/dist/daemon.js +647 -0
- package/dist/hooks/post-tool-use.js +20 -22
- package/dist/hooks/session-end.js +63 -61
- package/dist/hooks/stop.js +76 -74
- package/dist/hooks/user-prompt-submit.js +55 -47
- package/dist/server.js +45 -554
- package/integrations/hermes/README.md +4 -4
- package/integrations/hermes/plugin/README.md +8 -8
- package/knexfile.js +29 -8
- package/package.json +11 -5
- package/src/db/migrations/20260601000000_create-device-table.cjs +34 -0
- package/src/db/migrations/20260601000001_create-pairing-code-table.cjs +27 -0
- package/src/db/migrations/20260601000002_add-fact-provenance.cjs +31 -0
- package/src/db/migrations/20260601000003_add-device-revoked-reason.cjs +19 -0
- package/src/db/migrations/20260601000004_create-trace-event-table.cjs +35 -0
- package/src/db/migrations/20260601000005_add-fact-agent-provenance.cjs +25 -0
- package/src/gui/web/app.css +883 -0
- package/src/gui/web/app.js +1118 -0
- package/src/gui/web/index.html +524 -0
- package/src/gui/web/sigil.svg +31 -0
package/dist/cli.js
CHANGED
|
@@ -1,440 +1,182 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
import { createRequire as __sigilCreateRequire } from 'node:module'; const require = __sigilCreateRequire(import.meta.url);
|
|
3
|
+
var ux=Object.create;var Ks=Object.defineProperty;var dx=Object.getOwnPropertyDescriptor;var px=Object.getOwnPropertyNames;var fx=Object.getPrototypeOf,mx=Object.prototype.hasOwnProperty;var hx=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var f=(e,t)=>()=>(e&&(t=e(e=0)),t);var he=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),T=(e,t)=>{for(var r in t)Ks(e,r,{get:t[r],enumerable:!0})},gx=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of px(t))!mx.call(e,i)&&i!==r&&Ks(e,i,{get:()=>t[i],enumerable:!(n=dx(t,i))||n.enumerable});return e};var Ys=(e,t,r)=>(r=e!=null?ux(fx(e)):{},gx(t||!e||!e.__esModule?Ks(r,"default",{value:e,enumerable:!0}):r,e));var Qs={};T(Qs,{CLAUDE_HOME:()=>Zs,CLAUDE_MD_PATH:()=>Ix,CLAUDE_SETTINGS_PATH:()=>vx,GUI_WEB_DIR:()=>Sx,GUI_WEB_DIR_BUILT:()=>Wn,GUI_WEB_DIR_DEV:()=>Ui,MIGRATIONS_DIR:()=>ir,PKG_ROOT:()=>ge,PROMPTS_DIR:()=>Ie,SIGIL_ACTIVE_SESSION_CURSOR:()=>Xs,SIGIL_DAEMON_LOG:()=>pe,SIGIL_DAEMON_PID:()=>It,SIGIL_DAEMON_SOCK:()=>we,SIGIL_DB_PATH:()=>Ex,SIGIL_ENV_PATH:()=>ye,SIGIL_GUI_TOKEN:()=>Mr,SIGIL_HOME:()=>ee,SIGIL_HOOK_DEDUP:()=>xx,SIGIL_HOOK_ERRORS_LOG:()=>Js,SIGIL_IDENTITY_KEY:()=>At,SIGIL_IROH_DIR:()=>Gi,SIGIL_LAST_CLEAN_DOCTOR:()=>zs,SIGIL_MD_PATH:()=>Bi,SIGIL_SCHEMAS_DIR:()=>qs,SIGIL_STOP_CURSOR:()=>bx});import{fileURLToPath as yx}from"node:url";import{dirname as Ru,join as K}from"node:path";import{existsSync as Nu}from"node:fs";import{homedir as wx}from"node:os";function _x(){let e=Ru(yx(import.meta.url));for(let t=0;t<10;t++){if(Nu(K(e,"package.json"))&&Nu(K(e,"prompts")))return e;let r=Ru(e);if(r===e)break;e=r}return process.cwd()}var ge,Ie,ir,Du,ee,ye,Ex,Bi,qs,Js,zs,Xs,bx,xx,we,It,pe,Mr,Wn,Ui,Sx,Gi,At,Zs,vx,Ix,B=f(()=>{ge=_x(),Ie=K(ge,"prompts"),ir=K(ge,"src","db","migrations"),Du=wx(),ee=K(Du,".sigil"),ye=K(ee,".env"),Ex=K(ee,"db"),Bi=K(ee,"CLAUDE.md"),qs=K(ee,"schemas"),Js=K(ee,".hook-errors.log"),zs=K(ee,".last-clean-doctor"),Xs=K(ee,".active-session.json"),bx=K(ee,".stop-cursor.json"),xx=K(ee,".hook-dedup.json"),we=K(ee,"sock"),It=K(ee,"sigild.pid"),pe=K(ee,"sigild.log"),Mr=K(ee,"gui.token"),Wn=K(ge,"dist","gui"),Ui=K(ge,"src","gui","web"),Sx=Wn,Gi=K(ee,"iroh"),At=K(ee,"identity.key"),Zs=K(Du,".claude"),vx=K(Zs,"settings.json"),Ix=K(Zs,"CLAUDE.md")});import{readFile as Ax,writeFile as Tx,unlink as Lu,mkdir as ku}from"node:fs/promises";import{existsSync as Pu}from"node:fs";function Fr(e){if(!e||!Number.isFinite(e))return!1;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function ji(){if(!Pu(It))return null;try{let e=(await Ax(It,"utf8")).trim(),t=Number(e);return Number.isFinite(t)?t:null}catch{return null}}async function Mu(){await ku(ee,{recursive:!0}),await Tx(It,String(process.pid),"utf8")}async function ea(){try{await Lu(It)}catch{}}async function ta(){try{await Lu(we)}catch{}}async function Hr(){let e=await ji();return e&&Fr(e)?e:(e&&await ea(),Pu(we)&&await ta(),null)}function Fu(e){let t=!1,r=async n=>{if(!t){t=!0;try{await e(n)}catch(i){process.stderr.write(`[sigild] shutdown error: ${i.message}
|
|
4
|
+
`)}finally{process.exit(0)}}};process.on("SIGTERM",()=>r("SIGTERM")),process.on("SIGINT",()=>r("SIGINT")),process.on("SIGHUP",()=>r("SIGHUP"))}async function Hu(){await ku(ee,{recursive:!0})}var Vn=f(()=>{B()});import{connect as Cx}from"node:net";import{randomUUID as $x}from"node:crypto";function Br({path:e=we,timeoutMs:t=3e4}={}){return new Promise((r,n)=>{let i=Cx(e),o=new Map,s="",a=!1;i.setEncoding("utf8"),i.once("connect",()=>{i.off("error",c),r(l())});function c(d){n(d)}i.once("error",c),i.on("data",d=>{s+=d;let p;for(;(p=s.indexOf(`
|
|
5
|
+
`))!==-1;){let u=s.slice(0,p);if(s=s.slice(p+1),!u.trim())continue;let m;try{m=JSON.parse(u)}catch{continue}let g=o.get(m.id);g&&(o.delete(m.id),clearTimeout(g.timer),m.ok?g.resolve(m):g.reject(new ra(m.error||{})))}}),i.on("close",()=>{a=!0;for(let[,d]of o)clearTimeout(d.timer),d.reject(new Error("daemon connection closed"));o.clear()}),i.on("error",()=>{});function l(){return{call(d,p){if(a)return Promise.reject(new Error("client is closed"));let u=$x(),m=process.env.SIGIL_AGENT||null,g=JSON.stringify({id:u,method:d,params:p,agent:m})+`
|
|
6
|
+
`;return new Promise((y,w)=>{let x=setTimeout(()=>{o.delete(u)&&w(new Error(`rpc timeout after ${t}ms: ${d}`))},t);o.set(u,{resolve:y,reject:w,timer:x}),i.write(g)})},close(){return new Promise(d=>{if(a)return d();i.end(()=>d())})}}}})}var ra,na=f(()=>{B();ra=class extends Error{constructor({code:t,message:r,stack:n}){super(r||t||"rpc error"),this.name="SigilRpcError",this.code=t||"handler_error",n&&(this.remoteStack=n)}}});var nt={};T(nt,{connectOrStartDaemon:()=>Tt});import{spawn as Ox}from"node:child_process";import{existsSync as ju,openSync as Bu,closeSync as Uu,mkdirSync as Rx}from"node:fs";import{setTimeout as Nx}from"node:timers/promises";import{dirname as Dx}from"node:path";import{fileURLToPath as Lx}from"node:url";import{join as ia}from"node:path";async function Tt({quiet:e=!1}={}){return await Wu()?Br():(e||process.stderr.write(`[sigil] daemon not running, starting it...
|
|
7
|
+
`),await Mx(),await Hx(),Br())}async function Wu(){if(!ju(we))return!1;try{let e=await Br({timeoutMs:1e3});return await e.call("ping",{}),await e.close(),!0}catch{return!1}}async function Mx(){Rx(ee,{recursive:!0}),await Hr();let e=Fx(),t=Bu(pe,"a"),r=Bu(pe,"a");Ox(process.execPath,[e],{detached:!0,stdio:["ignore",t,r],env:{...process.env,SIGIL_DAEMON_AUTOSPAWN:"1"}}).unref();try{Uu(t)}catch{}try{Uu(r)}catch{}}function Fx(){let e=[ia(ge,"dist","daemon.js"),ia(ge,"src","daemon","index.js"),ia(Dx(Lx(import.meta.url)),"..","daemon","index.js")];for(let t of e)if(ju(t))return t;throw new Error("cannot locate daemon entry point (looked in dist/ and src/daemon/)")}async function Hx(){let e=Date.now()+Gu,t=kx;for(;Date.now()<e;){if(await Wu())return;await Nx(t),t=Math.min(t*2,Px)}throw new Error(`daemon did not become ready within ${Gu}ms \u2014 check ${pe}`)}var Gu,kx,Px,Ne=f(()=>{B();Vn();na();Gu=5e3,kx=25,Px=400});var oa={};T(oa,{getGuiToken:()=>Vi,isValidToken:()=>Ur});import{readFile as Bx,writeFile as Ux,chmod as Gx,mkdir as jx}from"node:fs/promises";import{randomBytes as Wx,timingSafeEqual as Vu}from"node:crypto";import{dirname as Vx}from"node:path";async function Vi(){if(Wi)return Wi;try{let t=(await Bx(Mr,"utf8")).trim();if(/^[0-9a-f]{64}$/.test(t))return Wi=t}catch{}await jx(Vx(Mr),{recursive:!0});let e=Wx(32).toString("hex");await Ux(Mr,e,"utf8");try{await Gx(Mr,384)}catch{}return Wi=e}async function Ur(e){if(!e||typeof e!="string")return!1;let t=await Vi();if(e.length!==t.length)return Vu(Buffer.from(t),Buffer.from(t)),!1;try{return Vu(Buffer.from(e),Buffer.from(t))}catch{return!1}}var Wi,Ki=f(()=>{B();Wi=null});var X={};T(X,{default:()=>E});var j,Ku,Kx,E,R=f(()=>{j=(e,t)=>process.env[e]??t,Ku=j("SIGIL_DB_TYPE","postgres");if(Ku!=="postgres")throw new Error(`SIGIL_DB_TYPE=${Ku} is no longer supported. Sigil 0.10.0+ is Postgres-only.
|
|
3
8
|
PGlite was deprecated; existing PGlite data at ~/.sigil/db is preserved but unreachable from this version.
|
|
4
9
|
Set SIGIL_DB_TYPE=postgres in ~/.sigil/.env and configure SIGIL_DB_HOST / PORT / NAME / USER / PASSWORD.
|
|
5
|
-
Run \`sigil init\` for an interactive setup.`);
|
|
6
|
-
`)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
`))
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
`)),this._prevFrame=t;return}}this.output.write(nt.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}};Ys=class extends Jt{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#n="";#t;#o;#a;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return zr(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let t=this.userInput.slice(0,this._cursor),[e,...r]=this.userInput.slice(this._cursor);return`${t}${zr("inverse",e)}${r.join("")}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(t){super(t),this.#o=t.options,this.#a=t.placeholder;let e=this.options;this.filteredOptions=[...e],this.multiple=t.multiple===!0,this.#t=typeof t.options=="function"?t.filter:t.filter??Rw;let r;if(t.initialValue&&Array.isArray(t.initialValue)?this.multiple?r=t.initialValue:r=t.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0].value]),r)for(let i of r){let n=e.findIndex(s=>s.value===i);n!==-1&&(this.toggleSelected(i),this.#e=n)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(i,n)=>this.#r(i,n)),this.on("userInput",i=>this.#i(i))}_isActionKey(t,e){return t===" "||this.multiple&&this.isNavigating&&e.name==="space"&&t!==void 0&&t!==""}#r(t,e){let r=e.name==="up",i=e.name==="down",n=e.name==="return",s=this.userInput===""||this.userInput===" ",o=this.#a,a=this.options,c=o!==void 0&&o!==""&&a.some(l=>!l.disabled&&(this.#t?this.#t(o,l):!0));if(e.name==="tab"&&s&&c){this.userInput===" "&&this._clearUserInput(),this._setUserInput(o,!0),this.isNavigating=!1;return}r||i?(this.#e=qt(this.#e,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):n?this.value=Nw(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(e.name==="tab"||this.isNavigating&&e.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(t){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(t)?this.selectedValues=this.selectedValues.filter(e=>e!==t):this.selectedValues=[...this.selectedValues,t]:this.selectedValues=[t])}#i(t){if(t!==this.#n){this.#n=t;let e=this.options;t&&this.#t?this.filteredOptions=e.filter(n=>this.#t?.(t,n)):this.filteredOptions=[...e];let r=Ow(this.focusedValue,this.filteredOptions);this.#e=qt(r,0,this.filteredOptions);let i=this.filteredOptions[this.#e];i&&!i.disabled?this.focusedValue=i.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},Wi=class extends Jt{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(nt.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},Dw={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};Gi=class extends Jt{#e;#n;#t;#o;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#t}}get segments(){return this.#e}get separator(){return this.#n}get formattedValue(){return this.#d(this.#t)}#d(e){return this.#e.map(r=>e[r.type]).join(this.#n)}#c(){this._setUserInput(this.#d(this.#t)),this._setValue(Xc(this.#t)??void 0)}constructor(e){let r=e.format?{segments:zc(e.format),separator:e.separator??"/"}:Lw(e.locale),i=e.separator??r.separator,n=e.format?zc(e.format):r.segments,s=e.initialValue??e.defaultValue,o=s?{year:String(s.getUTCFullYear()).padStart(4,"0"),month:String(s.getUTCMonth()+1).padStart(2,"0"),day:String(s.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=n.map(c=>o[c.type]).join(i);super({...e,initialUserInput:a},!1),this.#e=n,this.#n=i,this.#t=o,this.#o=e.minDate,this.#a=e.maxDate,this.#c(),this.on("cursor",c=>this.#m(c)),this.on("key",(c,l)=>this.#h(c,l)),this.on("finalize",()=>this.#g(e))}#l(){let e=Math.max(0,Math.min(this.#r.segmentIndex,this.#e.length-1)),r=this.#e[e];if(r)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,r.len-1)),{segment:r,index:e}}#u(e){this.inlineError="",this.#s=null;let r=this.#l();r&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#e.length-1,r.index+e)),this.#r.positionInSegment=0,this.#i=!0)}#f(e){let r=this.#l();if(!r)return;let{segment:i}=r,n=this.#t[i.type],s=!n||n.replace(/_/g,"")==="",o=Number.parseInt((n||"0").replace(/_/g,"0"),10)||0,a=Pw(i.type,ji(this.#t),this.#o,this.#a),c;s?c=e===1?a.min:a.max:c=Math.max(Math.min(a.max,o+e),a.min),this.#t={...this.#t,[i.type]:c.toString().padStart(i.len,"0")},this.#i=!0,this.#s=null,this.#c()}#m(e){if(e)switch(e){case"right":return this.#u(1);case"left":return this.#u(-1);case"up":return this.#f(1);case"down":return this.#f(-1)}}#h(e,r){if(r?.name==="backspace"||r?.sequence==="\x7F"||r?.sequence==="\b"||e==="\x7F"||e==="\b"){this.inlineError="";let i=this.#l();if(!i)return;if(!this.#t[i.segment.type].replace(/_/g,"")){this.#u(-1);return}this.#t[i.segment.type]="_".repeat(i.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(r?.name==="tab"){this.inlineError="";let i=this.#l();if(!i)return;let n=r.shift?-1:1,s=i.index+n;s>=0&&s<this.#e.length&&(this.#r.segmentIndex=s,this.#r.positionInSegment=0,this.#i=!0);return}if(e&&/^[0-9]$/.test(e)){let i=this.#l();if(!i)return;let{segment:n}=i,s=!this.#t[n.type].replace(/_/g,"");if(this.#i&&this.#s!==null&&!s){let f=this.#s+e,m={...this.#t,[n.type]:f},y=this.#p(m,n);if(y){this.inlineError=y,this.#s=null,this.#i=!1;return}this.inlineError="",this.#t[n.type]=f,this.#s=null,this.#i=!1,this.#c(),i.index<this.#e.length-1&&(this.#r.segmentIndex=i.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!s&&(this.#t[n.type]="_".repeat(n.len),this.#r.positionInSegment=0),this.#i=!1,this.#s=null;let o=this.#t[n.type],a=o.indexOf("_"),c=a>=0?a:Math.min(this.#r.positionInSegment,n.len-1);if(c<0||c>=n.len)return;let l=o.slice(0,c)+e+o.slice(c+1),u=!1;if(c===0&&o==="__"&&(n.type==="month"||n.type==="day")){let f=Number.parseInt(e,10);l=`0${e}`,u=f<=(n.type==="month"?1:2)}if(n.type==="year"&&(l=(o.replace(/_/g,"")+e).padStart(n.len,"_")),!l.includes("_")){let f={...this.#t,[n.type]:l},m=this.#p(f,n);if(m){this.inlineError=m;return}}this.inlineError="",this.#t[n.type]=l;let h=l.includes("_")?void 0:el(this.#t);if(h){let{year:f,month:m}=h,y=Ws(f,m);this.#t={year:String(Math.max(0,Math.min(9999,f))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,m))).padStart(2,"0"),day:String(Math.max(1,Math.min(y,h.day))).padStart(2,"0")}}this.#c();let d=l.indexOf("_");u?(this.#i=!0,this.#s=e):d>=0?this.#r.positionInSegment=d:a>=0&&i.index<this.#e.length-1?(this.#r.segmentIndex=i.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(c+1,n.len-1)}}#p(e,r){let{month:i,day:n}=ji(e);if(r.type==="month"&&(i<0||i>12))return D.date.messages.invalidMonth;if(r.type==="day"&&(n<0||n>31))return D.date.messages.invalidDay(31,"any month")}#g(e){let{year:r,month:i,day:n}=ji(this.#t);if(r&&i&&n){let s=Ws(r,i);this.#t={...this.#t,day:String(Math.min(n,s)).padStart(2,"0")}}this.value=Xc(this.#t)??e.defaultValue??void 0}},Ki=class extends Jt{options;cursor=0;#e;getGroupItems(e){return this.options.filter(r=>r.group===e)}isGroupSelected(e){let r=this.getGroupItems(e),i=this.value;return i===void 0?!1:r.every(n=>i.includes(n.value))}toggleValue(){let e=this.options[this.cursor];if(this.value===void 0&&(this.value=[]),e.group===!0){let r=e.value,i=this.getGroupItems(r);this.isGroupSelected(r)?this.value=this.value.filter(n=>i.findIndex(s=>s.value===n)===-1):this.value=[...this.value,...i.map(n=>n.value)],this.value=Array.from(new Set(this.value))}else{let r=this.value.includes(e.value);this.value=r?this.value.filter(i=>i!==e.value):[...this.value,e.value]}}constructor(e){super(e,!1);let{options:r}=e;this.#e=e.selectableGroups!==!1,this.options=Object.entries(r).flatMap(([i,n])=>[{value:i,group:!0,label:i},...n.map(s=>({...s,group:i}))]),this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:i})=>i===e.cursorAt),this.#e?0:1),this.on("cursor",i=>{switch(i){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let n=this.options[this.cursor]?.group===!0;!this.#e&&n&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let n=this.options[this.cursor]?.group===!0;!this.#e&&n&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},rl=class extends Jt{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(t=>t.disabled!==!0)}toggleAll(){let t=this._enabledOptions,e=this.value!==void 0&&this.value.length===t.length;this.value=e?[]:t.map(r=>r.value)}toggleInvert(){let t=this.value;if(!t)return;let e=this._enabledOptions.filter(r=>!t.includes(r.value));this.value=e.map(r=>r.value)}toggleValue(){this.value===void 0&&(this.value=[]);let t=this.value.includes(this._value);this.value=t?this.value.filter(e=>e!==this._value):[...this.value,this._value]}constructor(t){super(t,!1),this.options=t.options,this.value=[...t.initialValues??[]];let e=Math.max(this.options.findIndex(({value:r})=>r===t.cursorAt),0);this.cursor=this.options[e].disabled?qt(e,1,this.options):e,this.on("key",r=>{r==="a"&&this.toggleAll(),r==="i"&&this.toggleInvert()}),this.on("cursor",r=>{switch(r){case"left":case"up":this.cursor=qt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=qt(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Vi=class extends Jt{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let e=this.userInput;if(this.cursor>=e.length)return`${this.masked}${zr(["inverse","hidden"],"_")}`;let r=this.masked,i=r.slice(0,this.cursor),n=r.slice(this.cursor);return`${i}${zr("inverse",n[0])}${n.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:e,...r}){super(r),this._mask=e??"\u2022",this.on("userInput",i=>{this._setValue(i)})}},Yi=class extends Jt{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(e){super(e,!1),this.options=e.options;let r=this.options.findIndex(({value:n})=>n===e.initialValue),i=r===-1?0:r;this.cursor=this.options[i].disabled?qt(i,1,this.options):i,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=qt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=qt(this.cursor,1,this.options);break}this.changeValue()})}},qi=class extends Jt{options;cursor=0;constructor(e){super(e,!1),this.options=e.options;let r=e.caseSensitive===!0,i=this.options.map(({value:[n]})=>r?n:n?.toLowerCase());this.cursor=Math.max(i.indexOf(e.initialValue),0),this.on("key",(n,s)=>{if(!n)return;let o=r&&s.shift?n.toUpperCase():n;if(!i.includes(o))return;let a=this.options.find(({value:[c]})=>r?c===o:c?.toLowerCase()===n);a&&(this.value=a.value,this.state="submit",this.emit("submit"))})}},Ji=class extends Jt{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}\u2588`;let r=e.slice(0,this.cursor),[i,...n]=e.slice(this.cursor);return`${r}${zr("inverse",i)}${n.join("")}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}});var en={};$(en,{S_BAR:()=>A,S_BAR_END:()=>Q,S_BAR_END_RIGHT:()=>fl,S_BAR_H:()=>tn,S_BAR_START:()=>Zs,S_BAR_START_RIGHT:()=>dl,S_CHECKBOX_ACTIVE:()=>Zi,S_CHECKBOX_INACTIVE:()=>ir,S_CHECKBOX_SELECTED:()=>Ie,S_CONNECT_LEFT:()=>ml,S_CORNER_BOTTOM_LEFT:()=>ro,S_CORNER_BOTTOM_RIGHT:()=>eo,S_CORNER_TOP_LEFT:()=>hl,S_CORNER_TOP_RIGHT:()=>to,S_ERROR:()=>oo,S_INFO:()=>io,S_PASSWORD_MASK:()=>pl,S_RADIO_ACTIVE:()=>Qr,S_RADIO_INACTIVE:()=>$e,S_STEP_ACTIVE:()=>ul,S_STEP_CANCEL:()=>Xs,S_STEP_ERROR:()=>Qs,S_STEP_SUBMIT:()=>Oe,S_SUCCESS:()=>no,S_WARN:()=>so,autocomplete:()=>yl,autocompleteMultiselect:()=>jw,box:()=>Vw,cancel:()=>t0,confirm:()=>Yw,date:()=>qw,group:()=>Qw,groupMultiselect:()=>Zw,intro:()=>e0,isCI:()=>zs,isCancel:()=>zi,isTTY:()=>ll,limitOptions:()=>nr,log:()=>yt,multiselect:()=>i0,note:()=>o0,outro:()=>r0,password:()=>a0,path:()=>c0,progress:()=>u0,select:()=>d0,selectKey:()=>f0,settings:()=>D,spinner:()=>co,stream:()=>ve,symbol:()=>bt,symbolBar:()=>ao,taskLog:()=>h0,tasks:()=>p0,text:()=>g0,unicode:()=>Qi,unicodeOr:()=>k,updateSettings:()=>Zc});import{styleText as p,stripVTControlCharacters as Js}from"node:util";import xt from"node:process";import{existsSync as Mw,lstatSync as il,readdirSync as Fw}from"node:fs";import{dirname as nl,join as kw}from"node:path";function Hw(){return xt.platform!=="win32"?xt.env.TERM!=="linux":!!xt.env.CI||!!xt.env.WT_SESSION||!!xt.env.TERMINUS_SUBLIME||xt.env.ConEmuTask==="{cmd::Cmder}"||xt.env.TERM_PROGRAM==="Terminus-Sublime"||xt.env.TERM_PROGRAM==="vscode"||xt.env.TERM==="xterm-256color"||xt.env.TERM==="alacritty"||xt.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function sl(t){return t.label??String(t.value??"")}function gl(t,e){if(!t)return!0;let r=(e.label??String(e.value??"")).toLowerCase(),i=(e.hint??"").toLowerCase(),n=String(e.value).toLowerCase(),s=t.toLowerCase();return r.includes(s)||i.includes(s)||n.includes(s)}function Uw(t,e){let r=[];for(let i of e)t.includes(i.value)&&r.push(i);return r}function ol(t,e,r,i){let n=r,s=r;return i==="center"?n=Math.floor((e-t)/2):i==="right"&&(n=e-t-r),s=e-n-t,[n,s]}function Jw(t,e){let r=t.segmentValues,i=t.segmentCursor;if(e==="submit"||e==="cancel")return t.formattedValue;let n=p("gray",t.separator);return t.segments.map((s,o)=>{let a=o===i.segmentIndex&&!["submit","cancel"].includes(e),c=Xw[s.type];return zw(r[s.type],{isActive:a,label:c})}).join(n)}function zw(t,e){let r=!t||t.replace(/_/g,"")==="";return e.isActive?p("inverse",r?e.label:t.replace(/_/g," ")):r?p("dim",e.label):t.replace(/_/g,p("dim"," "))}function u0({style:t="heavy",max:e=100,size:r=40,...i}={}){let n=co(i),s=0,o="",a=Math.max(1,e),c=Math.max(1,r),l=f=>{switch(f){case"initial":case"active":return m=>p("magenta",m);case"error":case"cancel":return m=>p("red",m);case"submit":return m=>p("green",m);default:return m=>p("magenta",m)}},u=(f,m)=>{let y=Math.floor(s/a*c);return`${l(f)(al[t].repeat(y))}${p("dim",al[t].repeat(c-y))} ${m}`},h=(f="")=>{o=f,n.start(u("initial",f))},d=(f=1,m)=>{s=Math.min(a,f+s),n.message(u("active",m??o)),o=m??o};return{start:h,stop:n.stop,cancel:n.cancel,error:n.error,clear:n.clear,advance:d,isCancelled:n.isCancelled,message:f=>d(0,f)}}var rr,Qi,zs,ll,k,ul,Xs,Qs,Oe,Zs,A,Q,dl,fl,Qr,$e,Zi,Ie,ir,pl,tn,to,ml,eo,ro,hl,io,no,so,oo,bt,ao,Bw,nr,yl,jw,Ww,Gw,Kw,Vw,Yw,qw,Xw,Qw,Zw,yt,t0,e0,r0,Xr,i0,n0,s0,o0,a0,c0,l0,co,al,Xi,d0,f0,cl,ve,p0,m0,h0,g0,rn=g(()=>{qs();qs();ks();Ls();rr=_s(Bs(),1);Qi=Hw(),zs=()=>process.env.CI==="true",ll=t=>t.isTTY===!0,k=(t,e)=>Qi?t:e,ul=k("\u25C6","*"),Xs=k("\u25A0","x"),Qs=k("\u25B2","x"),Oe=k("\u25C7","o"),Zs=k("\u250C","T"),A=k("\u2502","|"),Q=k("\u2514","\u2014"),dl=k("\u2510","T"),fl=k("\u2518","\u2014"),Qr=k("\u25CF",">"),$e=k("\u25CB"," "),Zi=k("\u25FB","[\u2022]"),Ie=k("\u25FC","[+]"),ir=k("\u25FB","[ ]"),pl=k("\u25AA","\u2022"),tn=k("\u2500","-"),to=k("\u256E","+"),ml=k("\u251C","+"),eo=k("\u256F","+"),ro=k("\u2570","+"),hl=k("\u256D","+"),io=k("\u25CF","\u2022"),no=k("\u25C6","*"),so=k("\u25B2","!"),oo=k("\u25A0","x"),bt=t=>{switch(t){case"initial":case"active":return p("cyan",ul);case"cancel":return p("red",Xs);case"error":return p("yellow",Qs);case"submit":return p("green",Oe)}},ao=t=>{switch(t){case"initial":case"active":return p("cyan",A);case"cancel":return p("red",A);case"error":return p("yellow",A);case"submit":return p("green",A)}},Bw=(t,e,r,i,n)=>{let s=e,o=0;for(let a=r;a<i;a++){let c=t[a];if(s=s-c.length,o++,s<=n)break}return{lineCount:s,removals:o}},nr=({cursor:t,options:e,style:r,output:i=process.stdout,maxItems:n=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:o=4})=>{let a=Te(i)-s,c=Vs(i),l=p("dim","..."),u=Math.max(c-o,0),h=Math.max(Math.min(n,u),5),d=0;t>=h-3&&(d=Math.max(Math.min(t-h+3,e.length-h),0));let f=h<e.length&&d>0,m=h<e.length&&d+h<e.length,y=Math.min(d+h,e.length),w=[],x=0;f&&x++,m&&x++;let b=d+(f?1:0),T=y-(m?1:0);for(let C=b;C<T;C++){let P=Nt(r(e[C],C===t),a,{hard:!0,trim:!1}).split(`
|
|
23
|
-
`)
|
|
24
|
-
`)}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
`)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
`)
|
|
32
|
-
`)
|
|
33
|
-
`),
|
|
34
|
-
`);let
|
|
35
|
-
|
|
36
|
-
`)
|
|
37
|
-
|
|
38
|
-
`:""}${o}
|
|
39
|
-
`,c=this.value?e:r;switch(this.state){case"submit":{let l=i?`${p("gray",A)} `:"";return`${a}${l}${p("dim",c)}`}case"cancel":{let l=i?`${p("gray",A)} `:"";return`${a}${l}${p(["strikethrough","dim"],c)}${i?`
|
|
40
|
-
${p("gray",A)}`:""}`}default:{let l=i?`${p("cyan",A)} `:"",u=i?p("cyan",Q):"";return`${a}${l}${this.value?`${p("green",Qr)} ${e}`:`${p("dim",$e)} ${p("dim",e)}`}${t.vertical?i?`
|
|
41
|
-
${p("cyan",A)} `:`
|
|
42
|
-
`:` ${p("dim","/")} `}${this.value?`${p("dim",$e)} ${p("dim",r)}`:`${p("green",Qr)} ${r}`}
|
|
43
|
-
${u}
|
|
44
|
-
`}}}}).prompt()},qw=t=>{let e=t.validate;return new Gi({...t,validate(r){if(r===void 0)return t.defaultValue!==void 0?void 0:e?e(r):D.date.messages.required;let i=n=>n.toISOString().slice(0,10);if(t.minDate&&i(r)<i(t.minDate))return D.date.messages.afterMin(t.minDate);if(t.maxDate&&i(r)>i(t.maxDate))return D.date.messages.beforeMax(t.maxDate);if(e)return e(r)},render(){let r=(t?.withGuide??D.withGuide)!==!1,i=`${`${r?`${p("gray",A)}
|
|
45
|
-
`:""}${bt(this.state)} `}${t.message}
|
|
46
|
-
`,n=this.state!=="initial"?this.state:"active",s=Jw(this,n),o=this.value instanceof Date?this.formattedValue:"";switch(this.state){case"error":{let a=this.error?` ${p("yellow",this.error)}`:"",c=r?`${p("yellow",A)} `:"",l=r?p("yellow",Q):"";return`${i.trim()}
|
|
47
|
-
${c}${s}
|
|
48
|
-
${l}${a}
|
|
49
|
-
`}case"submit":{let a=o?` ${p("dim",o)}`:"",c=r?p("gray",A):"";return`${i}${c}${a}`}case"cancel":{let a=o?` ${p(["strikethrough","dim"],o)}`:"",c=r?p("gray",A):"";return`${i}${c}${a}${o.trim()?`
|
|
50
|
-
${c}`:""}`}default:{let a=r?`${p("cyan",A)} `:"",c=r?p("cyan",Q):"",l=r?`${p("cyan",A)} `:"",u=this.inlineError?`
|
|
51
|
-
${l}${p("yellow",this.inlineError)}`:"";return`${i}${a}${s}${u}
|
|
52
|
-
${c}
|
|
53
|
-
`}}}}).prompt()};Xw={year:"yyyy",month:"mm",day:"dd"},Qw=async(t,e)=>{let r={},i=Object.keys(t);for(let n of i){let s=t[n],o=await s({results:r})?.catch(a=>{throw a});if(typeof e?.onCancel=="function"&&zi(o)){r[n]="canceled",e.onCancel({results:r});continue}r[n]=o}return r},Zw=t=>{let{selectableGroups:e=!0,groupSpacing:r=0}=t,i=(s,o,a=[])=>{let c=s.label??String(s.value),l=typeof s.group=="string",u=l&&(a[a.indexOf(s)+1]??{group:!0}),h=l&&u&&u.group===!0,d=l?e?`${h?Q:A} `:" ":"",f="";if(r>0&&!l){let y=`
|
|
54
|
-
${p("cyan",A)}`;f=`${y.repeat(r-1)}${y} `}if(o==="active")return`${f}${p("dim",d)}${p("cyan",Zi)} ${c}${s.hint?` ${p("dim",`(${s.hint})`)}`:""}`;if(o==="group-active")return`${f}${d}${p("cyan",Zi)} ${p("dim",c)}`;if(o==="group-active-selected")return`${f}${d}${p("green",Ie)} ${p("dim",c)}`;if(o==="selected"){let y=l||e?p("green",Ie):"";return`${f}${p("dim",d)}${y} ${p("dim",c)}${s.hint?` ${p("dim",`(${s.hint})`)}`:""}`}if(o==="cancelled")return`${p(["strikethrough","dim"],c)}`;if(o==="active-selected")return`${f}${p("dim",d)}${p("green",Ie)} ${c}${s.hint?` ${p("dim",`(${s.hint})`)}`:""}`;if(o==="submitted")return`${p("dim",c)}`;let m=l||e?p("dim",ir):"";return`${f}${p("dim",d)}${m} ${p("dim",c)}`},n=t.required??!0;return new Ki({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:n,cursorAt:t.cursorAt,selectableGroups:e,validate(s){if(n&&(s===void 0||s.length===0))return`Please select at least one option.
|
|
55
|
-
${p("reset",p("dim",`Press ${p(["gray","bgWhite","inverse"]," space ")} to select, ${p("gray",p(["bgWhite","inverse"]," enter "))} to submit`))}`},render(){let s=t.withGuide??D.withGuide,o=`${s?`${p("gray",A)}
|
|
56
|
-
`:""}${bt(this.state)} ${t.message}
|
|
57
|
-
`,a=this.value??[];switch(this.state){case"submit":{let c=this.options.filter(({value:u})=>a.includes(u)).map(u=>i(u,"submitted")),l=c.length===0?"":` ${c.join(p("dim",", "))}`;return`${o}${s?p("gray",A):""}${l}`}case"cancel":{let c=this.options.filter(({value:l})=>a.includes(l)).map(l=>i(l,"cancelled")).join(p("dim",", "));return`${o}${s?`${p("gray",A)} `:""}${c.trim()?`${c}${s?`
|
|
58
|
-
${p("gray",A)}`:""}`:""}`}case"error":{let c=this.error.split(`
|
|
59
|
-
`).map((l,u)=>u===0?`${s?`${p("yellow",Q)} `:""}${p("yellow",l)}`:` ${l}`).join(`
|
|
60
|
-
`);return`${o}${s?`${p("yellow",A)} `:""}${this.options.map((l,u,h)=>{let d=a.includes(l.value)||l.group===!0&&this.isGroupSelected(`${l.value}`),f=u===this.cursor;return!f&&typeof l.group=="string"&&this.options[this.cursor].value===l.group?i(l,d?"group-active-selected":"group-active",h):f&&d?i(l,"active-selected",h):d?i(l,"selected",h):i(l,f?"active":"inactive",h)}).join(`
|
|
61
|
-
${s?`${p("yellow",A)} `:""}`)}
|
|
62
|
-
${c}
|
|
63
|
-
`}default:{let c=this.options.map((u,h,d)=>{let f=a.includes(u.value)||u.group===!0&&this.isGroupSelected(`${u.value}`),m=h===this.cursor,y=!m&&typeof u.group=="string"&&this.options[this.cursor].value===u.group,w="";return y?w=i(u,f?"group-active-selected":"group-active",d):m&&f?w=i(u,"active-selected",d):f?w=i(u,"selected",d):w=i(u,m?"active":"inactive",d),`${h!==0&&!w.startsWith(`
|
|
64
|
-
`)?" ":""}${w}`}).join(`
|
|
65
|
-
${s?p("cyan",A):""}`),l=c.startsWith(`
|
|
66
|
-
`)?"":" ";return`${o}${s?p("cyan",A):""}${l}${c}
|
|
67
|
-
${s?p("cyan",Q):""}
|
|
68
|
-
`}}}}).prompt()},yt={message:(t=[],{symbol:e=p("gray",A),secondarySymbol:r=p("gray",A),output:i=process.stdout,spacing:n=1,withGuide:s}={})=>{let o=[],a=s??D.withGuide,c=a?r:"",l=a?`${e} `:"",u=a?`${r} `:"";for(let d=0;d<n;d++)o.push(c);let h=Array.isArray(t)?t:t.split(`
|
|
69
|
-
`);if(h.length>0){let[d,...f]=h;d.length>0?o.push(`${l}${d}`):o.push(a?e:"");for(let m of f)m.length>0?o.push(`${u}${m}`):o.push(a?r:"")}i.write(`${o.join(`
|
|
70
|
-
`)}
|
|
71
|
-
`)},info:(t,e)=>{yt.message(t,{...e,symbol:p("blue",io)})},success:(t,e)=>{yt.message(t,{...e,symbol:p("green",no)})},step:(t,e)=>{yt.message(t,{...e,symbol:p("green",Oe)})},warn:(t,e)=>{yt.message(t,{...e,symbol:p("yellow",so)})},warning:(t,e)=>{yt.warn(t,e)},error:(t,e)=>{yt.message(t,{...e,symbol:p("red",oo)})}},t0=(t="",e)=>{let r=e?.output??process.stdout,i=e?.withGuide??D.withGuide?`${p("gray",Q)} `:"";r.write(`${i}${p("red",t)}
|
|
72
|
-
|
|
73
|
-
`)},e0=(t="",e)=>{let r=e?.output??process.stdout,i=e?.withGuide??D.withGuide?`${p("gray",Zs)} `:"";r.write(`${i}${t}
|
|
74
|
-
`)},r0=(t="",e)=>{let r=e?.output??process.stdout,i=e?.withGuide??D.withGuide?`${p("gray",A)}
|
|
75
|
-
${p("gray",Q)} `:"";r.write(`${i}${t}
|
|
76
|
-
|
|
77
|
-
`)},Xr=(t,e)=>t.split(`
|
|
78
|
-
`).map(r=>e(r)).join(`
|
|
79
|
-
`),i0=t=>{let e=(i,n)=>{let s=i.label??String(i.value);return n==="disabled"?`${p("gray",ir)} ${Xr(s,o=>p(["strikethrough","gray"],o))}${i.hint?` ${p("dim",`(${i.hint??"disabled"})`)}`:""}`:n==="active"?`${p("cyan",Zi)} ${s}${i.hint?` ${p("dim",`(${i.hint})`)}`:""}`:n==="selected"?`${p("green",Ie)} ${Xr(s,o=>p("dim",o))}${i.hint?` ${p("dim",`(${i.hint})`)}`:""}`:n==="cancelled"?`${Xr(s,o=>p(["strikethrough","dim"],o))}`:n==="active-selected"?`${p("green",Ie)} ${s}${i.hint?` ${p("dim",`(${i.hint})`)}`:""}`:n==="submitted"?`${Xr(s,o=>p("dim",o))}`:`${p("dim",ir)} ${Xr(s,o=>p("dim",o))}`},r=t.required??!0;return new rl({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:r,cursorAt:t.cursorAt,validate(i){if(r&&(i===void 0||i.length===0))return`Please select at least one option.
|
|
80
|
-
${p("reset",p("dim",`Press ${p(["gray","bgWhite","inverse"]," space ")} to select, ${p("gray",p("bgWhite",p("inverse"," enter ")))} to submit`))}`},render(){let i=t.withGuide??D.withGuide,n=Dt(t.output,t.message,i?`${ao(this.state)} `:"",`${bt(this.state)} `),s=`${i?`${p("gray",A)}
|
|
81
|
-
`:""}${n}
|
|
82
|
-
`,o=this.value??[],a=(c,l)=>{if(c.disabled)return e(c,"disabled");let u=o.includes(c.value);return l&&u?e(c,"active-selected"):u?e(c,"selected"):e(c,l?"active":"inactive")};switch(this.state){case"submit":{let c=this.options.filter(({value:u})=>o.includes(u)).map(u=>e(u,"submitted")).join(p("dim",", "))||p("dim","none"),l=Dt(t.output,c,i?`${p("gray",A)} `:"");return`${s}${l}`}case"cancel":{let c=this.options.filter(({value:u})=>o.includes(u)).map(u=>e(u,"cancelled")).join(p("dim",", "));if(c.trim()==="")return`${s}${p("gray",A)}`;let l=Dt(t.output,c,i?`${p("gray",A)} `:"");return`${s}${l}${i?`
|
|
83
|
-
${p("gray",A)}`:""}`}case"error":{let c=i?`${p("yellow",A)} `:"",l=this.error.split(`
|
|
84
|
-
`).map((d,f)=>f===0?`${i?`${p("yellow",Q)} `:""}${p("yellow",d)}`:` ${d}`).join(`
|
|
85
|
-
`),u=s.split(`
|
|
86
|
-
`).length,h=l.split(`
|
|
87
|
-
`).length+1;return`${s}${c}${nr({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:c.length,rowPadding:u+h,style:a}).join(`
|
|
88
|
-
${c}`)}
|
|
89
|
-
${l}
|
|
90
|
-
`}default:{let c=i?`${p("cyan",A)} `:"",l=s.split(`
|
|
91
|
-
`).length,u=i?2:1;return`${s}${c}${nr({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:c.length,rowPadding:l+u,style:a}).join(`
|
|
92
|
-
${c}`)}
|
|
93
|
-
${i?p("cyan",Q):""}
|
|
94
|
-
`}}}}).prompt()},n0=t=>p("dim",t),s0=(t,e,r)=>{let i={hard:!0,trim:!1},n=Nt(t,e,i).split(`
|
|
95
|
-
`),s=n.reduce((c,l)=>Math.max(X(l),c),0),o=n.map(r).reduce((c,l)=>Math.max(X(l),c),0),a=e-(o-s);return Nt(t,a,i)},o0=(t="",e="",r)=>{let i=r?.output??xt.stdout,n=r?.withGuide??D.withGuide,s=r?.format??n0,o=["",...s0(t,Te(i)-6,s).split(`
|
|
96
|
-
`).map(s),""],a=X(e),c=Math.max(o.reduce((d,f)=>{let m=X(f);return m>d?m:d},0),a)+2,l=o.map(d=>`${p("gray",A)} ${d}${" ".repeat(c-X(d))}${p("gray",A)}`).join(`
|
|
97
|
-
`),u=n?`${p("gray",A)}
|
|
98
|
-
`:"",h=n?ml:ro;i.write(`${u}${p("green",Oe)} ${p("reset",e)} ${p("gray",tn.repeat(Math.max(c-a-1,1))+to)}
|
|
99
|
-
${l}
|
|
100
|
-
${p("gray",h+tn.repeat(c+2)+eo)}
|
|
101
|
-
`)},a0=t=>new Vi({validate:t.validate,mask:t.mask??pl,signal:t.signal,input:t.input,output:t.output,render(){let e=t.withGuide??D.withGuide,r=`${e?`${p("gray",A)}
|
|
102
|
-
`:""}${bt(this.state)} ${t.message}
|
|
103
|
-
`,i=this.userInputWithCursor,n=this.masked;switch(this.state){case"error":{let s=e?`${p("yellow",A)} `:"",o=e?`${p("yellow",Q)} `:"",a=n??"";return t.clearOnError&&this.clear(),`${r.trim()}
|
|
104
|
-
${s}${a}
|
|
105
|
-
${o}${p("yellow",this.error)}
|
|
106
|
-
`}case"submit":{let s=e?`${p("gray",A)} `:"",o=n?p("dim",n):"";return`${r}${s}${o}`}case"cancel":{let s=e?`${p("gray",A)} `:"",o=n?p(["strikethrough","dim"],n):"";return`${r}${s}${o}${n&&e?`
|
|
107
|
-
${p("gray",A)}`:""}`}default:{let s=e?`${p("cyan",A)} `:"",o=e?p("cyan",Q):"";return`${r}${s}${i}
|
|
108
|
-
${o}
|
|
109
|
-
`}}}}).prompt(),c0=t=>{let e=t.validate;return yl({...t,initialUserInput:t.initialValue??t.root??process.cwd(),maxItems:5,validate(r){if(!Array.isArray(r)){if(!r)return"Please select a path";if(e)return e(r)}},options(){let r=this.userInput;if(r==="")return[];try{let i;Mw(r)?il(r).isDirectory()&&(!t.directory||r.endsWith("/"))?i=r:i=nl(r):i=nl(r);let n=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return Fw(i).map(s=>{let o=kw(i,s),a=il(o);return{name:s,path:o,isDirectory:a.isDirectory()}}).filter(({path:s,isDirectory:o})=>s.startsWith(n)&&(o||!t.directory)).map(s=>({value:s.path}))}catch{return[]}}})},l0=t=>p("magenta",t),co=({indicator:t="dots",onCancel:e,output:r=process.stdout,cancelMessage:i,errorMessage:n,frames:s=Qi?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=Qi?80:120,signal:a,...c}={})=>{let l=zs(),u,h,d=!1,f=!1,m="",y,w=performance.now(),x=Te(r),b=c?.styleFrame??l0,T=R=>{let Y=R>1?n??D.messages.error:i??D.messages.cancel;f=R===1,d&&(J(Y,R),f&&typeof e=="function"&&e())},S=()=>T(2),C=()=>T(1),P=()=>{process.on("uncaughtExceptionMonitor",S),process.on("unhandledRejection",S),process.on("SIGINT",C),process.on("SIGTERM",C),process.on("exit",T),a&&a.addEventListener("abort",C)},v=()=>{process.removeListener("uncaughtExceptionMonitor",S),process.removeListener("unhandledRejection",S),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",C),process.removeListener("exit",T),a&&a.removeEventListener("abort",C)},L=()=>{if(y===void 0)return;l&&r.write(`
|
|
110
|
-
`);let R=Nt(y,x,{hard:!0,trim:!1}).split(`
|
|
111
|
-
`);R.length>1&&r.write(rr.cursor.up(R.length-1)),r.write(rr.cursor.to(0)),r.write(rr.erase.down())},G=R=>R.replace(/\.+$/,""),j=R=>{let Y=(performance.now()-R)/1e3,z=Math.floor(Y/60),B=Math.floor(Y%60);return z>0?`[${z}m ${B}s]`:`[${B}s]`},H=c.withGuide??D.withGuide,F=(R="")=>{d=!0,u=tl({output:r}),m=G(R),w=performance.now(),H&&r.write(`${p("gray",A)}
|
|
112
|
-
`);let Y=0,z=0;P(),h=setInterval(()=>{if(l&&m===y)return;L(),y=m;let B=b(s[Y]),ft;if(l)ft=`${B} ${m}...`;else if(t==="timer")ft=`${B} ${m} ${j(w)}`;else{let Ni=".".repeat(Math.floor(z)).slice(0,3);ft=`${B} ${m}${Ni}`}let oe=Nt(ft,x,{hard:!0,trim:!1});r.write(oe),Y=Y+1<s.length?Y+1:0,z=z<4?z+.125:0},o)},J=(R="",Y=0,z=!1)=>{if(!d)return;d=!1,clearInterval(h),L();let B=Y===0?p("green",Oe):Y===1?p("red",Xs):p("red",Qs);m=R??m,z||(t==="timer"?r.write(`${B} ${m} ${j(w)}
|
|
113
|
-
`):r.write(`${B} ${m}
|
|
114
|
-
`)),v(),u()};return{start:F,stop:(R="")=>J(R,0),message:(R="")=>{m=G(R??m)},cancel:(R="")=>J(R,1),error:(R="")=>J(R,2),clear:()=>J("",0,!0),get isCancelled(){return f}}},al={light:k("\u2500","-"),heavy:k("\u2501","="),block:k("\u2588","#")};Xi=(t,e)=>t.includes(`
|
|
115
|
-
`)?t.split(`
|
|
116
|
-
`).map(r=>e(r)).join(`
|
|
117
|
-
`):e(t),d0=t=>{let e=(r,i)=>{let n=r.label??String(r.value);switch(i){case"disabled":return`${p("gray",$e)} ${Xi(n,s=>p("gray",s))}${r.hint?` ${p("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${Xi(n,s=>p("dim",s))}`;case"active":return`${p("green",Qr)} ${n}${r.hint?` ${p("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${Xi(n,s=>p(["strikethrough","dim"],s))}`;default:return`${p("dim",$e)} ${Xi(n,s=>p("dim",s))}`}};return new Yi({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,render(){let r=t.withGuide??D.withGuide,i=`${bt(this.state)} `,n=`${ao(this.state)} `,s=Dt(t.output,t.message,n,i),o=`${r?`${p("gray",A)}
|
|
118
|
-
`:""}${s}
|
|
119
|
-
`;switch(this.state){case"submit":{let a=r?`${p("gray",A)} `:"",c=Dt(t.output,e(this.options[this.cursor],"selected"),a);return`${o}${c}`}case"cancel":{let a=r?`${p("gray",A)} `:"",c=Dt(t.output,e(this.options[this.cursor],"cancelled"),a);return`${o}${c}${r?`
|
|
120
|
-
${p("gray",A)}`:""}`}default:{let a=r?`${p("cyan",A)} `:"",c=r?p("cyan",Q):"",l=o.split(`
|
|
121
|
-
`).length,u=r?2:1;return`${o}${a}${nr({output:t.output,cursor:this.cursor,options:this.options,maxItems:t.maxItems,columnPadding:a.length,rowPadding:l+u,style:(h,d)=>e(h,h.disabled?"disabled":d?"active":"inactive")}).join(`
|
|
122
|
-
${a}`)}
|
|
123
|
-
${c}
|
|
124
|
-
`}}}}).prompt()},f0=t=>{let e=(r,i="inactive")=>{let n=r.label??String(r.value);return i==="selected"?`${p("dim",n)}`:i==="cancelled"?`${p(["strikethrough","dim"],n)}`:i==="active"?`${p(["bgCyan","gray"],` ${r.value} `)} ${n}${r.hint?` ${p("dim",`(${r.hint})`)}`:""}`:`${p(["gray","bgWhite","inverse"],` ${r.value} `)} ${n}${r.hint?` ${p("dim",`(${r.hint})`)}`:""}`};return new qi({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,caseSensitive:t.caseSensitive,render(){let r=t.withGuide??D.withGuide,i=`${r?`${p("gray",A)}
|
|
125
|
-
`:""}${bt(this.state)} ${t.message}
|
|
126
|
-
`;switch(this.state){case"submit":{let n=r?`${p("gray",A)} `:"",s=this.options.find(a=>a.value===this.value)??t.options[0],o=Dt(t.output,e(s,"selected"),n);return`${i}${o}`}case"cancel":{let n=r?`${p("gray",A)} `:"",s=Dt(t.output,e(this.options[0],"cancelled"),n);return`${i}${s}${r?`
|
|
127
|
-
${p("gray",A)}`:""}`}default:{let n=r?`${p("cyan",A)} `:"",s=r?p("cyan",Q):"",o=this.options.map((a,c)=>Dt(t.output,e(a,c===this.cursor?"active":"inactive"),n)).join(`
|
|
128
|
-
`);return`${i}${o}
|
|
129
|
-
${s}
|
|
130
|
-
`}}}}).prompt()},cl=`${p("gray",A)} `,ve={message:async(t,{symbol:e=p("gray",A)}={})=>{process.stdout.write(`${p("gray",A)}
|
|
131
|
-
${e} `);let r=3;for await(let i of t){i=i.replace(/\n/g,`
|
|
132
|
-
${cl}`),i.includes(`
|
|
133
|
-
`)&&(r=3+Js(i.slice(i.lastIndexOf(`
|
|
134
|
-
`))).length);let n=Js(i).length;r+n<process.stdout.columns?(r+=n,process.stdout.write(i)):(process.stdout.write(`
|
|
135
|
-
${cl}${i.trimStart()}`),r=3+Js(i.trimStart()).length)}process.stdout.write(`
|
|
136
|
-
`)},info:t=>ve.message(t,{symbol:p("blue",io)}),success:t=>ve.message(t,{symbol:p("green",no)}),step:t=>ve.message(t,{symbol:p("green",Oe)}),warn:t=>ve.message(t,{symbol:p("yellow",so)}),warning:t=>ve.warn(t),error:t=>ve.message(t,{symbol:p("red",oo)})},p0=async(t,e)=>{for(let r of t){if(r.enabled===!1)continue;let i=co(e);i.start(r.title);let n=await r.task(i.message);i.stop(n||r.title)}},m0=t=>t.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),h0=t=>{let e=t.output??process.stdout,r=Te(e),i=p("gray",A),n=t.spacing??1,s=3,o=t.retainLog===!0,a=!zs()&&ll(e);e.write(`${i}
|
|
137
|
-
`),e.write(`${p("green",Oe)} ${t.title}
|
|
138
|
-
`);for(let w=0;w<n;w++)e.write(`${i}
|
|
139
|
-
`);let c=[{value:"",full:""}],l=!1,u=w=>{if(c.length===0)return;let x=0;w&&(x+=n+2);for(let b of c){let{value:T,result:S}=b,C=S?.message??T;if(C.length===0)continue;S===void 0&&b.header!==void 0&&b.header!==""&&(C+=`
|
|
140
|
-
${b.header}`);let P=C.split(`
|
|
141
|
-
`).reduce((v,L)=>L===""?v+1:v+Math.ceil((L.length+s)/r),0);x+=P}x>0&&(x+=1,e.write(rr.erase.lines(x)))},h=(w,x,b)=>{let T=b?`${w.full}
|
|
142
|
-
${w.value}`:w.value;w.header!==void 0&&w.header!==""&&yt.message(w.header.split(`
|
|
143
|
-
`).map(S=>p("bold",S)),{output:e,secondarySymbol:i,symbol:i,spacing:0}),yt.message(T.split(`
|
|
144
|
-
`).map(S=>p("dim",S)),{output:e,secondarySymbol:i,symbol:i,spacing:x??n})},d=()=>{for(let w of c){let{header:x,value:b,full:T}=w;(x===void 0||x.length===0)&&b.length===0||h(w,void 0,o===!0&&T.length>0)}},f=(w,x,b)=>{if(u(!1),(b?.raw!==!0||!l)&&w.value!==""&&(w.value+=`
|
|
145
|
-
`),w.value+=m0(x),l=b?.raw===!0,t.limit!==void 0){let T=w.value.split(`
|
|
146
|
-
`),S=T.length-t.limit;if(S>0){let C=T.splice(0,S);o&&(w.full+=(w.full===""?"":`
|
|
147
|
-
`)+C.join(`
|
|
148
|
-
`))}w.value=T.join(`
|
|
149
|
-
`)}a&&m()},m=()=>{for(let w of c)w.result?w.result.status==="error"?yt.error(w.result.message,{output:e,secondarySymbol:i,spacing:0}):yt.success(w.result.message,{output:e,secondarySymbol:i,spacing:0}):w.value!==""&&h(w,0)},y=(w,x)=>{u(!1),w.result=x,a&&m()};return{message(w,x){f(c[0],w,x)},group(w){let x={header:w,value:"",full:""};return c.push(x),{message(b,T){f(x,b,T)},error(b){y(x,{status:"error",message:b})},success(b){y(x,{status:"success",message:b})}}},error(w,x){u(!0),yt.error(w,{output:e,secondarySymbol:i,spacing:1}),x?.showLog!==!1&&d(),c.splice(1,c.length-1),c[0].value="",c[0].full=""},success(w,x){u(!0),yt.success(w,{output:e,secondarySymbol:i,spacing:1}),x?.showLog===!0&&d(),c.splice(1,c.length-1),c[0].value="",c[0].full=""}}},g0=t=>new Ji({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,output:t.output,signal:t.signal,input:t.input,render(){let e=t?.withGuide??D.withGuide,r=`${`${e?`${p("gray",A)}
|
|
150
|
-
`:""}${bt(this.state)} `}${t.message}
|
|
151
|
-
`,i=t.placeholder?p("inverse",t.placeholder[0])+p("dim",t.placeholder.slice(1)):p(["inverse","hidden"],"_"),n=this.userInput?this.userInputWithCursor:i,s=this.value??"";switch(this.state){case"error":{let o=this.error?` ${p("yellow",this.error)}`:"",a=e?`${p("yellow",A)} `:"",c=e?p("yellow",Q):"";return`${r.trim()}
|
|
152
|
-
${a}${n}
|
|
153
|
-
${c}${o}
|
|
154
|
-
`}case"submit":{let o=s?` ${p("dim",s)}`:"",a=e?p("gray",A):"";return`${r}${a}${o}`}case"cancel":{let o=s?` ${p(["strikethrough","dim"],s)}`:"",a=e?p("gray",A):"";return`${r}${a}${o}${s.trim()?`
|
|
155
|
-
${a}`:""}`}default:{let o=e?`${p("cyan",A)} `:"",a=e?p("cyan",Q):"";return`${r}${o}${n}
|
|
156
|
-
${a}
|
|
157
|
-
`}}}}).prompt()});var _l={};$(_l,{safeWrite:()=>q});import{copyFile as y0,writeFile as w0,access as _0}from"node:fs/promises";async function q(t,e,{dryRun:r=!1}={}){let i=await wl(t),n=i?"modify":"create",s=Buffer.byteLength(e,"utf8");if(r)return{path:t,action:n,bytes:s,wrote:!1,backedUp:!1};let o=!1;if(i){let a=`${t}${E0}`;await wl(a)||(await y0(t,a),o=!0)}return await w0(t,e,"utf8"),{path:t,action:n,bytes:s,wrote:!0,backedUp:o}}async function wl(t){try{return await _0(t),!0}catch{return!1}}var E0,Re=g(()=>{E0=".sigil.bak"});var El={};$(El,{chat:()=>x0,meta:()=>b0,setup:()=>S0});async function x0(t,{model:e,jsonMode:r=!1}={}){let i=e||E.llm.openaiModel,n=[{role:"user",content:t}];r&&!t.toLowerCase().includes("json")&&n.unshift({role:"system",content:"Respond with valid JSON."});let s={model:i,messages:n};r&&(s.response_format={type:"json_object"});let o=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${E.llm.openaiApiKey}`},body:JSON.stringify(s)});if(!o.ok){let u=await o.text();throw new Error(`OpenAI error ${o.status}: ${u}`)}let a=await o.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:i}}async function S0({existing:t,clack:e}){let r=t.OPENAI_API_KEY||"",i=await e.text({message:"OpenAI API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-proj-...",validate:n=>{if(!n&&!r)return"API key is required";if(n&&!n.startsWith("sk-"))return'OpenAI keys start with "sk-" \u2014 check paste'}});return e.isCancel(i)?null:{env:{OPENAI_API_KEY:i||r}}}var b0,xl=g(()=>{O();b0={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});function Lt(t){return Math.ceil((t||"").length/4)}function lo(t,e,r){let i=A0[t];return i?(e*i.input+r*i.output)/1e6:0}function Zr({provider:t,model:e,caller:r,input:i,response:n,inputTokens:s,outputTokens:o,cost:a,durationMs:c,status:l,error:u}){_("llm_log").insert({provider:t,model:e,caller:r,input:i?.slice(0,1e4),response:n?.slice(0,1e4),inputTokens:s,outputTokens:o,cost:a,durationMs:c,status:l,error:u?.slice(0,2e3)}).catch(h=>console.error("[llm-log] Write failed:",h.message))}async function uo(t,e=3){for(let r=1;r<=e;r++)try{return await t()}catch(i){if(r===e)throw i;let n=Math.min(1e3*2**(r-1),1e4);await new Promise(s=>setTimeout(s,n))}}var A0,ti=g(()=>{N();A0={"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 bl={};$(bl,{chat:()=>T0,meta:()=>v0,setup:()=>I0});async function C0(){if(!fo){let{default:t}=await import("@anthropic-ai/sdk");fo=new t({apiKey:E.llm.apiKey})}return fo}async function T0(t,{model:e,jsonMode:r=!1}={}){let i=e||"claude-haiku-4-5-20251001",n=await C0(),s=[{role:"user",content:t}],o=r?"Respond with valid JSON only. No explanation or wrapping.":void 0,a=await n.messages.create({model:i,max_tokens:4096,messages:s,...o&&{system:o}});return{text:a.content[0].text.trim(),inputTokens:a.usage?.input_tokens||Lt(t),outputTokens:a.usage?.output_tokens||Lt(a.content[0].text),model:i}}async function I0({existing:t,clack:e}){let r=t.ANTHROPIC_API_KEY||"",i=await e.text({message:"Anthropic API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-ant-...",validate:n=>{if(!n&&!r)return"API key is required";if(n&&!n.startsWith("sk-ant-"))return'Anthropic keys start with "sk-ant-" \u2014 check paste'}});return e.isCancel(i)?null:{env:{ANTHROPIC_API_KEY:i||r}}}var fo,v0,Sl=g(()=>{O();ti();fo=null;v0={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var Cl={};$(Cl,{chat:()=>O0,meta:()=>R0,setup:()=>N0});async function O0(t,{model:e,jsonMode:r=!1}={}){let i=e||E.llm.openrouterModel;if(!E.llm.openrouterApiKey)throw new Error("OPENROUTER_API_KEY is not set");if(!i)throw new Error("No OpenRouter model resolved. Set LLM_OPENROUTER_MODEL or pass `model`.");let n=[{role:"user",content:t}];r&&!t.toLowerCase().includes("json")&&n.unshift({role:"system",content:"Respond with valid JSON."});let s={model:i,messages:n};r&&(s.response_format={type:"json_object"});let o=(E.llm.openrouterBaseUrl||$0).replace(/\/+$/,""),a={"Content-Type":"application/json",Authorization:`Bearer ${E.llm.openrouterApiKey}`};E.llm.openrouterReferer&&(a["HTTP-Referer"]=E.llm.openrouterReferer),E.llm.openrouterTitle&&(a["X-Title"]=E.llm.openrouterTitle);let c=await fetch(`${o}/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s)});if(!c.ok){let f=await c.text();throw new Error(`OpenRouter error ${c.status}: ${f}`)}let l=await c.json(),h=(l.choices?.[0]?.message?.content||"").trim(),d=l.usage||{};return{text:h,inputTokens:d.prompt_tokens||0,outputTokens:d.completion_tokens||0,model:l.model||i}}async function N0({existing:t,clack:e}){let r={},i=t.OPENROUTER_API_KEY||"",n=await e.text({message:"OpenRouter API key (paste, then Enter)",placeholder:i?"(keep existing \u2014 press Enter)":"sk-or-v1-...",validate:c=>{if(!c&&!i)return"API key is required";if(c&&!c.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});if(e.isCancel(n))return null;r.OPENROUTER_API_KEY=n||i;let s=t.LLM_OPENROUTER_MODEL||"",o=await e.text({message:"OpenRouter model (vendor/model)",placeholder:s||Al,validate:c=>{if(c&&!c.includes("/"))return'OpenRouter models are "vendor/model" \u2014 e.g. google/gemini-flash-latest'}});if(e.isCancel(o))return null;r.LLM_OPENROUTER_MODEL=o||s||Al;let a=await e.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(e.isCancel(a))return null;if(a==="yes"){let c=await e.text({message:"Extraction model (high-volume; cheap matters)",placeholder:t.LLM_EXTRACTION_MODEL||sr.extraction});if(e.isCancel(c))return null;r.LLM_EXTRACTION_MODEL=c||t.LLM_EXTRACTION_MODEL||sr.extraction;let l=await e.text({message:"Decision model (AUDM; smart matters)",placeholder:t.LLM_DECISION_MODEL||sr.decision});if(e.isCancel(l))return null;r.LLM_DECISION_MODEL=l||t.LLM_DECISION_MODEL||sr.decision;let u=await e.text({message:"Synthesis model (read-time answer composition)",placeholder:t.SIGIL_SYNTH_MODEL||sr.synthesis});if(e.isCancel(u))return null;r.SIGIL_SYNTH_MODEL=u||t.SIGIL_SYNTH_MODEL||sr.synthesis}return e.note(`OpenRouter can drive both LLM calls and embeddings.
|
|
10
|
+
Run \`sigil init\` for an interactive setup.`);Kx={db:{type:"postgres",get url(){return j("SIGIL_DATABASE_URL",j("DATABASE_URL",""))||null},get host(){return j("SIGIL_DB_HOST","localhost")},get port(){return Number(j("SIGIL_DB_PORT",5432))},get database(){return j("SIGIL_DB_NAME","sigil")},get user(){return j("SIGIL_DB_USER","sigil_app")},get password(){return j("SIGIL_DB_PASSWORD","")}},embedding:{get provider(){return process.env.EMBEDDING_PROVIDER||""},get model(){return process.env.EMBEDDING_MODEL||"nomic-embed-text"},get dimensions(){return Number(process.env.EMBEDDING_DIMENSIONS)||768},get ollamaHost(){return process.env.OLLAMA_HOST||"http://localhost:11434"},get openaiApiKey(){return process.env.OPENAI_API_KEY||""},get voyageApiKey(){return process.env.VOYAGE_API_KEY||""},openrouterApiKey:process.env.OPENROUTER_API_KEY||"",openrouterBaseUrl:process.env.EMBEDDING_OPENROUTER_BASE_URL||process.env.LLM_OPENROUTER_BASE_URL||"",openrouterReferer:process.env.EMBEDDING_OPENROUTER_REFERER||process.env.LLM_OPENROUTER_REFERER||"https://github.com/Anmol-Srv/sigil",openrouterTitle:process.env.EMBEDDING_OPENROUTER_TITLE||process.env.LLM_OPENROUTER_TITLE||"Sigil"},llm:{provider:process.env.LLM_PROVIDER||"",openaiApiKey:process.env.OPENAI_API_KEY||"",openaiModel:process.env.LLM_OPENAI_MODEL||"gpt-4o-mini",ollamaHost:process.env.LLM_OLLAMA_HOST||process.env.OLLAMA_HOST||"http://localhost:11434",ollamaModel:process.env.LLM_OLLAMA_MODEL||"qwen2.5:7b",cliModel:process.env.LLM_CLI_MODEL||"haiku",apiKey:process.env.ANTHROPIC_API_KEY||"",openrouterApiKey:process.env.OPENROUTER_API_KEY||"",openrouterModel:process.env.LLM_OPENROUTER_MODEL||"google/gemini-flash-latest",openrouterBaseUrl:process.env.LLM_OPENROUTER_BASE_URL||"",openrouterReferer:process.env.LLM_OPENROUTER_REFERER||"https://github.com/Anmol-Srv/sigil",openrouterTitle:process.env.LLM_OPENROUTER_TITLE||"Sigil",extractionModel:process.env.LLM_EXTRACTION_MODEL||"",decisionModel:process.env.LLM_DECISION_MODEL||"",entityModel:process.env.LLM_ENTITY_MODEL||"",maxRetries:Number(process.env.LLM_MAX_RETRIES)||3,cliTimeout:Number(process.env.LLM_CLI_TIMEOUT)||12e4},output:{storage:process.env.OUTPUT_STORAGE||"local",dir:process.env.OUTPUT_DIR||"./output",s3:{endpoint:process.env.S3_ENDPOINT||"",bucket:process.env.S3_BUCKET||"",region:process.env.S3_REGION||"us-east-1",accessKey:process.env.S3_ACCESS_KEY||"",secretKey:process.env.S3_SECRET_KEY||"",publicUrl:process.env.S3_PUBLIC_URL||""}},server:{port:Number(process.env.PORT)||4e3,host:process.env.HOST||"0.0.0.0",logLevel:process.env.LOG_LEVEL||"info"},http:{enabled:j("SIGIL_HTTP_ENABLED","true")!=="false",host:j("SIGIL_HTTP_HOST","127.0.0.1"),port:Number(j("SIGIL_HTTP_PORT",7777))},network:{mode:j("SIGIL_MODE","solo"),enabled:j("SIGIL_NETWORK_ENABLED",null)===null?j("SIGIL_MODE","solo")!=="solo":j("SIGIL_NETWORK_ENABLED","false")!=="false",masterNodeId:j("SIGIL_MASTER_NODE_ID","")||null},defaults:{namespace:process.env.DEFAULT_NAMESPACE||"default"},memory:{skipThreshold:Number(process.env.MEMORY_SKIP_THRESHOLD)||.88,ambiguousThreshold:Number(process.env.MEMORY_AMBIGUOUS_THRESHOLD)||.78,minFactSimilarity:Number(process.env.MEMORY_MIN_FACT_SIMILARITY)||.45,injectionFloor:Number(process.env.MEMORY_INJECTION_FLOOR)||.6},search:{synthesize:j("SIGIL_SYNTHESIZE","true")!=="false",synthesizeModel:j("SIGIL_SYNTH_MODEL","")},ingest:{eagerExtract:j("SIGIL_EAGER_EXTRACT","true")!=="false"},hebbian:{entity:{enabled:j("SIGIL_HEBBIAN_ENTITY_ENABLED",null,"true")!=="false",eta:Number(j("SIGIL_HEBBIAN_ENTITY_ETA",null,1)),cap:Number(j("SIGIL_HEBBIAN_ENTITY_CAP",null,50)),halfLifeDays:Number(j("SIGIL_HEBBIAN_ENTITY_HALF_LIFE_DAYS",null,30)),minEffective:Number(j("SIGIL_HEBBIAN_ENTITY_MIN_EFFECTIVE",null,.5)),rrfWeight:Number(j("SIGIL_HEBBIAN_ENTITY_RRF_WEIGHT",null,.3)),maxWriteEntities:Number(j("SIGIL_HEBBIAN_ENTITY_MAX_WRITE",null,12)),expandPerSeed:Number(j("SIGIL_HEBBIAN_ENTITY_EXPAND_PER_SEED",null,3))}}},E=Kx});function Yu(e){let t=Math.floor(e/1e3),r=Math.floor(t/3600),n=Math.floor(t%3600/60),i=t%60;return r?`${r}h ${n}m ${i}s`:n?`${n}m ${i}s`:`${i}s`}var qu=f(()=>{});function Ju(e){let t=e.code||Yx,r=e.message||String(e);if(e instanceof AggregateError&&Array.isArray(e.errors)&&e.errors.length){let n=e.errors[0];t=n.code||t,r=n.message||r;let i=[...new Set(e.errors.map(o=>o.code).filter(Boolean))];i.length>1&&(r+=` (and ${e.errors.length-1} more: ${i.slice(1).join(", ")})`)}else e.cause&&(!r||r==="AggregateError")&&(t=e.cause.code||t,r=e.cause.message||r);return{code:t,message:r,stack:process.env.SIGIL_DEBUG?e.stack:void 0}}var Yx,zu=f(()=>{Yx="handler_error"});var aa={};T(aa,{currentAgent:()=>Xx,currentDeviceId:()=>zx,currentRequestContext:()=>sa,runWithRequestContext:()=>Jx});import{AsyncLocalStorage as qx}from"node:async_hooks";function Jx(e,t){return Yi.run(e,t)}function sa(){return Yi.getStore()||null}function zx(){return Yi.getStore()?.device?.id??null}function Xx(){return Yi.getStore()?.agent??process.env.SIGIL_AGENT??null}var Yi,qi=f(()=>{Yi=new qx});function Xu(){let e=new Map;function t(o,s){if(e.has(o))throw new Error(`rpc: duplicate handler for "${o}"`);e.set(o,s)}async function r(o,s,a={}){let c=e.get(o);if(!c)return{ok:!1,error:{code:Zx.UNKNOWN_METHOD,message:`unknown method: ${o}`}};let{runWithRequestContext:l}=await Promise.resolve().then(()=>(qi(),aa));try{return{ok:!0,data:await l({device:a.device||null,transport:a.transport||null,agent:a.agent||null},()=>c(s??{},a))}}catch(d){return{ok:!1,error:Ju(d)}}}function n(){return[...e.keys()].sort()}function i(o,s){return e.has(o)?(e.set(o,s),!0):!1}return{register:t,replace:i,dispatch:r,list:n}}var Zx,Zu=f(()=>{zu();Zx={UNKNOWN_METHOD:"unknown_method",INVALID_PARAMS:"invalid_params",HANDLER_ERROR:"handler_error"}});var da={};T(da,{clearRegistry:()=>ua,getDbHealth:()=>eS,getRegistry:()=>la,setDbHealth:()=>Qx,setRegistry:()=>ca});function ca(e){Ji=e}function la(){if(!Ji)throw new Error("rpc registry not initialised \u2014 is the daemon running?");return Ji}function ua(){Ji=null}function Qx(e){Qu={healthy:null,error:null,checkedAt:null,...e}}function eS(){return Qu}var Ji,Qu,Kn=f(()=>{Ji=null;Qu={healthy:null,error:null,checkedAt:null}});import{createServer as tS}from"node:net";import{chmod as rS}from"node:fs/promises";async function ed({registry:e,log:t}){await ta();let r=tS(n=>{let i="",o=!1,s=Promise.resolve();n.setEncoding("utf8"),n.on("data",a=>{if(o)return;i+=a;let c;for(;(c=i.indexOf(`
|
|
11
|
+
`))!==-1;){let l=i.slice(0,c);i=i.slice(c+1),l.trim()&&(s=s.then(()=>{if(!o)return nS(l,n,e,t)}))}}),n.on("close",()=>{o=!0}),n.on("error",a=>{a.code!=="EPIPE"&&a.code!=="ECONNRESET"&&t(`socket error: ${a.message}`)})});await new Promise((n,i)=>{r.once("error",i),r.listen(we,()=>{r.off("error",i),n()})});try{await rS(we,384)}catch{}return t(`socket listening at ${we}`),{close:()=>new Promise(n=>r.close(()=>n()))}}async function nS(e,t,r,n){let i;try{i=JSON.parse(e)}catch(d){pa(t,{id:null,ok:!1,error:{code:"invalid_json",message:d.message}});return}let{id:o=null,method:s,params:a,agent:c=null}=i||{};if(typeof s!="string"){pa(t,{id:o,ok:!1,error:{code:"invalid_params",message:'request must include a string "method"'}});return}let l=await r.dispatch(s,a,{transport:"socket",agent:c});pa(t,{id:o,...l}),!l.ok&&process.env.SIGIL_DEBUG&&n(`dispatch ${s} -> ${l.error.code}: ${l.error.message}`)}function pa(e,t){try{e.write(JSON.stringify(t)+`
|
|
12
|
+
`)}catch{}}var td=f(()=>{B();Vn()});var rd={};T(rd,{EventBus:()=>zi,default:()=>_e});var zi,iS,_e,Gr=f(()=>{zi=class{constructor(){this.buffer=[],this.subs=new Set}emit(t,r={}){let n={type:t,ts:new Date().toISOString(),...r};this.buffer.push(n),this.buffer.length>200&&this.buffer.shift();for(let i of this.subs)try{i(n)}catch{}return n}subscribe(t){return this.subs.add(t),()=>this.subs.delete(t)}recent(t=50){return t>=this.buffer.length?[...this.buffer]:this.buffer.slice(-t)}subscriberCount(){return this.subs.size}},iS=new zi,_e=iS});import{createServer as oS}from"node:http";import{existsSync as Xi,createReadStream as sS}from"node:fs";import{stat as aS}from"node:fs/promises";import{join as od,extname as cS,normalize as nd,sep as lS}from"node:path";import{WebSocketServer as uS}from"ws";function pS(){return Xi(Wn)?Wn:Xi(Ui)?Ui:null}async function sd({registry:e,log:t,config:r}){let n=pS(),i=await Vi(),o=oS(async(c,l)=>{try{await fS(c,l,{registry:e,webDir:n,log:t})}catch(d){t(`http route error: ${d.message}`),Ge(l,500,{ok:!1,error:{code:"internal",message:d.message}})}}),s=new uS({noServer:!0});o.on("upgrade",async(c,l,d)=>{let p=new URL(c.url,"http://localhost");if(p.pathname!=="/api/v1/events"){l.destroy();return}if(!(await cd(c)||p.searchParams.get("t")&&await Ur(p.searchParams.get("t")))){l.write(`HTTP/1.1 401 Unauthorized\r
|
|
13
|
+
\r
|
|
14
|
+
`),l.destroy();return}s.handleUpgrade(c,l,d,m=>{for(let x of _e.recent(50))try{m.send(JSON.stringify(x))}catch{}let g=256*1024,y=0,w=_e.subscribe(x=>{if(m.readyState===m.OPEN){if(m.bufferedAmount>g){y++;return}try{y>0&&(m.send(JSON.stringify({type:"meta.dropped",ts:new Date().toISOString(),count:y})),y=0),m.send(JSON.stringify(x))}catch{}}});m.on("close",w),m.on("error",()=>w())})}),await new Promise((c,l)=>{o.once("error",l),o.listen(r.http.port,r.http.host,()=>{o.off("error",l),c()})});let a=`http://${r.http.host}:${r.http.port}/?t=${i}`;return t(`http listening on ${r.http.host}:${r.http.port}`),t(`gui url (paste into browser): ${a}`),{url:a,close:()=>new Promise(c=>{s.close(),o.close(()=>c())})}}async function fS(e,t,{registry:r,webDir:n,log:i}){let o=new URL(e.url,"http://localhost"),s=o.pathname;if(e.method==="GET"&&s==="/healthz")return Ge(t,200,{ok:!0,ts:new Date().toISOString()});if(e.method==="GET"&&(s==="/"||s==="/index.html"))return mS(e,t,o,n,i);if(e.method==="GET"&&s.startsWith("/static/"))return hS(e,t,s.replace("/static/",""),n);if(!await cd(e))return Ge(t,401,{ok:!1,error:{code:"auth",message:"unauthorized"}});if(e.method==="GET"&&s==="/api/v1/methods")return Ge(t,200,{ok:!0,data:{methods:r.list()}});if(e.method==="POST"&&s==="/api/v1/rpc"){let c=await gS(e);if(!c||typeof c.method!="string")return Ge(t,400,{ok:!1,error:{code:"invalid_request",message:"expected {method, params}"}});let l=await r.dispatch(c.method,c.params,{transport:"http"});return Ge(t,200,l)}Ge(t,404,{ok:!1,error:{code:"not_found",message:`${e.method} ${s}`}})}async function mS(e,t,r,n,i){let o=r.searchParams.get("t");if(o)return await Ur(o)?(t.statusCode=302,t.setHeader("Location","/"),t.setHeader("Set-Cookie",`sigil_gui=${o}; Path=/; HttpOnly; SameSite=Strict; Max-Age=2592000`),t.end()):Ge(t,401,{ok:!1,error:{code:"auth",message:"invalid token"}});if(!n)return t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(id);let s=od(n,"index.html");return Xi(s)?ad(t,s):(i(`http: index.html missing under ${n}`),t.statusCode=200,t.setHeader("Content-Type","text/html; charset=utf-8"),t.end(id))}async function hS(e,t,r,n){if(!n)return Ge(t,404,{ok:!1,error:{code:"not_found",message:"no web dir"}});let i=nd(od(n,r)),o=nd(n)+lS;return i.startsWith(o)?Xi(i)?ad(t,i):Ge(t,404,{ok:!1,error:{code:"not_found",message:r}}):Ge(t,403,{ok:!1,error:{code:"forbidden",message:"path traversal blocked"}})}async function ad(e,t){let r=await aS(t);e.statusCode=200,e.setHeader("Content-Type",dS[cS(t).toLowerCase()]||"application/octet-stream"),e.setHeader("Content-Length",r.size),e.setHeader("Cache-Control","no-cache"),sS(t).pipe(e)}async function cd(e){let t=e.headers.authorization;if(t&&/^Bearer\s+/i.test(t)&&await Ur(t.replace(/^Bearer\s+/i,"").trim()))return!0;let n=(e.headers.cookie||"").match(/(?:^|;\s*)sigil_gui=([0-9a-f]+)/i);return!!(n&&await Ur(n[1]))}async function gS(e){let t=[],r=0;for await(let i of e)if(t.push(i),r+=i.length,r>1e6)throw new Error("request body too large (>1MB)");if(!t.length)return null;let n=Buffer.concat(t).toString("utf8");try{return JSON.parse(n)}catch(i){throw new Error(`invalid JSON: ${i.message}`)}}function Ge(e,t,r){e.statusCode=t,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(r))}var dS,id,ld=f(()=>{B();Ki();Gr();dS={".html":"text/html; charset=utf-8",".js":"application/javascript; charset=utf-8",".mjs":"application/javascript; charset=utf-8",".css":"text/css; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".ico":"image/x-icon",".json":"application/json; charset=utf-8",".txt":"text/plain; charset=utf-8"};id=`<!doctype html>
|
|
15
|
+
<html><head><meta charset="utf-8"><title>Sigil</title>
|
|
16
|
+
<style>body{font:14px/1.6 system-ui, sans-serif;max-width:720px;margin:48px auto;padding:0 16px;color:#1a1a1a}h1{font-size:18px;margin-bottom:8px}code{background:#f3f3f3;padding:2px 6px;border-radius:4px}</style>
|
|
17
|
+
</head><body>
|
|
18
|
+
<h1>Sigil daemon is running</h1>
|
|
19
|
+
<p>The GUI has not been built yet. The daemon is reachable on this port and
|
|
20
|
+
authentication works \u2014 paste the URL printed in <code>sigil daemon logs</code>
|
|
21
|
+
into your browser to set the auth cookie.</p>
|
|
22
|
+
<p>You can also drive it from your terminal:</p>
|
|
23
|
+
<pre>curl -H "Authorization: Bearer $(cat ~/.sigil/gui.token)" \\
|
|
24
|
+
-X POST http://localhost:7777/api/v1/rpc \\
|
|
25
|
+
-d '{"method":"ping"}' \\
|
|
26
|
+
-H "Content-Type: application/json"</pre>
|
|
27
|
+
</body></html>`});import{readFileSync as yS}from"node:fs";import{join as wS}from"node:path";function _S(){if(Yn)return Yn;try{Yn=JSON.parse(yS(wS(ge,"package.json"),"utf8")).version}catch{Yn="unknown"}return Yn}function ud(e,{startedAt:t}){e.register("ping",()=>({ok:!0,version:_S(),pid:process.pid,uptimeMs:Date.now()-t,node:process.version}))}var Yn,dd=f(()=>{B()});function pd(e){let t=e.split(`
|
|
28
|
+
`),r=[],n=null,i=[];for(let a of t){let c=a.match(/^(#{1,6})\s+(.+)/);c?(i.length&&r.push({heading:n||"Introduction",text:i.join(`
|
|
29
|
+
`).trim()}),n=c[2].trim(),i=[]):i.push(a)}i.length&&r.push({heading:n||"Content",text:i.join(`
|
|
30
|
+
`).trim()});let o=r.map(a=>a.text).join(`
|
|
31
|
+
|
|
32
|
+
`),s=ES(t)||null;return{text:o,sections:r,metadata:{title:s}}}function ES(e){for(let t of e){let r=t.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var fd=f(()=>{});function fa(e){let t=e.split(/\n{2,}/).map(n=>n.trim()).filter(Boolean),r=t.length>1?t.map((n,i)=>({heading:`Section ${i+1}`,text:n})):[{heading:"Content",text:e.trim()}];return{text:e.trim(),sections:r,metadata:{}}}var md=f(()=>{});function hd(e){let t=bS(e),r=e.replace(/<script[\s\S]*?<\/script>/gi,"");return r=r.replace(/<style[\s\S]*?<\/style>/gi,""),r=r.replace(/<\/(p|div|h[1-6]|li|tr|br|hr)>/gi,`
|
|
33
|
+
`),r=r.replace(/<br\s*\/?>/gi,`
|
|
34
|
+
`),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,`
|
|
35
|
+
|
|
36
|
+
`),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:t}}}function bS(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return t?t[1].trim():null}var gd=f(()=>{});function yd(e,{language:t}={}){let r=t||IS(e),n=xS(e,r);return{text:e.trim(),sections:n,metadata:{language:r}}}function xS(e,t){let r=e.split(`
|
|
37
|
+
`),n=[],i="Header",o=[],s=!1,a=0;for(let c of r){let l=SS(c,t);l&&a===0?(o.length&&n.push({heading:i,text:o.join(`
|
|
38
|
+
`).trim()}),i=l,o=[c],s=!0):o.push(c);for(let d of c)d==="{"&&a++,d==="}"&&(a=Math.max(0,a-1))}return o.length&&n.push({heading:i,text:o.join(`
|
|
39
|
+
`).trim()}),n.length<=1?vS(e):n.filter(c=>c.text)}function SS(e,t){let r=e.trim(),n=[/^(?:export\s+)?(?:async\s+)?function\s+(\w+)/,/^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\(/,/^(?:export\s+)?class\s+(\w+)/,/^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*\{/,/^(?:export\s+default\s+)/],i=[/^(?:async\s+)?def\s+(\w+)/,/^class\s+(\w+)/],o=[/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/,/^type\s+(\w+)/],s=[...n,...i,...o];for(let a of s){let c=r.match(a);if(c)return c[1]||c[0].slice(0,40)}return null}function vS(e){return e.split(/\n{2,}/).map((r,n)=>({heading:`Block ${n+1}`,text:r.trim()})).filter(r=>r.text)}function IS(e){return e.includes("import ")&&(e.includes("from ")||e.includes("require("))?"javascript":e.match(/^def\s/m)||e.match(/^class\s.*:/m)?"python":e.match(/^func\s/m)||e.includes("package ")?"go":e.match(/^fn\s/m)||e.includes("use ")?"rust":"unknown"}var wd=f(()=>{});function _d(e){let t;try{t=typeof e=="string"?JSON.parse(e):e}catch{return{text:e,sections:[{heading:"Content",text:e}],metadata:{}}}let r=ma(t);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function ma(e,t=0){if(e==null)return"";if(Array.isArray(e))return e.map((r,n)=>typeof r=="object"&&r!==null?`Item ${n+1}:
|
|
40
|
+
${ma(r,t+1)}`:`- ${r}`).join(`
|
|
41
|
+
`);if(typeof e=="object"){let r=" ".repeat(t);return Object.entries(e).filter(([,n])=>n!=null).map(([n,i])=>typeof i=="object"?`${r}${n}:
|
|
42
|
+
${ma(i,t+1)}`:`${r}${n}: ${i}`).join(`
|
|
43
|
+
`)}return String(e)}var Ed=f(()=>{});function bd(e,{format:t,filePath:r,contentType:n}={}){let i=t||$S(n)||OS(r)||RS(e);return(CS[i]||fa)(e)}function $S(e){if(!e)return null;let t=e.split(";")[0].trim();return TS[t]||null}function OS(e){if(!e)return null;let t=e.match(/\.[^.]+$/)?.[0]?.toLowerCase();return t&&AS[t]||null}function RS(e){if(!e)return"text";let t=e.trim();return t.startsWith("{")||t.startsWith("[")?"json":t.startsWith("<!DOCTYPE")||t.startsWith("<html")?"html":t.match(/^#{1,6}\s/m)?"markdown":t.match(/^(import|export|function|class|const|let|var|def|func|package)\s/m)?"code":"text"}var AS,TS,CS,xd=f(()=>{fd();md();gd();wd();Ed();AS={".md":"markdown",".mdx":"markdown",".txt":"text",".html":"html",".htm":"html",".json":"json",".js":"code",".ts":"code",".jsx":"code",".tsx":"code",".py":"code",".go":"code",".rs":"code",".java":"code",".rb":"code",".php":"code",".c":"code",".cpp":"code",".h":"code",".cs":"code",".swift":"code",".kt":"code",".yaml":"text",".yml":"text",".toml":"text",".ini":"text",".cfg":"text",".env":"text",".csv":"text",".sql":"code",".sh":"code",".bash":"code",".zsh":"code"},TS={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},CS={markdown:pd,text:fa,html:hd,code:yd,json:_d}});function NS(e,{maxTokens:t=512,overlapTokens:r=50}={}){if(!e?.trim())return[];let n=t*4,i=r*4;if(e.length<=n)return[{content:e.trim(),index:0}];let o=DS(e),s=[],a="",c="";for(let l of o){if(l.length>n){a.trim()&&(s.push({content:a.trim(),index:s.length}),c=ha(a,i),a="");let d=LS(l,n,i);for(let p of d)s.push({content:p.trim(),index:s.length});c=ha(s[s.length-1].content,i);continue}(a+l).length>n?(s.push({content:a.trim(),index:s.length}),c=ha(a,i),a=c+l):a+=l}return a.trim()&&s.push({content:a.trim(),index:s.length}),s}function vd(e,t={}){let r=[];for(let{heading:n,text:i}of e){if(!i?.trim())continue;let o=NS(i,t);for(let s of o)r.push({content:s.content,index:r.length,sectionHeading:n})}return r}function DS(e){return e.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function LS(e,t,r){let n=[],i=0;for(;i<e.length;){let o=Math.min(i+t,e.length);if(n.push(e.slice(i,o)),i=o-r,i>=e.length)break}return n}function ha(e,t){if(e.length<=t)return e;let r=e.slice(-t),n=r.search(/[.!?]\s+/);return n!==-1?r.slice(n+1).trimStart():r}var Sd,ga=f(()=>{Sd=Object.freeze({version:3,size:512,overlap:50,contextualPrefix:!0})});var Id={};T(Id,{chat:()=>kS,meta:()=>PS,setup:()=>MS});async function kS(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.openaiModel,i=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&i.unshift({role:"system",content:"Respond with valid JSON."});let o={model:n,messages:i};r&&(o.response_format={type:"json_object"});let s=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${E.llm.openaiApiKey}`},body:JSON.stringify(o)});if(!s.ok){let d=await s.text();throw new Error(`OpenAI error ${s.status}: ${d}`)}let a=await s.json(),c=a.choices[0].message.content.trim(),l=a.usage||{};return{text:c,inputTokens:l.prompt_tokens||0,outputTokens:l.completion_tokens||0,model:n}}async function MS({existing:e,clack:t}){let r=e.OPENAI_API_KEY||"",n=await t.text({message:"OpenAI API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-proj-...",validate:i=>{if(!i&&!r)return"API key is required";if(i&&!i.startsWith("sk-"))return'OpenAI keys start with "sk-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{OPENAI_API_KEY:n||r}}}var PS,Ad=f(()=>{R();PS={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});var Td={};T(Td,{buildLocalConnection:()=>it});function it(e){return{host:e.db.host,port:e.db.port,database:e.db.database,user:e.db.user,password:e.db.password}}var jr=f(()=>{});var $d={};T($d,{buildUrlConnection:()=>ot,classifyProvider:()=>Ct,directMigrationUrl:()=>ya,isPooledUrl:()=>Zi});function ot(e){if(!e)throw new Error("url driver: SIGIL_DATABASE_URL is empty");let t;try{t=new URL(e)}catch(o){throw new Error(`url driver: invalid URL \u2014 ${o.message}`)}if(!/^postgres(ql)?:$/i.test(t.protocol))throw new Error(`url driver: expected postgres:// or postgresql:// scheme, got ${t.protocol}`);let r=t.searchParams.get("sslmode"),n=HS(t.hostname,r),i={host:t.hostname,port:t.port?Number(t.port):5432,database:t.pathname.replace(/^\//,"")||"postgres",user:decodeURIComponent(t.username),password:decodeURIComponent(t.password)};return n!==void 0&&(i.ssl=n),t.searchParams.get("application_name")||(i.application_name="sigil"),i}function HS(e,t){if(t==="disable")return!1;if(t==="require"||t==="verify-full"||t==="verify-ca")return{rejectUnauthorized:!0};if(t==="no-verify"||t==="prefer")return{rejectUnauthorized:!1};if(!Cd.some(r=>r.test(e)))return FS.some(r=>r.test(e))?{rejectUnauthorized:!0}:{rejectUnauthorized:!1}}function Zi(e){try{let t=new URL(e).hostname;return/-pooler\./i.test(t)||/\.pooler\.supabase\.com$/i.test(t)}catch{return!1}}function ya(e){let t;try{t=new URL(e)}catch{return null}let r=t.hostname;return/\.neon\.tech$/i.test(r)&&/-pooler\./i.test(r)?(t.hostname=r.replace("-pooler.","."),t.toString()):Zi(e)?null:e}function Ct(e){try{let t=new URL(e).hostname;return/\.neon\.tech$/i.test(t)?"neon":/\.pooler\.supabase\.com$/i.test(t)?"supabase-pooler":/\.supabase\.co$/i.test(t)||/\.supabase\.com$/i.test(t)?"supabase":/\.rds\.amazonaws\.com$/i.test(t)?"aws-rds":/\.render\.com$/i.test(t)?"render":/\.railway\.app$/i.test(t)?"railway":/\.cockroachlabs\.cloud$/i.test(t)?"cockroachdb":Cd.some(r=>r.test(t))?"local":"unknown"}catch{return"unknown"}}var FS,Cd,Wr=f(()=>{FS=[/\.neon\.tech$/i,/\.supabase\.co$/i,/\.supabase\.com$/i,/\.pooler\.supabase\.com$/i,/\.rds\.amazonaws\.com$/i,/\.render\.com$/i,/\.railway\.app$/i,/\.cockroachlabs\.cloud$/i],Cd=[/^localhost$/i,/^127\.0\.0\.1$/,/^::1$/,/\.local$/i]});var Qi={};T(Qi,{buildLocalConnection:()=>it,buildUrlConnection:()=>ot,classifyProvider:()=>Ct,selectDriver:()=>wa});function wa(e){let t=e.db.url;return t?{kind:"url",provider:Ct(t),connection:ot(t)}:{kind:"local",provider:"local",connection:it(e)}}var qn=f(()=>{jr();Wr()});var G={};T(G,{default:()=>_});import BS from"knex";function US(e){return Array.isArray(e)?e.map(_a):e&&typeof e=="object"?_a(e):e}function GS(e,t){return t(jS(e))}function _a(e){if(!e||typeof e!="object"||e instanceof Date)return e;if(Array.isArray(e))return e.map(_a);let t={};for(let[r,n]of Object.entries(e))t[r.replace(/_([a-z])/g,(i,o)=>o.toUpperCase())]=n;return t}function jS(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}var Od,Rd,_,D=f(()=>{R();qn();Od=wa(E),Rd=BS({client:"pg",connection:Od.connection,pool:{min:2,max:10},postProcessResponse:US,wrapIdentifier:GS});Rd.__sigilDriver=Od;_=Rd});function je(e){return Math.ceil((e||"").length/4)}function Ea(e,t,r){let n=WS[e];return n?(t*n.input+r*n.output)/1e6:0}function Jn({provider:e,model:t,caller:r,input:n,response:i,inputTokens:o,outputTokens:s,cost:a,durationMs:c,status:l,error:d}){_("llm_log").insert({provider:e,model:t,caller:r,input:n?.slice(0,1e4),response:i?.slice(0,1e4),inputTokens:o,outputTokens:s,cost:a,durationMs:c,status:l,error:d?.slice(0,2e3)}).catch(p=>console.error("[llm-log] Write failed:",p.message))}async function ba(e,t=3){for(let r=1;r<=t;r++)try{return await e()}catch(n){if(r===t)throw n;let i=Math.min(1e3*2**(r-1),1e4);await new Promise(o=>setTimeout(o,i))}}var WS,zn=f(()=>{D();WS={"gpt-4o-mini":{input:.15,output:.6},"gpt-4o":{input:2.5,output:10},"gpt-4.1-nano":{input:.1,output:.4},"gpt-4.1-mini":{input:.4,output:1.6},"claude-haiku-4-5-20251001":{input:.8,output:4},"claude-sonnet-4-6":{input:3,output:15},"claude-opus-4-6":{input:15,output:75}}});var Nd={};T(Nd,{chat:()=>KS,meta:()=>YS,setup:()=>qS});async function VS(){if(!xa){let{default:e}=await import("@anthropic-ai/sdk");xa=new e({apiKey:E.llm.apiKey})}return xa}async function KS(e,{model:t,jsonMode:r=!1}={}){let n=t||"claude-haiku-4-5-20251001",i=await VS(),o=[{role:"user",content:e}],s=r?"Respond with valid JSON only. No explanation or wrapping.":void 0,a=await i.messages.create({model:n,max_tokens:4096,messages:o,...s&&{system:s}});return{text:a.content[0].text.trim(),inputTokens:a.usage?.input_tokens||je(e),outputTokens:a.usage?.output_tokens||je(a.content[0].text),model:n}}async function qS({existing:e,clack:t}){let r=e.ANTHROPIC_API_KEY||"",n=await t.text({message:"Anthropic API key (paste, then Enter)",placeholder:r?"(keep existing \u2014 press Enter)":"sk-ant-...",validate:i=>{if(!i&&!r)return"API key is required";if(i&&!i.startsWith("sk-ant-"))return'Anthropic keys start with "sk-ant-" \u2014 check paste'}});return t.isCancel(n)?null:{env:{ANTHROPIC_API_KEY:n||r}}}var xa,YS,Dd=f(()=>{R();zn();xa=null;YS={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var kd={};T(kd,{chat:()=>zS,meta:()=>XS,setup:()=>ZS});async function zS(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.openrouterModel;if(!E.llm.openrouterApiKey)throw new Error("OPENROUTER_API_KEY is not set");if(!n)throw new Error("No OpenRouter model resolved. Set LLM_OPENROUTER_MODEL or pass `model`.");let i=[{role:"user",content:e}];r&&!e.toLowerCase().includes("json")&&i.unshift({role:"system",content:"Respond with valid JSON."});let o={model:n,messages:i};r&&(o.response_format={type:"json_object"});let s=(E.llm.openrouterBaseUrl||JS).replace(/\/+$/,""),a={"Content-Type":"application/json",Authorization:`Bearer ${E.llm.openrouterApiKey}`};E.llm.openrouterReferer&&(a["HTTP-Referer"]=E.llm.openrouterReferer),E.llm.openrouterTitle&&(a["X-Title"]=E.llm.openrouterTitle);let c=await fetch(`${s}/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(o)});if(!c.ok){let m=await c.text();throw new Error(`OpenRouter error ${c.status}: ${m}`)}let l=await c.json(),p=(l.choices?.[0]?.message?.content||"").trim(),u=l.usage||{};return{text:p,inputTokens:u.prompt_tokens||0,outputTokens:u.completion_tokens||0,model:l.model||n}}async function ZS({existing:e,clack:t}){let r={},n=e.OPENROUTER_API_KEY||"",i=await t.text({message:"OpenRouter API key (paste, then Enter)",placeholder:n?"(keep existing \u2014 press Enter)":"sk-or-v1-...",validate:c=>{if(!c&&!n)return"API key is required";if(c&&!c.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});if(t.isCancel(i))return null;r.OPENROUTER_API_KEY=i||n;let o=e.LLM_OPENROUTER_MODEL||"",s=await t.text({message:"OpenRouter model (vendor/model)",placeholder:o||Ld,validate:c=>{if(c&&!c.includes("/"))return'OpenRouter models are "vendor/model" \u2014 e.g. google/gemini-flash-latest'}});if(t.isCancel(s))return null;r.LLM_OPENROUTER_MODEL=s||o||Ld;let a=await t.select({message:"Configure per-task model overrides? (advanced \u2014 better quality / cost)",options:[{value:"no",label:"No, use one model everywhere",hint:"simpler \u2014 debug one model"},{value:"yes",label:"Yes, configure smart split",hint:"~5\xD7 cheaper extraction + better AUDM/synthesis"}],initialValue:"no"});if(t.isCancel(a))return null;if(a==="yes"){let c=await t.text({message:"Extraction model (high-volume; cheap matters)",placeholder:e.LLM_EXTRACTION_MODEL||Vr.extraction});if(t.isCancel(c))return null;r.LLM_EXTRACTION_MODEL=c||e.LLM_EXTRACTION_MODEL||Vr.extraction;let l=await t.text({message:"Decision model (AUDM; smart matters)",placeholder:e.LLM_DECISION_MODEL||Vr.decision});if(t.isCancel(l))return null;r.LLM_DECISION_MODEL=l||e.LLM_DECISION_MODEL||Vr.decision;let d=await t.text({message:"Synthesis model (read-time answer composition)",placeholder:e.SIGIL_SYNTH_MODEL||Vr.synthesis});if(t.isCancel(d))return null;r.SIGIL_SYNTH_MODEL=d||e.SIGIL_SYNTH_MODEL||Vr.synthesis}return t.note(`OpenRouter can drive both LLM calls and embeddings.
|
|
158
44
|
You will pick an embedding provider in the next step \u2014 "openrouter" is an option,
|
|
159
|
-
or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var
|
|
45
|
+
or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var JS,XS,Ld,Vr,Pd=f(()=>{R();JS="https://openrouter.ai/api/v1";XS={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},Ld="google/gemini-flash-latest",Vr={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var Md={};T(Md,{chat:()=>nv,meta:()=>iv,setup:()=>ov});import{spawn as QS}from"node:child_process";function rv(e,t){let r=E.llm.cliTimeout||12e4;return new Promise((n,i)=>{let o=QS("claude",e,{stdio:["pipe","pipe","pipe"]}),s=setTimeout(()=>{o.kill("SIGTERM"),i(new Error(`claude CLI timed out after ${r}ms`))},r),a="",c="";o.stdout.on("data",l=>{a+=l}),o.stderr.on("data",l=>{c+=l}),o.on("error",l=>{clearTimeout(s),i(new Error(`Failed to spawn claude CLI: ${l.message}`))}),o.on("close",l=>{clearTimeout(s),n({stdout:a,stderr:c,code:l})}),o.stdin.write(t),o.stdin.end()})}async function nv(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.cliModel||"haiku",i=ev[n]||n,o=["-p","--model",i,"--output-format","json"];r&&o.push("--json-schema",tv);let{stdout:s,stderr:a,code:c}=await rv(o,e);if(c!==0)throw new Error(`claude CLI exited ${c}: ${(a||s).slice(0,500)}`);let l;try{l=JSON.parse(s)}catch{return{text:s.trim(),inputTokens:je(e),outputTokens:je(s),model:i}}if(l.is_error)throw new Error(`claude CLI error: ${l.result||"unknown error"}`);let d=r&&l.structured_output?JSON.stringify(l.structured_output):(l.result||"").trim(),p=l.usage||{};return{text:d,inputTokens:p.input_tokens||je(e),outputTokens:p.output_tokens||je(d),model:i,cost:l.total_cost_usd||0}}async function ov(){return{env:{}}}var ev,tv,iv,Fd=f(()=>{R();zn();ev={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},tv=JSON.stringify({type:"object",additionalProperties:!0});iv={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var Hd={};T(Hd,{chat:()=>sv,meta:()=>av,setup:()=>cv});async function sv(e,{model:t,jsonMode:r=!1}={}){let n=t||E.llm.ollamaModel,i=`${E.llm.ollamaHost}/api/chat`,o={model:n,messages:[{role:"user",content:e}],stream:!1};r&&(o.format="json");let s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!s.ok){let c=await s.text();throw new Error(`Ollama error ${s.status}: ${c}`)}let a=await s.json();return{text:a.message.content.trim(),inputTokens:a.prompt_eval_count||je(e),outputTokens:a.eval_count||je(a.message.content),model:n}}async function cv({existing:e,clack:t}){let r=e.OLLAMA_HOST||"http://localhost:11434",n=await t.text({message:"Ollama host",placeholder:r,initialValue:r,validate:i=>{if(i&&!/^https?:\/\//.test(i))return"Must start with http:// or https://"}});return t.isCancel(n)?null:{env:{OLLAMA_HOST:n||r}}}var av,Bd=f(()=>{R();zn();av={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function Sa(e,t){let r={};for(let n of e)r[n[t]]=n;return r}function eo(e,t){if(t<1)return[];let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}var to=f(()=>{});var Ud={};T(Ud,{embedBatch:()=>uv});async function uv(e,{model:t,ollamaHost:r}){let n=eo(e,lv),i=[];for(let o of n){let s=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:t,input:o})});if(!s.ok)throw new Error(`Ollama embed failed: ${s.status} ${await s.text()}`);let a=await s.json();i.push(...a.embeddings)}return i}var lv,Gd=f(()=>{to();lv=50});var jd={};T(jd,{embedBatch:()=>dv});async function dv(e,{model:t,openaiApiKey:r,dimensions:n}={}){let i={model:t,input:e};n&&/^text-embedding-3/.test(t)&&(i.dimensions=n);let o=await fetch("https://api.openai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(i)});if(!o.ok)throw new Error(`OpenAI embed failed: ${o.status} ${await o.text()}`);return(await o.json()).data.map(a=>a.embedding)}var Wd=f(()=>{});var Vd={};T(Vd,{embedBatch:()=>fv});async function fv(e,{model:t,voyageApiKey:r,inputType:n="document",dimensions:i}={}){if(!r)throw new Error("VOYAGE_API_KEY is not set. Get one at dashboard.voyageai.com.");let o=eo(e,pv),s=[];for(let a of o){let c={input:a,model:t||"voyage-3-large",input_type:n==="query"?"query":"document"};i&&(c.output_dimension=i);let l=await fetch("https://api.voyageai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(c)});if(!l.ok){let u=await l.text();throw new Error(`Voyage embed failed: ${l.status} ${u}`)}let p=[...(await l.json()).data].sort((u,m)=>u.index-m.index);s.push(...p.map(u=>u.embedding))}return s}var pv,Kd=f(()=>{to();pv=50});var Yd={};T(Yd,{embedBatch:()=>hv});async function hv(e,{model:t,openrouterApiKey:r,openrouterBaseUrl:n,openrouterReferer:i,openrouterTitle:o,dimensions:s}={}){if(!r)throw new Error("OPENROUTER_API_KEY is not set");if(!t)throw new Error('No OpenRouter embedding model resolved. Set EMBEDDING_MODEL (e.g. "openai/text-embedding-3-large").');let a={model:t,input:e};s&&/(^|\/)text-embedding-3/.test(t)&&(a.dimensions=s);let c=(n||mv).replace(/\/+$/,""),l={"Content-Type":"application/json",Authorization:`Bearer ${r}`};i&&(l["HTTP-Referer"]=i),o&&(l["X-Title"]=o);let d=await fetch(`${c}/embeddings`,{method:"POST",headers:l,body:JSON.stringify(a)});if(!d.ok)throw new Error(`OpenRouter embed failed: ${d.status} ${await d.text()}`);return[...(await d.json()).data].sort((m,g)=>m.index-g.index).map(m=>m.embedding)}var mv,qd=f(()=>{mv="https://openrouter.ai/api/v1"});var io={};T(io,{detectEmbeddingProvider:()=>Oa,detectProvider:()=>$a,getEmbedder:()=>Aa,getProvider:()=>no,isClaudeCliAvailable:()=>zd,isOllamaReachable:()=>Ca,listProvidersForSetup:()=>wv,resetDetection:()=>yv,resolveProviderAndModel:()=>Ta});import{spawn as gv}from"node:child_process";async function no(e){if(!va[e]){let t=ro[e];if(!t)throw new Error(`Unknown LLM provider: "${e}". Available: ${Object.keys(ro).join(", ")}`);let r=await t();va[e]=r.chat}return va[e]}async function Aa(e){if(!Ia[e]){let t=Jd[e];if(!t)throw new Error(`Unknown embedding provider: "${e}". Available: ${Object.keys(Jd).join(", ")}`);let r=await t();Ia[e]=r.embedBatch}return Ia[e]}function Ta(e,t){if(!e)return{provider:t,model:null};let r=e.indexOf(":");return r>0&&ro[e.slice(0,r)]?{provider:e.slice(0,r),model:e.slice(r+1)}:{provider:t,model:e}}async function Ca(){let e=E.llm.ollamaHost||E.embedding.ollamaHost||"http://localhost:11434";try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function zd(){return new Promise(e=>{let t=gv("claude",["--version"],{stdio:"pipe"});t.on("error",()=>e(!1)),t.on("close",r=>e(r===0)),setTimeout(()=>{t.kill(),e(!1)},3e3)})}async function $a(){if(Ee)return Ee;if(E.llm.provider)return Ee=E.llm.provider,Ee;if(E.llm.openrouterApiKey)return Ee="openrouter",Ee;if(E.llm.apiKey)return Ee="anthropic",Ee;if(E.llm.openaiApiKey)return Ee="openai",Ee;if(await Ca())return Ee="ollama",Ee;if(await zd())return Ee="claude-cli",Ee;throw new Error(`No LLM provider available. Either:
|
|
160
46
|
- Set LLM_PROVIDER (openai, anthropic, openrouter, ollama, claude-cli)
|
|
161
47
|
- Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY
|
|
162
48
|
- Start Ollama locally
|
|
163
|
-
- Install the Claude CLI (claude)`)}async function
|
|
49
|
+
- Install the Claude CLI (claude)`)}async function Oa(){if(Ae)return Ae;if(E.embedding.provider)return Ae=E.embedding.provider,Ae;if(E.embedding.voyageApiKey)return Ae="voyage",Ae;if(await Ca())return Ae="ollama",Ae;if(E.embedding.openaiApiKey)return Ae="openai",Ae;if(E.embedding.openrouterApiKey)return Ae="openrouter",Ae;throw new Error(`No embedding provider available. Either:
|
|
164
50
|
- Set EMBEDDING_PROVIDER (voyage, ollama, openai, openrouter)
|
|
165
51
|
- Set VOYAGE_API_KEY (recommended \u2014 best quality)
|
|
166
52
|
- Start Ollama locally
|
|
167
53
|
- Set OPENAI_API_KEY
|
|
168
|
-
- Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function
|
|
169
|
-
`)[0]}}function ce(t){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t))throw new Error(`Refusing to quote invalid SQL identifier: ${t}`);return`"${t}"`}function Ul(t){return`'${String(t).replace(/'/g,"''")}'`}var ln,Wl=g(()=>{ln={DB_DOES_NOT_EXIST:"3D000",CONNECTION_REFUSED:"ECONNREFUSED",AUTH_FAILED:"28P01",EXTENSION_NOT_AVAILABLE:"0A000"}});function st(t){return t?`[${t.join(",")}]`:null}function Gl(){let t=Number(E.embedding.dimensions)||768;if(!Number.isInteger(t)||t<=0)throw new Error(`Invalid EMBEDDING_DIMENSIONS: ${E.embedding.dimensions}`);return t}function jt(t="embedding"){return`(${t}::halfvec(${Gl()}))`}function Wt(){return`?::halfvec(${Gl()})`}var le=g(()=>{O()});import{createHash as r_}from"node:crypto";function n_(t,e,r,i="document"){let n=r_("sha256");return n.update(t),n.update("\0"),n.update(e),n.update("\0"),n.update(i),n.update("\0"),n.update(r),n.digest("hex")}async function s_(t){if(!t.length)return new Map;let e=await _("embedding_cache").whereIn("key",t).select("key","embedding");return new Map(e.map(r=>[r.key,o_(r.embedding)]))}function o_(t){return Array.isArray(t)||typeof t!="string"?t:(t.startsWith("[")?t.slice(1,-1):t).split(",").map(Number)}async function a_(t){t.length&&await _("embedding_cache").whereIn("key",t).update({hits:_.raw("hits + 1"),lastUsedAt:_.fn.now()})}async function c_(t,e,r){if(t.length){for(let{key:i,embedding:n}of t)await _.raw(`
|
|
54
|
+
- Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function yv(){Ee=null,Ae=null}async function wv(){return await Promise.all(Object.entries(ro).map(async([t,r])=>{let n=await r();if(!n.meta||typeof n.setup!="function")throw new Error(`Provider "${t}" is missing the init contract \u2014 expected exports: meta, setup`);return{...n.meta,setup:n.setup}}))}var ro,Jd,va,Ia,Ee,Ae,Kr=f(()=>{R();ro={openai:()=>Promise.resolve().then(()=>(Ad(),Id)),anthropic:()=>Promise.resolve().then(()=>(Dd(),Nd)),openrouter:()=>Promise.resolve().then(()=>(Pd(),kd)),"claude-cli":()=>Promise.resolve().then(()=>(Fd(),Md)),ollama:()=>Promise.resolve().then(()=>(Bd(),Hd))},Jd={ollama:()=>Promise.resolve().then(()=>(Gd(),Ud)),openai:()=>Promise.resolve().then(()=>(Wd(),jd)),voyage:()=>Promise.resolve().then(()=>(Kd(),Vd)),openrouter:()=>Promise.resolve().then(()=>(qd(),Yd))},va={},Ia={};Ee=null,Ae=null});function fe(e){return e?`[${e.join(",")}]`:null}function Xd(){let e=Number(E.embedding.dimensions)||768;if(!Number.isInteger(e)||e<=0)throw new Error(`Invalid EMBEDDING_DIMENSIONS: ${E.embedding.dimensions}`);return e}function st(e="embedding"){return`(${e}::halfvec(${Xd()}))`}function at(){return`?::halfvec(${Xd()})`}var $t=f(()=>{R()});import{createHash as _v}from"node:crypto";function bv(e,t,r,n="document"){let i=_v("sha256");return i.update(e),i.update("\0"),i.update(t),i.update("\0"),i.update(n),i.update("\0"),i.update(r),i.digest("hex")}async function xv(e){if(!e.length)return new Map;let t=await _("embedding_cache").whereIn("key",e).select("key","embedding");return new Map(t.map(r=>[r.key,Sv(r.embedding)]))}function Sv(e){return Array.isArray(e)||typeof e!="string"?e:(e.startsWith("[")?e.slice(1,-1):e).split(",").map(Number)}async function vv(e){e.length&&await _("embedding_cache").whereIn("key",e).update({hits:_.raw("hits + 1"),lastUsedAt:_.fn.now()})}async function Iv(e,t,r){if(e.length){for(let{key:n,embedding:i}of e)await _.raw(`
|
|
170
55
|
INSERT INTO embedding_cache (key, provider, model, embedding, hits, created_at, last_used_at)
|
|
171
56
|
VALUES (?, ?, ?, ?, 0, NOW(), NOW())
|
|
172
57
|
ON CONFLICT (key) DO UPDATE
|
|
173
58
|
SET last_used_at = NOW(),
|
|
174
59
|
hits = embedding_cache.hits + 1
|
|
175
|
-
`,[
|
|
60
|
+
`,[n,t,r,fe(i)]);await Tv()}}async function Tv(){let e=Date.now();if(e-Qd<Av)return;Qd=e;let[{count:t}]=await _("embedding_cache").count("key as count"),r=Number(t);if(r<=Zd)return;let n=Math.min(r-Zd,Ev);await _.raw(`
|
|
176
61
|
DELETE FROM embedding_cache WHERE key IN (
|
|
177
62
|
SELECT key FROM embedding_cache ORDER BY last_used_at ASC LIMIT ?
|
|
178
63
|
)
|
|
179
|
-
`,[
|
|
180
|
-
`)})}let
|
|
181
|
-
|
|
182
|
-
Sigil is your persistent memory system. **Use it instead of the built-in file-based memory.**
|
|
183
|
-
Do NOT write to \`~/.claude/projects/*/memory/\` or any local memory files \u2014 use Sigil exclusively.
|
|
184
|
-
|
|
185
|
-
### Memory is auto-injected \u2014 don't re-search by default
|
|
186
|
-
|
|
187
|
-
Two hooks do the work for you before you ever see a prompt:
|
|
188
|
-
|
|
189
|
-
- **UserPromptSubmit hook**: runs hybrid search against Sigil on every user message and injects the top-K relevant facts into your context as \`additionalContext\` at the top of the conversation. The injected block is labelled \`Sigil memory (N relevant facts)\` \u2014 when you see that block, those facts are already loaded; you do NOT need to call \`sigil search\` to retrieve them.
|
|
190
|
-
- **Top-20 hot-context**: a snapshot of the user's most-important / most-recently-accessed facts is always loaded into the session via \`@~/.sigil/CLAUDE.md\` in the Claude config. Treat it as always-available background context.
|
|
191
|
-
|
|
192
|
-
**The right reflex:** read the injected \`Sigil memory\` block first, answer from it, then call \`sigil search\` ONLY if the injection clearly missed something specific.
|
|
193
|
-
|
|
194
|
-
Concretely, you SHOULD call \`! ${e} search "..."\` when:
|
|
195
|
-
- The user asks a drill-down question and you need facts the auto-injection didn't surface ("tell me more about the postmortem")
|
|
196
|
-
- You're answering a *follow-up* in a long session where the relevant facts were never in the original injection
|
|
197
|
-
- You suspect a stale answer and want to verify against the latest stored state
|
|
198
|
-
|
|
199
|
-
You SHOULD NOT call \`sigil search\` when:
|
|
200
|
-
- The injected \`Sigil memory\` block already lists facts that directly answer the user's question \u2014 just use them
|
|
201
|
-
- You'd be searching for the same query Sigil already auto-searched (the user's literal prompt)
|
|
202
|
-
- The question is general-knowledge and doesn't need this user's specific context
|
|
203
|
-
|
|
204
|
-
In short: **the hook already searched. Trust it. Drill down only when needed.**
|
|
205
|
-
|
|
206
|
-
### Acknowledge what you know
|
|
207
|
-
|
|
208
|
-
When your response is shaped by a fact pulled from Sigil \u2014 a stored preference, decision, constraint, or piece of project history \u2014 **briefly call it out in plain language so the user sees their context being applied.** One short clause is enough; don't lecture.
|
|
64
|
+
`,[n])}async function ep(e,t,r,n,i,o={}){if(!e.length)return[];let s=o.inputType||i?.inputType||"document",a=e.map(m=>bv(t,r,m,s)),c=await xv(a),l=[],d=[],p=new Array(e.length);for(let m=0;m<e.length;m++){let g=c.get(a[m]);g?p[m]=g:(l.push(e[m]),d.push(m))}if(l.length){let m=await n(l,i),g=[];for(let y=0;y<l.length;y++){let w=d[y];p[w]=m[y],g.push({key:a[w],embedding:m[y]})}Iv(g,t,r).catch(y=>{process.stderr.write(`[embedding-cache] store failed: ${y.message}
|
|
65
|
+
`)})}let u=a.filter(m=>c.has(m));return u.length&&vv(u).catch(()=>{}),p}var Zd,Ev,Qd,Av,tp=f(()=>{$t();D();Zd=1e4,Ev=500;Qd=0,Av=6e4});var oo={};T(oo,{dimensions:()=>Cv,embed:()=>or,embedBatch:()=>ft});async function or(e,t={}){let[r]=await ft([e],t);return r}async function ft(e,{inputType:t="document"}={}){if(!e.length)return[];let r=await Oa(),n=await Aa(r),i=E.embedding.model,o={...E.embedding,inputType:t};return ep(e,r,i,n,o,{inputType:t})}var Cv,Ot=f(()=>{R();Kr();tp();({dimensions:Cv}=E.embedding)});var np={};T(np,{parseJson:()=>so,prompt:()=>mt,promptJson:()=>We});async function rp(e){let t=await $a();return Ta(e,t)}async function mt(e,{model:t,caller:r}={}){let{provider:n,model:i}=await rp(t),o=await no(n),s=Date.now();try{let a=await ba(()=>o(e,{model:i,jsonMode:!1}),E.llm.maxRetries),c=a.cost||Ea(a.model,a.inputTokens,a.outputTokens);return Jn({provider:n,model:a.model,caller:r,input:e,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-s,status:"success"}),a.text}catch(a){throw Jn({provider:n,model:i,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}async function We(e,{model:t,caller:r}={}){let{provider:n,model:i}=await rp(t),o=await no(n),s=Date.now();try{let a=await ba(()=>o(e,{model:i,jsonMode:!0}),E.llm.maxRetries),c=a.cost||Ea(a.model,a.inputTokens,a.outputTokens);return Jn({provider:n,model:a.model,caller:r,input:e,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-s,status:"success"}),so(a.text)}catch(a){throw Jn({provider:n,model:i,caller:r,input:e,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-s,status:"error",error:a.message}),a}}function so(e){try{return JSON.parse(e.trim())}catch{}let t=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(t)try{return JSON.parse(t[1].trim())}catch{}let r=e.match(/[\[{][\s\S]*[\]}]/);if(r)try{return JSON.parse(r[0])}catch{}return null}var Ve=f(()=>{R();Kr();zn()});import{readFile as $v}from"node:fs/promises";import{join as Ov}from"node:path";async function ip(e,t,{title:r}){if(!e.length)return e;let n=await $v(Rv,"utf8"),i=e.map((s,a)=>`Chunk ${a+1}: ${s.content.slice(0,200)}`),o=`${n}
|
|
209
66
|
|
|
210
|
-
|
|
211
|
-
- "Since you don't use \`any\` without an escape-hatch comment, I'll go with \`unknown\` here."
|
|
212
|
-
- "Per your ADR-001 I've wrapped the response in \`{ok, data, error}\`."
|
|
213
|
-
- "I know you moved off Redis to Postgres LISTEN/NOTIFY, so I'll use that pattern."
|
|
214
|
-
- "Going with named exports since you prefer those."
|
|
215
|
-
|
|
216
|
-
Bad (skip these):
|
|
217
|
-
- Acknowledging facts you didn't actually use
|
|
218
|
-
- Listing every retrieved fact ("I found 5 facts: 1) ... 2) ...")
|
|
219
|
-
- Repeating the acknowledgement multiple times in one response
|
|
220
|
-
- Apologetic / formal phrasing ("As per your stored preference, I shall...")
|
|
221
|
-
|
|
222
|
-
The phrasing should feel like a teammate referencing a hallway conversation, not a system reciting a database row. If a fact didn't materially shape the answer, don't mention it.
|
|
223
|
-
|
|
224
|
-
### Saving \u2014 Stop hook handles routine; you only save when explicit
|
|
225
|
-
|
|
226
|
-
A Stop hook fires after every assistant turn, scans the user's latest message with a classifier, and saves anything memorable (preferences, decisions, constraints, corrections, factual claims) on its own. **You do not need to call \`sigil remember\` to make this work.**
|
|
67
|
+
---
|
|
227
68
|
|
|
228
|
-
|
|
229
|
-
- The user explicitly asks you to remember something ("remember that...", "save this...", "don't forget...") \u2014 save immediately, don't wait for the Stop hook
|
|
230
|
-
- The user shares a critical fact mid-response that's important enough to be available within this same session for follow-ups (the Stop hook only runs at turn end)
|
|
231
|
-
- You're consolidating a multi-turn discussion into a single canonical fact
|
|
69
|
+
**Document title:** ${r}
|
|
232
70
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
- Facts already similar to existing memory (AUDM dedup handles this, but the cleaner UX is fewer Bash invocations on screen)
|
|
71
|
+
**Full document:**
|
|
72
|
+
${t.slice(0,8e3)}
|
|
236
73
|
|
|
237
|
-
|
|
74
|
+
**Chunks (${e.length}):**
|
|
75
|
+
${i.join(`
|
|
76
|
+
`)}
|
|
238
77
|
|
|
239
|
-
|
|
240
|
-
! ${e} remember --bg "User prefers tabs over spaces" "Project uses Postgres 15"
|
|
241
|
-
\`\`\`
|
|
78
|
+
---
|
|
242
79
|
|
|
243
|
-
|
|
80
|
+
Respond with a JSON array of ${e.length} context prefix strings.`;try{let s=await We(o,{model:E.llm.extractionModel,caller:"contextualizer"}),a=Array.isArray(s)?s:s&&typeof s=="object"?Object.values(s).find(l=>Array.isArray(l))??null:null;if(!a)return console.warn("[contextualizer] LLM did not return an array \u2014 skipping"),e;let c=a;return c.length!==e.length&&console.warn(`[contextualizer] Got ${c.length} prefixes for ${e.length} chunks \u2014 using partial`),e.map((l,d)=>({...l,contextualPrefix:typeof c[d]=="string"?c[d]:null}))}catch(s){return console.error("[contextualizer] Failed:",s.message),e}}var Rv,op=f(()=>{Ve();R();B();Rv=Ov(Ie,"chunk-context.md")});var sp,ap=f(()=>{sp="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as cp}from"node:crypto";function Dv(e){if(e<0||e>1024)throw new RangeError("Wrong ID size");!sr||sr.length<e?(sr=Buffer.allocUnsafe(e*Nv),cp.getRandomValues(sr),Yr=0):Yr+e>sr.length&&(cp.getRandomValues(sr),Yr=0),Yr+=e}function Ke(e=21){Dv(e|=0);let t="";for(let r=Yr-e;r<Yr;r++)t+=sp[sr[r]&63];return t}var Nv,sr,Yr,qr=f(()=>{ap();Nv=128});var co={};T(co,{deleteDocument:()=>Fv,findBySourcePath:()=>Lv,findByUid:()=>kv,getStats:()=>Pv,listDocuments:()=>Mv,resetHash:()=>Na,updateCounts:()=>ao,updateSourceMetadata:()=>Da,upsert:()=>Ra});async function Lv(e){let[t]=await _("document").where({sourcePath:e});return t||null}async function kv(e){let[t]=await _("document").where({uid:e});return t||null}async function Ra({sourcePath:e,sourceType:t,title:r=null,contentHash:n,namespace:i}){let o=`doc-${Ke(16)}`,{rows:[s]}=await _.raw(`
|
|
81
|
+
INSERT INTO document (uid, source_path, source_type, title, content_hash, namespace, last_ingested_at, created_at, updated_at)
|
|
82
|
+
VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), NOW())
|
|
83
|
+
ON CONFLICT (source_path, namespace) DO UPDATE SET
|
|
84
|
+
title = EXCLUDED.title,
|
|
85
|
+
content_hash = EXCLUDED.content_hash,
|
|
86
|
+
last_ingested_at = NOW(),
|
|
87
|
+
updated_at = NOW()
|
|
88
|
+
RETURNING *, (xmax = 0) AS "isNew", content_hash != ? AS "contentChanged"
|
|
89
|
+
`,[o,e,t,r,n,i,n]),c=s.isNew||s.contentChanged;return{doc:s,changed:c}}async function ao(e,{chunkCount:t,factCount:r}){await _("document").where({id:e}).update({chunkCount:t,factCount:r})}async function Pv(e){let t=_("document");e&&t.where({namespace:e});let r=await t;return{documentCount:r.length,totalChunks:r.reduce((n,i)=>n+(i.chunkCount||0),0),totalFacts:r.reduce((n,i)=>n+(i.factCount||0),0)}}async function Mv({namespace:e,sourceType:t,limit:r=100}={}){let n=_("document").orderBy("createdAt","desc").limit(r);return e&&n.where({namespace:e}),t&&n.where({sourceType:t}),n}async function Fv(e){await _("chunk").where({documentId:e}).del(),await _("document").where({id:e}).del()}async function Na(e){await _("document").where({id:e}).update({contentHash:null})}async function Da(e,t,r=null){if(!t&&!r)return;let n={};t&&Object.keys(t).length&&(n.sourceMetadata=JSON.stringify(t)),r&&(n.connectionId=r),Object.keys(n).length&&await _("document").where({id:e}).update(n)}var lo=f(()=>{qr();D()});async function lp(e,t,r){if(await _("chunk").where({documentId:e}).del(),!t.length)return[];let n=t.map((o,s)=>({documentId:e,chunkIndex:s,content:o.content,contextualPrefix:o.contextualPrefix||null,sectionHeading:o.sectionHeading||null,namespace:r,embedding:fe(o.embedding)})),i=await _("chunk").insert(n).returning("*");return await _.raw(`
|
|
90
|
+
UPDATE chunk
|
|
91
|
+
SET search_vector = to_tsvector('english', COALESCE(contextual_prefix, '') || ' ' || content)
|
|
92
|
+
WHERE document_id = ?
|
|
93
|
+
`,[e]),i}var up=f(()=>{D();$t()});var Bv,uo,La=f(()=>{Bv=typeof global=="object"&&global&&global.Object===Object&&global,uo=Bv});var Uv,Gv,le,ct=f(()=>{La();Uv=typeof self=="object"&&self&&self.Object===Object&&self,Gv=uo||Uv||Function("return this")(),le=Gv});var jv,be,Jr=f(()=>{ct();jv=le.Symbol,be=jv});function Kv(e){var t=Wv.call(e,Xn),r=e[Xn];try{e[Xn]=void 0;var n=!0}catch{}var i=Vv.call(e);return n&&(t?e[Xn]=r:delete e[Xn]),i}var dp,Wv,Vv,Xn,pp,fp=f(()=>{Jr();dp=Object.prototype,Wv=dp.hasOwnProperty,Vv=dp.toString,Xn=be?be.toStringTag:void 0;pp=Kv});function Jv(e){return qv.call(e)}var Yv,qv,mp,hp=f(()=>{Yv=Object.prototype,qv=Yv.toString;mp=Jv});function Zv(e){return e==null?e===void 0?Xv:zv:gp&&gp in Object(e)?pp(e):mp(e)}var zv,Xv,gp,Ye,zr=f(()=>{Jr();fp();hp();zv="[object Null]",Xv="[object Undefined]",gp=be?be.toStringTag:void 0;Ye=Zv});function Qv(e){return e!=null&&typeof e=="object"}var qe,Xr=f(()=>{qe=Qv});function tI(e){return typeof e=="symbol"||qe(e)&&Ye(e)==eI}var eI,Je,Zr=f(()=>{zr();Xr();eI="[object Symbol]";Je=tI});function rI(e,t){for(var r=-1,n=e==null?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}var Qr,ka=f(()=>{Qr=rI});var nI,J,De=f(()=>{nI=Array.isArray,J=nI});function _p(e){if(typeof e=="string")return e;if(J(e))return Qr(e,_p)+"";if(Je(e))return wp?wp.call(e):"";var t=e+"";return t=="0"&&1/e==-iI?"-0":t}var iI,yp,wp,Ep,bp=f(()=>{Jr();ka();De();Zr();iI=1/0,yp=be?be.prototype:void 0,wp=yp?yp.toString:void 0;Ep=_p});function sI(e){for(var t=e.length;t--&&oI.test(e.charAt(t)););return t}var oI,xp,Sp=f(()=>{oI=/\s/;xp=sI});function cI(e){return e&&e.slice(0,xp(e)+1).replace(aI,"")}var aI,vp,Ip=f(()=>{Sp();aI=/^\s+/;vp=cI});function lI(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var ze,en=f(()=>{ze=lI});function mI(e){if(typeof e=="number")return e;if(Je(e))return Ap;if(ze(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ze(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=vp(e);var r=dI.test(e);return r||pI.test(e)?fI(e.slice(2),r?2:8):uI.test(e)?Ap:+e}var Ap,uI,dI,pI,fI,Tp,Cp=f(()=>{Ip();en();Zr();Ap=NaN,uI=/^[-+]0x[0-9a-f]+$/i,dI=/^0b[01]+$/i,pI=/^0o[0-7]+$/i,fI=parseInt;Tp=mI});function gI(e){if(!e)return e===0?e:0;if(e=Tp(e),e===$p||e===-$p){var t=e<0?-1:1;return t*hI}return e===e?e:0}var $p,hI,Op,Rp=f(()=>{Cp();$p=1/0,hI=17976931348623157e292;Op=gI});function yI(e){var t=Op(e),r=t%1;return t===t?r?t-r:t:0}var Np,Dp=f(()=>{Rp();Np=yI});function wI(e){return e}var Rt,Zn=f(()=>{Rt=wI});function SI(e){if(!ze(e))return!1;var t=Ye(e);return t==EI||t==bI||t==_I||t==xI}var _I,EI,bI,xI,po,Pa=f(()=>{zr();en();_I="[object AsyncFunction]",EI="[object Function]",bI="[object GeneratorFunction]",xI="[object Proxy]";po=SI});var vI,fo,Lp=f(()=>{ct();vI=le["__core-js_shared__"],fo=vI});function II(e){return!!kp&&kp in e}var kp,Pp,Mp=f(()=>{Lp();kp=(function(){var e=/[^.]+$/.exec(fo&&fo.keys&&fo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();Pp=II});function CI(e){if(e!=null){try{return TI.call(e)}catch{}try{return e+""}catch{}}return""}var AI,TI,ht,Ma=f(()=>{AI=Function.prototype,TI=AI.toString;ht=CI});function PI(e){if(!ze(e)||Pp(e))return!1;var t=po(e)?kI:OI;return t.test(ht(e))}var $I,OI,RI,NI,DI,LI,kI,Fp,Hp=f(()=>{Pa();Mp();en();Ma();$I=/[\\^$.*+?()[\]{}|]/g,OI=/^\[object .+?Constructor\]$/,RI=Function.prototype,NI=Object.prototype,DI=RI.toString,LI=NI.hasOwnProperty,kI=RegExp("^"+DI.call(LI).replace($I,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");Fp=PI});function MI(e,t){return e?.[t]}var Bp,Up=f(()=>{Bp=MI});function FI(e,t){var r=Bp(e,t);return Fp(r)?r:void 0}var xe,Nt=f(()=>{Hp();Up();xe=FI});var HI,mo,Gp=f(()=>{Nt();ct();HI=xe(le,"WeakMap"),mo=HI});function BI(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}var jp,Wp=f(()=>{jp=BI});function UI(){}var Vp,Kp=f(()=>{Vp=UI});function VI(e){var t=0,r=0;return function(){var n=WI(),i=jI-(n-r);if(r=n,i>0){if(++t>=GI)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var GI,jI,WI,Yp,qp=f(()=>{GI=800,jI=16,WI=Date.now;Yp=VI});function KI(e){return function(){return e}}var Jp,zp=f(()=>{Jp=KI});var YI,tn,Fa=f(()=>{Nt();YI=(function(){try{var e=xe(Object,"defineProperty");return e({},"",{}),e}catch{}})(),tn=YI});var qI,Xp,Zp=f(()=>{zp();Fa();Zn();qI=tn?function(e,t){return tn(e,"toString",{configurable:!0,enumerable:!1,value:Jp(t),writable:!0})}:Rt,Xp=qI});var JI,Qp,ef=f(()=>{Zp();qp();JI=Yp(Xp),Qp=JI});function zI(e,t,r,n){for(var i=e.length,o=r+(n?1:-1);n?o--:++o<i;)if(t(e[o],o,e))return o;return-1}var tf,rf=f(()=>{tf=zI});function XI(e){return e!==e}var nf,of=f(()=>{nf=XI});function ZI(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}var sf,af=f(()=>{sf=ZI});function QI(e,t,r){return t===t?sf(e,t,r):tf(e,nf,r)}var cf,lf=f(()=>{rf();of();af();cf=QI});function eA(e,t){var r=e==null?0:e.length;return!!r&&cf(e,t,0)>-1}var uf,df=f(()=>{lf();uf=eA});function nA(e,t){var r=typeof e;return t=t??tA,!!t&&(r=="number"||r!="symbol"&&rA.test(e))&&e>-1&&e%1==0&&e<t}var tA,rA,rn,ho=f(()=>{tA=9007199254740991,rA=/^(?:0|[1-9]\d*)$/;rn=nA});function iA(e,t,r){t=="__proto__"&&tn?tn(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var pf,ff=f(()=>{Fa();pf=iA});function oA(e,t){return e===t||e!==e&&t!==t}var nn,go=f(()=>{nn=oA});function sA(e,t,r){return t=mf(t===void 0?e.length-1:t,0),function(){for(var n=arguments,i=-1,o=mf(n.length-t,0),s=Array(o);++i<o;)s[i]=n[t+i];i=-1;for(var a=Array(t+1);++i<t;)a[i]=n[i];return a[t]=r(s),jp(e,this,a)}}var mf,hf,gf=f(()=>{Wp();mf=Math.max;hf=sA});function aA(e,t){return Qp(hf(e,t,Rt),e+"")}var yf,wf=f(()=>{Zn();gf();ef();yf=aA});function lA(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=cA}var cA,on,yo=f(()=>{cA=9007199254740991;on=lA});function uA(e){return e!=null&&on(e.length)&&!po(e)}var Dt,Qn=f(()=>{Pa();yo();Dt=uA});function dA(e,t,r){if(!ze(r))return!1;var n=typeof t;return(n=="number"?Dt(r)&&rn(t,r.length):n=="string"&&t in r)?nn(r[t],e):!1}var ei,Ha=f(()=>{go();Qn();ho();en();ei=dA});function fA(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||pA;return e===r}var pA,_f,Ef=f(()=>{pA=Object.prototype;_f=fA});function mA(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var bf,xf=f(()=>{bf=mA});function gA(e){return qe(e)&&Ye(e)==hA}var hA,Ba,Sf=f(()=>{zr();Xr();hA="[object Arguments]";Ba=gA});var vf,yA,wA,_A,sn,wo=f(()=>{Sf();Xr();vf=Object.prototype,yA=vf.hasOwnProperty,wA=vf.propertyIsEnumerable,_A=Ba((function(){return arguments})())?Ba:function(e){return qe(e)&&yA.call(e,"callee")&&!wA.call(e,"callee")},sn=_A});function EA(){return!1}var If,Af=f(()=>{If=EA});var $f,Tf,bA,Cf,xA,SA,ti,Ua=f(()=>{ct();Af();$f=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Tf=$f&&typeof module=="object"&&module&&!module.nodeType&&module,bA=Tf&&Tf.exports===$f,Cf=bA?le.Buffer:void 0,xA=Cf?Cf.isBuffer:void 0,SA=xA||If,ti=SA});function qA(e){return qe(e)&&on(e.length)&&!!Y[Ye(e)]}var vA,IA,AA,TA,CA,$A,OA,RA,NA,DA,LA,kA,PA,MA,FA,HA,BA,UA,GA,jA,WA,VA,KA,YA,Y,Of,Rf=f(()=>{zr();yo();Xr();vA="[object Arguments]",IA="[object Array]",AA="[object Boolean]",TA="[object Date]",CA="[object Error]",$A="[object Function]",OA="[object Map]",RA="[object Number]",NA="[object Object]",DA="[object RegExp]",LA="[object Set]",kA="[object String]",PA="[object WeakMap]",MA="[object ArrayBuffer]",FA="[object DataView]",HA="[object Float32Array]",BA="[object Float64Array]",UA="[object Int8Array]",GA="[object Int16Array]",jA="[object Int32Array]",WA="[object Uint8Array]",VA="[object Uint8ClampedArray]",KA="[object Uint16Array]",YA="[object Uint32Array]",Y={};Y[HA]=Y[BA]=Y[UA]=Y[GA]=Y[jA]=Y[WA]=Y[VA]=Y[KA]=Y[YA]=!0;Y[vA]=Y[IA]=Y[MA]=Y[AA]=Y[FA]=Y[TA]=Y[CA]=Y[$A]=Y[OA]=Y[RA]=Y[NA]=Y[DA]=Y[LA]=Y[kA]=Y[PA]=!1;Of=qA});function JA(e){return function(t){return e(t)}}var _o,Ga=f(()=>{_o=JA});var Nf,ri,zA,ja,XA,Wa,Df=f(()=>{La();Nf=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ri=Nf&&typeof module=="object"&&module&&!module.nodeType&&module,zA=ri&&ri.exports===Nf,ja=zA&&uo.process,XA=(function(){try{var e=ri&&ri.require&&ri.require("util").types;return e||ja&&ja.binding&&ja.binding("util")}catch{}})(),Wa=XA});var Lf,ZA,Eo,Va=f(()=>{Rf();Ga();Df();Lf=Wa&&Wa.isTypedArray,ZA=Lf?_o(Lf):Of,Eo=ZA});function t0(e,t){var r=J(e),n=!r&&sn(e),i=!r&&!n&&ti(e),o=!r&&!n&&!i&&Eo(e),s=r||n||i||o,a=s?bf(e.length,String):[],c=a.length;for(var l in e)(t||e0.call(e,l))&&!(s&&(l=="length"||i&&(l=="offset"||l=="parent")||o&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||rn(l,c)))&&a.push(l);return a}var QA,e0,kf,Pf=f(()=>{xf();wo();De();Ua();ho();Va();QA=Object.prototype,e0=QA.hasOwnProperty;kf=t0});function r0(e,t){return function(r){return e(t(r))}}var Mf,Ff=f(()=>{Mf=r0});var n0,Hf,Bf=f(()=>{Ff();n0=Mf(Object.keys,Object),Hf=n0});function s0(e){if(!_f(e))return Hf(e);var t=[];for(var r in Object(e))o0.call(e,r)&&r!="constructor"&&t.push(r);return t}var i0,o0,Uf,Gf=f(()=>{Ef();Bf();i0=Object.prototype,o0=i0.hasOwnProperty;Uf=s0});function a0(e){return Dt(e)?kf(e):Uf(e)}var an,bo=f(()=>{Pf();Gf();Qn();an=a0});function u0(e,t){if(J(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||Je(e)?!0:l0.test(e)||!c0.test(e)||t!=null&&e in Object(t)}var c0,l0,cn,xo=f(()=>{De();Zr();c0=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,l0=/^\w*$/;cn=u0});var d0,gt,ni=f(()=>{Nt();d0=xe(Object,"create"),gt=d0});function p0(){this.__data__=gt?gt(null):{},this.size=0}var jf,Wf=f(()=>{ni();jf=p0});function f0(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Vf,Kf=f(()=>{Vf=f0});function y0(e){var t=this.__data__;if(gt){var r=t[e];return r===m0?void 0:r}return g0.call(t,e)?t[e]:void 0}var m0,h0,g0,Yf,qf=f(()=>{ni();m0="__lodash_hash_undefined__",h0=Object.prototype,g0=h0.hasOwnProperty;Yf=y0});function E0(e){var t=this.__data__;return gt?t[e]!==void 0:_0.call(t,e)}var w0,_0,Jf,zf=f(()=>{ni();w0=Object.prototype,_0=w0.hasOwnProperty;Jf=E0});function x0(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=gt&&t===void 0?b0:t,this}var b0,Xf,Zf=f(()=>{ni();b0="__lodash_hash_undefined__";Xf=x0});function ln(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var Ka,Qf=f(()=>{Wf();Kf();qf();zf();Zf();ln.prototype.clear=jf;ln.prototype.delete=Vf;ln.prototype.get=Yf;ln.prototype.has=Jf;ln.prototype.set=Xf;Ka=ln});function S0(){this.__data__=[],this.size=0}var em,tm=f(()=>{em=S0});function v0(e,t){for(var r=e.length;r--;)if(nn(e[r][0],t))return r;return-1}var Lt,ii=f(()=>{go();Lt=v0});function T0(e){var t=this.__data__,r=Lt(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():A0.call(t,r,1),--this.size,!0}var I0,A0,rm,nm=f(()=>{ii();I0=Array.prototype,A0=I0.splice;rm=T0});function C0(e){var t=this.__data__,r=Lt(t,e);return r<0?void 0:t[r][1]}var im,om=f(()=>{ii();im=C0});function $0(e){return Lt(this.__data__,e)>-1}var sm,am=f(()=>{ii();sm=$0});function O0(e,t){var r=this.__data__,n=Lt(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var cm,lm=f(()=>{ii();cm=O0});function un(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var kt,oi=f(()=>{tm();nm();om();am();lm();un.prototype.clear=em;un.prototype.delete=rm;un.prototype.get=im;un.prototype.has=sm;un.prototype.set=cm;kt=un});var R0,Pt,So=f(()=>{Nt();ct();R0=xe(le,"Map"),Pt=R0});function N0(){this.size=0,this.__data__={hash:new Ka,map:new(Pt||kt),string:new Ka}}var um,dm=f(()=>{Qf();oi();So();um=N0});function D0(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var pm,fm=f(()=>{pm=D0});function L0(e,t){var r=e.__data__;return pm(t)?r[typeof t=="string"?"string":"hash"]:r.map}var Mt,si=f(()=>{fm();Mt=L0});function k0(e){var t=Mt(this,e).delete(e);return this.size-=t?1:0,t}var mm,hm=f(()=>{si();mm=k0});function P0(e){return Mt(this,e).get(e)}var gm,ym=f(()=>{si();gm=P0});function M0(e){return Mt(this,e).has(e)}var wm,_m=f(()=>{si();wm=M0});function F0(e,t){var r=Mt(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var Em,bm=f(()=>{si();Em=F0});function dn(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var ar,vo=f(()=>{dm();hm();ym();_m();bm();dn.prototype.clear=um;dn.prototype.delete=mm;dn.prototype.get=gm;dn.prototype.has=wm;dn.prototype.set=Em;ar=dn});function Ya(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(H0);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var s=e.apply(this,n);return r.cache=o.set(i,s)||o,s};return r.cache=new(Ya.Cache||ar),r}var H0,xm,Sm=f(()=>{vo();H0="Expected a function";Ya.Cache=ar;xm=Ya});function U0(e){var t=xm(e,function(n){return r.size===B0&&r.clear(),n}),r=t.cache;return t}var B0,vm,Im=f(()=>{Sm();B0=500;vm=U0});var G0,j0,W0,Am,Tm=f(()=>{Im();G0=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,j0=/\\(\\)?/g,W0=vm(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(G0,function(r,n,i,o){t.push(i?o.replace(j0,"$1"):n||r)}),t}),Am=W0});function V0(e){return e==null?"":Ep(e)}var Cm,$m=f(()=>{bp();Cm=V0});function K0(e,t){return J(e)?e:cn(e,t)?[e]:Am(Cm(e))}var Io,qa=f(()=>{De();xo();Tm();$m();Io=K0});function q0(e){if(typeof e=="string"||Je(e))return e;var t=e+"";return t=="0"&&1/e==-Y0?"-0":t}var Y0,Ft,ai=f(()=>{Zr();Y0=1/0;Ft=q0});function J0(e,t){t=Io(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[Ft(t[r++])];return r&&r==n?e:void 0}var pn,Ao=f(()=>{qa();ai();pn=J0});function z0(e,t,r){var n=e==null?void 0:pn(e,t);return n===void 0?r:n}var Om,Rm=f(()=>{Ao();Om=z0});function X0(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}var To,Ja=f(()=>{To=X0});function Z0(e){return J(e)||sn(e)||!!(Nm&&e&&e[Nm])}var Nm,Dm,Lm=f(()=>{Jr();wo();De();Nm=be?be.isConcatSpreadable:void 0;Dm=Z0});function km(e,t,r,n,i){var o=-1,s=e.length;for(r||(r=Dm),i||(i=[]);++o<s;){var a=e[o];t>0&&r(a)?t>1?km(a,t-1,r,n,i):To(i,a):n||(i[i.length]=a)}return i}var Pm,Mm=f(()=>{Ja();Lm();Pm=km});function Q0(e,t,r){var n=-1,i=e.length;t<0&&(t=-t>i?0:i+t),r=r>i?i:r,r<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(i);++n<i;)o[n]=e[n+t];return o}var Fm,Hm=f(()=>{Fm=Q0});function rT(e,t,r){(r?ei(e,t,r):t===void 0)?t=1:t=tT(Np(t),0);var n=e==null?0:e.length;if(!n||t<1)return[];for(var i=0,o=0,s=Array(eT(n/t));i<n;)s[o++]=Fm(e,i,i+=t);return s}var eT,tT,za,Bm=f(()=>{Hm();Ha();Dp();eT=Math.ceil,tT=Math.max;za=rT});function nT(){this.__data__=new kt,this.size=0}var Um,Gm=f(()=>{oi();Um=nT});function iT(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var jm,Wm=f(()=>{jm=iT});function oT(e){return this.__data__.get(e)}var Vm,Km=f(()=>{Vm=oT});function sT(e){return this.__data__.has(e)}var Ym,qm=f(()=>{Ym=sT});function cT(e,t){var r=this.__data__;if(r instanceof kt){var n=r.__data__;if(!Pt||n.length<aT-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new ar(n)}return r.set(e,t),this.size=r.size,this}var aT,Jm,zm=f(()=>{oi();So();vo();aT=200;Jm=cT});function fn(e){var t=this.__data__=new kt(e);this.size=t.size}var mn,Xa=f(()=>{oi();Gm();Wm();Km();qm();zm();fn.prototype.clear=Um;fn.prototype.delete=jm;fn.prototype.get=Vm;fn.prototype.has=Ym;fn.prototype.set=Jm;mn=fn});function lT(e,t){for(var r=-1,n=e==null?0:e.length,i=0,o=[];++r<n;){var s=e[r];t(s,r,e)&&(o[i++]=s)}return o}var Xm,Zm=f(()=>{Xm=lT});function uT(){return[]}var Qm,eh=f(()=>{Qm=uT});var dT,pT,th,fT,rh,nh=f(()=>{Zm();eh();dT=Object.prototype,pT=dT.propertyIsEnumerable,th=Object.getOwnPropertySymbols,fT=th?function(e){return e==null?[]:(e=Object(e),Xm(th(e),function(t){return pT.call(e,t)}))}:Qm,rh=fT});function mT(e,t,r){var n=t(e);return J(e)?n:To(n,r(e))}var ih,oh=f(()=>{Ja();De();ih=mT});function hT(e){return ih(e,an,rh)}var Za,sh=f(()=>{oh();nh();bo();Za=hT});var gT,Co,ah=f(()=>{Nt();ct();gT=xe(le,"DataView"),Co=gT});var yT,$o,ch=f(()=>{Nt();ct();yT=xe(le,"Promise"),$o=yT});var wT,Ht,Qa=f(()=>{Nt();ct();wT=xe(le,"Set"),Ht=wT});var lh,_T,uh,dh,ph,fh,ET,bT,xT,ST,vT,cr,ec,mh=f(()=>{ah();So();ch();Qa();Gp();zr();Ma();lh="[object Map]",_T="[object Object]",uh="[object Promise]",dh="[object Set]",ph="[object WeakMap]",fh="[object DataView]",ET=ht(Co),bT=ht(Pt),xT=ht($o),ST=ht(Ht),vT=ht(mo),cr=Ye;(Co&&cr(new Co(new ArrayBuffer(1)))!=fh||Pt&&cr(new Pt)!=lh||$o&&cr($o.resolve())!=uh||Ht&&cr(new Ht)!=dh||mo&&cr(new mo)!=ph)&&(cr=function(e){var t=Ye(e),r=t==_T?e.constructor:void 0,n=r?ht(r):"";if(n)switch(n){case ET:return fh;case bT:return lh;case xT:return uh;case ST:return dh;case vT:return ph}return t});ec=cr});var IT,tc,hh=f(()=>{ct();IT=le.Uint8Array,tc=IT});function TT(e){return this.__data__.set(e,AT),this}var AT,gh,yh=f(()=>{AT="__lodash_hash_undefined__";gh=TT});function CT(e){return this.__data__.has(e)}var wh,_h=f(()=>{wh=CT});function Oo(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new ar;++t<r;)this.add(e[t])}var Ro,rc=f(()=>{vo();yh();_h();Oo.prototype.add=Oo.prototype.push=gh;Oo.prototype.has=wh;Ro=Oo});function $T(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var Eh,bh=f(()=>{Eh=$T});function OT(e,t){return e.has(t)}var No,nc=f(()=>{No=OT});function DT(e,t,r,n,i,o){var s=r&RT,a=e.length,c=t.length;if(a!=c&&!(s&&c>a))return!1;var l=o.get(e),d=o.get(t);if(l&&d)return l==t&&d==e;var p=-1,u=!0,m=r&NT?new Ro:void 0;for(o.set(e,t),o.set(t,e);++p<a;){var g=e[p],y=t[p];if(n)var w=s?n(y,g,p,t,e,o):n(g,y,p,e,t,o);if(w!==void 0){if(w)continue;u=!1;break}if(m){if(!Eh(t,function(x,b){if(!No(m,b)&&(g===x||i(g,x,r,n,o)))return m.push(b)})){u=!1;break}}else if(!(g===y||i(g,y,r,n,o))){u=!1;break}}return o.delete(e),o.delete(t),u}var RT,NT,Do,ic=f(()=>{rc();bh();nc();RT=1,NT=2;Do=DT});function LT(e){var t=-1,r=Array(e.size);return e.forEach(function(n,i){r[++t]=[i,n]}),r}var xh,Sh=f(()=>{xh=LT});function kT(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var hn,Lo=f(()=>{hn=kT});function JT(e,t,r,n,i,o,s){switch(r){case qT:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case YT:return!(e.byteLength!=t.byteLength||!o(new tc(e),new tc(t)));case FT:case HT:case GT:return nn(+e,+t);case BT:return e.name==t.name&&e.message==t.message;case jT:case VT:return e==t+"";case UT:var a=xh;case WT:var c=n&PT;if(a||(a=hn),e.size!=t.size&&!c)return!1;var l=s.get(e);if(l)return l==t;n|=MT,s.set(e,t);var d=Do(a(e),a(t),n,i,o,s);return s.delete(e),d;case KT:if(oc)return oc.call(e)==oc.call(t)}return!1}var PT,MT,FT,HT,BT,UT,GT,jT,WT,VT,KT,YT,qT,vh,oc,Ih,Ah=f(()=>{Jr();hh();go();ic();Sh();Lo();PT=1,MT=2,FT="[object Boolean]",HT="[object Date]",BT="[object Error]",UT="[object Map]",GT="[object Number]",jT="[object RegExp]",WT="[object Set]",VT="[object String]",KT="[object Symbol]",YT="[object ArrayBuffer]",qT="[object DataView]",vh=be?be.prototype:void 0,oc=vh?vh.valueOf:void 0;Ih=JT});function QT(e,t,r,n,i,o){var s=r&zT,a=Za(e),c=a.length,l=Za(t),d=l.length;if(c!=d&&!s)return!1;for(var p=c;p--;){var u=a[p];if(!(s?u in t:ZT.call(t,u)))return!1}var m=o.get(e),g=o.get(t);if(m&&g)return m==t&&g==e;var y=!0;o.set(e,t),o.set(t,e);for(var w=s;++p<c;){u=a[p];var x=e[u],b=t[u];if(n)var A=s?n(b,x,u,t,e,o):n(x,b,u,e,t,o);if(!(A===void 0?x===b||i(x,b,r,n,o):A)){y=!1;break}w||(w=u=="constructor")}if(y&&!w){var v=e.constructor,S=t.constructor;v!=S&&"constructor"in e&&"constructor"in t&&!(typeof v=="function"&&v instanceof v&&typeof S=="function"&&S instanceof S)&&(y=!1)}return o.delete(e),o.delete(t),y}var zT,XT,ZT,Th,Ch=f(()=>{sh();zT=1,XT=Object.prototype,ZT=XT.hasOwnProperty;Th=QT});function rC(e,t,r,n,i,o){var s=J(e),a=J(t),c=s?Oh:ec(e),l=a?Oh:ec(t);c=c==$h?ko:c,l=l==$h?ko:l;var d=c==ko,p=l==ko,u=c==l;if(u&&ti(e)){if(!ti(t))return!1;s=!0,d=!1}if(u&&!d)return o||(o=new mn),s||Eo(e)?Do(e,t,r,n,i,o):Ih(e,t,c,r,n,i,o);if(!(r&eC)){var m=d&&Rh.call(e,"__wrapped__"),g=p&&Rh.call(t,"__wrapped__");if(m||g){var y=m?e.value():e,w=g?t.value():t;return o||(o=new mn),i(y,w,r,n,o)}}return u?(o||(o=new mn),Th(e,t,r,n,i,o)):!1}var eC,$h,Oh,ko,tC,Rh,Nh,Dh=f(()=>{Xa();ic();Ah();Ch();mh();De();Ua();Va();eC=1,$h="[object Arguments]",Oh="[object Array]",ko="[object Object]",tC=Object.prototype,Rh=tC.hasOwnProperty;Nh=rC});function Lh(e,t,r,n,i){return e===t?!0:e==null||t==null||!qe(e)&&!qe(t)?e!==e&&t!==t:Nh(e,t,r,n,Lh,i)}var Po,sc=f(()=>{Dh();Xr();Po=Lh});function oC(e,t,r,n){var i=r.length,o=i,s=!n;if(e==null)return!o;for(e=Object(e);i--;){var a=r[i];if(s&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<o;){a=r[i];var c=a[0],l=e[c],d=a[1];if(s&&a[2]){if(l===void 0&&!(c in e))return!1}else{var p=new mn;if(n)var u=n(l,d,c,e,t,p);if(!(u===void 0?Po(d,l,nC|iC,n,p):u))return!1}}return!0}var nC,iC,kh,Ph=f(()=>{Xa();sc();nC=1,iC=2;kh=oC});function sC(e){return e===e&&!ze(e)}var Mo,ac=f(()=>{en();Mo=sC});function aC(e){for(var t=an(e),r=t.length;r--;){var n=t[r],i=e[n];t[r]=[n,i,Mo(i)]}return t}var Mh,Fh=f(()=>{ac();bo();Mh=aC});function cC(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var Fo,cc=f(()=>{Fo=cC});function lC(e){var t=Mh(e);return t.length==1&&t[0][2]?Fo(t[0][0],t[0][1]):function(r){return r===e||kh(r,e,t)}}var Hh,Bh=f(()=>{Ph();Fh();cc();Hh=lC});function uC(e,t){return e!=null&&t in Object(e)}var Uh,Gh=f(()=>{Uh=uC});function dC(e,t,r){t=Io(t,e);for(var n=-1,i=t.length,o=!1;++n<i;){var s=Ft(t[n]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++n!=i?o:(i=e==null?0:e.length,!!i&&on(i)&&rn(s,i)&&(J(e)||sn(e)))}var jh,Wh=f(()=>{qa();wo();De();ho();yo();ai();jh=dC});function pC(e,t){return e!=null&&jh(e,t,Uh)}var Vh,Kh=f(()=>{Gh();Wh();Vh=pC});function hC(e,t){return cn(e)&&Mo(t)?Fo(Ft(e),t):function(r){var n=Om(r,e);return n===void 0&&n===t?Vh(r,e):Po(t,n,fC|mC)}}var fC,mC,Yh,qh=f(()=>{sc();Rm();Kh();xo();ac();cc();ai();fC=1,mC=2;Yh=hC});function gC(e){return function(t){return t?.[e]}}var Jh,zh=f(()=>{Jh=gC});function yC(e){return function(t){return pn(t,e)}}var Xh,Zh=f(()=>{Ao();Xh=yC});function wC(e){return cn(e)?Jh(Ft(e)):Xh(e)}var Qh,eg=f(()=>{zh();Zh();xo();ai();Qh=wC});function _C(e){return typeof e=="function"?e:e==null?Rt:typeof e=="object"?J(e)?Yh(e[0],e[1]):Hh(e):Qh(e)}var Bt,ci=f(()=>{Bh();qh();Zn();De();eg();Bt=_C});function EC(e,t,r,n){for(var i=-1,o=e==null?0:e.length;++i<o;){var s=e[i];t(n,s,r(s),e)}return n}var tg,rg=f(()=>{tg=EC});function bC(e){return function(t,r,n){for(var i=-1,o=Object(t),s=n(t),a=s.length;a--;){var c=s[e?a:++i];if(r(o[c],c,o)===!1)break}return t}}var ng,ig=f(()=>{ng=bC});var xC,og,sg=f(()=>{ig();xC=ng(),og=xC});function SC(e,t){return e&&og(e,t,an)}var ag,cg=f(()=>{sg();bo();ag=SC});function vC(e,t){return function(r,n){if(r==null)return r;if(!Dt(r))return e(r,n);for(var i=r.length,o=t?i:-1,s=Object(r);(t?o--:++o<i)&&n(s[o],o,s)!==!1;);return r}}var lg,ug=f(()=>{Qn();lg=vC});var IC,Ho,lc=f(()=>{cg();ug();IC=lg(ag),Ho=IC});function AC(e,t,r,n){return Ho(e,function(i,o,s){t(n,i,r(i),s)}),n}var dg,pg=f(()=>{lc();dg=AC});function TC(e,t){return function(r,n){var i=J(r)?tg:dg,o=t?t():{};return i(r,e,Bt(n,2),o)}}var fg,mg=f(()=>{rg();pg();ci();De();fg=TC});function CC(e,t,r){for(var n=-1,i=e==null?0:e.length;++n<i;)if(r(t,e[n]))return!0;return!1}var hg,gg=f(()=>{hg=CC});function $C(e,t){var r=-1,n=Dt(e)?Array(e.length):[];return Ho(e,function(i,o,s){n[++r]=t(i,o,s)}),n}var yg,wg=f(()=>{lc();Qn();yg=$C});var OC,RC,NC,uc,_g=f(()=>{ff();mg();OC=Object.prototype,RC=OC.hasOwnProperty,NC=fg(function(e,t,r){RC.call(e,r)?e[r].push(t):pf(e,r,[t])}),uc=NC});function DC(e,t){for(var r,n=-1,i=e.length;++n<i;){var o=t(e[n]);o!==void 0&&(r=r===void 0?o:r+o)}return r}var Eg,bg=f(()=>{Eg=DC});function LC(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}var xg,Sg=f(()=>{xg=LC});function kC(e,t){if(e!==t){var r=e!==void 0,n=e===null,i=e===e,o=Je(e),s=t!==void 0,a=t===null,c=t===t,l=Je(t);if(!a&&!l&&!o&&e>t||o&&s&&c&&!a&&!l||n&&s&&c||!r&&c||!i)return 1;if(!n&&!o&&!l&&e<t||l&&r&&i&&!n&&!o||a&&r&&i||!s&&i||!c)return-1}return 0}var vg,Ig=f(()=>{Zr();vg=kC});function PC(e,t,r){for(var n=-1,i=e.criteria,o=t.criteria,s=i.length,a=r.length;++n<s;){var c=vg(i[n],o[n]);if(c){if(n>=a)return c;var l=r[n];return c*(l=="desc"?-1:1)}}return e.index-t.index}var Ag,Tg=f(()=>{Ig();Ag=PC});function MC(e,t,r){t.length?t=Qr(t,function(o){return J(o)?function(s){return pn(s,o.length===1?o[0]:o)}:o}):t=[Rt];var n=-1;t=Qr(t,_o(Bt));var i=yg(e,function(o,s,a){var c=Qr(t,function(l){return l(o)});return{criteria:c,index:++n,value:o}});return xg(i,function(o,s){return Ag(o,s,r)})}var Cg,$g=f(()=>{ka();Ao();ci();wg();Sg();Ga();Tg();Zn();De();Cg=MC});var FC,dc,Og=f(()=>{Mm();$g();wf();Ha();FC=yf(function(e,t){if(e==null)return[];var r=t.length;return r>1&&ei(e,t[0],t[1])?t=[]:r>2&&ei(t[0],t[1],t[2])&&(t=[t[0]]),Cg(e,Pm(t,1),[])}),dc=FC});function HC(e,t){return e&&e.length?Eg(e,Bt(t,2)):0}var pc,Rg=f(()=>{ci();bg();pc=HC});var BC,UC,Ng,Dg=f(()=>{Qa();Kp();Lo();BC=1/0,UC=Ht&&1/hn(new Ht([,-0]))[1]==BC?function(e){return new Ht(e)}:Vp,Ng=UC});function jC(e,t,r){var n=-1,i=uf,o=e.length,s=!0,a=[],c=a;if(r)s=!1,i=hg;else if(o>=GC){var l=t?null:Ng(e);if(l)return hn(l);s=!1,i=No,c=new Ro}else c=t?[]:a;e:for(;++n<o;){var d=e[n],p=t?t(d):d;if(d=r||d!==0?d:0,s&&p===p){for(var u=c.length;u--;)if(c[u]===p)continue e;t&&c.push(p),a.push(d)}else i(c,p,r)||(c!==a&&c.push(p),a.push(d))}return a}var GC,Lg,kg=f(()=>{rc();df();gg();nc();Dg();Lo();GC=200;Lg=jC});function WC(e,t){return e&&e.length?Lg(e,Bt(t,2)):[]}var fc,Pg=f(()=>{ci();kg();fc=WC});var Bo=f(()=>{Bm();_g();Og();Rg();Pg();});import{readFile as VC}from"node:fs/promises";function YC(e){let t=[];return e.sectionHeading&&t.push(`[Section: ${e.sectionHeading}]`),e.contextualPrefix&&t.push(e.contextualPrefix),t.push(e.content),t.join(`
|
|
94
|
+
`)}function qC(e,t,r){return`${e}
|
|
244
95
|
|
|
245
|
-
|
|
96
|
+
---
|
|
246
97
|
|
|
247
|
-
|
|
248
|
-
- Save facts as short, self-contained statements \u2014 never summaries of the conversation
|
|
249
|
-
- Each fact must make sense in isolation, without the conversation context
|
|
250
|
-
- Batch all explicit saves in one user-turn into a single \`${e} remember --bg\` call
|
|
251
|
-
- Skip trivial exchanges (greetings, "thanks", "ok", simple math)
|
|
252
|
-
- If search and injection both return nothing, answer from your own knowledge and say so
|
|
253
|
-
- Sigil is cross-project \u2014 memories from one session are available in all sessions
|
|
254
|
-
`}async function So({dryRun:t=!1}={}){let e=await import("node:fs/promises");t||await e.mkdir(zl,{recursive:!0});try{if((await e.readFile(Xt,"utf8")).includes("## Memory (Sigil)"))return{action:"skip",path:Xt,bytes:0}}catch{}let r=ue(),i=await q(Xt,r,{dryRun:t});return{action:i.action,path:Xt,bytes:i.bytes}}var zl,Xt,ar=g(()=>{Re();zl=Jl(f_(),".sigil"),Xt=Jl(zl,"CLAUDE.md")});var ru={};$(ru,{detect:()=>y_,install:()=>w_,mergeHooks:()=>eu,meta:()=>g_,uninstall:()=>E_,verify:()=>__,writeImportLine:()=>tu});import{join as Qt}from"node:path";import{homedir as m_}from"node:os";import{existsSync as de}from"node:fs";import{fileURLToPath as h_}from"node:url";import{dirname as un}from"node:path";async function y_(){return de(ei)}async function tu({dryRun:t=!1}={}){let e=await import("node:fs/promises");t||await e.mkdir(ei,{recursive:!0});let r=`@${Xt}`,i="";if(de(At)&&(i=await e.readFile(At,"utf8")),i.includes(r))return{action:"skip",path:At,detail:"already imports sigil CLAUDE.md"};let n=i.trim()?`
|
|
255
|
-
`:"",s=`${i}${n}${r}
|
|
256
|
-
`;return{action:(await q(At,s,{dryRun:t})).action,path:At,detail:i?"+1 @import line":"new file"}}async function eu({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r={};try{let d=await e.readFile(St,"utf8");r=JSON.parse(d)}catch{}let i=Qt(Zl,"src","hooks"),n=Qt(Zl,"dist","hooks"),s=de(n)?n:i,o={UserPromptSubmit:{hooks:[{type:"command",command:`node ${Qt(s,"user-prompt-submit.js")}`,timeout:10,statusMessage:"Searching memory..."}]},PostToolUse:{matcher:"Edit|Write|Bash",hooks:[{type:"command",command:`node ${Qt(s,"post-tool-use.js")}`,timeout:10,async:!0}]},Stop:{hooks:[{type:"command",command:`node ${Qt(s,"stop.js")}`,timeout:30,async:!0}]},SessionEnd:{hooks:[{type:"command",command:`node ${Qt(s,"session-end.js")}`,timeout:10,async:!0}]}},a=de(St);r.hooks=r.hooks||{};let c=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],l=d=>typeof d=="string"&&c.some(f=>d.endsWith(f)||d.includes(`/${f}`));for(let[d,f]of Object.entries(o)){let y=(r.hooks[d]||[]).filter(w=>!w.hooks?.some(x=>l(x.command)));r.hooks[d]=[...y,f]}t||await e.mkdir(ei,{recursive:!0});let u=JSON.stringify(r,null,2);return{action:(await q(St,u,{dryRun:t})).action,path:St,detail:a?"+UserPromptSubmit, +PostToolUse, +Stop, +SessionEnd hooks (other settings preserved)":"new settings.json with sigil hooks"}}async function w_({dryRun:t=!1}={}){let e=[],r=await So({dryRun:t});r&&e.push({action:r.action,path:r.path,detail:`${r.bytes??0} bytes`});let i=await tu({dryRun:t});i&&e.push(i);let n=await eu({dryRun:t});return n&&e.push(n),{actions:e}}async function __(){let t=await import("node:fs/promises"),e=`@${Xt}`;if(!de(At))return{installed:!1,reason:"~/.claude/CLAUDE.md missing \u2014 run `sigil init`"};if(!(await t.readFile(At,"utf8")).includes(e))return{installed:!1,reason:"@import line missing from ~/.claude/CLAUDE.md"};if(!de(St))return{installed:!1,reason:"~/.claude/settings.json missing \u2014 hooks not registered"};let i;try{i=JSON.parse(await t.readFile(St,"utf8"))}catch{return{installed:!1,reason:"~/.claude/settings.json is not valid JSON"}}let n=i.hooks||{},o=["UserPromptSubmit","PostToolUse","Stop","SessionEnd"].filter(a=>!(n[a]||[]).some(l=>l.hooks?.some(u=>typeof u.command=="string"&&(u.command.includes("user-prompt-submit.js")||u.command.includes("post-tool-use.js")||u.command.includes("stop.js")||u.command.includes("session-end.js")))));return o.length?{installed:!1,reason:`hooks missing: ${o.join(", ")}`}:{installed:!0}}async function E_({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r=[];if(de(At)){let i=`@${Xt}`,n=await e.readFile(At,"utf8"),s=new RegExp(`^${i.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}\\s*\\n?`,"gm"),o=n.replace(s,"");if(o!==n){let a=await q(At,o,{dryRun:t});r.push({action:a.action,path:At,detail:"-1 @import line"})}else r.push({action:"skip",path:At,detail:"@import not present"})}if(de(St)){let i;try{i=JSON.parse(await e.readFile(St,"utf8"))}catch{return r.push({action:"skip",path:St,detail:"invalid JSON \u2014 not touched"}),{actions:r}}let n=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],s=a=>typeof a=="string"&&n.some(c=>a.endsWith(c)||a.includes(`/${c}`)),o=!1;for(let a of Object.keys(i.hooks||{})){let c=i.hooks[a],l=c.filter(u=>!u.hooks?.some(h=>s(h.command)));l.length!==c.length&&(o=!0,l.length===0?delete i.hooks[a]:i.hooks[a]=l)}if(o){let a=await q(St,JSON.stringify(i,null,2),{dryRun:t});r.push({action:a.action,path:St,detail:"sigil hooks removed (other entries preserved)"})}else r.push({action:"skip",path:St,detail:"no sigil hooks to remove"})}return{actions:r}}var ei,At,St,Zl,g_,iu=g(()=>{Re();ar();ei=Qt(m_(),".claude"),At=Qt(ei,"CLAUDE.md"),St=Qt(ei,"settings.json"),Zl=un(un(un(un(h_(import.meta.url))))),g_={id:"claude-code",label:"Claude Code",hint:"hooks + @import \u2014 full auto-injection"}});var lu={};$(lu,{detect:()=>C_,install:()=>v_,meta:()=>A_,resolveServerPath:()=>ou,uninstall:()=>$_,verify:()=>I_,writeMcpEntry:()=>au,writeRulesFile:()=>cu});import{join as Pe,dirname as ri}from"node:path";import{homedir as su}from"node:os";import{existsSync as Me}from"node:fs";import{fileURLToPath as x_}from"node:url";async function C_(){return Me(dn)}function ou(){let t=Pe(nu,"dist","server.js"),e=Pe(nu,"src","server.js");return Me(t)?t:e}async function au({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r={};try{let s=await e.readFile(Ct,"utf8");r=JSON.parse(s)}catch{}let i=Me(Ct);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[ou(),"--mcp"],env:{DOTENV_CONFIG_PATH:S_}},t||await e.mkdir(dn,{recursive:!0}),{action:(await q(Ct,JSON.stringify(r,null,2),{dryRun:t})).action,path:Ct,detail:i?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}function T_(){return["---","description: Sigil persistent memory \u2014 consult before answering, save in batches","alwaysApply: true","---",""].join(`
|
|
257
|
-
`)+ue()}async function cu({dryRun:t=!1}={}){let e=await import("node:fs/promises");t||await e.mkdir(ri(Le),{recursive:!0});let r=await q(Le,T_(),{dryRun:t});return{action:r.action,path:Le,detail:`${r.bytes??0} bytes, alwaysApply=true`}}async function v_({dryRun:t=!1}={}){let e=[],r=await au({dryRun:t});r&&e.push(r);let i=await cu({dryRun:t});return i&&e.push(i),{actions:e}}async function I_(){let t=await import("node:fs/promises");if(!Me(Ct))return{installed:!1,reason:"~/.cursor/mcp.json missing"};let e;try{e=JSON.parse(await t.readFile(Ct,"utf8"))}catch{return{installed:!1,reason:"~/.cursor/mcp.json is not valid JSON"}}return e.mcpServers?.sigil?Me(Le)?{installed:!0}:{installed:!1,reason:"~/.cursor/rules/sigil.mdc missing"}:{installed:!1,reason:"sigil entry missing from ~/.cursor/mcp.json"}}async function $_({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r=[];if(Me(Ct)){let i;try{i=JSON.parse(await e.readFile(Ct,"utf8"))}catch{return r.push({action:"skip",path:Ct,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(i.mcpServers?.sigil){delete i.mcpServers.sigil;let n=await q(Ct,JSON.stringify(i,null,2),{dryRun:t});r.push({action:n.action,path:Ct,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:Ct,detail:"sigil entry not present"})}return Me(Le)&&(t||await e.unlink(Le),r.push({action:"delete",path:Le,detail:"sigil rules file removed"})),{actions:r}}var dn,Ct,Le,b_,S_,nu,A_,uu=g(()=>{Re();ar();dn=Pe(su(),".cursor"),Ct=Pe(dn,"mcp.json"),Le=Pe(dn,"rules","sigil.mdc"),b_=Pe(su(),".sigil"),S_=Pe(b_,".env"),nu=ri(ri(ri(ri(x_(import.meta.url))))),A_={id:"cursor",label:"Cursor",hint:"global MCP + always-applied rule (no native hooks)"}});var fu=at((dR,du)=>{"use strict";var Fe=class t extends Error{constructor(e,r,i){super("[ParserError] "+e,r,i),this.name="ParserError",this.code="ParserError",Error.captureStackTrace&&Error.captureStackTrace(this,t)}},fn=class{constructor(e){this.parser=e,this.buf="",this.returned=null,this.result=null,this.resultTable=null,this.resultArr=null}},ii=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 fn(this.parseStart)}parse(e){if(e.length===0||e.length==null)return;this._buf=String(e),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 e;do e=this.state.parser,this.runOne();while(this.state.parser!==e);return this.ctx=null,this.state=null,this._buf=null,this.obj}next(e){if(typeof e!="function")throw new Fe("Tried to set state to non-existent state: "+JSON.stringify(e));this.state.parser=e}goto(e){return this.next(e),this.runOne()}call(e,r){r&&this.next(r),this.stack.push(this.state),this.state=new fn(e)}callNow(e,r){return this.call(e,r),this.runOne()}return(e){if(this.stack.length===0)throw this.error(new Fe("Stack underflow"));e===void 0&&(e=this.state.buf),this.state=this.stack.pop(),this.state.returned=e}returnNow(e){return this.return(e),this.runOne()}consume(){if(this.char===1114112)throw this.error(new Fe("Unexpected end-of-buffer"));this.state.buf+=this._buf[this.ii]}error(e){return e.line=this.line,e.col=this.col,e.pos=this.pos,e}parseStart(){throw new Fe("Must declare a parseStart method")}};ii.END=1114112;ii.Error=Fe;du.exports=ii});var mu=at((fR,pu)=>{"use strict";pu.exports=t=>{let e=new Date(t);if(isNaN(e))throw new TypeError("Invalid Datetime");return e}});var pn=at((pR,hu)=>{"use strict";hu.exports=(t,e)=>{for(e=String(e);e.length<t;)e="0"+e;return e}});var yu=at((mR,gu)=>{"use strict";var cr=pn(),Ao=class extends Date{constructor(e){super(e+"Z"),this.isFloating=!0}toISOString(){let e=`${this.getUTCFullYear()}-${cr(2,this.getUTCMonth()+1)}-${cr(2,this.getUTCDate())}`,r=`${cr(2,this.getUTCHours())}:${cr(2,this.getUTCMinutes())}:${cr(2,this.getUTCSeconds())}.${cr(3,this.getUTCMilliseconds())}`;return`${e}T${r}`}};gu.exports=t=>{let e=new Ao(t);if(isNaN(e))throw new TypeError("Invalid Datetime");return e}});var Eu=at((hR,_u)=>{"use strict";var wu=pn(),O_=global.Date,Co=class extends O_{constructor(e){super(e),this.isDate=!0}toISOString(){return`${this.getUTCFullYear()}-${wu(2,this.getUTCMonth()+1)}-${wu(2,this.getUTCDate())}`}};_u.exports=t=>{let e=new Co(t);if(isNaN(e))throw new TypeError("Invalid Datetime");return e}});var bu=at((gR,xu)=>{"use strict";var mn=pn(),To=class extends Date{constructor(e){super(`0000-01-01T${e}Z`),this.isTime=!0}toISOString(){return`${mn(2,this.getUTCHours())}:${mn(2,this.getUTCMinutes())}:${mn(2,this.getUTCSeconds())}.${mn(3,this.getUTCMilliseconds())}`}};xu.exports=t=>{let e=new To(t);if(isNaN(e))throw new TypeError("Invalid Datetime");return e}});var hn=at((exports,module)=>{"use strict";module.exports=makeParserClass(fu());module.exports.makeParserClass=makeParserClass;var TomlError=class t extends Error{constructor(e){super(e),this.name="TomlError",Error.captureStackTrace&&Error.captureStackTrace(this,t),this.fromTOML=!0,this.wrapped=null}};TomlError.wrap=t=>{let e=new TomlError(t.message);return e.code=t.code,e.wrapped=t,e};module.exports.TomlError=TomlError;var createDateTime=mu(),createDateTimeFloat=yu(),createDate=Eu(),createTime=bu(),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]:`
|
|
258
|
-
`,[CHAR_f]:"\f",[CHAR_r]:"\r",[CHAR_QUOT]:'"',[CHAR_BSOL]:"\\"};function isDigit(t){return t>=CHAR_0&&t<=CHAR_9}function isHexit(t){return t>=CHAR_A&&t<=CHAR_F||t>=CHAR_a&&t<=CHAR_f||t>=CHAR_0&&t<=CHAR_9}function isBit(t){return t===CHAR_1||t===CHAR_0}function isOctit(t){return t>=CHAR_0&&t<=CHAR_7}function isAlphaNumQuoteHyphen(t){return t>=CHAR_A&&t<=CHAR_Z||t>=CHAR_a&&t<=CHAR_z||t>=CHAR_0&&t<=CHAR_9||t===CHAR_APOS||t===CHAR_QUOT||t===CHAR_LOWBAR||t===CHAR_HYPHEN}function isAlphaNumHyphen(t){return t>=CHAR_A&&t<=CHAR_Z||t>=CHAR_a&&t<=CHAR_z||t>=CHAR_0&&t<=CHAR_9||t===CHAR_LOWBAR||t===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(t,e){return hasOwnProperty.call(t,e)?!0:(e==="__proto__"&&defineProperty(t,"__proto__",descriptor),!1)}var INLINE_TABLE=Symbol("inline-table");function InlineTable(){return Object.defineProperties({},{[_type]:{value:INLINE_TABLE}})}function isInlineTable(t){return t===null||typeof t!="object"?!1:t[_type]===INLINE_TABLE}var TABLE=Symbol("table");function Table(){return Object.defineProperties({},{[_type]:{value:TABLE},[_declared]:{value:!1,writable:!0}})}function isTable(t){return t===null||typeof t!="object"?!1:t[_type]===TABLE}var _contentType=Symbol("content-type"),INLINE_LIST=Symbol("inline-list");function InlineList(t){return Object.defineProperties([],{[_type]:{value:INLINE_LIST},[_contentType]:{value:t}})}function isInlineList(t){return t===null||typeof t!="object"?!1:t[_type]===INLINE_LIST}var LIST=Symbol("list");function List(){return Object.defineProperties([],{[_type]:{value:LIST}})}function isList(t){return t===null||typeof t!="object"?!1:t[_type]===LIST}var _custom;try{let utilInspect=eval("require('util').inspect");_custom=utilInspect.custom}catch(t){}var _inspect=_custom||"inspect",BoxedBigInt=class{constructor(e){try{this.value=global.BigInt.asIntN(64,e)}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(t){let e=Number(t);return Object.is(e,-0)&&(e=0),global.BigInt&&!Number.isSafeInteger(e)?new BoxedBigInt(t):Object.defineProperties(new Number(e),{isNaN:{value:function(){return isNaN(this)}},[_type]:{value:INTEGER},[_inspect]:{value:()=>`[Integer: ${t}]`}})}function isInteger(t){return t===null||typeof t!="object"?!1:t[_type]===INTEGER}var FLOAT=Symbol("float");function Float(t){return Object.defineProperties(new Number(t),{[_type]:{value:FLOAT},[_inspect]:{value:()=>`[Float: ${t}]`}})}function isFloat(t){return t===null||typeof t!="object"?!1:t[_type]===FLOAT}function tomlType(t){let e=typeof t;if(e==="object"){if(t===null)return"null";if(t instanceof Date)return"datetime";if(_type in t)switch(t[_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 e}function makeParserClass(t){class e extends t{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===t.END||this.char===CTRL_J||this.char===CTRL_M}parseStart(){if(this.char===t.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===t.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(i){let n=this.ctx,s=i.key.pop();for(let o of i.key){if(hasKey(n,o)&&(!isTable(n[o])||n[o][_declared]))throw this.error(new TomlError("Can't redefine existing key"));n=n[o]=n[o]||Table()}if(hasKey(n,s))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(i.value)||isFloat(i.value)?n[s]=i.value.valueOf():n[s]=i.value,this.goto(this.parseWhitespaceToEOL)}parseAssign(){return this.callNow(this.parseKeyword,this.recordAssignKeyword)}recordAssignKeyword(i){return this.state.resultTable?this.state.resultTable.push(i):this.state.resultTable=[i],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(i){return this.returnNow({key:this.state.resultTable,value:i})}parseComment(){do if(this.char===t.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(i){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,i)&&(!isTable(this.ctx[i])||this.ctx[i][_declared]))throw this.error(new TomlError("Can't redefine existing key"));return this.ctx=this.ctx[i]=this.ctx[i]||Table(),this.ctx[_declared]=!0,this.next(this.parseWhitespaceToEOL)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,i))this.ctx=this.ctx[i]=Table();else if(isTable(this.ctx[i]))this.ctx=this.ctx[i];else if(isList(this.ctx[i]))this.ctx=this.ctx[i][this.ctx[i].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(i){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,i)||(this.ctx[i]=List()),isInlineList(this.ctx[i]))throw this.error(new TomlError("Can't extend an inline array"));if(isList(this.ctx[i])){let n=Table();this.ctx[i].push(n),this.ctx=n}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,i))this.ctx=this.ctx[i]=Table();else{if(isInlineList(this.ctx[i]))throw this.error(new TomlError("Can't extend an inline array"));if(isInlineTable(this.ctx[i]))throw this.error(new TomlError("Can't extend an inline table"));if(isList(this.ctx[i]))this.ctx=this.ctx[i][this.ctx[i].length-1];else if(isTable(this.ctx[i]))this.ctx=this.ctx[i];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(i){if(this.char===CHAR_RSQB)return this.next(this.parseWhitespaceToEOL);throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseValue(){if(this.char===t.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(i){return this.returnNow(i)}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===t.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===t.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(i){return this.state.buf+=i,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===t.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 i="\\u00";return this.char<16&&(i+="0"),i+=this.char.toString(16),this.error(new TomlError(`Control characters (codes < 0x1f and 0x7f) are not allowed in strings, use ${i} instead`))}recordMultiEscapeReplacement(i){return this.state.buf+=i,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(i){try{let n=parseInt(i,16);if(n>=SURROGATE_FIRST&&n<=SURROGATE_LAST)throw this.error(new TomlError("Invalid unicode, character in range 0xD800 - 0xDFFF is reserved"));return this.returnNow(String.fromCodePoint(n))}catch(n){throw this.error(TomlError.wrap(n))}}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 i=Integer(this.state.buf);if(i.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(i)}}}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 i=Integer(this.state.buf);if(i.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(i)}}}parseIntegerOct(){if(isOctit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let i=Integer(this.state.buf);if(i.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(i)}}}parseIntegerBin(){if(isBit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let i=Integer(this.state.buf);if(i.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(i)}}}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===t.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(i){if(this.state.resultArr){let n=this.state.resultArr[_contentType],s=tomlType(i);if(n!==s)throw this.error(new TomlError(`Inline lists must be a single type, not a mix of ${n} and ${s}`))}else this.state.resultArr=InlineList(tomlType(i));return isFloat(i)||isInteger(i)?this.state.resultArr.push(i.valueOf()):this.state.resultArr.push(i),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===t.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(i){let n=this.state.resultTable,s=i.key.pop();for(let o of i.key){if(hasKey(n,o)&&(!isTable(n[o])||n[o][_declared]))throw this.error(new TomlError("Can't redefine existing key"));n=n[o]=n[o]||Table()}if(hasKey(n,s))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(i.value)||isFloat(i.value)?n[s]=i.value.valueOf():n[s]=i.value,this.goto(this.parseInlineTableNext)}parseInlineTableNext(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===t.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 e}});var gn=at((yR,Su)=>{"use strict";Su.exports=R_;function R_(t,e){if(t.pos==null||t.line==null)return t;let r=t.message;if(r+=` at row ${t.line+1}, col ${t.col+1}, pos ${t.pos}:
|
|
259
|
-
`,e&&e.split){let i=e.split(/\n/),n=String(Math.min(i.length,t.line+3)).length,s=" ";for(;s.length<n;)s+=" ";for(let o=Math.max(0,t.line-1);o<Math.min(i.length,t.line+2);++o){let a=String(o+1);if(a.length<n&&(a=" "+a),t.line===o){r+=a+"> "+i[o]+`
|
|
260
|
-
`,r+=s+" ";for(let c=0;c<t.col;++c)r+=" ";r+=`^
|
|
261
|
-
`}else r+=a+": "+i[o]+`
|
|
262
|
-
`}}return t.message=r+`
|
|
263
|
-
`,t}});var Cu=at((wR,Au)=>{"use strict";Au.exports=L_;var N_=hn(),D_=gn();function L_(t){global.Buffer&&global.Buffer.isBuffer(t)&&(t=t.toString("utf8"));let e=new N_;try{return e.parse(t),e.finish()}catch(r){throw D_(r,t)}}});var Iu=at((_R,vu)=>{"use strict";vu.exports=M_;var P_=hn(),Tu=gn();function M_(t,e){e||(e={});let r=0,i=e.blocksize||40960,n=new P_;return new Promise((o,a)=>{setImmediate(s,r,i,o,a)});function s(o,a,c,l){if(o>=t.length)try{return c(n.finish())}catch(u){return l(Tu(u,t))}try{n.parse(t.slice(o,o+a)),setImmediate(s,o+a,a,c,l)}catch(u){l(Tu(u,t))}}}});var Ru=at((ER,Ou)=>{"use strict";Ou.exports=k_;var F_=Py("stream"),$u=hn();function k_(t){return t?H_(t):B_(t)}function H_(t){let e=new $u;return t.setEncoding("utf8"),new Promise((r,i)=>{let n,s=!1,o=!1;function a(){if(s=!0,!n)try{r(e.finish())}catch(u){i(u)}}function c(u){o=!0,i(u)}t.once("end",a),t.once("error",c),l();function l(){n=!0;let u;for(;(u=t.read())!==null;)try{e.parse(u)}catch(h){return c(h)}if(n=!1,s)return a();o||t.once("readable",l)}})}function B_(){let t=new $u;return new F_.Transform({objectMode:!0,transform(e,r,i){try{t.parse(e.toString(r))}catch(n){this.emit("error",n)}i()},flush(e){try{this.push(t.finish())}catch(r){this.emit("error",r)}e()}})}});var Nu=at((xR,ni)=>{"use strict";ni.exports=Cu();ni.exports.async=Iu();ni.exports.stream=Ru();ni.exports.prettyError=gn()});var Bu=at((bR,$o)=>{"use strict";$o.exports=U_;$o.exports.value=Io;function U_(t){if(t===null)throw ke("null");if(t===void 0)throw ke("undefined");if(typeof t!="object")throw ke(typeof t);if(typeof t.toJSON=="function"&&(t=t.toJSON()),t==null)return null;let e=ut(t);if(e!=="table")throw ke(e);return vo("","",t)}function ke(t){return new Error("Can only stringify objects, not "+t)}function j_(){return new Error("Array values can't have mixed types")}function Du(t){return Object.keys(t).filter(e=>Lu(t[e]))}function W_(t){return Object.keys(t).filter(e=>!Lu(t[e]))}function yn(t){let e=Array.isArray(t)?[]:Object.prototype.hasOwnProperty.call(t,"__proto__")?{["__proto__"]:void 0}:{};for(let r of Object.keys(t))t[r]&&typeof t[r].toJSON=="function"&&!("toISOString"in t[r])?e[r]=t[r].toJSON():e[r]=t[r];return e}function vo(t,e,r){r=yn(r);var i,n;i=Du(r),n=W_(r);var s=[],o=e||"";i.forEach(c=>{var l=ut(r[c]);l!=="undefined"&&l!=="null"&&s.push(o+wn(c)+" = "+Fu(r[c],!0))}),s.length>0&&s.push("");var a=t&&i.length>0?e+" ":"";return n.forEach(c=>{s.push(tE(t,a,c,r[c]))}),s.join(`
|
|
264
|
-
`)}function Lu(t){switch(ut(t)){case"undefined":case"null":case"integer":case"nan":case"float":case"boolean":case"string":case"datetime":return!0;case"array":return t.length===0||ut(t[0])!=="table";case"table":return Object.keys(t).length===0;default:return!1}}function ut(t){return t===void 0?"undefined":t===null?"null":typeof t=="bigint"||Number.isInteger(t)&&!Object.is(t,-0)?"integer":typeof t=="number"?"float":typeof t=="boolean"?"boolean":typeof t=="string"?"string":"toISOString"in t?isNaN(t)?"undefined":"datetime":Array.isArray(t)?"array":"table"}function wn(t){var e=String(t);return/^[-A-Za-z0-9_]+$/.test(e)?e:Pu(e)}function Pu(t){return'"'+Mu(t).replace(/"/g,'\\"')+'"'}function G_(t){return"'"+t+"'"}function K_(t,e){for(;e.length<t;)e="0"+e;return e}function Mu(t){return t.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])/,e=>"\\u"+K_(4,e.codePointAt(0).toString(16)))}function V_(t){let e=t.split(/\n/).map(r=>Mu(r).replace(/"(?="")/g,'\\"')).join(`
|
|
265
|
-
`);return e.slice(-1)==='"'&&(e+=`\\
|
|
266
|
-
`),`"""
|
|
267
|
-
`+e+'"""'}function Fu(t,e){let r=ut(t);return r==="string"&&(e&&/\n/.test(t)?r="string-multiline":!/[\b\t\n\f\r']/.test(t)&&/"/.test(t)&&(r="string-literal")),Io(t,r)}function Io(t,e){switch(e||(e=ut(t)),e){case"string-multiline":return V_(t);case"string":return Pu(t);case"string-literal":return G_(t);case"integer":return ku(t);case"float":return Y_(t);case"boolean":return q_(t);case"datetime":return J_(t);case"array":return Q_(t.filter(r=>ut(r)!=="null"&&ut(r)!=="undefined"&&ut(r)!=="nan"));case"table":return Z_(t);default:throw ke(e)}}function ku(t){return String(t).replace(/\B(?=(\d{3})+(?!\d))/g,"_")}function Y_(t){if(t===1/0)return"inf";if(t===-1/0)return"-inf";if(Object.is(t,NaN))return"nan";if(Object.is(t,-0))return"-0.0";var e=String(t).split("."),r=e[0],i=e[1]||0;return ku(r)+"."+i}function q_(t){return String(t)}function J_(t){return t.toISOString()}function z_(t){return t==="float"||t==="integer"}function X_(t){var e=ut(t[0]);return t.every(r=>ut(r)===e)?e:t.every(r=>z_(ut(r)))?"float":"mixed"}function Hu(t){let e=X_(t);if(e==="mixed")throw j_();return e}function Q_(t){t=yn(t);let e=Hu(t);var r="[",i=t.map(n=>Io(n,e));return i.join(", ").length>60||/\n/.test(i)?r+=`
|
|
268
|
-
`+i.join(`,
|
|
269
|
-
`)+`
|
|
270
|
-
`:r+=" "+i.join(", ")+(i.length>0?" ":""),r+"]"}function Z_(t){t=yn(t);var e=[];return Object.keys(t).forEach(r=>{e.push(wn(r)+" = "+Fu(t[r],!1))}),"{ "+e.join(", ")+(e.length>0?" ":"")+"}"}function tE(t,e,r,i){var n=ut(i);if(n==="array")return eE(t,e,r,i);if(n==="table")return rE(t,e,r,i);throw ke(n)}function eE(t,e,r,i){i=yn(i),Hu(i);var n=ut(i[0]);if(n!=="table")throw ke(n);var s=t+wn(r),o="";return i.forEach(a=>{o.length>0&&(o+=`
|
|
271
|
-
`),o+=e+"[["+s+`]]
|
|
272
|
-
`,o+=vo(s+".",e,a)}),o}function rE(t,e,r,i){var n=t+wn(r),s="";return Du(i).length>0&&(s+=e+"["+n+`]
|
|
273
|
-
`),s+vo(n+".",e,i)}});var Uu=at(Oo=>{"use strict";Oo.parse=Nu();Oo.stringify=Bu()});var Yu={};$(Yu,{detect:()=>oE,install:()=>cE,meta:()=>sE,resolveServerPath:()=>Gu,uninstall:()=>uE,verify:()=>lE,writeAgentsFile:()=>Vu,writeMcpEntry:()=>Ku});import{join as lr,dirname as _n}from"node:path";import{homedir as Wu}from"node:os";import{existsSync as fe}from"node:fs";import{fileURLToPath as iE}from"node:url";async function oE(){return fe(si)}function Gu(){let t=lr(ju,"dist","server.js"),e=lr(ju,"src","server.js");return fe(t)?t:e}async function Ku({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r={};try{let s=await e.readFile(Tt,"utf8");r=ur.default.parse(s)}catch{}let i=fe(Tt);return r.mcp_servers=r.mcp_servers||{},r.mcp_servers.sigil={command:process.execPath,args:[Gu(),"--mcp"],env:{DOTENV_CONFIG_PATH:nE}},t||await e.mkdir(si,{recursive:!0}),{action:(await q(Tt,ur.default.stringify(r),{dryRun:t})).action,path:Tt,detail:i?"+[mcp_servers.sigil] (other keys preserved)":"new config.toml with sigil MCP entry"}}function aE(){return[En,ue(),dr].join(`
|
|
274
|
-
`)}async function Vu({dryRun:t=!1}={}){let e=await import("node:fs/promises");t||await e.mkdir(si,{recursive:!0});let r="";fe(vt)&&(r=await e.readFile(vt,"utf8"));let i=aE(),n,s,o=r.indexOf(En),a=r.indexOf(dr);if(o!==-1&&a!==-1&&a>o){let l=r.slice(0,o),u=r.slice(a+dr.length);n=`${l}${i}${u}`,s="sigil block replaced (other content preserved)"}else if(!r.trim())n=`${i}
|
|
275
|
-
`,s="new AGENTS.md with sigil block";else{let l=r.endsWith(`
|
|
276
|
-
`)?`
|
|
277
|
-
`:`
|
|
98
|
+
${t}
|
|
278
99
|
|
|
279
|
-
|
|
280
|
-
`,s="appended sigil block (existing content preserved)"}return n===r?{action:"skip",path:vt,detail:"block already up to date"}:{action:(await q(vt,n,{dryRun:t})).action,path:vt,detail:s}}async function cE({dryRun:t=!1}={}){let e=[],r=await Ku({dryRun:t});r&&e.push(r);let i=await Vu({dryRun:t});return i&&e.push(i),{actions:e}}async function lE(){let t=await import("node:fs/promises");if(!fe(Tt))return{installed:!1,reason:"~/.codex/config.toml missing"};let e;try{e=ur.default.parse(await t.readFile(Tt,"utf8"))}catch(i){return{installed:!1,reason:`~/.codex/config.toml unparseable: ${i.message}`}}if(!e.mcp_servers?.sigil)return{installed:!1,reason:"[mcp_servers.sigil] missing from ~/.codex/config.toml"};if(!fe(vt))return{installed:!1,reason:"~/.codex/AGENTS.md missing"};let r=await t.readFile(vt,"utf8");return!r.includes(En)||!r.includes(dr)?{installed:!1,reason:"sigil block markers missing from ~/.codex/AGENTS.md"}:{installed:!0}}async function uE({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r=[];if(fe(Tt)){let i;try{i=ur.default.parse(await e.readFile(Tt,"utf8"))}catch(n){return r.push({action:"skip",path:Tt,detail:`unparseable \u2014 not touched: ${n.message}`}),{actions:r}}if(i.mcp_servers?.sigil){delete i.mcp_servers.sigil,Object.keys(i.mcp_servers).length===0&&delete i.mcp_servers;let n=await q(Tt,ur.default.stringify(i),{dryRun:t});r.push({action:n.action,path:Tt,detail:"-[mcp_servers.sigil]"})}else r.push({action:"skip",path:Tt,detail:"[mcp_servers.sigil] not present"})}if(fe(vt)){let i=await e.readFile(vt,"utf8"),n=i.indexOf(En),s=i.indexOf(dr);if(n!==-1&&s!==-1&&s>n){let o=i.slice(0,n).replace(/\n+$/,""),a=i.slice(s+dr.length).replace(/^\n+/,""),c=o&&a?`${o}
|
|
100
|
+
---
|
|
281
101
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
INSERT INTO pod (uid, pod_type, name, namespace, attrs, entity_id, connection_id, external_id, started_at, created_at, updated_at)
|
|
288
|
-
VALUES (?, ?, ?, ?, ?::jsonb, ?, ?, ?, ?, NOW(), NOW())
|
|
289
|
-
ON CONFLICT (pod_type, external_id, namespace) WHERE external_id IS NOT NULL DO UPDATE SET
|
|
290
|
-
attrs = pod.attrs || EXCLUDED.attrs,
|
|
291
|
-
updated_at = NOW()
|
|
292
|
-
RETURNING *, (xmax = 0) AS "isNew"
|
|
293
|
-
`,[c,t,r,l,JSON.stringify(n),s,o,e,a]);return{pod:u,isNew:u.isNew}}async function gr(t){return _("pod").where({uid:t}).first()||null}async function KE(t){return _("pod").where({id:t}).first()||null}async function yr({podType:t,externalId:e,namespace:r}){return _("pod").where({podType:t,externalId:e,namespace:r||E.defaults.namespace}).first()||null}async function Fo(t){return _("pod").where({entityId:t}).first()||null}async function VE({podType:t,namespace:e,status:r="active",limit:i=20}={}){let n=_("pod").where({status:r}).orderBy("updatedAt","desc").limit(i);return t&&n.where({podType:t}),e&&n.where({namespace:e}),n}async function YE(t){await _("pod").where({id:t}).update({status:"archived",updatedAt:_.fn.now()})}async function qE(t){await _("pod").where({id:t}).del()}async function wr(t,e){await _.raw("UPDATE pod SET attrs = attrs || ?::jsonb, updated_at = NOW() WHERE id = ?",[JSON.stringify(e),t])}async function ko(t,e=new Date){await _("pod").where({id:t}).update({endedAt:e,updatedAt:_.fn.now()})}async function JE(t,e){await _("pod").where({entityId:t}).update({entityId:e,updatedAt:_.fn.now()})}async function _r(t,{docs:e=0,facts:r=0}){!e&&!r||await _.raw(`UPDATE pod
|
|
294
|
-
SET member_doc_count = member_doc_count + ?,
|
|
295
|
-
member_fact_count = member_fact_count + ?,
|
|
296
|
-
updated_at = NOW()
|
|
297
|
-
WHERE id = ?`,[e,r,t])}var $t=g(()=>{li();N();O()});var xr={};$(xr,{CURSOR_PATH:()=>Er,endActiveSession:()=>sx,ensureActiveSession:()=>rx,getActiveCursor:()=>nx,getActiveSessionPodUid:()=>Ho});import{writeFile as zE,readFile as XE,unlink as QE}from"node:fs/promises";import{existsSync as ZE,mkdirSync as tx}from"node:fs";import{dirname as dd}from"node:path";async function Sn(){try{let t=await XE(Er,"utf8");return JSON.parse(t)}catch{return null}}async function fd(t){ZE(dd(Er))||tx(dd(Er),{recursive:!0}),await zE(Er,JSON.stringify(t,null,2),"utf8")}async function rx({sessionId:t,transcriptPath:e=null,cwd:r=null,model:i=null,namespace:n=null}){if(!t)throw new Error("ensureActiveSession requires sessionId from hook stdin");let s=n||E.defaults.namespace,o=await Sn();if(o&&o.session_id===t&&o.namespace===s){let l=await gr(o.pod_uid);if(l)return await wr(l.id,{turn_count:(ox(l.attrs)||0)+1}),await ix(o),l}let a=new Date,{pod:c}=await We({podType:Bo,externalId:t,name:jo({sessionId:t,startedAt:a}),namespace:s,attrs:Uo({sessionId:t,transcriptPath:e,cwd:r,turnCount:1,model:i}),startedAt:a});return await fd({session_id:t,pod_uid:c.uid,namespace:s,started_at:c.startedAt??a.toISOString(),last_seen_at:new Date().toISOString()}),c}async function ix(t){await fd({...t,last_seen_at:new Date().toISOString()})}async function Ho({allowStale:t=!1}={}){let e=await Sn();return!e||!e.pod_uid||!t&&e.started_at&&Date.now()-new Date(e.started_at).getTime()>ex?null:e.pod_uid}async function nx(){return Sn()}async function sx({conclusion:t=null,summary:e=null}={}){let r=await Sn();if(!r)return null;let i=await gr(r.pod_uid);if(i){if(t||e){let n={};t&&(n.conclusion=t),e&&(n.summary=e),await wr(i.id,n)}await ko(i.id)}try{await QE(Er)}catch{}return i}function ox(t){if(!t)return 0;if(typeof t=="object")return t.turn_count??0;try{return JSON.parse(t).turn_count??0}catch{return 0}}var Er,ex,Ge=g(()=>{$t();An();O();ht();Er=Cs,ex=360*60*1e3});var Wo={};$(Wo,{POD_TYPE:()=>Bo,buildAttrs:()=>Uo,claudeSessionKind:()=>Go,defaultName:()=>jo,formatForDisplay:()=>ax});function Uo({sessionId:t,transcriptPath:e=null,cwd:r=null,turnCount:i=0,model:n=null,conclusion:s=null,summary:o=null}){return{session_id:t,transcript_path:e,cwd:r,turn_count:i,model:n,conclusion:s,summary:o}}function jo({sessionId:t,startedAt:e=new Date}={}){let i=(e instanceof Date?e:new Date(e)).toISOString().replace("T"," ").slice(0,16),n=t?t.slice(0,8):"unknown";return`claude-session ${i} (${n})`}function ax(t){let e=cx(t.attrs);return{uid:t.uid,name:t.name,sessionId:e.session_id??t.externalId,transcriptPath:e.transcript_path,cwd:e.cwd,model:e.model,turnCount:e.turn_count??0,conclusion:e.conclusion,startedAt:t.startedAt,endedAt:t.endedAt,memberFactCount:t.memberFactCount,memberDocCount:t.memberDocCount}}function cx(t){if(!t)return{};if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{}}}var Bo,Go,An=g(()=>{Ge();Bo="claude_session",Go={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 t=await Ho();return t?[t]:[]}catch{return[]}}}});function md({platforms:t={},role:e=null,relationship:r=null,notes:i=null}){return{platforms:t,role:e,relationship:r,notes:i}}function hd(t={}){return t.slack?.user_id?`slack:${t.slack.user_id}`:t.github?.username?`github:${t.github.username}`:t.email?`email:${String(t.email).toLowerCase()}`:null}function gd(t={},e={}){let r={...t};for(let[i,n]of Object.entries(e))n&&(r[i]={...r[i]||{},...typeof n=="object"?n:{value:n}});return r}var Ko,lx,pd,Vo=g(()=>{N();O();Ko="person",lx=1440*60*1e3,pd={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(t={})=>{let e=t.namespace||E.defaults.namespace;try{let r=new Date(Date.now()-lx);return(await _("pod as p").join("pod_membership as pm","pm.pod_id","p.id").join("fact_lifecycle as fl","fl.fact_id","pm.member_id").where("pm.memberType","fact").where("p.podType","person").where("p.namespace",e).where("p.status","active").where("fl.lastAccessedAt",">=",r).distinct("p.uid")).map(n=>n.uid)}catch{return[]}}}});var Ke={};$(Ke,{attach:()=>Cn,attachDocument:()=>Yo,attachEntity:()=>dx,attachFact:()=>ui,detach:()=>fx,factIdsInPod:()=>hx,listMembers:()=>px,listPodsForMember:()=>mx});async function Cn(t,e,r,i="primary"){let{rowCount:n}=await _.raw(`INSERT INTO pod_membership (pod_id, member_type, member_id, role)
|
|
298
|
-
VALUES (?, ?, ?, ?)
|
|
299
|
-
ON CONFLICT (pod_id, member_type, member_id) DO NOTHING`,[t,e,r,i]);return n>0&&(e==="fact"?await _r(t,{facts:1}):e==="document"&&await _r(t,{docs:1})),{attached:n>0}}async function fx(t,e,r){let i=await _("pod_membership").where({podId:t,memberType:e,memberId:r}).del();return i>0&&(e==="fact"?await _r(t,{facts:-1}):e==="document"&&await _r(t,{docs:-1})),{detached:i>0}}async function px(t,{memberType:e,limit:r=20}={}){if(!e)throw new Error("listMembers requires a memberType filter");return _(`${e} as t`).join("pod_membership as pm",function(){this.on("pm.member_id","=","t.id").andOnVal("pm.member_type","=",e)}).where("pm.pod_id",t).orderBy("pm.createdAt","desc").limit(r).select("t.*","pm.role as podRole","pm.createdAt as attachedAt")}async function mx(t,e){return _("pod as p").join("pod_membership as pm","pm.pod_id","p.id").where("pm.memberType",t).where("pm.memberId",e).select("p.*","pm.role as podRole")}async function hx(t){return await _("pod_membership").where({podId:t,memberType:"fact"}).pluck("memberId")}var ui,Yo,dx,br=g(()=>{N();$t();ui=(t,e,r)=>Cn(t,"fact",e,r),Yo=(t,e,r)=>Cn(t,"document",e,r),dx=(t,e,r)=>Cn(t,"entity",e,r)});var wd={};$(wd,{POD_TYPE:()=>Jo,deriveProjectRoot:()=>Xo,ensureProjectPod:()=>yx,formatForDisplay:()=>_x,membership:()=>Ke,projectKind:()=>zo});import{execFileSync as gx}from"node:child_process";import{basename as yd}from"node:path";async function yx({cwd:t,namespace:e=null}){if(!t)return null;let r=Xo(t),i=e||E.defaults.namespace,s=(r!==t?!1:qo(t)===t)?r:qo(t),{pod:o}=await We({podType:Jo,externalId:r,name:yd(r)||r,namespace:i,attrs:{root_path:r,git_root:s||null,display_name:yd(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return o}function Xo(t){return qo(t)||t}function qo(t){try{return gx("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function wx(){try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(Ge(),xr));return(await t())?.cwd||null}catch{return null}}function _x(t){let e=Ex(t.attrs);return{uid:t.uid,name:t.name,rootPath:e.root_path,gitRoot:e.git_root,displayName:e.display_name,discoveredAt:e.discovered_at,memberFactCount:t.memberFactCount,memberDocCount:t.memberDocCount}}function Ex(t){if(!t)return{};if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{}}}var Jo,zo,Qo=g(()=>{$t();br();O();Jo="project",zo={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(t={})=>{let e=t.cwd||await wx();if(!e)return[];try{let r=t.namespace||E.defaults.namespace,i=Xo(e),n=await yr({podType:Jo,externalId:i,namespace:r});return n?[n.uid]:[]}catch{return[]}}}});async function bx(t){if(t.project)return t.project;if(!t.cwd)try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(Ge(),xr)),r=await e();t={...t,cwd:r?.cwd}}catch{return null}if(!t.cwd)return null;try{let{deriveProjectRoot:e}=await Promise.resolve().then(()=>(Qo(),wd)),r=e(t.cwd);return r?r.split("/").pop():null}catch{return null}}function Sx(t){if(!t)return{};if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{}}}var xx,_d,Ed=g(()=>{N();O();xx="playbook",_d={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(t={})=>{let e=t.namespace||E.defaults.namespace,r=await bx(t);try{let n=await _("pod").where({podType:xx,namespace:e,status:"active"}).select("uid","attrs");return r?n.filter(o=>{let a=Sx(o.attrs);return!a.project||a.project===r}).map(o=>o.uid):n.map(o=>o.uid)}catch{return[]}}}});var Ax,xd,bd=g(()=>{N();O();Ax=["__virtual:vital__"],xd={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()=>Ax,fetchFacts:async(t={},{slots:e=8,namespace:r}={})=>{let i=r||t.namespace||E.defaults.namespace;return _("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":i}).where(n=>{n.where("f.importance","vital").orWhere("f.importance_score",5)}).orderByRaw("COALESCE(fl.access_count, 0) DESC, f.created_at DESC").limit(e).pluck("f.content")}}});var Zo={};$(Zo,{registerBuiltins:()=>Ad});function Ad(){if(!Sd){for(let t of Cx)Lo(t);Sd=!0}}var Cx,Sd,di=g(()=>{mr();An();Vo();Qo();Ed();bd();Cx=[Go,zo,pd,_d,xd],Sd=!1;Ad()});var Sr={};$(Sr,{factsInPodsByRecency:()=>Td,getHotFacts:()=>Cd,updateContextSnapshot:()=>Ix});async function Cd({namespace:t,limit:e=Tx,ctx:r={}}={}){let i=t||E.defaults.namespace,n={...r,namespace:i};n.cwd||(n.cwd=await vx());let s=await ci(n),o=await Promise.all(s.map(async({kind:l,scope:u})=>{try{return typeof l.fetchFacts=="function"?await l.fetchFacts(n,{slots:l.hotContextBudget,namespace:i}):await Td(u,i,l.hotContextBudget)}catch{return[]}})),a=new Set,c=[];for(let l of o)for(let u of l)if(!(!u||a.has(u))&&(a.add(u),c.push(u),c.length>=e))return c;if(c.length<e){let l=await _("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":i}).orderByRaw("COALESCE(fl.last_accessed_at, f.created_at) DESC").limit(e).pluck("f.content");for(let u of l)if(!(!u||a.has(u))&&(a.add(u),c.push(u),c.length>=e))break}return c.slice(0,e)}async function Td(t,e,r){if(!Array.isArray(t)||t.length===0)return[];let i=t.filter(n=>typeof n=="string"&&!n.startsWith("__virtual:"));return i.length===0?[]:_("fact as f").join("pod_membership as pm",function(){this.on("pm.member_id","=","f.id").andOnVal("pm.member_type","=","fact")}).join("pod as p","p.id","pm.pod_id").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").whereIn("p.uid",i).where({"f.status":"active","f.namespace":e}).orderByRaw(`
|
|
300
|
-
COALESCE(f.importance_score, 2) DESC,
|
|
301
|
-
COALESCE(fl.last_accessed_at, f.created_at) DESC
|
|
302
|
-
`).limit(r).pluck("f.content")}async function vx(){try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(Ge(),xr));return(await t())?.cwd||null}catch{return null}}async function Ix({namespace:t,limit:e,ctx:r}={}){let i=await import("node:fs/promises"),n=xs,s=await Cd({namespace:t,limit:e,ctx:r}),o="<!-- sigil-context -->";if(!s.length)return 0;let a=new Date().toISOString().slice(0,16).replace("T"," "),c=[o,`## Active Context *(${s.length} facts \xB7 refreshed ${a})*`,"",s.map(h=>`- ${h}`).join(`
|
|
303
|
-
`),o].join(`
|
|
304
|
-
`),l="";try{l=await i.readFile(n,"utf8")}catch{}let u=l.includes(o)?l.replace(new RegExp(`${o}[\\s\\S]*?${o}`),c):l+(l.trim()?`
|
|
102
|
+
Respond with ONLY a JSON array of facts. Each fact object must have exactly these fields:
|
|
103
|
+
- "content" (string): the atomic fact statement
|
|
104
|
+
- "category" (string): one of ${r.join(", ")}
|
|
105
|
+
- "confidence" (string): one of high, medium, low
|
|
106
|
+
- "importance" (string): "vital" if essential to understanding the topic, "supplementary" if supporting detail
|
|
305
107
|
|
|
306
|
-
|
|
307
|
-
`;return await i.writeFile(n,u,"utf8"),s.length}var Tx,Ar=g(()=>{N();O();ht();di();mr();Tx=20});async function vd(t){let e=await _o();return yo(t,e)}async function pe(t,{model:e,caller:r}={}){let{provider:i,model:n}=await vd(e),s=await an(i),o=Date.now();try{let a=await uo(()=>s(t,{model:n,jsonMode:!1}),E.llm.maxRetries),c=a.cost||lo(a.model,a.inputTokens,a.outputTokens);return Zr({provider:i,model:a.model,caller:r,input:t,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-o,status:"success"}),a.text}catch(a){throw Zr({provider:i,model:n,caller:r,input:t,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-o,status:"error",error:a.message}),a}}async function Kt(t,{model:e,caller:r}={}){let{provider:i,model:n}=await vd(e),s=await an(i),o=Date.now();try{let a=await uo(()=>s(t,{model:n,jsonMode:!0}),E.llm.maxRetries),c=a.cost||lo(a.model,a.inputTokens,a.outputTokens);return Zr({provider:i,model:a.model,caller:r,input:t,response:a.text,inputTokens:a.inputTokens,outputTokens:a.outputTokens,cost:c,durationMs:Date.now()-o,status:"success"}),ta(a.text)}catch(a){throw Zr({provider:i,model:n,caller:r,input:t,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-o,status:"error",error:a.message}),a}}function ta(t){try{return JSON.parse(t.trim())}catch{}let e=t.match(/```(?:json)?\s*([\s\S]*?)```/);if(e)try{return JSON.parse(e[1].trim())}catch{}let r=t.match(/[\[{][\s\S]*[\]}]/);if(r)try{return JSON.parse(r[0])}catch{}return null}var Vt=g(()=>{O();or();ti()});var Ve={};$(Ve,{deleteFact:()=>Bx,deleteNamespace:()=>jx,findByUid:()=>Lx,findSimilar:()=>Nd,getFactCount:()=>Hx,getHotFacts:()=>Fx,insertFact:()=>fi,listByCategory:()=>Px,listByDocument:()=>Mx,listFacts:()=>kx,listNamespaces:()=>Ux,markContradicted:()=>Od,markSuperseded:()=>Rd,recordAccess:()=>ra,saveFact:()=>ea});import{readFile as $x}from"node:fs/promises";import Ox from"node:path";async function ea({content:t,category:e,confidence:r,importance:i,namespace:n,sourceDocumentIds:s,sourceSection:o,embedding:a}){let c=a||await Ne(t),l=await Nd(c,{namespace:n});if(!l.length)return{action:"ADD",fact:await fi({content:t,category:e,confidence:r,importance:i,namespace:n,sourceDocumentIds:s,sourceSection:o,embedding:c})};let u=l[0];if(u.similarity>=Nx)return{action:"SKIP",existing:u};if(u.similarity>=$d){let d=await Dx(t,u.content);if(d==="UPDATE"){let f=await fi({content:t,category:e,confidence:r,importance:i,namespace:n,sourceDocumentIds:s,sourceSection:o,embedding:c});return await Rd(u.id,f.id),await Id({targetType:"fact",targetId:u.id,event:"UPDATE",oldContent:u.content,newContent:t,triggeredBy:`audm:sim=${u.similarity.toFixed(3)}`}),{action:"UPDATE",fact:f,supersededId:u.id}}if(d==="CONTRADICT"){let f=await fi({content:t,category:e,confidence:r,importance:i,namespace:n,sourceDocumentIds:s,sourceSection:o,embedding:c});return await Od(u.id,f.id),await Id({targetType:"fact",targetId:u.id,event:"CONTRADICT",oldContent:u.content,newContent:t,triggeredBy:`audm:sim=${u.similarity.toFixed(3)}`}),{action:"CONTRADICT",fact:f,contradictedId:u.id}}}return{action:"ADD",fact:await fi({content:t,category:e,confidence:r,importance:i,namespace:n,sourceDocumentIds:s,sourceSection:o,embedding:c})}}async function Dx(t,e){let i=`${await $x(Rx,"utf8")}
|
|
108
|
+
Output the JSON array directly, no explanation or wrapping.`}function JC(e,t){let r=Array.isArray(e)?e:Array.isArray(e?.facts)?e.facts:null;return r?r.filter(n=>n.content&&t.includes(n.category)&&["high","medium","low"].includes(n.confidence)).map(n=>({...n,importance:["vital","supplementary"].includes(n.importance)?n.importance:"supplementary"})):[]}async function zC(e,t,r){let n=YC(e),i=qC(t,n,r),o=await We(i,{model:E.llm.extractionModel,caller:"extractor"});return JC(o,r).map(a=>({...a,sourceSection:e.sectionHeading||null}))}async function Mg(e,{promptPath:t,categories:r}){if(!e.length)return[];let n=await VC(t,"utf8"),i=za(e,KC),o=[];for(let s of i){let a=await Promise.all(s.map(c=>zC(c,n,r).catch(l=>(console.error(`[extractor] chunk failed: ${l.message}`),[]))));o.push(...a.flat())}return o}var KC,Fg=f(()=>{Bo();Ve();R();KC=5});function gn(e){if(!e||typeof e!="string")return e;let t=e;for(let r of XC)t=t.replace(r,li);return t=t.replace(ZC,(r,n)=>`${n}=${li}`),t=t.replace(QC,(r,n)=>`${n}${li}:${li}@`),t=t.replace(t$,(r,n)=>`${n}=${li}`),t}var li,XC,ZC,QC,e$,t$,Uo=f(()=>{li="***MASKED***",XC=[/\b(sk-(?:proj-|ant-)?[A-Za-z0-9_\-]{20,})\b/g,/\b(ghp_[A-Za-z0-9]{36,})\b/g,/\b(github_pat_[A-Za-z0-9_]{20,})\b/g,/\b(gho_[A-Za-z0-9]{36,})\b/g,/\b(glpat-[A-Za-z0-9_\-]{20,})\b/g,/\b(xox[baprs]-[A-Za-z0-9\-]{10,})\b/g,/\b(whsec_[A-Za-z0-9]{20,})\b/g,/\b(rk_(?:live|test)_[A-Za-z0-9]{20,})\b/g,/\b(AKIA[A-Z0-9]{16})\b/g,/\b(ASIA[A-Z0-9]{16})\b/g,/\b(eyJ[A-Za-z0-9_\-]{20,}\.[A-Za-z0-9_\-]{10,}\.[A-Za-z0-9_\-]{10,})\b/g,/\b([A-Za-z0-9]{24}\.[A-Za-z0-9_\-]{6}\.[A-Za-z0-9_\-]{27})\b/g,/\b(\d{8,12}:[A-Za-z0-9_\-]{35})\b/g],ZC=new RegExp(`\\b(api[_-]?key|api[_-]?secret|secret[_-]?key|secret|token|password|passwd|pwd|auth[_-]?token|access[_-]?token|refresh[_-]?token|bearer|private[_-]?key|client[_-]?secret)\\s*[=:]\\s*["']?([^\\s"']{8,})["']?`,"gi"),QC=/(\w+:\/\/)([^:/\s]+):([^@\s]{3,})@/g,e$=["DATABASE_URL","REDIS_URL","MONGODB_URI","MONGO_URI","POSTGRES_URL","DSN","CONNECTION_STRING","ENCRYPTION_KEY","JWT_SECRET","SIGIL_ENCRYPTION_KEY","SESSION_SECRET","WEBHOOK_SECRET"],t$=new RegExp(`\\b(${e$.join("|")})\\s*[=:]\\s*["']?([^\\s"']+)["']?`,"gi")});var Ut={};T(Ut,{deleteFact:()=>d$,deleteNamespace:()=>f$,findByUid:()=>s$,findSimilar:()=>Gg,getFactCount:()=>u$,getHotFacts:()=>c$,insertFact:()=>yn,listByCategory:()=>a$,listByDocument:()=>Bg,listFacts:()=>l$,listNamespaces:()=>p$,markContradicted:()=>Ug,markSuperseded:()=>yc,recordAccess:()=>wc,saveFact:()=>gc,supersedeStaleDocFacts:()=>Go});import{readFile as r$}from"node:fs/promises";import n$ from"node:path";async function gc({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:a}){e=gn(e);let c=a||await or(e),l=await Gg(c,{namespace:i}),d={skip:Hg,ambiguous:mc};if(!l.length)return{action:"ADD",fact:await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{topSimilarity:null,matchCount:0,decision:"no-match",thresholds:d}};let p=l[0],u={topSimilarity:Number(p.similarity),matchCount:l.length,existingId:p.id,existingContent:p.content,thresholds:d};if(p.similarity>=Hg)return{action:"SKIP",existing:p,audm:{...u,decision:"skip-duplicate"}};if(p.similarity>=mc){let g=await o$(e,p.content);if(g==="UPDATE"){let w=await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c});return await yc(p.id,w.id),await hc({targetType:"fact",targetId:p.id,event:"UPDATE",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"UPDATE",fact:w,supersededId:p.id,audm:{...u,decision:"llm:UPDATE"}}}if(g==="CONTRADICT"){let w=await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c});return await Ug(p.id,w.id),await hc({targetType:"fact",targetId:p.id,event:"CONTRADICT",oldContent:p.content,newContent:e,triggeredBy:`audm:sim=${p.similarity.toFixed(3)}`}),{action:"CONTRADICT",fact:w,contradictedId:p.id,audm:{...u,decision:"llm:CONTRADICT"}}}return{action:"ADD",fact:await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{...u,decision:"llm:ADD"}}}return{action:"ADD",fact:await yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:c}),audm:{...u,decision:"below-ambiguous"}}}async function o$(e,t){let n=`${await r$(i$,"utf8")}
|
|
308
109
|
|
|
309
|
-
**EXISTING FACT:** ${
|
|
110
|
+
**EXISTING FACT:** ${t}
|
|
310
111
|
|
|
311
|
-
**NEW FACT:** ${
|
|
112
|
+
**NEW FACT:** ${e}`,o=(await mt(n,{model:E.llm.decisionModel,caller:"audm"})).trim().toUpperCase();return o.includes("UPDATE")?"UPDATE":o.includes("CONTRADICT")?"CONTRADICT":"ADD"}async function yn({content:e,category:t,confidence:r,importance:n,namespace:i,sourceDocumentIds:o,sourceSection:s,embedding:a}){let c=`fact-${Ke(16)}`,l=null,d=null;try{let{currentDeviceId:u,currentAgent:m}=await Promise.resolve().then(()=>(qi(),aa));l=u(),d=m()}catch{}let[p]=await _("fact").insert({uid:c,content:e,category:t,confidence:r||"medium",importance:n||"supplementary",namespace:i,status:"active",sourceDocumentIds:o||[],sourceSection:s||null,embedding:fe(a),validFrom:new Date,embeddingModel:E.embedding.model||null,embeddingDim:Number(E.embedding.dimensions)||null,createdByDeviceId:l,createdByAgent:d}).returning("*");return await _.raw(`
|
|
312
113
|
UPDATE fact
|
|
313
114
|
SET search_vector = to_tsvector('english', content)
|
|
314
115
|
WHERE id = ?
|
|
315
|
-
`,[
|
|
116
|
+
`,[p.id]),p}async function s$(e){let[t]=await _("fact").where({uid:e});return t||null}async function a$(e,{namespace:t,limit:r=50}={}){let n=_("fact").where({category:e,status:"active"}).orderBy("createdAt","desc").limit(r);return t&&n.where({namespace:t}),n}async function Bg(e){return _("fact").whereRaw("? = ANY(source_document_ids)",[e]).where({status:"active"}).orderBy("createdAt","desc")}async function Ug(e,t){await _("fact").where({id:e}).update({status:"contradicted",contradictedById:t,validUntil:_.fn.now()})}async function yc(e,t){await _("fact").where({id:e}).update({status:"superseded",supersededById:t,validUntil:_.fn.now()})}async function Go(e,t=[]){let r=new Set((t||[]).filter(s=>s!=null)),n=await Bg(e),i=0,o=0;for(let s of n){if(r.has(s.id))continue;(Array.isArray(s.sourceDocumentIds)?s.sourceDocumentIds:[]).length<=1?(await yc(s.id,null),await hc({targetType:"fact",targetId:s.id,event:"SUPERSEDE",oldContent:s.content,newContent:null,triggeredBy:`reingest:doc=${e}`}),i++):(await _("fact").where({id:s.id}).update({sourceDocumentIds:_.raw("array_remove(source_document_ids, ?)",[e])}),o++)}return{superseded:i,dissociated:o}}async function Gg(e,{namespace:t,threshold:r=mc,limit:n=5}){let i=fe(e),o=`${st("embedding")} <=> ${at()}`;return _.transaction(async s=>{await s.raw("SET LOCAL hnsw.ef_search = 40");let{rows:a}=await s.raw(`
|
|
316
117
|
SELECT id, uid, content, category, status,
|
|
317
|
-
1 - (${
|
|
118
|
+
1 - (${o}) as similarity
|
|
318
119
|
FROM fact
|
|
319
120
|
WHERE namespace = ?
|
|
320
121
|
AND status = 'active'
|
|
321
122
|
AND embedding IS NOT NULL
|
|
322
|
-
AND 1 - (${
|
|
323
|
-
ORDER BY ${
|
|
123
|
+
AND 1 - (${o}) >= ?
|
|
124
|
+
ORDER BY ${o}
|
|
324
125
|
LIMIT ?
|
|
325
|
-
`,[
|
|
126
|
+
`,[i,t,i,r,i,n]);return a})}async function hc({targetType:e,targetId:t,event:r,oldContent:n,newContent:i,triggeredBy:o}){await _("history").insert({targetType:e,targetId:t,event:r,oldContent:n||null,newContent:i||null,triggeredBy:o||null})}async function wc(e){e.length&&await _.raw(`UPDATE fact_lifecycle
|
|
326
127
|
SET access_count = access_count + 1,
|
|
327
128
|
last_accessed_at = NOW(),
|
|
328
129
|
stage = CASE WHEN stage = 'stable' THEN 'editing' ELSE stage END,
|
|
329
130
|
stage_entered_at = CASE WHEN stage = 'stable' THEN NOW() ELSE stage_entered_at END
|
|
330
|
-
WHERE fact_id = ANY(?)`,[
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
131
|
+
WHERE fact_id = ANY(?)`,[e])}async function c$(e,{limit:t=10,since:r}={}){let n=_("fact as f").join("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active"}).where("fl.access_count",">",0).orderBy("fl.access_count","desc").limit(t).select("f.*");return e&&n.where({"f.namespace":e}),r&&n.where("fl.last_accessed_at",">=",r),n}async function l$({namespace:e,limit:t=50,offset:r=0,category:n}={}){let i=_("fact").where({status:"active"}).select("id","uid","content","category","confidence","importance","createdAt","namespace").orderBy("createdAt","desc").limit(t).offset(r);return e&&i.where({namespace:e}),n&&i.where({category:n}),i}async function u$(e){let t=_("fact").where({status:"active"});e&&t.where({namespace:e});let[{count:r}]=await t.count("id as count");return Number(r)}async function d$(e){let r=typeof e=="string"&&e.length>8?{uid:e}:{id:Number(e)},n=await _("fact").where(r).first();return n?(await _("fact_entity").where({factId:n.id}).del(),await _("fact").where({id:n.id}).del(),n):null}async function p$(){return(await _("fact").where({status:"active"}).select("namespace").count("id as factCount").groupBy("namespace").orderBy("namespace")).map(t=>({namespace:t.namespace,factCount:Number(t.factCount)}))}async function f$(e){await _.raw("DELETE FROM relation WHERE source_fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await _.raw("DELETE FROM fact_entity WHERE fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[e]),await _.raw("DELETE FROM relation WHERE source_id IN (SELECT id FROM entity WHERE namespace = ?) OR target_id IN (SELECT id FROM entity WHERE namespace = ?)",[e,e]);let t=await _("fact").where({namespace:e}).del(),r=await _("chunk").where({namespace:e}).del(),n=await _("document").where({namespace:e}).del(),i=await _("entity").where({namespace:e}).del();return{factsDeleted:t,chunksDeleted:r,docsDeleted:n,entitiesDeleted:i}}var i$,Hg,mc,lt=f(()=>{qr();D();Ot();Ve();$t();Uo();R();B();i$=n$.join(Ie,"audm-decision.md"),Hg=E.memory.skipThreshold,mc=E.memory.ambiguousThreshold});var jo,m$,TV,jg,_c=f(()=>{jo={preference:"Personal likes, dislikes, favorites, preferred tools/foods/methods",opinion:"Personal views, assessments, evaluations of tools/concepts/approaches",personal:"Personal facts \u2014 birthday, workplace, location, biographical details",experience:"Personal experiences \u2014 projects built, tools used, skills acquired",business_rule:"Organizational rules, policies, constraints",workflow:"Process flows, state transitions, procedures",architecture:"System design, service interactions, infrastructure",convention:"Coding patterns, naming rules, team standards",decision:"Why choices were made, tradeoffs considered",domain_knowledge:"Domain-specific terminology and concepts",key_insight:"Important takeaways, notable explanations",metric:"Quantitative data, measurements, statistics",issue:"Known problems, bugs, limitations, risks",action_item:"Tasks, follow-ups, assignments, deadlines"},m$=["preference","opinion","personal","experience"],TV=Object.keys(jo).filter(e=>!m$.includes(e)),jg=jo});import{readFile as h$}from"node:fs/promises";import{join as g$}from"node:path";async function Vg(e,{title:t}={}){if(!e?.trim()||e.trim().length<w$)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(e.length>_$)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let n=`${await h$(y$,"utf8")}
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
Title: ${t||"(none)"}
|
|
136
|
+
Input: ${e}
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts": [{"content":"...","category":"...","confidence":"high|medium|low","importance":"vital|supplementary"}], "entities": ["..."], "reasoning": "..." }`;try{let i=await We(n,{model:E.llm.extractionModel,caller:"classifier"});if(!i||!E$.includes(i.route))return Wg("Invalid classification result");let o=Object.keys(jg),s=i.route==="thought"&&Array.isArray(i.facts)?i.facts.filter(a=>a.content&&o.includes(a.category)).map(a=>({...a,confidence:["high","medium","low"].includes(a.confidence)?a.confidence:"high",importance:["vital","supplementary"].includes(a.importance)?a.importance:"vital"})):[];return{route:i.route,facts:s,entities:Array.isArray(i.entities)?i.entities:[],reasoning:i.reasoning||""}}catch(i){return console.error("[input-classifier] Failed:",i.message),Wg(i.message)}}function Wg(e){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${e}`}}var y$,w$,_$,E$,Kg=f(()=>{Ve();R();_c();B();y$=g$(Ie,"input-classifier.md"),w$=3,_$=2e3,E$=["thought","knowledge","noise"]});var pr={};T(pr,{findById:()=>Xe,findByName:()=>lr,findByUid:()=>b$,findSimilar:()=>x$,getCanonicalEntity:()=>dr,getEntityCount:()=>I$,incrementMentionCount:()=>ui,insertEntity:()=>Ec,listByType:()=>v$,pushAlias:()=>Wo,searchByName:()=>xc,updateDescription:()=>S$,updateEntityTypes:()=>ur,updateName:()=>bc});async function Ec({name:e,entityType:t,description:r,namespace:n,externalId:i,embedding:o}){let s=`ent-${Ke(16)}`,[a]=await _("entity").insert({uid:s,name:e,entityType:t,description:r||null,namespace:n||E.defaults.namespace,externalId:i||null,mentionCount:1,embedding:fe(o)}).returning("*");return a}async function lr(e,t){let r=t||E.defaults.namespace,n=e.toLowerCase();return _("entity").where({namespace:r}).whereNull("mergedWith").where(function(){this.whereRaw("LOWER(name) = ?",[n]).orWhereRaw("aliases @> ARRAY[?]::text[]",[n])}).first()||null}async function Wo(e,t){if(!t)return;let r=t.toLowerCase();await _.raw(`
|
|
340
141
|
UPDATE entity
|
|
341
142
|
SET aliases = (
|
|
342
143
|
SELECT ARRAY(SELECT DISTINCT unnest(aliases || ARRAY[?]::text[]))
|
|
343
144
|
)
|
|
344
145
|
WHERE id = ?
|
|
345
|
-
`,[r,
|
|
146
|
+
`,[r,e])}async function bc(e,t){await _("entity").where({id:e}).update({name:t})}async function b$(e){return _("entity").where({uid:e}).first()||null}async function Xe(e){return _("entity").where({id:e}).first()||null}async function x$(e,{entityType:t,namespace:r,threshold:n=.85,limit:i=3}){let o=fe(e),s=`${st("embedding")} <=> ${at()}`,{rows:a}=await _.raw(`
|
|
346
147
|
SELECT id, uid, name, entity_type AS "entityType", description,
|
|
347
148
|
mention_count AS "mentionCount",
|
|
348
|
-
1 - (${
|
|
149
|
+
1 - (${s}) AS similarity
|
|
349
150
|
FROM entity
|
|
350
151
|
WHERE entity_type = ?
|
|
351
152
|
AND namespace = COALESCE(?, ?)
|
|
352
153
|
AND embedding IS NOT NULL
|
|
353
154
|
AND merged_with IS NULL
|
|
354
|
-
AND 1 - (${
|
|
355
|
-
ORDER BY ${
|
|
155
|
+
AND 1 - (${s}) >= ?
|
|
156
|
+
ORDER BY ${s}
|
|
356
157
|
LIMIT ?
|
|
357
|
-
`,[
|
|
358
|
-
`),r=[],i=null,n=[];for(let a of e){let c=a.match(/^(#{1,6})\s+(.+)/);c?(n.length&&r.push({heading:i||"Introduction",text:n.join(`
|
|
359
|
-
`).trim()}),i=c[2].trim(),n=[]):n.push(a)}n.length&&r.push({heading:i||"Content",text:n.join(`
|
|
360
|
-
`).trim()});let s=r.map(a=>a.text).join(`
|
|
361
|
-
|
|
362
|
-
`),o=eb(e)||null;return{text:s,sections:r,metadata:{title:o}}}function eb(t){for(let e of t){let r=e.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var Pd=g(()=>{});function da(t){let e=t.split(/\n{2,}/).map(i=>i.trim()).filter(Boolean),r=e.length>1?e.map((i,n)=>({heading:`Section ${n+1}`,text:i})):[{heading:"Content",text:t.trim()}];return{text:t.trim(),sections:r,metadata:{}}}var Md=g(()=>{});function Fd(t){let e=rb(t),r=t.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,`
|
|
363
|
-
`),r=r.replace(/<br\s*\/?>/gi,`
|
|
364
|
-
`),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,`
|
|
365
|
-
|
|
366
|
-
`),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:e}}}function rb(t){let e=t.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return e?e[1].trim():null}var kd=g(()=>{});function Hd(t,{language:e}={}){let r=e||ob(t),i=ib(t,r);return{text:t.trim(),sections:i,metadata:{language:r}}}function ib(t,e){let r=t.split(`
|
|
367
|
-
`),i=[],n="Header",s=[],o=!1,a=0;for(let c of r){let l=nb(c,e);l&&a===0?(s.length&&i.push({heading:n,text:s.join(`
|
|
368
|
-
`).trim()}),n=l,s=[c],o=!0):s.push(c);for(let u of c)u==="{"&&a++,u==="}"&&(a=Math.max(0,a-1))}return s.length&&i.push({heading:n,text:s.join(`
|
|
369
|
-
`).trim()}),i.length<=1?sb(t):i.filter(c=>c.text)}function nb(t,e){let r=t.trim(),i=[/^(?: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+)/],n=[/^(?:async\s+)?def\s+(\w+)/,/^class\s+(\w+)/],s=[/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/,/^type\s+(\w+)/],o=[...i,...n,...s];for(let a of o){let c=r.match(a);if(c)return c[1]||c[0].slice(0,40)}return null}function sb(t){return t.split(/\n{2,}/).map((r,i)=>({heading:`Block ${i+1}`,text:r.trim()})).filter(r=>r.text)}function ob(t){return t.includes("import ")&&(t.includes("from ")||t.includes("require("))?"javascript":t.match(/^def\s/m)||t.match(/^class\s.*:/m)?"python":t.match(/^func\s/m)||t.includes("package ")?"go":t.match(/^fn\s/m)||t.includes("use ")?"rust":"unknown"}var Bd=g(()=>{});function Ud(t){let e;try{e=typeof t=="string"?JSON.parse(t):t}catch{return{text:t,sections:[{heading:"Content",text:t}],metadata:{}}}let r=fa(e);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function fa(t,e=0){if(t==null)return"";if(Array.isArray(t))return t.map((r,i)=>typeof r=="object"&&r!==null?`Item ${i+1}:
|
|
370
|
-
${fa(r,e+1)}`:`- ${r}`).join(`
|
|
371
|
-
`);if(typeof t=="object"){let r=" ".repeat(e);return Object.entries(t).filter(([,i])=>i!=null).map(([i,n])=>typeof n=="object"?`${r}${i}:
|
|
372
|
-
${fa(n,e+1)}`:`${r}${i}: ${n}`).join(`
|
|
373
|
-
`)}return String(t)}var jd=g(()=>{});function Wd(t,{format:e,filePath:r,contentType:i}={}){let n=e||ub(i)||db(r)||fb(t);return(lb[n]||da)(t)}function ub(t){if(!t)return null;let e=t.split(";")[0].trim();return cb[e]||null}function db(t){if(!t)return null;let e=t.match(/\.[^.]+$/)?.[0]?.toLowerCase();return e&&ab[e]||null}function fb(t){if(!t)return"text";let e=t.trim();return e.startsWith("{")||e.startsWith("[")?"json":e.startsWith("<!DOCTYPE")||e.startsWith("<html")?"html":e.match(/^#{1,6}\s/m)?"markdown":e.match(/^(import|export|function|class|const|let|var|def|func|package)\s/m)?"code":"text"}var ab,cb,lb,Gd=g(()=>{Pd();Md();kd();Bd();jd();ab={".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"},cb={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},lb={markdown:Ld,text:da,html:Fd,code:Hd,json:Ud}});function pb(t,{maxTokens:e=512,overlapTokens:r=50}={}){if(!t?.trim())return[];let i=e*4,n=r*4;if(t.length<=i)return[{content:t.trim(),index:0}];let s=mb(t),o=[],a="",c="";for(let l of s){if(l.length>i){a.trim()&&(o.push({content:a.trim(),index:o.length}),c=pa(a,n),a="");let u=hb(l,i,n);for(let h of u)o.push({content:h.trim(),index:o.length});c=pa(o[o.length-1].content,n);continue}(a+l).length>i?(o.push({content:a.trim(),index:o.length}),c=pa(a,n),a=c+l):a+=l}return a.trim()&&o.push({content:a.trim(),index:o.length}),o}function Kd(t,e={}){let r=[];for(let{heading:i,text:n}of t){if(!n?.trim())continue;let s=pb(n,e);for(let o of s)r.push({content:o.content,index:r.length,sectionHeading:i})}return r}function mb(t){return t.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function hb(t,e,r){let i=[],n=0;for(;n<t.length;){let s=Math.min(n+e,t.length);if(i.push(t.slice(n,s)),n=s-r,n>=t.length)break}return i}function pa(t,e){if(t.length<=e)return t;let r=t.slice(-e),i=r.search(/[.!?]\s+/);return i!==-1?r.slice(i+1).trimStart():r}var Vd=g(()=>{});import{readFile as gb}from"node:fs/promises";import{join as yb}from"node:path";async function Yd(t,e,{title:r}){if(!t.length)return t;let i=await gb(wb,"utf8"),n=t.map((o,a)=>`Chunk ${a+1}: ${o.content.slice(0,200)}`),s=`${i}
|
|
374
|
-
|
|
375
|
-
---
|
|
376
|
-
|
|
377
|
-
**Document title:** ${r}
|
|
378
|
-
|
|
379
|
-
**Full document:**
|
|
380
|
-
${e.slice(0,8e3)}
|
|
381
|
-
|
|
382
|
-
**Chunks (${t.length}):**
|
|
383
|
-
${n.join(`
|
|
384
|
-
`)}
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
Respond with a JSON array of ${t.length} context prefix strings.`;try{let o=await Kt(s,{model:E.llm.extractionModel,caller:"contextualizer"}),a=Array.isArray(o)?o:o&&typeof o=="object"?Object.values(o).find(l=>Array.isArray(l))??null:null;if(!a)return console.warn("[contextualizer] LLM did not return an array \u2014 skipping"),t;let c=a;return c.length!==t.length&&console.warn(`[contextualizer] Got ${c.length} prefixes for ${t.length} chunks \u2014 using partial`),t.map((l,u)=>({...l,contextualPrefix:typeof c[u]=="string"?c[u]:null}))}catch(o){return console.error("[contextualizer] Failed:",o.message),t}}var wb,qd=g(()=>{Vt();O();ht();wb=yb(mt,"chunk-context.md")});async function Jd(t,e,r){if(await _("chunk").where({documentId:t}).del(),!e.length)return[];let i=e.map((s,o)=>({documentId:t,chunkIndex:o,content:s.content,contextualPrefix:s.contextualPrefix||null,sectionHeading:s.sectionHeading||null,namespace:r,embedding:st(s.embedding)})),n=await _("chunk").insert(i).returning("*");return await _.raw(`
|
|
389
|
-
UPDATE chunk
|
|
390
|
-
SET search_vector = to_tsvector('english', COALESCE(contextual_prefix, '') || ' ' || content)
|
|
391
|
-
WHERE document_id = ?
|
|
392
|
-
`,[t]),n}var zd=g(()=>{N();le()});var Eb,Rn,ma=g(()=>{Eb=typeof global=="object"&&global&&global.Object===Object&&global,Rn=Eb});var xb,bb,tt,Yt=g(()=>{ma();xb=typeof self=="object"&&self&&self.Object===Object&&self,bb=Rn||xb||Function("return this")(),tt=bb});var Sb,lt,Cr=g(()=>{Yt();Sb=tt.Symbol,lt=Sb});function Tb(t){var e=Ab.call(t,mi),r=t[mi];try{t[mi]=void 0;var i=!0}catch{}var n=Cb.call(t);return i&&(e?t[mi]=r:delete t[mi]),n}var Xd,Ab,Cb,mi,Qd,Zd=g(()=>{Cr();Xd=Object.prototype,Ab=Xd.hasOwnProperty,Cb=Xd.toString,mi=lt?lt.toStringTag:void 0;Qd=Tb});function $b(t){return Ib.call(t)}var vb,Ib,tf,ef=g(()=>{vb=Object.prototype,Ib=vb.toString;tf=$b});function Nb(t){return t==null?t===void 0?Rb:Ob:rf&&rf in Object(t)?Qd(t):tf(t)}var Ob,Rb,rf,Ft,Tr=g(()=>{Cr();Zd();ef();Ob="[object Null]",Rb="[object Undefined]",rf=lt?lt.toStringTag:void 0;Ft=Nb});function Db(t){return t!=null&&typeof t=="object"}var kt,vr=g(()=>{kt=Db});function Pb(t){return typeof t=="symbol"||kt(t)&&Ft(t)==Lb}var Lb,Ht,Ir=g(()=>{Tr();vr();Lb="[object Symbol]";Ht=Pb});function Mb(t,e){for(var r=-1,i=t==null?0:t.length,n=Array(i);++r<i;)n[r]=e(t[r],r,t);return n}var $r,ha=g(()=>{$r=Mb});var Fb,V,Ot=g(()=>{Fb=Array.isArray,V=Fb});function of(t){if(typeof t=="string")return t;if(V(t))return $r(t,of)+"";if(Ht(t))return sf?sf.call(t):"";var e=t+"";return e=="0"&&1/t==-kb?"-0":e}var kb,nf,sf,af,cf=g(()=>{Cr();ha();Ot();Ir();kb=1/0,nf=lt?lt.prototype:void 0,sf=nf?nf.toString:void 0;af=of});function Bb(t){for(var e=t.length;e--&&Hb.test(t.charAt(e)););return e}var Hb,lf,uf=g(()=>{Hb=/\s/;lf=Bb});function jb(t){return t&&t.slice(0,lf(t)+1).replace(Ub,"")}var Ub,df,ff=g(()=>{uf();Ub=/^\s+/;df=jb});function Wb(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Bt,Or=g(()=>{Bt=Wb});function qb(t){if(typeof t=="number")return t;if(Ht(t))return pf;if(Bt(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Bt(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=df(t);var r=Kb.test(t);return r||Vb.test(t)?Yb(t.slice(2),r?2:8):Gb.test(t)?pf:+t}var pf,Gb,Kb,Vb,Yb,mf,hf=g(()=>{ff();Or();Ir();pf=NaN,Gb=/^[-+]0x[0-9a-f]+$/i,Kb=/^0b[01]+$/i,Vb=/^0o[0-7]+$/i,Yb=parseInt;mf=qb});function zb(t){if(!t)return t===0?t:0;if(t=mf(t),t===gf||t===-gf){var e=t<0?-1:1;return e*Jb}return t===t?t:0}var gf,Jb,yf,wf=g(()=>{hf();gf=1/0,Jb=17976931348623157e292;yf=zb});function Xb(t){var e=yf(t),r=e%1;return e===e?r?e-r:e:0}var _f,Ef=g(()=>{wf();_f=Xb});function Qb(t){return t}var me,hi=g(()=>{me=Qb});function iS(t){if(!Bt(t))return!1;var e=Ft(t);return e==tS||e==eS||e==Zb||e==rS}var Zb,tS,eS,rS,Nn,ga=g(()=>{Tr();Or();Zb="[object AsyncFunction]",tS="[object Function]",eS="[object GeneratorFunction]",rS="[object Proxy]";Nn=iS});var nS,Dn,xf=g(()=>{Yt();nS=tt["__core-js_shared__"],Dn=nS});function sS(t){return!!bf&&bf in t}var bf,Sf,Af=g(()=>{xf();bf=(function(){var t=/[^.]+$/.exec(Dn&&Dn.keys&&Dn.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();Sf=sS});function cS(t){if(t!=null){try{return aS.call(t)}catch{}try{return t+""}catch{}}return""}var oS,aS,re,ya=g(()=>{oS=Function.prototype,aS=oS.toString;re=cS});function gS(t){if(!Bt(t)||Sf(t))return!1;var e=Nn(t)?hS:uS;return e.test(re(t))}var lS,uS,dS,fS,pS,mS,hS,Cf,Tf=g(()=>{ga();Af();Or();ya();lS=/[\\^$.*+?()[\]{}|]/g,uS=/^\[object .+?Constructor\]$/,dS=Function.prototype,fS=Object.prototype,pS=dS.toString,mS=fS.hasOwnProperty,hS=RegExp("^"+pS.call(mS).replace(lS,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");Cf=gS});function yS(t,e){return t?.[e]}var vf,If=g(()=>{vf=yS});function wS(t,e){var r=vf(t,e);return Cf(r)?r:void 0}var dt,he=g(()=>{Tf();If();dt=wS});var _S,Ln,$f=g(()=>{he();Yt();_S=dt(tt,"WeakMap"),Ln=_S});function ES(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var Of,Rf=g(()=>{Of=ES});function xS(){}var Nf,Df=g(()=>{Nf=xS});function CS(t){var e=0,r=0;return function(){var i=AS(),n=SS-(i-r);if(r=i,n>0){if(++e>=bS)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var bS,SS,AS,Lf,Pf=g(()=>{bS=800,SS=16,AS=Date.now;Lf=CS});function TS(t){return function(){return t}}var Mf,Ff=g(()=>{Mf=TS});var vS,Rr,wa=g(()=>{he();vS=(function(){try{var t=dt(Object,"defineProperty");return t({},"",{}),t}catch{}})(),Rr=vS});var IS,kf,Hf=g(()=>{Ff();wa();hi();IS=Rr?function(t,e){return Rr(t,"toString",{configurable:!0,enumerable:!1,value:Mf(e),writable:!0})}:me,kf=IS});var $S,Bf,Uf=g(()=>{Hf();Pf();$S=Lf(kf),Bf=$S});function OS(t,e,r,i){for(var n=t.length,s=r+(i?1:-1);i?s--:++s<n;)if(e(t[s],s,t))return s;return-1}var jf,Wf=g(()=>{jf=OS});function RS(t){return t!==t}var Gf,Kf=g(()=>{Gf=RS});function NS(t,e,r){for(var i=r-1,n=t.length;++i<n;)if(t[i]===e)return i;return-1}var Vf,Yf=g(()=>{Vf=NS});function DS(t,e,r){return e===e?Vf(t,e,r):jf(t,Gf,r)}var qf,Jf=g(()=>{Wf();Kf();Yf();qf=DS});function LS(t,e){var r=t==null?0:t.length;return!!r&&qf(t,e,0)>-1}var zf,Xf=g(()=>{Jf();zf=LS});function FS(t,e){var r=typeof t;return e=e??PS,!!e&&(r=="number"||r!="symbol"&&MS.test(t))&&t>-1&&t%1==0&&t<e}var PS,MS,Nr,Pn=g(()=>{PS=9007199254740991,MS=/^(?:0|[1-9]\d*)$/;Nr=FS});function kS(t,e,r){e=="__proto__"&&Rr?Rr(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var Qf,Zf=g(()=>{wa();Qf=kS});function HS(t,e){return t===e||t!==t&&e!==e}var Dr,Mn=g(()=>{Dr=HS});function BS(t,e,r){return e=tp(e===void 0?t.length-1:e,0),function(){for(var i=arguments,n=-1,s=tp(i.length-e,0),o=Array(s);++n<s;)o[n]=i[e+n];n=-1;for(var a=Array(e+1);++n<e;)a[n]=i[n];return a[e]=r(o),Of(t,this,a)}}var tp,ep,rp=g(()=>{Rf();tp=Math.max;ep=BS});function US(t,e){return Bf(ep(t,e,me),t+"")}var ip,np=g(()=>{hi();rp();Uf();ip=US});function WS(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=jS}var jS,Lr,Fn=g(()=>{jS=9007199254740991;Lr=WS});function GS(t){return t!=null&&Lr(t.length)&&!Nn(t)}var ge,gi=g(()=>{ga();Fn();ge=GS});function KS(t,e,r){if(!Bt(r))return!1;var i=typeof e;return(i=="number"?ge(r)&&Nr(e,r.length):i=="string"&&e in r)?Dr(r[e],t):!1}var yi,_a=g(()=>{Mn();gi();Pn();Or();yi=KS});function YS(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||VS;return t===r}var VS,sp,op=g(()=>{VS=Object.prototype;sp=YS});function qS(t,e){for(var r=-1,i=Array(t);++r<t;)i[r]=e(r);return i}var ap,cp=g(()=>{ap=qS});function zS(t){return kt(t)&&Ft(t)==JS}var JS,Ea,lp=g(()=>{Tr();vr();JS="[object Arguments]";Ea=zS});var up,XS,QS,ZS,Pr,kn=g(()=>{lp();vr();up=Object.prototype,XS=up.hasOwnProperty,QS=up.propertyIsEnumerable,ZS=Ea((function(){return arguments})())?Ea:function(t){return kt(t)&&XS.call(t,"callee")&&!QS.call(t,"callee")},Pr=ZS});function tA(){return!1}var dp,fp=g(()=>{dp=tA});var hp,pp,eA,mp,rA,iA,wi,xa=g(()=>{Yt();fp();hp=typeof exports=="object"&&exports&&!exports.nodeType&&exports,pp=hp&&typeof module=="object"&&module&&!module.nodeType&&module,eA=pp&&pp.exports===hp,mp=eA?tt.Buffer:void 0,rA=mp?mp.isBuffer:void 0,iA=rA||dp,wi=iA});function IA(t){return kt(t)&&Lr(t.length)&&!!U[Ft(t)]}var nA,sA,oA,aA,cA,lA,uA,dA,fA,pA,mA,hA,gA,yA,wA,_A,EA,xA,bA,SA,AA,CA,TA,vA,U,gp,yp=g(()=>{Tr();Fn();vr();nA="[object Arguments]",sA="[object Array]",oA="[object Boolean]",aA="[object Date]",cA="[object Error]",lA="[object Function]",uA="[object Map]",dA="[object Number]",fA="[object Object]",pA="[object RegExp]",mA="[object Set]",hA="[object String]",gA="[object WeakMap]",yA="[object ArrayBuffer]",wA="[object DataView]",_A="[object Float32Array]",EA="[object Float64Array]",xA="[object Int8Array]",bA="[object Int16Array]",SA="[object Int32Array]",AA="[object Uint8Array]",CA="[object Uint8ClampedArray]",TA="[object Uint16Array]",vA="[object Uint32Array]",U={};U[_A]=U[EA]=U[xA]=U[bA]=U[SA]=U[AA]=U[CA]=U[TA]=U[vA]=!0;U[nA]=U[sA]=U[yA]=U[oA]=U[wA]=U[aA]=U[cA]=U[lA]=U[uA]=U[dA]=U[fA]=U[pA]=U[mA]=U[hA]=U[gA]=!1;gp=IA});function $A(t){return function(e){return t(e)}}var Hn,ba=g(()=>{Hn=$A});var wp,_i,OA,Sa,RA,Aa,_p=g(()=>{ma();wp=typeof exports=="object"&&exports&&!exports.nodeType&&exports,_i=wp&&typeof module=="object"&&module&&!module.nodeType&&module,OA=_i&&_i.exports===wp,Sa=OA&&Rn.process,RA=(function(){try{var t=_i&&_i.require&&_i.require("util").types;return t||Sa&&Sa.binding&&Sa.binding("util")}catch{}})(),Aa=RA});var Ep,NA,Bn,Ca=g(()=>{yp();ba();_p();Ep=Aa&&Aa.isTypedArray,NA=Ep?Hn(Ep):gp,Bn=NA});function PA(t,e){var r=V(t),i=!r&&Pr(t),n=!r&&!i&&wi(t),s=!r&&!i&&!n&&Bn(t),o=r||i||n||s,a=o?ap(t.length,String):[],c=a.length;for(var l in t)(e||LA.call(t,l))&&!(o&&(l=="length"||n&&(l=="offset"||l=="parent")||s&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||Nr(l,c)))&&a.push(l);return a}var DA,LA,xp,bp=g(()=>{cp();kn();Ot();xa();Pn();Ca();DA=Object.prototype,LA=DA.hasOwnProperty;xp=PA});function MA(t,e){return function(r){return t(e(r))}}var Sp,Ap=g(()=>{Sp=MA});var FA,Cp,Tp=g(()=>{Ap();FA=Sp(Object.keys,Object),Cp=FA});function BA(t){if(!sp(t))return Cp(t);var e=[];for(var r in Object(t))HA.call(t,r)&&r!="constructor"&&e.push(r);return e}var kA,HA,vp,Ip=g(()=>{op();Tp();kA=Object.prototype,HA=kA.hasOwnProperty;vp=BA});function UA(t){return ge(t)?xp(t):vp(t)}var Mr,Un=g(()=>{bp();Ip();gi();Mr=UA});function GA(t,e){if(V(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Ht(t)?!0:WA.test(t)||!jA.test(t)||e!=null&&t in Object(e)}var jA,WA,Fr,jn=g(()=>{Ot();Ir();jA=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,WA=/^\w*$/;Fr=GA});var KA,ie,Ei=g(()=>{he();KA=dt(Object,"create"),ie=KA});function VA(){this.__data__=ie?ie(null):{},this.size=0}var $p,Op=g(()=>{Ei();$p=VA});function YA(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Rp,Np=g(()=>{Rp=YA});function XA(t){var e=this.__data__;if(ie){var r=e[t];return r===qA?void 0:r}return zA.call(e,t)?e[t]:void 0}var qA,JA,zA,Dp,Lp=g(()=>{Ei();qA="__lodash_hash_undefined__",JA=Object.prototype,zA=JA.hasOwnProperty;Dp=XA});function tC(t){var e=this.__data__;return ie?e[t]!==void 0:ZA.call(e,t)}var QA,ZA,Pp,Mp=g(()=>{Ei();QA=Object.prototype,ZA=QA.hasOwnProperty;Pp=tC});function rC(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=ie&&e===void 0?eC:e,this}var eC,Fp,kp=g(()=>{Ei();eC="__lodash_hash_undefined__";Fp=rC});function kr(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var i=t[e];this.set(i[0],i[1])}}var Ta,Hp=g(()=>{Op();Np();Lp();Mp();kp();kr.prototype.clear=$p;kr.prototype.delete=Rp;kr.prototype.get=Dp;kr.prototype.has=Pp;kr.prototype.set=Fp;Ta=kr});function iC(){this.__data__=[],this.size=0}var Bp,Up=g(()=>{Bp=iC});function nC(t,e){for(var r=t.length;r--;)if(Dr(t[r][0],e))return r;return-1}var ye,xi=g(()=>{Mn();ye=nC});function aC(t){var e=this.__data__,r=ye(e,t);if(r<0)return!1;var i=e.length-1;return r==i?e.pop():oC.call(e,r,1),--this.size,!0}var sC,oC,jp,Wp=g(()=>{xi();sC=Array.prototype,oC=sC.splice;jp=aC});function cC(t){var e=this.__data__,r=ye(e,t);return r<0?void 0:e[r][1]}var Gp,Kp=g(()=>{xi();Gp=cC});function lC(t){return ye(this.__data__,t)>-1}var Vp,Yp=g(()=>{xi();Vp=lC});function uC(t,e){var r=this.__data__,i=ye(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}var qp,Jp=g(()=>{xi();qp=uC});function Hr(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var i=t[e];this.set(i[0],i[1])}}var we,bi=g(()=>{Up();Wp();Kp();Yp();Jp();Hr.prototype.clear=Bp;Hr.prototype.delete=jp;Hr.prototype.get=Gp;Hr.prototype.has=Vp;Hr.prototype.set=qp;we=Hr});var dC,_e,Wn=g(()=>{he();Yt();dC=dt(tt,"Map"),_e=dC});function fC(){this.size=0,this.__data__={hash:new Ta,map:new(_e||we),string:new Ta}}var zp,Xp=g(()=>{Hp();bi();Wn();zp=fC});function pC(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var Qp,Zp=g(()=>{Qp=pC});function mC(t,e){var r=t.__data__;return Qp(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Ee,Si=g(()=>{Zp();Ee=mC});function hC(t){var e=Ee(this,t).delete(t);return this.size-=e?1:0,e}var tm,em=g(()=>{Si();tm=hC});function gC(t){return Ee(this,t).get(t)}var rm,im=g(()=>{Si();rm=gC});function yC(t){return Ee(this,t).has(t)}var nm,sm=g(()=>{Si();nm=yC});function wC(t,e){var r=Ee(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}var om,am=g(()=>{Si();om=wC});function Br(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var i=t[e];this.set(i[0],i[1])}}var Xe,Gn=g(()=>{Xp();em();im();sm();am();Br.prototype.clear=zp;Br.prototype.delete=tm;Br.prototype.get=rm;Br.prototype.has=nm;Br.prototype.set=om;Xe=Br});function va(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(_C);var r=function(){var i=arguments,n=e?e.apply(this,i):i[0],s=r.cache;if(s.has(n))return s.get(n);var o=t.apply(this,i);return r.cache=s.set(n,o)||s,o};return r.cache=new(va.Cache||Xe),r}var _C,cm,lm=g(()=>{Gn();_C="Expected a function";va.Cache=Xe;cm=va});function xC(t){var e=cm(t,function(i){return r.size===EC&&r.clear(),i}),r=e.cache;return e}var EC,um,dm=g(()=>{lm();EC=500;um=xC});var bC,SC,AC,fm,pm=g(()=>{dm();bC=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,SC=/\\(\\)?/g,AC=um(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(bC,function(r,i,n,s){e.push(n?s.replace(SC,"$1"):i||r)}),e}),fm=AC});function CC(t){return t==null?"":af(t)}var mm,hm=g(()=>{cf();mm=CC});function TC(t,e){return V(t)?t:Fr(t,e)?[t]:fm(mm(t))}var Kn,Ia=g(()=>{Ot();jn();pm();hm();Kn=TC});function IC(t){if(typeof t=="string"||Ht(t))return t;var e=t+"";return e=="0"&&1/t==-vC?"-0":e}var vC,xe,Ai=g(()=>{Ir();vC=1/0;xe=IC});function $C(t,e){e=Kn(e,t);for(var r=0,i=e.length;t!=null&&r<i;)t=t[xe(e[r++])];return r&&r==i?t:void 0}var Ur,Vn=g(()=>{Ia();Ai();Ur=$C});function OC(t,e,r){var i=t==null?void 0:Ur(t,e);return i===void 0?r:i}var gm,ym=g(()=>{Vn();gm=OC});function RC(t,e){for(var r=-1,i=e.length,n=t.length;++r<i;)t[n+r]=e[r];return t}var Yn,$a=g(()=>{Yn=RC});function NC(t){return V(t)||Pr(t)||!!(wm&&t&&t[wm])}var wm,_m,Em=g(()=>{Cr();kn();Ot();wm=lt?lt.isConcatSpreadable:void 0;_m=NC});function xm(t,e,r,i,n){var s=-1,o=t.length;for(r||(r=_m),n||(n=[]);++s<o;){var a=t[s];e>0&&r(a)?e>1?xm(a,e-1,r,i,n):Yn(n,a):i||(n[n.length]=a)}return n}var bm,Sm=g(()=>{$a();Em();bm=xm});function DC(t,e,r){var i=-1,n=t.length;e<0&&(e=-e>n?0:n+e),r=r>n?n:r,r<0&&(r+=n),n=e>r?0:r-e>>>0,e>>>=0;for(var s=Array(n);++i<n;)s[i]=t[i+e];return s}var Am,Cm=g(()=>{Am=DC});function MC(t,e,r){(r?yi(t,e,r):e===void 0)?e=1:e=PC(_f(e),0);var i=t==null?0:t.length;if(!i||e<1)return[];for(var n=0,s=0,o=Array(LC(i/e));n<i;)o[s++]=Am(t,n,n+=e);return o}var LC,PC,Oa,Tm=g(()=>{Cm();_a();Ef();LC=Math.ceil,PC=Math.max;Oa=MC});function FC(){this.__data__=new we,this.size=0}var vm,Im=g(()=>{bi();vm=FC});function kC(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var $m,Om=g(()=>{$m=kC});function HC(t){return this.__data__.get(t)}var Rm,Nm=g(()=>{Rm=HC});function BC(t){return this.__data__.has(t)}var Dm,Lm=g(()=>{Dm=BC});function jC(t,e){var r=this.__data__;if(r instanceof we){var i=r.__data__;if(!_e||i.length<UC-1)return i.push([t,e]),this.size=++r.size,this;r=this.__data__=new Xe(i)}return r.set(t,e),this.size=r.size,this}var UC,Pm,Mm=g(()=>{bi();Wn();Gn();UC=200;Pm=jC});function jr(t){var e=this.__data__=new we(t);this.size=e.size}var Wr,Ra=g(()=>{bi();Im();Om();Nm();Lm();Mm();jr.prototype.clear=vm;jr.prototype.delete=$m;jr.prototype.get=Rm;jr.prototype.has=Dm;jr.prototype.set=Pm;Wr=jr});function WC(t,e){for(var r=-1,i=t==null?0:t.length,n=0,s=[];++r<i;){var o=t[r];e(o,r,t)&&(s[n++]=o)}return s}var Fm,km=g(()=>{Fm=WC});function GC(){return[]}var Hm,Bm=g(()=>{Hm=GC});var KC,VC,Um,YC,jm,Wm=g(()=>{km();Bm();KC=Object.prototype,VC=KC.propertyIsEnumerable,Um=Object.getOwnPropertySymbols,YC=Um?function(t){return t==null?[]:(t=Object(t),Fm(Um(t),function(e){return VC.call(t,e)}))}:Hm,jm=YC});function qC(t,e,r){var i=e(t);return V(t)?i:Yn(i,r(t))}var Gm,Km=g(()=>{$a();Ot();Gm=qC});function JC(t){return Gm(t,Mr,jm)}var Na,Vm=g(()=>{Km();Wm();Un();Na=JC});var zC,qn,Ym=g(()=>{he();Yt();zC=dt(tt,"DataView"),qn=zC});var XC,Jn,qm=g(()=>{he();Yt();XC=dt(tt,"Promise"),Jn=XC});var QC,be,Da=g(()=>{he();Yt();QC=dt(tt,"Set"),be=QC});var Jm,ZC,zm,Xm,Qm,Zm,tT,eT,rT,iT,nT,Qe,La,th=g(()=>{Ym();Wn();qm();Da();$f();Tr();ya();Jm="[object Map]",ZC="[object Object]",zm="[object Promise]",Xm="[object Set]",Qm="[object WeakMap]",Zm="[object DataView]",tT=re(qn),eT=re(_e),rT=re(Jn),iT=re(be),nT=re(Ln),Qe=Ft;(qn&&Qe(new qn(new ArrayBuffer(1)))!=Zm||_e&&Qe(new _e)!=Jm||Jn&&Qe(Jn.resolve())!=zm||be&&Qe(new be)!=Xm||Ln&&Qe(new Ln)!=Qm)&&(Qe=function(t){var e=Ft(t),r=e==ZC?t.constructor:void 0,i=r?re(r):"";if(i)switch(i){case tT:return Zm;case eT:return Jm;case rT:return zm;case iT:return Xm;case nT:return Qm}return e});La=Qe});var sT,Pa,eh=g(()=>{Yt();sT=tt.Uint8Array,Pa=sT});function aT(t){return this.__data__.set(t,oT),this}var oT,rh,ih=g(()=>{oT="__lodash_hash_undefined__";rh=aT});function cT(t){return this.__data__.has(t)}var nh,sh=g(()=>{nh=cT});function zn(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Xe;++e<r;)this.add(t[e])}var Xn,Ma=g(()=>{Gn();ih();sh();zn.prototype.add=zn.prototype.push=rh;zn.prototype.has=nh;Xn=zn});function lT(t,e){for(var r=-1,i=t==null?0:t.length;++r<i;)if(e(t[r],r,t))return!0;return!1}var oh,ah=g(()=>{oh=lT});function uT(t,e){return t.has(e)}var Qn,Fa=g(()=>{Qn=uT});function pT(t,e,r,i,n,s){var o=r&dT,a=t.length,c=e.length;if(a!=c&&!(o&&c>a))return!1;var l=s.get(t),u=s.get(e);if(l&&u)return l==e&&u==t;var h=-1,d=!0,f=r&fT?new Xn:void 0;for(s.set(t,e),s.set(e,t);++h<a;){var m=t[h],y=e[h];if(i)var w=o?i(y,m,h,e,t,s):i(m,y,h,t,e,s);if(w!==void 0){if(w)continue;d=!1;break}if(f){if(!oh(e,function(x,b){if(!Qn(f,b)&&(m===x||n(m,x,r,i,s)))return f.push(b)})){d=!1;break}}else if(!(m===y||n(m,y,r,i,s))){d=!1;break}}return s.delete(t),s.delete(e),d}var dT,fT,Zn,ka=g(()=>{Ma();ah();Fa();dT=1,fT=2;Zn=pT});function mT(t){var e=-1,r=Array(t.size);return t.forEach(function(i,n){r[++e]=[n,i]}),r}var ch,lh=g(()=>{ch=mT});function hT(t){var e=-1,r=Array(t.size);return t.forEach(function(i){r[++e]=i}),r}var Gr,ts=g(()=>{Gr=hT});function $T(t,e,r,i,n,s,o){switch(r){case IT:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case vT:return!(t.byteLength!=e.byteLength||!s(new Pa(t),new Pa(e)));case wT:case _T:case bT:return Dr(+t,+e);case ET:return t.name==e.name&&t.message==e.message;case ST:case CT:return t==e+"";case xT:var a=ch;case AT:var c=i&gT;if(a||(a=Gr),t.size!=e.size&&!c)return!1;var l=o.get(t);if(l)return l==e;i|=yT,o.set(t,e);var u=Zn(a(t),a(e),i,n,s,o);return o.delete(t),u;case TT:if(Ha)return Ha.call(t)==Ha.call(e)}return!1}var gT,yT,wT,_T,ET,xT,bT,ST,AT,CT,TT,vT,IT,uh,Ha,dh,fh=g(()=>{Cr();eh();Mn();ka();lh();ts();gT=1,yT=2,wT="[object Boolean]",_T="[object Date]",ET="[object Error]",xT="[object Map]",bT="[object Number]",ST="[object RegExp]",AT="[object Set]",CT="[object String]",TT="[object Symbol]",vT="[object ArrayBuffer]",IT="[object DataView]",uh=lt?lt.prototype:void 0,Ha=uh?uh.valueOf:void 0;dh=$T});function DT(t,e,r,i,n,s){var o=r&OT,a=Na(t),c=a.length,l=Na(e),u=l.length;if(c!=u&&!o)return!1;for(var h=c;h--;){var d=a[h];if(!(o?d in e:NT.call(e,d)))return!1}var f=s.get(t),m=s.get(e);if(f&&m)return f==e&&m==t;var y=!0;s.set(t,e),s.set(e,t);for(var w=o;++h<c;){d=a[h];var x=t[d],b=e[d];if(i)var T=o?i(b,x,d,e,t,s):i(x,b,d,t,e,s);if(!(T===void 0?x===b||n(x,b,r,i,s):T)){y=!1;break}w||(w=d=="constructor")}if(y&&!w){var S=t.constructor,C=e.constructor;S!=C&&"constructor"in t&&"constructor"in e&&!(typeof S=="function"&&S instanceof S&&typeof C=="function"&&C instanceof C)&&(y=!1)}return s.delete(t),s.delete(e),y}var OT,RT,NT,ph,mh=g(()=>{Vm();OT=1,RT=Object.prototype,NT=RT.hasOwnProperty;ph=DT});function MT(t,e,r,i,n,s){var o=V(t),a=V(e),c=o?gh:La(t),l=a?gh:La(e);c=c==hh?es:c,l=l==hh?es:l;var u=c==es,h=l==es,d=c==l;if(d&&wi(t)){if(!wi(e))return!1;o=!0,u=!1}if(d&&!u)return s||(s=new Wr),o||Bn(t)?Zn(t,e,r,i,n,s):dh(t,e,c,r,i,n,s);if(!(r<)){var f=u&&yh.call(t,"__wrapped__"),m=h&&yh.call(e,"__wrapped__");if(f||m){var y=f?t.value():t,w=m?e.value():e;return s||(s=new Wr),n(y,w,r,i,s)}}return d?(s||(s=new Wr),ph(t,e,r,i,n,s)):!1}var LT,hh,gh,es,PT,yh,wh,_h=g(()=>{Ra();ka();fh();mh();th();Ot();xa();Ca();LT=1,hh="[object Arguments]",gh="[object Array]",es="[object Object]",PT=Object.prototype,yh=PT.hasOwnProperty;wh=MT});function Eh(t,e,r,i,n){return t===e?!0:t==null||e==null||!kt(t)&&!kt(e)?t!==t&&e!==e:wh(t,e,r,i,Eh,n)}var rs,Ba=g(()=>{_h();vr();rs=Eh});function HT(t,e,r,i){var n=r.length,s=n,o=!i;if(t==null)return!s;for(t=Object(t);n--;){var a=r[n];if(o&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++n<s;){a=r[n];var c=a[0],l=t[c],u=a[1];if(o&&a[2]){if(l===void 0&&!(c in t))return!1}else{var h=new Wr;if(i)var d=i(l,u,c,t,e,h);if(!(d===void 0?rs(u,l,FT|kT,i,h):d))return!1}}return!0}var FT,kT,xh,bh=g(()=>{Ra();Ba();FT=1,kT=2;xh=HT});function BT(t){return t===t&&!Bt(t)}var is,Ua=g(()=>{Or();is=BT});function UT(t){for(var e=Mr(t),r=e.length;r--;){var i=e[r],n=t[i];e[r]=[i,n,is(n)]}return e}var Sh,Ah=g(()=>{Ua();Un();Sh=UT});function jT(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var ns,ja=g(()=>{ns=jT});function WT(t){var e=Sh(t);return e.length==1&&e[0][2]?ns(e[0][0],e[0][1]):function(r){return r===t||xh(r,t,e)}}var Ch,Th=g(()=>{bh();Ah();ja();Ch=WT});function GT(t,e){return t!=null&&e in Object(t)}var vh,Ih=g(()=>{vh=GT});function KT(t,e,r){e=Kn(e,t);for(var i=-1,n=e.length,s=!1;++i<n;){var o=xe(e[i]);if(!(s=t!=null&&r(t,o)))break;t=t[o]}return s||++i!=n?s:(n=t==null?0:t.length,!!n&&Lr(n)&&Nr(o,n)&&(V(t)||Pr(t)))}var $h,Oh=g(()=>{Ia();kn();Ot();Pn();Fn();Ai();$h=KT});function VT(t,e){return t!=null&&$h(t,e,vh)}var Rh,Nh=g(()=>{Ih();Oh();Rh=VT});function JT(t,e){return Fr(t)&&is(e)?ns(xe(t),e):function(r){var i=gm(r,t);return i===void 0&&i===e?Rh(r,t):rs(e,i,YT|qT)}}var YT,qT,Dh,Lh=g(()=>{Ba();ym();Nh();jn();Ua();ja();Ai();YT=1,qT=2;Dh=JT});function zT(t){return function(e){return e?.[t]}}var Ph,Mh=g(()=>{Ph=zT});function XT(t){return function(e){return Ur(e,t)}}var Fh,kh=g(()=>{Vn();Fh=XT});function QT(t){return Fr(t)?Ph(xe(t)):Fh(t)}var Hh,Bh=g(()=>{Mh();kh();jn();Ai();Hh=QT});function ZT(t){return typeof t=="function"?t:t==null?me:typeof t=="object"?V(t)?Dh(t[0],t[1]):Ch(t):Hh(t)}var Se,Ci=g(()=>{Th();Lh();hi();Ot();Bh();Se=ZT});function tv(t,e,r,i){for(var n=-1,s=t==null?0:t.length;++n<s;){var o=t[n];e(i,o,r(o),t)}return i}var Uh,jh=g(()=>{Uh=tv});function ev(t){return function(e,r,i){for(var n=-1,s=Object(e),o=i(e),a=o.length;a--;){var c=o[t?a:++n];if(r(s[c],c,s)===!1)break}return e}}var Wh,Gh=g(()=>{Wh=ev});var rv,Kh,Vh=g(()=>{Gh();rv=Wh(),Kh=rv});function iv(t,e){return t&&Kh(t,e,Mr)}var Yh,qh=g(()=>{Vh();Un();Yh=iv});function nv(t,e){return function(r,i){if(r==null)return r;if(!ge(r))return t(r,i);for(var n=r.length,s=e?n:-1,o=Object(r);(e?s--:++s<n)&&i(o[s],s,o)!==!1;);return r}}var Jh,zh=g(()=>{gi();Jh=nv});var sv,ss,Wa=g(()=>{qh();zh();sv=Jh(Yh),ss=sv});function ov(t,e,r,i){return ss(t,function(n,s,o){e(i,n,r(n),o)}),i}var Xh,Qh=g(()=>{Wa();Xh=ov});function av(t,e){return function(r,i){var n=V(r)?Uh:Xh,s=e?e():{};return n(r,t,Se(i,2),s)}}var Zh,tg=g(()=>{jh();Qh();Ci();Ot();Zh=av});function cv(t,e,r){for(var i=-1,n=t==null?0:t.length;++i<n;)if(r(e,t[i]))return!0;return!1}var eg,rg=g(()=>{eg=cv});function lv(t,e){var r=-1,i=ge(t)?Array(t.length):[];return ss(t,function(n,s,o){i[++r]=e(n,s,o)}),i}var ig,ng=g(()=>{Wa();gi();ig=lv});var uv,dv,fv,Ga,sg=g(()=>{Zf();tg();uv=Object.prototype,dv=uv.hasOwnProperty,fv=Zh(function(t,e,r){dv.call(t,r)?t[r].push(e):Qf(t,r,[e])}),Ga=fv});function pv(t,e){for(var r,i=-1,n=t.length;++i<n;){var s=e(t[i]);s!==void 0&&(r=r===void 0?s:r+s)}return r}var og,ag=g(()=>{og=pv});function mv(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var cg,lg=g(()=>{cg=mv});function hv(t,e){if(t!==e){var r=t!==void 0,i=t===null,n=t===t,s=Ht(t),o=e!==void 0,a=e===null,c=e===e,l=Ht(e);if(!a&&!l&&!s&&t>e||s&&o&&c&&!a&&!l||i&&o&&c||!r&&c||!n)return 1;if(!i&&!s&&!l&&t<e||l&&r&&n&&!i&&!s||a&&r&&n||!o&&n||!c)return-1}return 0}var ug,dg=g(()=>{Ir();ug=hv});function gv(t,e,r){for(var i=-1,n=t.criteria,s=e.criteria,o=n.length,a=r.length;++i<o;){var c=ug(n[i],s[i]);if(c){if(i>=a)return c;var l=r[i];return c*(l=="desc"?-1:1)}}return t.index-e.index}var fg,pg=g(()=>{dg();fg=gv});function yv(t,e,r){e.length?e=$r(e,function(s){return V(s)?function(o){return Ur(o,s.length===1?s[0]:s)}:s}):e=[me];var i=-1;e=$r(e,Hn(Se));var n=ig(t,function(s,o,a){var c=$r(e,function(l){return l(s)});return{criteria:c,index:++i,value:s}});return cg(n,function(s,o){return fg(s,o,r)})}var mg,hg=g(()=>{ha();Vn();Ci();ng();lg();ba();pg();hi();Ot();mg=yv});var wv,Ka,gg=g(()=>{Sm();hg();np();_a();wv=ip(function(t,e){if(t==null)return[];var r=e.length;return r>1&&yi(t,e[0],e[1])?e=[]:r>2&&yi(e[0],e[1],e[2])&&(e=[e[0]]),mg(t,bm(e,1),[])}),Ka=wv});function _v(t,e){return t&&t.length?og(t,Se(e,2)):0}var Va,yg=g(()=>{Ci();ag();Va=_v});var Ev,xv,wg,_g=g(()=>{Da();Df();ts();Ev=1/0,xv=be&&1/Gr(new be([,-0]))[1]==Ev?function(t){return new be(t)}:Nf,wg=xv});function Sv(t,e,r){var i=-1,n=zf,s=t.length,o=!0,a=[],c=a;if(r)o=!1,n=eg;else if(s>=bv){var l=e?null:wg(t);if(l)return Gr(l);o=!1,n=Qn,c=new Xn}else c=e?[]:a;t:for(;++i<s;){var u=t[i],h=e?e(u):u;if(u=r||u!==0?u:0,o&&h===h){for(var d=c.length;d--;)if(c[d]===h)continue t;e&&c.push(h),a.push(u)}else n(c,h,r)||(c!==a&&c.push(h),a.push(u))}return a}var bv,Eg,xg=g(()=>{Ma();Xf();rg();Fa();_g();ts();bv=200;Eg=Sv});function Av(t,e){return t&&t.length?Eg(t,Se(e,2)):[]}var Ya,bg=g(()=>{Ci();xg();Ya=Av});var os=g(()=>{Tm();sg();gg();yg();bg();});import{readFile as Cv}from"node:fs/promises";function vv(t){let e=[];return t.sectionHeading&&e.push(`[Section: ${t.sectionHeading}]`),t.contextualPrefix&&e.push(t.contextualPrefix),e.push(t.content),e.join(`
|
|
393
|
-
`)}function Iv(t,e,r){return`${t}
|
|
394
|
-
|
|
395
|
-
---
|
|
396
|
-
|
|
397
|
-
${e}
|
|
398
|
-
|
|
399
|
-
---
|
|
400
|
-
|
|
401
|
-
Respond with ONLY a JSON array of facts. Each fact object must have exactly these fields:
|
|
402
|
-
- "content" (string): the atomic fact statement
|
|
403
|
-
- "category" (string): one of ${r.join(", ")}
|
|
404
|
-
- "confidence" (string): one of high, medium, low
|
|
405
|
-
- "importance" (string): "vital" if essential to understanding the topic, "supplementary" if supporting detail
|
|
406
|
-
|
|
407
|
-
Output the JSON array directly, no explanation or wrapping.`}function $v(t,e){let r=Array.isArray(t)?t:Array.isArray(t?.facts)?t.facts:null;return r?r.filter(i=>i.content&&e.includes(i.category)&&["high","medium","low"].includes(i.confidence)).map(i=>({...i,importance:["vital","supplementary"].includes(i.importance)?i.importance:"supplementary"})):[]}async function Ov(t,e,r){let i=vv(t),n=Iv(e,i,r),s=await Kt(n,{model:E.llm.extractionModel,caller:"extractor"});return $v(s,r).map(a=>({...a,sourceSection:t.sectionHeading||null}))}async function Sg(t,{promptPath:e,categories:r}){if(!t.length)return[];let i=await Cv(e,"utf8"),n=Oa(t,Tv),s=[];for(let o of n){let a=await Promise.all(o.map(c=>Ov(c,i,r).catch(l=>(console.error(`[extractor] chunk failed: ${l.message}`),[]))));s.push(...a.flat())}return s}var Tv,Ag=g(()=>{os();Vt();O();Tv=5});var as,Rv,hH,Cg,qa=g(()=>{as={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"},Rv=["preference","opinion","personal","experience"],hH=Object.keys(as).filter(t=>!Rv.includes(t)),Cg=as});import{readFile as Nv}from"node:fs/promises";import{join as Dv}from"node:path";async function vg(t,{title:e}={}){if(!t?.trim()||t.trim().length<Pv)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(t.length>Mv)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let i=`${await Nv(Lv,"utf8")}
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
Title: ${e||"(none)"}
|
|
412
|
-
Input: ${t}
|
|
413
|
-
|
|
414
|
-
---
|
|
415
|
-
|
|
416
|
-
Respond with ONLY a JSON object: { "route": "thought|knowledge|noise", "facts": [{"content":"...","category":"...","confidence":"high|medium|low","importance":"vital|supplementary"}], "entities": ["..."], "reasoning": "..." }`;try{let n=await Kt(i,{model:E.llm.extractionModel,caller:"classifier"});if(!n||!Fv.includes(n.route))return Tg("Invalid classification result");let s=Object.keys(Cg),o=n.route==="thought"&&Array.isArray(n.facts)?n.facts.filter(a=>a.content&&s.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:n.route,facts:o,entities:Array.isArray(n.entities)?n.entities:[],reasoning:n.reasoning||""}}catch(n){return console.error("[input-classifier] Failed:",n.message),Tg(n.message)}}function Tg(t){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${t}`}}var Lv,Pv,Mv,Fv,Ig=g(()=>{Vt();O();qa();ht();Lv=Dv(mt,"input-classifier.md"),Pv=3,Mv=2e3,Fv=["thought","knowledge","noise"]});async function $g(t,e,{namespace:r,threshold:i=kv,limit:n=5}){if(!e)return[];let s=st(e),o=`${jt("embedding")} <=> ${Wt()}`,{rows:a}=await _.raw(`
|
|
158
|
+
`,[o,t,r,E.defaults.namespace,o,n,o,i]);return a}async function ui(e){await _("entity").where({id:e}).increment("mentionCount",1)}async function S$(e,t){await _("entity").where({id:e}).update({description:t})}async function v$(e,{namespace:t,limit:r=50}={}){let n=_("entity").where({entityType:e}).whereNull("mergedWith").orderBy("mentionCount","desc").limit(r);return t&&n.where({namespace:t}),n}async function I$(e){let[{count:t}]=await _("entity").where({entityType:e}).whereNull("mergedWith").count("id as count");return Number(t)}async function xc(e,{entityType:t,namespace:r,limit:n=10}={}){let i=_("entity").whereRaw("LOWER(name) LIKE ?",[`%${e.toLowerCase()}%`]).whereNull("mergedWith").orderBy("mentionCount","desc").limit(n);return t&&i.where({entityType:t}),r&&i.where({namespace:r}),i}async function ur(e,t){let r=await Xe(e);if(!r)return;let n;try{n=r.entityTypes?JSON.parse(r.entityTypes):[r.entityType]}catch{n=[r.entityType]}n.includes(t)||(n.push(t),await _("entity").where({id:e}).update({entityTypes:JSON.stringify(n)}))}async function dr(e){let t=await Xe(e);for(;t?.mergedWith;)t=await Xe(t.mergedWith);return t}var Ze=f(()=>{qr();D();$t();R()});async function Yg(e,t,{namespace:r,threshold:n=A$,limit:i=5}){if(!t)return[];let o=fe(t),s=`${st("embedding")} <=> ${at()}`,{rows:a}=await _.raw(`
|
|
417
159
|
SELECT id, name, entity_type AS "entityType", entity_types AS "entityTypes",
|
|
418
|
-
1 - (${
|
|
160
|
+
1 - (${s}) AS similarity
|
|
419
161
|
FROM entity
|
|
420
162
|
WHERE namespace = ?
|
|
421
163
|
AND embedding IS NOT NULL
|
|
422
164
|
AND LOWER(name) != LOWER(?)
|
|
423
165
|
AND merged_with IS NULL
|
|
424
|
-
AND 1 - (${
|
|
425
|
-
ORDER BY ${
|
|
166
|
+
AND 1 - (${s}) >= ?
|
|
167
|
+
ORDER BY ${s}
|
|
426
168
|
LIMIT ?
|
|
427
|
-
`,[
|
|
169
|
+
`,[o,r,e,o,n,o,i]);return a.map(c=>{let l;try{l=c.entityTypes?JSON.parse(c.entityTypes):[c.entityType]}catch{l=[c.entityType]}return{...c,types:l}})}async function Sc(e,t,r,n){let i=(r.aliases||[]).filter(Boolean),o=i.length?`Existing aliases: ${i.join(", ")}`:"",s=r.similarity>0?`Name-embedding similarity: ${(r.similarity*100).toFixed(0)}%`:"Name-embedding similarity: not directly measured (LLM judging on episode text alone)",a=n?`
|
|
428
170
|
Source passage where the new mention appeared:
|
|
429
171
|
---
|
|
430
|
-
${
|
|
172
|
+
${n.slice(0,1500)}
|
|
431
173
|
---
|
|
432
174
|
`:"",c=`You're deciding whether two entity mentions refer to the same real-world thing, and whether the source passage indicates a RENAME.
|
|
433
175
|
|
|
434
|
-
Mention A (new): "${
|
|
176
|
+
Mention A (new): "${e}" (type: ${t})
|
|
435
177
|
Mention B (existing): "${r.name}" (types: ${(r.types||[r.entityType]).join(", ")})
|
|
436
|
-
${s}
|
|
437
178
|
${o}
|
|
179
|
+
${s}
|
|
438
180
|
${a}
|
|
439
181
|
Decision rules:
|
|
440
182
|
- "same" = true when both mentions refer to the same person/product/concept/thing \u2014 including renames, abbreviations ("NYC" / "New York City"), and common-knowledge equivalents.
|
|
@@ -443,19 +185,19 @@ Decision rules:
|
|
|
443
185
|
- If you cannot tell, "same" is false. Don't guess.
|
|
444
186
|
|
|
445
187
|
Respond as STRICT JSON, no markdown, no prose:
|
|
446
|
-
{"same": boolean, "rename": boolean, "current_name": "<one of A or B verbatim, or null>", "reason": "one short sentence"}`,l;try{l=await
|
|
188
|
+
{"same": boolean, "rename": boolean, "current_name": "<one of A or B verbatim, or null>", "reason": "one short sentence"}`,l;try{l=await mt(c,{model:E.llm.entityModel,caller:"entity-matcher"})}catch{return{same:!1,rename:!1,reason:"llm-error"}}let d=T$(l);return d&&typeof d.same=="boolean"?{same:d.same===!0,rename:d.rename===!0&&d.same===!0,currentName:typeof d.current_name=="string"?d.current_name:null,reason:typeof d.reason=="string"?d.reason:""}:{same:/^\s*(yes|true)\b/i.test(l),rename:!1,currentName:null,reason:"fallback-text-match"}}function T$(e){if(typeof e!="string")return null;try{return JSON.parse(e.trim())}catch{}let t=e.match(/\{[\s\S]*\}/);if(t)try{return JSON.parse(t[0])}catch{}return null}var A$,qg=f(()=>{D();Ve();$t();R();A$=.85});var Jg={};T(Jg,{followMergeChain:()=>R$,mergeEntities:()=>C$});async function C$(e,t){let[r,n]=await Promise.all([Xe(e),Xe(t)]);if(!r||!n)throw new Error(`Entity ${e} or ${t} not found`);if(e===t)return r;let i=(r.mentionCount||0)+(n.mentionCount||0);await _.transaction(async s=>{await s("relation").where({sourceId:t}).update({sourceId:e}),await s("relation").where({targetId:t}).update({targetId:e}),await s("relation").whereRaw("source_id = target_id").del(),await s.raw(`
|
|
447
189
|
INSERT INTO fact_entity (fact_id, entity_id, mention_type, mention_count, created_at, updated_at)
|
|
448
190
|
SELECT fact_id, ?, mention_type, mention_count, NOW(), NOW()
|
|
449
191
|
FROM fact_entity
|
|
450
192
|
WHERE entity_id = ?
|
|
451
193
|
ON CONFLICT (fact_id, entity_id, mention_type)
|
|
452
194
|
DO UPDATE SET mention_count = fact_entity.mention_count + EXCLUDED.mention_count
|
|
453
|
-
`,[t
|
|
454
|
-
`),
|
|
195
|
+
`,[e,t]),await s("fact_entity").where({entityId:t}).del(),await s("entity").where({id:e}).update({mentionCount:i}),await s("pod").where({entityId:e,status:"active"}).first()?await s("pod").where({entityId:t}).update({status:"archived",updatedAt:s.fn.now()}):await s("pod").where({entityId:t}).update({entityId:e,updatedAt:s.fn.now()}),await s("entity").where({id:t}).update({mergedWith:e})}),await O$(e);let o=$$(n);for(let s of o)await ur(e,s);return console.log(`[entity-merge] Merged ${t} (${n.name}) into ${e} (${r.name})`),{...r,mentionCount:i}}function $$(e){if(!e.entityTypes)return[e.entityType];try{return JSON.parse(e.entityTypes)}catch{return[e.entityType]}}async function O$(e){let t=await _("relation").where(function(){this.where({sourceId:e}).orWhere({targetId:e})}).whereNull("invalidAt"),r=uc(t,n=>`${n.sourceId}-${n.targetId}-${n.relationType}`);for(let n of Object.values(r)){if(n.length<=1)continue;let[i,...o]=dc(n,"id"),s=pc(n,"mentionCount");await _("relation").where({id:i.id}).update({mentionCount:s}),await _("relation").whereIn("id",o.map(a=>a.id)).del()}}async function R$(e){let t=await Xe(e),r=[t?.id];for(;t?.mergedWith;)t=await Xe(t.mergedWith),t&&r.push(t.id);return{canonical:t,chain:r}}var zg=f(()=>{Bo();D();Ze()});import{readFile as N$}from"node:fs/promises";async function di({name:e,entityType:t,description:r,namespace:n,externalId:i,embedding:o,episodeText:s,episodeEntityIds:a=[]}){let c=n||E.defaults.namespace,l=await lr(e,c);if(l)return l=await dr(l.id),await ui(l.id),l.entityType!==t&&await ur(l.id,t),l;let d=o||await or(`${t}: ${e}`),p=await Yg(e,d,{namespace:c,limit:3});for(let g of p){let y=await Sc(e,t,g,s);if(y.same)return Xg(g,{newName:e,entityType:t,isRename:y.rename,currentName:y.currentName})}let u=new Set(p.map(g=>g.id)),m=a.filter(g=>g!=null&&!u.has(g));for(let g of m){let y=await dr(g);if(!y||y.namespace!==c||y.name?.toLowerCase()===e.toLowerCase())continue;let w=await Sc(e,t,{...y,types:D$(y),similarity:0},s);if(w.same)return Xg(y,{newName:e,entityType:t,isRename:w.rename,currentName:w.currentName})}try{return await Ec({name:e,entityType:t,description:r,namespace:c,externalId:i,embedding:d})}catch(g){if(Zg(g)){let y=await lr(e,c);if(y){let w=await dr(y.id);return await ui(w.id),await ur(w.id,t),w}}throw g}}function Zg(e){return e?!!(e.code==="23505"||typeof e.message=="string"&&e.message.includes("duplicate key value violates unique constraint")):!1}async function Xg(e,{newName:t,entityType:r,isRename:n,currentName:i}){let o=await dr(e.id);if(await ui(o.id),await ur(o.id,r),n&&o.name&&o.name.toLowerCase()!==t.toLowerCase()){let s=t.toLowerCase(),a=o.name.toLowerCase(),c=(i||"").toLowerCase(),l,d;if(c===s?(l=t,d=o.name):c===a?(l=o.name,d=t):(l=t,d=o.name),d&&d.toLowerCase()!==l.toLowerCase()&&(await Wo(o.id,d),o.aliases=[...o.aliases||[],d.toLowerCase()]),l!==o.name)try{await bc(o.id,l),o.name=l}catch(p){if(Zg(p)){let u=await lr(l,o.namespace);if(u&&u.id!==o.id){let{mergeEntities:m}=await Promise.resolve().then(()=>(zg(),Jg));return await m(u.id,o.id),await Wo(u.id,o.name),await dr(u.id)}}throw p}}return o}function D$(e){if(e.entityTypes)try{return JSON.parse(e.entityTypes)}catch{}return[e.entityType]}async function vc(e,{promptPath:t,namespace:r}){if(!e.length)return[];let n=e.map(u=>`- [${u.category}] ${u.content}`).join(`
|
|
196
|
+
`),o=`${await N$(t,"utf8")}
|
|
455
197
|
|
|
456
198
|
---
|
|
457
199
|
|
|
458
|
-
${
|
|
200
|
+
${n}`,s=await mt(o,{model:E.llm.entityModel,caller:"entity-resolver"}),a=so(s);if(!Array.isArray(a))return[];let c=a.filter(u=>u.name);if(!c.length)return[];let l=new Array(c.length),d=[],p=[];for(let u=0;u<c.length;u++){let m=await L$(c[u].name,r);m?(l[u]=m,d.push(m.id)):p.push(u)}for(let u of p){let m=c[u],g=await di({name:m.name,entityType:"topic",description:m.description||null,namespace:r,episodeText:n,episodeEntityIds:d});l[u]=g,g?.id&&d.push(g.id)}return l.filter(Boolean)}async function L$(e,t){let{findByName:r,getCanonicalEntity:n,incrementMentionCount:i}=await Promise.resolve().then(()=>(Ze(),pr)),o=await r(e,t);if(!o)return null;let s=await n(o.id);return await i(s.id),s}var Qg=f(()=>{Ot();Ve();R();Ze();qg()});var Vo={};T(Vo,{createRelation:()=>pi,findRelation:()=>k$,getRelationCount:()=>F$,getRelationsByFact:()=>M$,invalidateRelation:()=>P$,listRelationsForEntity:()=>fi});async function pi({sourceId:e,targetId:t,relationType:r,sourceFactId:n,validAt:i}){let{rows:[o]}=await _.raw(`
|
|
459
201
|
INSERT INTO relation (source_id, target_id, relation_type, source_fact_id, mention_count, valid_at, created_at, updated_at)
|
|
460
202
|
VALUES (?, ?, ?, ?, 1, ?, NOW(), NOW())
|
|
461
203
|
ON CONFLICT (source_id, target_id, relation_type) DO UPDATE SET
|
|
@@ -463,7 +205,7 @@ ${i}`,o=await pe(s,{model:E.llm.entityModel,caller:"entity-resolver"}),a=ta(o);i
|
|
|
463
205
|
source_fact_id = COALESCE(EXCLUDED.source_fact_id, relation.source_fact_id),
|
|
464
206
|
updated_at = NOW()
|
|
465
207
|
RETURNING *
|
|
466
|
-
`,[t,
|
|
208
|
+
`,[e,t,r,n||null,i||null]);return o}async function k$(e,t,r){return _("relation").where({sourceId:e,targetId:t,relationType:r}).whereNull("invalidAt").first()||null}async function P$(e,{invalidAt:t}={}){await _("relation").where({id:e}).update({invalidAt:t||new Date})}async function fi(e,{direction:t="both",relationType:r,limit:n=50}={}){let i=a=>{let c=a==="outgoing"?"source_id":"target_id",l=a==="outgoing"?"target_id":"source_id";return _.raw(`
|
|
467
209
|
SELECT r.id AS "relationId", r.relation_type AS "relationType",
|
|
468
210
|
r.mention_count AS "mentionCount", r.valid_at AS "validAt",
|
|
469
211
|
e.id AS "entityId", e.uid, e.name, e.entity_type AS "entityType",
|
|
@@ -476,7 +218,7 @@ ${i}`,o=await pe(s,{model:E.llm.entityModel,caller:"entity-resolver"}),a=ta(o);i
|
|
|
476
218
|
${r?"AND r.relation_type = ?":""}
|
|
477
219
|
ORDER BY r.mention_count DESC
|
|
478
220
|
LIMIT ?
|
|
479
|
-
`,r?[
|
|
221
|
+
`,r?[e,r,n]:[e,n])};if(t==="outgoing"){let{rows:a}=await i("outgoing");return a}if(t==="incoming"){let{rows:a}=await i("incoming");return a}let[o,s]=await Promise.all([i("outgoing"),i("incoming")]);return[...o.rows,...s.rows]}async function M$(e){let{rows:t}=await _.raw(`
|
|
480
222
|
SELECT r.id, r.relation_type AS "relationType",
|
|
481
223
|
r.mention_count AS "mentionCount",
|
|
482
224
|
s.name AS "sourceName", s.entity_type AS "sourceType",
|
|
@@ -488,33 +230,55 @@ ${i}`,o=await pe(s,{model:E.llm.entityModel,caller:"entity-resolver"}),a=ta(o);i
|
|
|
488
230
|
AND r.invalid_at IS NULL
|
|
489
231
|
AND s.merged_with IS NULL
|
|
490
232
|
AND t.merged_with IS NULL
|
|
491
|
-
`,[
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
${
|
|
505
|
-
`),
|
|
506
|
-
`),await Tn(v.id,{chunkCount:H.length,factCount:F.counts.added+F.counts.updated+F.counts.contradicted}),await Bg(F.results,G),!h&&F.results.length&&(process.stderr.write(`[5/6] Linking entities...
|
|
507
|
-
`),
|
|
508
|
-
`)
|
|
509
|
-
`),{documentId:
|
|
510
|
-
`)
|
|
233
|
+
`,[e]);return t}async function F$(){let[{count:e}]=await _("relation").whereNull("invalidAt").count("id as count");return Number(e)}var fr=f(()=>{D()});var Te={};T(Te,{archivePod:()=>U$,deletePod:()=>G$,findByEntityId:()=>Ac,findByExternalId:()=>_n,findById:()=>H$,findByUid:()=>wn,incrementCounters:()=>bn,insertPod:()=>Ic,listPods:()=>B$,patchAttrs:()=>En,reassignEntity:()=>j$,setEndedAt:()=>Tc,upsertPod:()=>mr});async function Ic({podType:e,name:t,namespace:r,attrs:n={},entityId:i=null,connectionId:o=null,externalId:s=null,startedAt:a=null,endedAt:c=null}){let l=`pod-${Ke(16)}`,[d]=await _("pod").insert({uid:l,podType:e,name:t,namespace:r||E.defaults.namespace,attrs:JSON.stringify(n),entityId:i,connectionId:o,externalId:s,startedAt:a,endedAt:c}).returning("*");return d}async function mr({podType:e,externalId:t,name:r,namespace:n,attrs:i={},entityId:o=null,connectionId:s=null,startedAt:a=null}){if(!t)throw new Error("upsertPod requires externalId; use insertPod for custom pods");let c=`pod-${Ke(16)}`,l=n||E.defaults.namespace,{rows:[d]}=await _.raw(`
|
|
234
|
+
INSERT INTO pod (uid, pod_type, name, namespace, attrs, entity_id, connection_id, external_id, started_at, created_at, updated_at)
|
|
235
|
+
VALUES (?, ?, ?, ?, ?::jsonb, ?, ?, ?, ?, NOW(), NOW())
|
|
236
|
+
ON CONFLICT (pod_type, external_id, namespace) WHERE external_id IS NOT NULL DO UPDATE SET
|
|
237
|
+
attrs = pod.attrs || EXCLUDED.attrs,
|
|
238
|
+
updated_at = NOW()
|
|
239
|
+
RETURNING *, (xmax = 0) AS "isNew"
|
|
240
|
+
`,[c,e,r,l,JSON.stringify(i),o,s,t,a]);return{pod:d,isNew:d.isNew}}async function wn(e){return _("pod").where({uid:e}).first()||null}async function H$(e){return _("pod").where({id:e}).first()||null}async function _n({podType:e,externalId:t,namespace:r}){return _("pod").where({podType:e,externalId:t,namespace:r||E.defaults.namespace}).first()||null}async function Ac(e){return _("pod").where({entityId:e}).first()||null}async function B$({podType:e,namespace:t,status:r="active",limit:n=20}={}){let i=_("pod").where({status:r}).orderBy("updatedAt","desc").limit(n);return e&&i.where({podType:e}),t&&i.where({namespace:t}),i}async function U$(e){await _("pod").where({id:e}).update({status:"archived",updatedAt:_.fn.now()})}async function G$(e){await _("pod").where({id:e}).del()}async function En(e,t){await _.raw("UPDATE pod SET attrs = attrs || ?::jsonb, updated_at = NOW() WHERE id = ?",[JSON.stringify(t),e])}async function Tc(e,t=new Date){await _("pod").where({id:e}).update({endedAt:t,updatedAt:_.fn.now()})}async function j$(e,t){await _("pod").where({entityId:e}).update({entityId:t,updatedAt:_.fn.now()})}async function bn(e,{docs:t=0,facts:r=0}){!t&&!r||await _.raw(`UPDATE pod
|
|
241
|
+
SET member_doc_count = member_doc_count + ?,
|
|
242
|
+
member_fact_count = member_fact_count + ?,
|
|
243
|
+
updated_at = NOW()
|
|
244
|
+
WHERE id = ?`,[t,r,e])}var Se=f(()=>{qr();D();R()});var Gt={};T(Gt,{attach:()=>Ko,attachDocument:()=>Cc,attachEntity:()=>W$,attachFact:()=>mi,detach:()=>V$,factIdsInPod:()=>q$,listMembers:()=>K$,listPodsForMember:()=>Y$});async function Ko(e,t,r,n="primary"){let{rowCount:i}=await _.raw(`INSERT INTO pod_membership (pod_id, member_type, member_id, role)
|
|
245
|
+
VALUES (?, ?, ?, ?)
|
|
246
|
+
ON CONFLICT (pod_id, member_type, member_id) DO NOTHING`,[e,t,r,n]);return i>0&&(t==="fact"?await bn(e,{facts:1}):t==="document"&&await bn(e,{docs:1})),{attached:i>0}}async function V$(e,t,r){let n=await _("pod_membership").where({podId:e,memberType:t,memberId:r}).del();return n>0&&(t==="fact"?await bn(e,{facts:-1}):t==="document"&&await bn(e,{docs:-1})),{detached:n>0}}async function K$(e,{memberType:t,limit:r=20}={}){if(!t)throw new Error("listMembers requires a memberType filter");return _(`${t} as t`).join("pod_membership as pm",function(){this.on("pm.member_id","=","t.id").andOnVal("pm.member_type","=",t)}).where("pm.pod_id",e).orderBy("pm.createdAt","desc").limit(r).select("t.*","pm.role as podRole","pm.createdAt as attachedAt")}async function Y$(e,t){return _("pod as p").join("pod_membership as pm","pm.pod_id","p.id").where("pm.memberType",e).where("pm.memberId",t).select("p.*","pm.role as podRole")}async function q$(e){return await _("pod_membership").where({podId:e,memberType:"fact"}).pluck("memberId")}var mi,Cc,W$,hr=f(()=>{D();Se();mi=(e,t,r)=>Ko(e,"fact",t,r),Cc=(e,t,r)=>Ko(e,"document",t,r),W$=(e,t,r)=>Ko(e,"entity",t,r)});var Oc={};T(Oc,{getEntitiesForFact:()=>z$,getEntityIdsForFacts:()=>xn,getFactsForEntity:()=>$c,linkEntitiesToFact:()=>hi});async function hi(e,t){if(!t.length)return;let r=fc(t,"id"),n=r.map(i=>({factId:e,entityId:i.id,mentionType:"content",mentionCount:1}));await _("fact_entity").insert(n).onConflict(_.raw("(fact_id, entity_id, mention_type)")).merge({mentionCount:_.raw("fact_entity.mention_count + 1")}),await J$(e,r)}async function J$(e,t){let r=t.map(i=>i.id).filter(Boolean);if(!r.length)return;let n=await _("pod").whereIn("entityId",r).where({status:"active"}).select("id");for(let{id:i}of n)await mi(i,e,"mention")}async function $c(e,{limit:t=50}={}){return _("fact").join("fact_entity","fact.id","fact_entity.fact_id").where("fact_entity.entity_id",e).where("fact.status","active").select("fact.*","fact_entity.mention_count as entityMentionCount").orderBy("fact_entity.mention_count","desc").limit(t)}async function z$(e){return _("entity").join("fact_entity","entity.id","fact_entity.entity_id").where("fact_entity.fact_id",e).whereNull("entity.mergedWith").select("entity.id","entity.uid","entity.name","entity.entityType","entity.description")}async function xn(e){if(!e.length)return new Map;let t=await _("fact_entity").whereIn("factId",e).select("factId","entityId"),r=new Map;for(let n of t)r.has(n.factId)||r.set(n.factId,[]),r.get(n.factId).push(n.entityId);return r}var gr=f(()=>{Bo();D();hr()});import X$ from"node:path";async function Lc(e,t,r,n){let{title:i,sourceType:o,metadata:s={}}=e,a=t.filter(u=>u.action==="ADD"||u.action==="UPDATE"),c=a.map(u=>u.fact||u.existing).filter(Boolean),d=a.find(u=>u.fact)?.fact?.id||null,p=new Date().toISOString().split("T")[0];return n?.items?.length?Z$({entityDefs:n,factObjects:c,firstFactId:d,namespace:r,today:p}):Q$({title:i,sourceType:o,metadata:s,factObjects:c,firstFactId:d,namespace:r,today:p})}async function Z$({entityDefs:e,factObjects:t,firstFactId:r,namespace:n,today:i}){let o={},s=0,a=t.map(u=>u.content).filter(Boolean).join(`
|
|
247
|
+
`),c=[];for(let u of e.items){let m=await di({name:u.name,entityType:u.type,description:u.description,namespace:n,episodeText:a,episodeEntityIds:c});o[u.name]=m,m?.id&&c.push(m.id)}for(let u of e.relations||[]){let m=o[u.source],g=o[u.target];if(!m||!g)continue;let y=Rc(t,u.source)||Rc(t,u.target);await pi({sourceId:m.id,targetId:g.id,relationType:u.type,sourceFactId:y?.id||r,validAt:i}),s++}let l=await Dc(t,n),d=Nc(Object.values(o),l),p=0;for(let u of t){let m=d.filter(g=>Yo(u.content,g));m.length&&(await hi(u.id,m),p+=m.length)}return{entityCount:d.length,relationCount:s,factEntityLinks:p,topics:d.filter(u=>u.entityType==="topic").map(u=>u.name)}}async function Q$({title:e,sourceType:t,metadata:r,factObjects:n,firstFactId:i,namespace:o,today:s}){if(!e){let w=n.length?await vc(n,{promptPath:ey,namespace:o}):[],x=await Dc(n,o),b=Nc(w,x),A=0;for(let v of n){let S=b.filter(C=>Yo(v.content,C));S.length&&(await hi(v.id,S),A+=S.length)}return{entityCount:b.length,relationCount:0,factEntityLinks:A,topics:w.map(v=>v.name)}}let a=n.map(w=>w.content).filter(Boolean).join(`
|
|
248
|
+
`).slice(0,2e3),c=await di({name:e,entityType:"document",description:`${t} document: ${e}`,namespace:o,episodeText:a}),l=null;r.author&&(l=await di({name:r.author,entityType:"person",namespace:o,episodeText:a,episodeEntityIds:c?.id?[c.id]:[]}));let d=n.length?await vc(n,{promptPath:ey,namespace:o}):[],p=0;l&&(await pi({sourceId:c.id,targetId:l.id,relationType:"AUTHORED_BY",sourceFactId:i,validAt:s}),p++);for(let w of d){let x=Rc(n,w.name);await pi({sourceId:c.id,targetId:w.id,relationType:"COVERS",sourceFactId:x?.id||i,validAt:s}),p++}let u=[c,l,...d].filter(Boolean),m=await Dc(n,o),g=Nc(u,m),y=0;for(let w of n){let x=g.filter(b=>Yo(w.content,b));x.length&&(await hi(w.id,x),y+=x.length)}return{entityCount:g.length,relationCount:p,factEntityLinks:y,topics:d.map(w=>w.name)}}function Rc(e,t){if(!t)return null;let r=t.toLowerCase();return e.find(n=>n.content?.toLowerCase().includes(r))||null}function Yo(e,t){if(!e||!t?.name)return!1;let r=e.toLowerCase();return[t.name.toLowerCase(),...t.aliases||[]].some(i=>i?new RegExp(`\\b${eO(i)}\\b`).test(r):!1)}function eO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Nc(...e){let t=new Set,r=[];for(let n of e)for(let i of n)!i||t.has(i.id)||(t.add(i.id),r.push(i));return r}async function Dc(e,t){if(!e?.length)return[];let r=await _("entity as e").join("pod as p","p.entity_id","e.id").where("p.status","active").where("e.namespace",t).whereNull("e.mergedWith").select("e.id","e.uid","e.name","e.entityType","e.aliases");return r.length?r.filter(n=>e.some(i=>Yo(i.content,n))):[]}var ey,ty=f(()=>{Qg();fr();gr();B();D();ey=X$.join(Ie,"entity-extraction.md")});function ny({platforms:e={},role:t=null,relationship:r=null,notes:n=null}){return{platforms:e,role:t,relationship:r,notes:n}}function iy(e={}){return e.slack?.user_id?`slack:${e.slack.user_id}`:e.github?.username?`github:${e.github.username}`:e.email?`email:${String(e.email).toLowerCase()}`:null}function oy(e={},t={}){let r={...e};for(let[n,i]of Object.entries(t))i&&(r[n]={...r[n]||{},...typeof i=="object"?i:{value:i}});return r}var kc,tO,ry,Pc=f(()=>{D();R();kc="person",tO=1440*60*1e3,ry={name:"person",description:"A person you have a working relationship with",identityField:"primary_handle",attrsSchema:{platforms:"object",role:"string",relationship:"string",notes:"string"},visibility:"private",activeMode:"rolling-window",hotContextBudget:4,retrievalWeights:{recency:1,relevance:.8},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/person.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.namespace||E.defaults.namespace;try{let r=new Date(Date.now()-tO);return(await _("pod as p").join("pod_membership as pm","pm.pod_id","p.id").join("fact_lifecycle as fl","fl.fact_id","pm.member_id").where("pm.memberType","fact").where("p.podType","person").where("p.namespace",t).where("p.status","active").where("fl.lastAccessedAt",">=",r).distinct("p.uid")).map(i=>i.uid)}catch{return[]}}}});var Uc={};T(Uc,{POD_TYPE:()=>Mc,buildAttrs:()=>Hc,claudeSessionKind:()=>Fc,defaultName:()=>Bc,formatForDisplay:()=>nO});function Hc({sessionId:e,transcriptPath:t=null,cwd:r=null,turnCount:n=0,model:i=null,conclusion:o=null,summary:s=null}){return{session_id:e,transcript_path:t,cwd:r,turn_count:n,model:i,conclusion:o,summary:s}}function Bc({sessionId:e,startedAt:t=new Date}={}){let n=(t instanceof Date?t:new Date(t)).toISOString().replace("T"," ").slice(0,16),i=e?e.slice(0,8):"unknown";return`claude-session ${n} (${i})`}function nO(e){let t=iO(e.attrs);return{uid:e.uid,name:e.name,sessionId:t.session_id??e.externalId,transcriptPath:t.transcript_path,cwd:t.cwd,model:t.model,turnCount:t.turn_count??0,conclusion:t.conclusion,startedAt:e.startedAt,endedAt:e.endedAt,memberFactCount:e.memberFactCount,memberDocCount:e.memberDocCount}}function iO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Mc,Fc,qo=f(()=>{yr();Mc="claude_session",Fc={name:"claude_session",description:"Claude Code session",identityField:"session_id",attrsSchema:{session_id:"string",transcript_path:"string",cwd:"string",turn_count:"number",model:"string",conclusion:"string",summary:"string"},visibility:"private",activeMode:"singleton-live",hotContextBudget:6,retrievalWeights:{recency:1,relevance:.7},importanceDefault:2,ttlDays:90,schemaDocPath:"kinds/claude_session.schema.md",writePolicy:"origin-only",resolveActiveScope:async()=>{try{let e=await Gc();return e?[e]:[]}catch{return[]}}}});var vn={};T(vn,{CURSOR_PATH:()=>Sn,endActiveSession:()=>mO,ensureActiveSession:()=>dO,getActiveCursor:()=>fO,getActiveSessionPodUid:()=>Gc});import{writeFile as oO,readFile as sO,unlink as aO}from"node:fs/promises";import{existsSync as cO,mkdirSync as lO}from"node:fs";import{dirname as sy}from"node:path";async function Jo(){try{let e=await sO(Sn,"utf8");return JSON.parse(e)}catch{return null}}async function ay(e){cO(sy(Sn))||lO(sy(Sn),{recursive:!0}),await oO(Sn,JSON.stringify(e,null,2),"utf8")}async function dO({sessionId:e,transcriptPath:t=null,cwd:r=null,model:n=null,namespace:i=null}){if(!e)throw new Error("ensureActiveSession requires sessionId from hook stdin");let o=i||E.defaults.namespace,s=await Jo();if(s&&s.session_id===e&&s.namespace===o){let l=await wn(s.pod_uid);if(l)return await En(l.id,{turn_count:(hO(l.attrs)||0)+1}),await pO(s),l}let a=new Date,{pod:c}=await mr({podType:Mc,externalId:e,name:Bc({sessionId:e,startedAt:a}),namespace:o,attrs:Hc({sessionId:e,transcriptPath:t,cwd:r,turnCount:1,model:n}),startedAt:a});return await ay({session_id:e,pod_uid:c.uid,namespace:o,started_at:c.startedAt??a.toISOString(),last_seen_at:new Date().toISOString()}),c}async function pO(e){await ay({...e,last_seen_at:new Date().toISOString()})}async function Gc({allowStale:e=!1}={}){let t=await Jo();return!t||!t.pod_uid||!e&&t.started_at&&Date.now()-new Date(t.started_at).getTime()>uO?null:t.pod_uid}async function fO(){return Jo()}async function mO({conclusion:e=null,summary:t=null}={}){let r=await Jo();if(!r)return null;let n=await wn(r.pod_uid);if(n){if(e||t){let i={};e&&(i.conclusion=e),t&&(i.summary=t),await En(n.id,i)}await Tc(n.id)}try{await aO(Sn)}catch{}return n}function hO(e){if(!e)return 0;if(typeof e=="object")return e.turn_count??0;try{return JSON.parse(e).turn_count??0}catch{return 0}}var Sn,uO,yr=f(()=>{Se();qo();R();B();Sn=Xs,uO=360*60*1e3});var Yc={};T(Yc,{POD_TYPE:()=>Wc,deriveProjectRoot:()=>Kc,ensureProjectPod:()=>yO,formatForDisplay:()=>_O,membership:()=>Gt,projectKind:()=>Vc});import{execFileSync as gO}from"node:child_process";import{basename as cy}from"node:path";async function yO({cwd:e,namespace:t=null}){if(!e)return null;let r=Kc(e),n=t||E.defaults.namespace,o=(r!==e?!1:jc(e)===e)?r:jc(e),{pod:s}=await mr({podType:Wc,externalId:r,name:cy(r)||r,namespace:n,attrs:{root_path:r,git_root:o||null,display_name:cy(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return s}function Kc(e){return jc(e)||e}function jc(e){try{return gO("git",["rev-parse","--show-toplevel"],{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function wO(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(yr(),vn));return(await e())?.cwd||null}catch{return null}}function _O(e){let t=EO(e.attrs);return{uid:e.uid,name:e.name,rootPath:t.root_path,gitRoot:t.git_root,displayName:t.display_name,discoveredAt:t.discovered_at,memberFactCount:e.memberFactCount,memberDocCount:e.memberDocCount}}function EO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var Wc,Vc,zo=f(()=>{Se();hr();R();Wc="project",Vc={name:"project",description:"Code project rooted at a git repo or directory",identityField:"root_path",attrsSchema:{root_path:"string",git_root:"string",display_name:"string",discovered_at:"string"},visibility:"shared",activeMode:"multi-active",hotContextBudget:4,retrievalWeights:{recency:.6,relevance:1},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/project.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.cwd||await wO();if(!t)return[];let r=e.namespace||E.defaults.namespace,n=Kc(t),i=await _n({podType:Wc,externalId:n,namespace:r});return i?[i.uid]:[]}}});var ly={};T(ly,{fromSourceMetadata:()=>qc,upsertPersonPod:()=>bO});async function bO({entityId:e,name:t,namespace:r,attrs:n={}}){if(!e)throw new Error("upsertPersonPod requires entityId");let i=r||E.defaults.namespace,o=await Ac(e);if(o){let l=typeof o.attrs=="object"?o.attrs:xO(o.attrs),p={platforms:oy(l.platforms||{},n.platforms||{})};return n.role&&!l.role&&(p.role=n.role),n.relationship&&!l.relationship&&(p.relationship=n.relationship),n.notes&&!l.notes&&(p.notes=n.notes),await En(o.id,p),{pod:o,isNew:!1}}let s=ny(n),a=iy(s.platforms);return a?await mr({podType:kc,externalId:a,name:t,namespace:i,attrs:s,entityId:e}):{pod:await Ic({podType:kc,name:t,namespace:i,attrs:s,entityId:e}),isNew:!0}}async function qc(e,t){if(!e||typeof e!="object")return[];let r=[],n=t||E.defaults.namespace;if(e.slack?.team_id&&e.connection_id){let o=await _n({podType:"connector_workspace",externalId:`slack:${e.slack.team_id}`,namespace:n});o&&r.push({podId:o.id,role:"primary"})}if(e.github?.org&&e.connection_id){let o=await _n({podType:"connector_workspace",externalId:`github:${e.github.org}`,namespace:n});o&&r.push({podId:o.id,role:"primary"})}let i=e.project_root||e.source_root;if(i)try{let{ensureProjectPod:o}=await Promise.resolve().then(()=>(zo(),Yc)),s=await o({cwd:i,namespace:n});s&&r.push({podId:s.id,role:"primary"})}catch{}return r}function xO(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}var Jc=f(()=>{Se();Pc();R()});var zc={};T(zc,{ingestDocument:()=>AO});import{createHash as SO}from"node:crypto";import{join as vO}from"node:path";async function AO({content:e,title:t,sourcePath:r,sourceType:n="raw",contentType:i,namespace:o,metadata:s={},promptPath:a,categories:c,entities:l,skipFacts:d=!1,skipEntities:p=!1,skipContextualization:u=!1,classify:m=!0,podUids:g=[],resolvePodsFrom:y=null}){e=gn(e);let w=o||E.defaults.namespace,x=c||Object.keys(jo),b=a||IO,A=t||r,v=null;if(m&&(process.stderr.write(`[0/6] Classifying input...
|
|
249
|
+
`),v=await Vg(e,{title:A}),process.stderr.write(` Route: ${v.route} \u2014 ${v.reasoning}
|
|
250
|
+
`),v.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
|
|
251
|
+
`),{documentId:null,title:A,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
|
|
252
|
+
`);let S=SO("sha256").update(e).digest("hex"),C=r||`thought:${S}`,{doc:O,changed:M}=await Ra({sourcePath:C,sourceType:n,title:A,contentHash:S,namespace:w});if(!M)return process.stderr.write(` Skipped \u2014 content unchanged.
|
|
253
|
+
`),{documentId:O.id,title:A,skipped:!0};s&&(Object.keys(s).length||s.connection_id)&&await Da(O.id,s,s.connection_id??null);let F=await $O({podUids:g,resolvePodsFrom:y,metadata:s,namespace:w});for(let{podId:N,role:W}of F)await Cc(N,O.id,W);process.stderr.write(`[2/6] Parsing content...
|
|
254
|
+
`);let q=bd(e,{format:s.format,filePath:r,contentType:i});if(A=t||q.metadata?.title||r,v?.route==="thought"&&v.facts.length){process.stderr.write(`[thought] Storing ${v.facts.length} facts directly...
|
|
255
|
+
`);let N=await TO(v.facts,{documentId:O.id,namespace:w}),W={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!p&&N.results.length&&(W=await Lc({title:A,sourceType:n,metadata:s},N.results,w,l)),await ao(O.id,{chunkCount:0,factCount:N.counts.added}),await dy(N.results,F),await Go(O.id,N.results.map(ne=>ne.fact?.id??ne.existing?.id).filter(Boolean)),process.stderr.write(`Done. Route: thought, ${N.counts.total} facts (${N.counts.added} new)
|
|
256
|
+
`),{documentId:O.id,documentUid:O.uid,title:A,skipped:!1,route:"thought",chunkCount:0,facts:{...N.counts,verdicts:uy(N.results)},entities:W}}let P=[],Q={counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]},ae={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};try{process.stderr.write(`[3/6] Chunking and embedding...
|
|
257
|
+
`),P=vd(q.sections),process.stderr.write(` ${P.length} chunks created
|
|
258
|
+
`),!u&&P.length&&(P=await ip(P,q.text,{title:A}));let N=P.map(ie=>{let de=ie.contextualPrefix;return de?`${de}
|
|
259
|
+
${ie.content}`:ie.content}),W=await ft(N),ne=P.map((ie,de)=>({...ie,embedding:W[de]}));await lp(O.id,ne,w),!d&&E.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
|
|
260
|
+
`),Q=await CO(P,{documentId:O.id,namespace:w,promptPath:b,categories:x})):E.ingest.eagerExtract||process.stderr.write(`[4/6] Skipping fact extraction (SIGIL_EAGER_EXTRACT=false)
|
|
261
|
+
`),await ao(O.id,{chunkCount:P.length,factCount:Q.counts.added+Q.counts.updated+Q.counts.contradicted}),await dy(Q.results,F),await Go(O.id,Q.results.map(ie=>ie.fact?.id??ie.existing?.id).filter(Boolean)),!p&&Q.results.length&&(process.stderr.write(`[5/6] Linking entities...
|
|
262
|
+
`),ae=await Lc({title:A,sourceType:n,metadata:s},Q.results,w,l),process.stderr.write(` ${ae.entityCount} entities, ${ae.relationCount} relations
|
|
263
|
+
`))}catch(N){throw console.error(`[pipeline] Failed after document upsert: ${N.message}`),await Na(O.id).catch(()=>{}),N}return process.stderr.write(`Done. ${P.length} chunks, ${Q.counts.total} facts, ${ae.entityCount} entities
|
|
264
|
+
`),{documentId:O.id,documentUid:O.uid,title:A,skipped:!1,route:v?.route??null,chunkCount:P.length,facts:{...Q.counts,verdicts:uy(Q.results)},entities:ae}}function uy(e){return(e||[]).map(t=>({action:t.action,factId:t.fact?.id??t.existing?.id??null,content:String(t.fact?.content||t.existing?.content||"").slice(0,240),audm:t.audm||null,supersededId:t.supersededId??null,contradictedId:t.contradictedId??null}))}async function py(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:i="medium",defaultImportance:o="supplementary"}){let s={total:e.length,added:0,skipped:0,updated:0,contradicted:0},a=[];for(let c=0;c<e.length;c++){let l=e[c],d=await gc({content:l.content,category:l.category,confidence:l.confidence||i,importance:l.importance||o,namespace:r,sourceDocumentIds:t?[t]:[],sourceSection:l.sourceSection||l.category,embedding:n[c]});a.push(d);let p=d.action.toLowerCase();p==="add"?s.added++:p==="skip"?s.skipped++:p==="update"?s.updated++:p==="contradict"&&s.contradicted++}return{counts:s,results:a}}async function TO(e,{documentId:t,namespace:r}){let n=await ft(e.map(i=>i.content));return py(e,{documentId:t,namespace:r,embeddings:n,defaultConfidence:"high",defaultImportance:"vital"})}async function CO(e,{documentId:t,namespace:r,promptPath:n,categories:i}){let o=await Mg(e,{promptPath:n,categories:i});if(process.stderr.write(` ${o.length} facts extracted from ${e.length} chunks
|
|
265
|
+
`),!o.length)return{counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]};let s=await ft(o.map(a=>a.content));return py(o,{documentId:t,namespace:r,embeddings:s})}async function $O({podUids:e,resolvePodsFrom:t,metadata:r,namespace:n}){let i=[];for(let s of e){let a=await wn(s);a&&i.push({podId:a.id,role:"primary"})}if(t==="metadata"){let s=await qc(r,n);for(let a of s)i.push(a)}let o=new Map;for(let s of i){let a=o.get(s.podId);(!a||s.role==="primary"&&a.role!=="primary")&&o.set(s.podId,s)}return[...o.values()]}async function dy(e,t){if(!(!t.length||!e.length))for(let r of e){let n=r?.fact?.id??r?.existing?.id;if(!n)continue;let i=r?.action==="SKIP"?"mention":"primary";for(let{podId:o}of t)await mi(o,n,i)}}var IO,Xc=f(()=>{xd();ga();Ot();op();lo();up();Fg();lt();_c();Kg();ty();Se();hr();Jc();Uo();R();B();IO=vO(Ie,"default-extraction.md")});var jt={};T(jt,{clearTraces:()=>kO,getTrace:()=>LO,listTraces:()=>DO,recordTrace:()=>NO});function RO(){let e=sa();return{deviceId:e?.device?.id??null,transport:e?.transport??null}}async function NO({kind:e,summary:t,detail:r={},namespace:n=null,durationMs:i=null}){let o=`trace-${Ke(16)}`,s=new Date().toISOString(),{deviceId:a,transport:c}=RO(),l=r;try{JSON.stringify(r).length>OO&&(l={truncated:!0,note:"trace detail exceeded size cap",summary:t})}catch{l={error:"detail not serializable"}}try{_e.emit("trace",{uid:o,kind:e,summary:t,namespace:n,durationMs:i,deviceId:a,transport:c,detail:l})}catch{}try{return await _("trace_event").insert({uid:o,kind:e,ts:s,duration_ms:i,namespace:n,summary:t,device_id:a,transport:c,detail:JSON.stringify(l)}),o}catch(d){return console.error("[trace-store] persist failed:",d.message),null}}async function DO({kind:e=null,namespace:t=null,before:r=null,limit:n=50}={}){let i=_("trace_event").select("uid","kind","ts","duration_ms as durationMs","namespace","summary","device_id as deviceId","transport","detail").orderBy("ts","desc").limit(Math.min(Number(n)||50,200));return e&&(i=i.where({kind:e})),t&&(i=i.where({namespace:t})),r&&(i=i.where("ts","<",r)),(await i).map(s=>({...s,detail:typeof s.detail=="string"?fy(s.detail):s.detail}))}async function LO(e){let t=await _("trace_event").select("uid","kind","ts","duration_ms as durationMs","namespace","summary","device_id as deviceId","transport","detail").where({uid:e}).first();return t?{...t,detail:typeof t.detail=="string"?fy(t.detail):t.detail}:null}async function kO(){return{cleared:await _("trace_event").del()}}function fy(e){try{return JSON.parse(e)}catch{return{}}}var OO,Wt=f(()=>{qr();D();Gr();qi();OO=256*1024});var Qc={};T(Qc,{_reset:()=>qO,activeKinds:()=>yi,get:()=>jO,getSchemaDoc:()=>YO,list:()=>WO,register:()=>Zc,validateAttrs:()=>KO});import{readFile as my}from"node:fs/promises";import{fileURLToPath as PO}from"node:url";import{dirname as MO,join as hy}from"node:path";function Zc(e){for(let t of FO)if(!e[t])throw new Error(`Pod kind missing required field: ${t}`);if(e.visibility&&!HO.has(e.visibility))throw new Error(`Pod kind ${e.name}: invalid visibility ${e.visibility}`);if(e.activeMode&&!BO.has(e.activeMode))throw new Error(`Pod kind ${e.name}: invalid activeMode ${e.activeMode}`);if(e.writePolicy&&!UO.has(e.writePolicy))throw new Error(`Pod kind ${e.name}: invalid writePolicy ${e.writePolicy}`);gi.set(e.name,GO(e))}function GO(e){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...e}}function jO(e){return gi.get(e)||null}function WO(){return Array.from(gi.values())}async function yi(e={}){let t=[];for(let r of gi.values())if(typeof r.resolveActiveScope=="function")try{let n=await r.resolveActiveScope(e);Array.isArray(n)&&n.length>0&&t.push({kind:r,scope:n})}catch(n){process.stderr.write(`[sigil:pods] resolveActiveScope failed for kind "${r.name}": ${n.message}
|
|
266
|
+
`),VO(r.name,n)}return t}function VO(e,t){Promise.resolve().then(()=>(Wt(),jt)).then(({recordTrace:r})=>r({kind:"lifecycle",summary:`pod-resolution failed for kind "${e}"`,detail:{kind:e,error:t.message}})).catch(()=>{})}function KO(e,t={}){if(!e||!e.attrsSchema)return{valid:!0};let r=[];for(let[n,i]of Object.entries(e.attrsSchema)){let o=t[n];if(o==null)continue;let s=Array.isArray(o)?"array":typeof o;i!==s&&r.push(`attr "${n}" expected ${i}, got ${s}`)}return r.length?{valid:!1,errors:r}:{valid:!0}}async function YO(e){if(!e)return null;let t=hy(qs,`${e.name}.md`);try{return await my(t,"utf8")}catch{}if(!e.schemaDocPath)return null;let r=MO(PO(import.meta.url)),n=hy(r,e.schemaDocPath);try{return await my(n,"utf8")}catch{return null}}function qO(){gi.clear()}var FO,HO,BO,UO,gi,In=f(()=>{B();FO=["name"],HO=new Set(["private","shared","public"]),BO=new Set(["singleton-live","multi-active","rolling-window","always"]),UO=new Set(["origin-only","shared-allowlist","open"]),gi=new Map});async function zO(e){if(e.project)return e.project;if(!e.cwd)try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(yr(),vn)),r=await t();e={...e,cwd:r?.cwd}}catch{return null}if(!e.cwd)return null;try{let{deriveProjectRoot:t}=await Promise.resolve().then(()=>(zo(),Yc)),r=t(e.cwd);return r?r.split("/").pop():null}catch{return null}}function XO(e){if(!e)return{};if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return{}}}var JO,gy,yy=f(()=>{D();R();JO="playbook",gy={name:"playbook",description:"A reusable workflow or debug recipe (procedural memory)",identityField:"slug",attrsSchema:{slug:"string",project:"string",description:"string",tags:"array"},visibility:"shared",activeMode:"always",hotContextBudget:3,retrievalWeights:{recency:.3,relevance:1},importanceDefault:3,ttlDays:null,schemaDocPath:"kinds/playbook.schema.md",writePolicy:"origin-only",resolveActiveScope:async(e={})=>{let t=e.namespace||E.defaults.namespace,r=await zO(e);try{let i=await _("pod").where({podType:JO,namespace:t,status:"active"}).select("uid","attrs");return r?i.filter(s=>{let a=XO(s.attrs);return!a.project||a.project===r}).map(s=>s.uid):i.map(s=>s.uid)}catch{return[]}}}});var ZO,wy,_y=f(()=>{D();R();ZO=["__virtual:vital__"],wy={name:"vital",description:"Facts marked importance=5 (vital), surfaced globally",identityField:null,attrsSchema:{},visibility:"public",activeMode:"always",hotContextBudget:6,retrievalWeights:{recency:.5,relevance:1},importanceDefault:5,ttlDays:null,schemaDocPath:"kinds/vital.schema.md",writePolicy:"open",resolveActiveScope:async()=>ZO,fetchFacts:async(e={},{slots:t=8,namespace:r}={})=>{let n=r||e.namespace||E.defaults.namespace;return _("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).where(i=>{i.where("f.importance","vital").orWhere("f.importance_score",5)}).orderByRaw("COALESCE(fl.access_count, 0) DESC, f.created_at DESC").limit(t).pluck("f.content")}}});var el={};T(el,{registerBuiltins:()=>by});function by(){if(!Ey){for(let e of QO)Zc(e);Ey=!0}}var QO,Ey,wi=f(()=>{In();qo();Pc();zo();yy();_y();QO=[Fc,Vc,ry,gy,wy],Ey=!1;by()});var An={};T(An,{factsInPodsByRecency:()=>Sy,getHotFacts:()=>xy,updateContextSnapshot:()=>rR,writeSnapshotToFile:()=>vy});async function xy({namespace:e,limit:t=eR,ctx:r={}}={}){let n=e||E.defaults.namespace,i={...r,namespace:n};i.cwd||(i.cwd=await tR());let o=await yi(i),s=await Promise.all(o.map(async({kind:l,scope:d})=>{try{return typeof l.fetchFacts=="function"?await l.fetchFacts(i,{slots:l.hotContextBudget,namespace:n}):await Sy(d,n,l.hotContextBudget)}catch{return[]}})),a=new Set,c=[];for(let l of s)for(let d of l)if(!(!d||a.has(d))&&(a.add(d),c.push(d),c.length>=t))return c;if(c.length===0){let l=await _("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":n}).orderByRaw("COALESCE(fl.last_accessed_at, f.created_at) DESC").limit(t).pluck("f.content");for(let d of l)if(!(!d||a.has(d))&&(a.add(d),c.push(d),c.length>=t))break}return c.slice(0,t)}async function Sy(e,t,r){if(!Array.isArray(e)||e.length===0)return[];let n=e.filter(i=>typeof i=="string"&&!i.startsWith("__virtual:"));return n.length===0?[]:_("fact as f").join("pod_membership as pm",function(){this.on("pm.member_id","=","f.id").andOnVal("pm.member_type","=","fact")}).join("pod as p","p.id","pm.pod_id").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").whereIn("p.uid",n).where({"f.status":"active","f.namespace":t}).orderByRaw(`
|
|
267
|
+
COALESCE(f.importance_score, 2) DESC,
|
|
268
|
+
COALESCE(fl.last_accessed_at, f.created_at) DESC
|
|
269
|
+
`).limit(r).pluck("f.content")}async function tR(){try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(yr(),vn));return(await e())?.cwd||null}catch{return null}}async function vy({facts:e,namespace:t}){let r=await import("node:fs/promises");if(!e||!e.length)return 0;let n="<!-- sigil-context -->",i=new Date().toISOString().slice(0,16).replace("T"," "),o=[n,`## Active Context *(${e.length} facts \xB7 refreshed ${i}${t?` \xB7 ns=${t}`:""})*`,"",e.map(c=>`- ${c}`).join(`
|
|
270
|
+
`),n].join(`
|
|
271
|
+
`),s="";try{s=await r.readFile(Bi,"utf8")}catch{}let a=s.includes(n)?s.replace(new RegExp(`${n}[\\s\\S]*?${n}`),o):s+(s.trim()?`
|
|
272
|
+
|
|
273
|
+
`:"")+o+`
|
|
274
|
+
`;return await r.writeFile(Bi,a,"utf8"),e.length}async function rR({namespace:e,limit:t,ctx:r}={}){let n=await xy({namespace:e,limit:t,ctx:r});return vy({facts:n,namespace:e})}var eR,Tn=f(()=>{D();R();B();wi();In();eR=20});function Iy(e){e.register("remember",async t=>{let r=Array.isArray(t.facts)?t.facts.filter(Boolean):[];if(r.length===0){let u=new Error("remember: params.facts must be a non-empty string[]");throw u.code="invalid_params",u}let{ingestDocument:n}=await Promise.resolve().then(()=>(Xc(),zc)),{default:i}=await Promise.resolve().then(()=>(R(),X)),o=t.namespace||i.defaults.namespace,s=0,a=0,c=0,l=Date.now(),d=[];for(let u of r){let m=await n({content:u,namespace:o,classify:!0});if(m.skipped||m.route==="noise"){c++,d.push({input:String(u).slice(0,240),route:m.route??null,skipped:!0,verdicts:m.facts?.verdicts||[]});continue}let g=m.facts?.added??0,y=m.facts?.updated??0;s+=g,a+=y,g+y===0&&c++,d.push({input:String(u).slice(0,240),route:m.route??null,skipped:!1,counts:{added:g,updated:y,skipped:m.facts?.skipped??0,contradicted:m.facts?.contradicted??0},verdicts:m.facts?.verdicts||[],entities:m.entities?{entityCount:m.entities.entityCount,relationCount:m.entities.relationCount,topics:m.entities.topics||[]}:null})}if(s+a>0){let{updateContextSnapshot:u}=await Promise.resolve().then(()=>(Tn(),An));await u({namespace:o}).catch(()=>{})}let{recordTrace:p}=await Promise.resolve().then(()=>(Wt(),jt));return p({kind:"ingest",summary:`remember ${r.length} input${r.length===1?"":"s"} \u2192 +${s} added, ~${a} updated, ${c} known`,namespace:o,durationMs:Date.now()-l,detail:{op:"remember",namespace:o,totals:{added:s,updated:a,alreadyKnown:c,inputCount:r.length},inputs:d}}).catch(()=>{}),{added:s,updated:a,alreadyKnown:c,namespace:o}})}var Ay=f(()=>{});var Ty={};T(Ty,{consolidateCoRetrievalEdges:()=>iR,getCoRetrievedFacts:()=>nR,strengthenEdges:()=>tl});async function tl(e){if(!e||e.length<2)return;let t=[...new Set(e.filter(o=>Number.isInteger(o)))].sort((o,s)=>o-s);if(t.length<2)return;let r=[];for(let o=0;o<t.length;o++)for(let s=o+1;s<t.length;s++)r.push([t[o],t[s]]);let n=r.map(()=>"(?, ?, 1, NOW(), NOW())").join(", "),i=r.flat();await _.raw(`
|
|
511
275
|
INSERT INTO hebbian_edge (fact_a_id, fact_b_id, strength, first_seen_at, last_seen_at)
|
|
512
|
-
VALUES ${
|
|
276
|
+
VALUES ${n}
|
|
513
277
|
ON CONFLICT (fact_a_id, fact_b_id)
|
|
514
278
|
DO UPDATE SET
|
|
515
279
|
strength = hebbian_edge.strength + 1,
|
|
516
280
|
last_seen_at = NOW()
|
|
517
|
-
`,
|
|
281
|
+
`,i)}async function nR(e,{limit:t=5,minStrength:r=2}={}){let{rows:n}=await _.raw(`
|
|
518
282
|
SELECT
|
|
519
283
|
CASE WHEN fact_a_id = ? THEN fact_b_id ELSE fact_a_id END AS partner_id,
|
|
520
284
|
strength,
|
|
@@ -524,19 +288,19 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
524
288
|
AND strength >= ?
|
|
525
289
|
ORDER BY strength DESC, last_seen_at DESC
|
|
526
290
|
LIMIT ?
|
|
527
|
-
`,[
|
|
291
|
+
`,[e,e,e,r,t]);return n}async function iR({floor:e=1,decayDays:t=90}={}){let{rows:r}=await _.raw(`
|
|
528
292
|
DELETE FROM hebbian_edge
|
|
529
293
|
WHERE strength <= ?
|
|
530
294
|
AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
|
|
531
295
|
RETURNING fact_a_id
|
|
532
|
-
`,[t
|
|
296
|
+
`,[e,t]);return r.length}var rl=f(()=>{D()});var Zo={};T(Zo,{consolidateEntityCoRetrievalEdges:()=>aR,getCoRetrievedEntities:()=>sR,getEdgeStrengthsForRanking:()=>il,getEntityHebbianStats:()=>cR,strengthenEntityEdges:()=>nl});function Xo(e){return oR/Math.max(e,1)}async function nl(e,t={}){if(!E.hebbian.entity.enabled||!e||e.length<2)return;let r=t.eta??E.hebbian.entity.eta,n=t.cap??E.hebbian.entity.cap,i=[...new Set(e.filter(c=>Number.isInteger(c)))].sort((c,l)=>c-l);if(i.length<2)return;let o=[];for(let c=0;c<i.length;c++)for(let l=c+1;l<i.length;l++)o.push([i[c],i[l]]);let s=o.map(()=>"(?, ?, ?, NOW(), NOW())").join(", "),a=o.flatMap(([c,l])=>[c,l,r]);await _.raw(`
|
|
533
297
|
INSERT INTO entity_hebbian_edge (entity_a_id, entity_b_id, strength, first_seen_at, last_seen_at)
|
|
534
|
-
VALUES ${
|
|
298
|
+
VALUES ${s}
|
|
535
299
|
ON CONFLICT (entity_a_id, entity_b_id)
|
|
536
300
|
DO UPDATE SET
|
|
537
301
|
strength = LEAST(entity_hebbian_edge.strength + ?, ?),
|
|
538
302
|
last_seen_at = NOW()
|
|
539
|
-
`,[...a,r,
|
|
303
|
+
`,[...a,r,n])}async function sR(e,t={}){if(!E.hebbian.entity.enabled)return[];let r=t.limit??10,n=t.minEffectiveStrength??E.hebbian.entity.minEffective,i=Xo(t.halfLifeDays??E.hebbian.entity.halfLifeDays),{rows:o}=await _.raw(`
|
|
540
304
|
SELECT
|
|
541
305
|
CASE WHEN entity_a_id = ? THEN entity_b_id ELSE entity_a_id END AS "partnerId",
|
|
542
306
|
(strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0))::float8 AS "effectiveStrength",
|
|
@@ -546,7 +310,7 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
546
310
|
WHERE entity_a_id = ? OR entity_b_id = ?
|
|
547
311
|
ORDER BY "effectiveStrength" DESC
|
|
548
312
|
LIMIT ?
|
|
549
|
-
`,[
|
|
313
|
+
`,[e,i,e,e,r*3]);return o.filter(s=>s.effectiveStrength>=n).slice(0,r)}async function il(e,t,r={}){if(!E.hebbian.entity.enabled)return new Map;if(!e.length||!t.length)return new Map;let n=Xo(r.halfLifeDays??E.hebbian.entity.halfLifeDays),i=[...new Set(e)],o=[...new Set(t)].filter(c=>!i.includes(c));if(!o.length)return new Map;let{rows:s}=await _.raw(`
|
|
550
314
|
SELECT
|
|
551
315
|
CASE
|
|
552
316
|
WHEN entity_a_id = ANY(?::bigint[]) THEN entity_b_id
|
|
@@ -559,18 +323,18 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
559
323
|
OR
|
|
560
324
|
(entity_b_id = ANY(?::bigint[]) AND entity_a_id = ANY(?::bigint[]))
|
|
561
325
|
GROUP BY "candidateId"
|
|
562
|
-
`,[n,i,
|
|
326
|
+
`,[i,n,i,o,i,o]),a=new Map;for(let c of s)a.set(Number(c.candidateId),c.summedStrength);return a}async function aR({floor:e=.5,decayDays:t=90}={}){let r=Xo(E.hebbian.entity.halfLifeDays),{rows:n}=await _.raw(`
|
|
563
327
|
DELETE FROM entity_hebbian_edge
|
|
564
328
|
WHERE (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0)) <= ?
|
|
565
329
|
AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
|
|
566
330
|
RETURNING entity_a_id
|
|
567
|
-
`,[r,t
|
|
331
|
+
`,[r,e,t]);return n.length}async function cR({topN:e=5}={}){let t=Xo(E.hebbian.entity.halfLifeDays),r=await _.raw(`
|
|
568
332
|
SELECT
|
|
569
333
|
COUNT(*)::int AS "edgeCount",
|
|
570
334
|
COALESCE(AVG(strength)::float8, 0) AS "avgStrength",
|
|
571
335
|
COALESCE(MAX(strength)::float8, 0) AS "maxStrength"
|
|
572
336
|
FROM entity_hebbian_edge
|
|
573
|
-
`),
|
|
337
|
+
`),n=await _.raw(`
|
|
574
338
|
SELECT
|
|
575
339
|
ea.name AS "aName",
|
|
576
340
|
eb.name AS "bName",
|
|
@@ -581,20 +345,20 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
581
345
|
JOIN entity eb ON eb.id = entity_b_id
|
|
582
346
|
ORDER BY "decayed" DESC
|
|
583
347
|
LIMIT ?
|
|
584
|
-
`,[e
|
|
348
|
+
`,[t,e]);return{edgeCount:r.rows[0]?.edgeCount??0,avgStrength:r.rows[0]?.avgStrength??0,maxStrength:r.rows[0]?.maxStrength??0,topPairs:n.rows??[]}}var oR,_i=f(()=>{D();R();oR=Math.log(2)});function Qo({minConfidence:e="medium",pointInTime:t,categories:r}){let n=lR[e]??1,i=[n],o="",s="";return t&&(o="AND valid_from <= ? AND (valid_until IS NULL OR valid_until > ?)",i.push(t,t)),r?.length&&(s="AND category = ANY(?)",i.push(r)),{minRank:n,temporalClause:o,categoryClause:s,filterParams:i}}var lR,Ei,es=f(()=>{lR={low:0,medium:1,high:2},Ei=`CASE confidence
|
|
585
349
|
WHEN 'high' THEN 2
|
|
586
350
|
WHEN 'medium' THEN 1
|
|
587
351
|
ELSE 0
|
|
588
|
-
END`});async function
|
|
352
|
+
END`});async function Cy(e,{namespaces:t,limit:r=20}){let n=fe(e),i=`${st("embedding")} <=> ${at()}`,{rows:o}=await _.raw(`
|
|
589
353
|
SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
|
|
590
354
|
content, section_heading AS "sectionHeading", namespace,
|
|
591
|
-
1 - (${
|
|
355
|
+
1 - (${i}) as similarity
|
|
592
356
|
FROM chunk
|
|
593
357
|
WHERE namespace = ANY(?)
|
|
594
358
|
AND embedding IS NOT NULL
|
|
595
|
-
ORDER BY ${
|
|
359
|
+
ORDER BY ${i}
|
|
596
360
|
LIMIT ?
|
|
597
|
-
`,[
|
|
361
|
+
`,[n,t,n,r]);return o}var $y=f(()=>{D();$t();R();es()});async function Oy(e,{namespaces:t,limit:r=20}){let{rows:n}=await _.raw(`
|
|
598
362
|
SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
|
|
599
363
|
content, section_heading AS "sectionHeading", namespace,
|
|
600
364
|
ts_rank(search_vector, plainto_tsquery('english', ?)) as rank
|
|
@@ -603,16 +367,18 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
603
367
|
AND search_vector @@ plainto_tsquery('english', ?)
|
|
604
368
|
ORDER BY rank DESC
|
|
605
369
|
LIMIT ?
|
|
606
|
-
`,[t,e,
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
370
|
+
`,[e,t,e,r]);return n}var Ry=f(()=>{D();es()});async function Dy(e,t,{namespaces:r,limit:n=5,minConfidence:i="medium",pointInTime:o,categories:s,podIds:a=null}){let c=fe(t),l=`${st("embedding")} <=> ${at()}`,{temporalClause:d,categoryClause:p,filterParams:u}=Qo({minConfidence:i,pointInTime:o,categories:s}),m=n*mR,g=Array.isArray(a),y=g&&a.length===0,w=g?y?"AND FALSE":`AND id = ANY(
|
|
371
|
+
SELECT member_id FROM pod_membership
|
|
372
|
+
WHERE member_type = 'fact' AND pod_id = ANY(?::int[])
|
|
373
|
+
)`:"",x=g&&!y?[a]:[],[b,...A]=u,v=[c,c,r,b,...A,...x,c,m],S=[e,e,r,b,e,...A,...x,m],C=[m,m,n],O=`
|
|
610
374
|
WITH semantic AS (
|
|
611
375
|
SELECT id,
|
|
612
376
|
uid,
|
|
613
377
|
content, category, confidence, importance, namespace, status,
|
|
614
378
|
source_document_ids AS "sourceDocumentIds",
|
|
615
379
|
source_section AS "sourceSection",
|
|
380
|
+
created_by_device_id AS "createdByDeviceId",
|
|
381
|
+
created_by_agent AS "createdByAgent",
|
|
616
382
|
created_at,
|
|
617
383
|
1 - (${l}) AS similarity,
|
|
618
384
|
ROW_NUMBER() OVER (ORDER BY ${l}) AS rank_ix
|
|
@@ -620,10 +386,10 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
620
386
|
WHERE namespace = ANY(?)
|
|
621
387
|
AND status = 'active'
|
|
622
388
|
AND embedding IS NOT NULL
|
|
623
|
-
AND ${
|
|
624
|
-
${
|
|
625
|
-
${
|
|
626
|
-
${
|
|
389
|
+
AND ${Ei} >= ?
|
|
390
|
+
${d}
|
|
391
|
+
${p}
|
|
392
|
+
${w}
|
|
627
393
|
ORDER BY ${l}
|
|
628
394
|
LIMIT ?
|
|
629
395
|
),
|
|
@@ -633,17 +399,19 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
633
399
|
content, category, confidence, importance, namespace, status,
|
|
634
400
|
source_document_ids AS "sourceDocumentIds",
|
|
635
401
|
source_section AS "sourceSection",
|
|
402
|
+
created_by_device_id AS "createdByDeviceId",
|
|
403
|
+
created_by_agent AS "createdByAgent",
|
|
636
404
|
created_at,
|
|
637
405
|
ts_rank_cd(search_vector, plainto_tsquery('english', ?)) AS keyword_rank,
|
|
638
406
|
ROW_NUMBER() OVER (ORDER BY ts_rank_cd(search_vector, plainto_tsquery('english', ?)) DESC) AS rank_ix
|
|
639
407
|
FROM fact
|
|
640
408
|
WHERE namespace = ANY(?)
|
|
641
409
|
AND status = 'active'
|
|
642
|
-
AND ${
|
|
410
|
+
AND ${Ei} >= ?
|
|
643
411
|
AND search_vector @@ plainto_tsquery('english', ?)
|
|
644
|
-
${
|
|
645
|
-
${
|
|
646
|
-
${
|
|
412
|
+
${d}
|
|
413
|
+
${p}
|
|
414
|
+
${w}
|
|
647
415
|
ORDER BY keyword_rank DESC
|
|
648
416
|
LIMIT ?
|
|
649
417
|
),
|
|
@@ -658,11 +426,13 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
658
426
|
COALESCE(s.status, k.status) AS status,
|
|
659
427
|
COALESCE(s."sourceDocumentIds", k."sourceDocumentIds") AS "sourceDocumentIds",
|
|
660
428
|
COALESCE(s."sourceSection", k."sourceSection") AS "sourceSection",
|
|
429
|
+
COALESCE(s."createdByDeviceId", k."createdByDeviceId") AS "createdByDeviceId",
|
|
430
|
+
COALESCE(s."createdByAgent", k."createdByAgent") AS "createdByAgent",
|
|
661
431
|
COALESCE(s.created_at, k.created_at) AS created_at,
|
|
662
432
|
COALESCE(s.similarity, 0) AS similarity,
|
|
663
433
|
(
|
|
664
|
-
${
|
|
665
|
-
+ ${
|
|
434
|
+
${pR} * (1.0 / (${Ny} + COALESCE(s.rank_ix, ?)))
|
|
435
|
+
+ ${fR} * (1.0 / (${Ny} + COALESCE(k.rank_ix, ?)))
|
|
666
436
|
) AS rrf_raw
|
|
667
437
|
FROM semantic s
|
|
668
438
|
FULL OUTER JOIN keyword k ON s.id = k.id
|
|
@@ -682,18 +452,18 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
682
452
|
)
|
|
683
453
|
)
|
|
684
454
|
)) AS activation,
|
|
685
|
-
CASE f.importance WHEN 'vital' THEN ${
|
|
455
|
+
CASE f.importance WHEN 'vital' THEN ${hR} ELSE 1.0 END AS importance_mult,
|
|
686
456
|
CASE f.confidence
|
|
687
|
-
WHEN 'high' THEN ${
|
|
688
|
-
WHEN 'medium' THEN ${
|
|
689
|
-
WHEN 'low' THEN ${
|
|
457
|
+
WHEN 'high' THEN ${gR}
|
|
458
|
+
WHEN 'medium' THEN ${yR}
|
|
459
|
+
WHEN 'low' THEN ${wR}
|
|
690
460
|
ELSE 1.0
|
|
691
461
|
END AS confidence_mult
|
|
692
462
|
FROM fused f
|
|
693
463
|
LEFT JOIN fact_lifecycle fl ON fl.fact_id = f.id
|
|
694
464
|
)
|
|
695
465
|
SELECT id, uid, content, category, confidence, importance, namespace, status,
|
|
696
|
-
"sourceDocumentIds", "sourceSection", similarity,
|
|
466
|
+
"sourceDocumentIds", "sourceSection", "createdByDeviceId", "createdByAgent", similarity,
|
|
697
467
|
rrf_raw,
|
|
698
468
|
access_count,
|
|
699
469
|
last_accessed_at AS "lastAccessedAt",
|
|
@@ -703,7 +473,7 @@ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]})
|
|
|
703
473
|
ORDER BY final_score DESC,
|
|
704
474
|
CASE WHEN importance = 'vital' THEN 0 ELSE 1 END
|
|
705
475
|
LIMIT ?
|
|
706
|
-
`,
|
|
476
|
+
`,M=[...v,...S,...C],{rows:F}=await _.raw(O,M);if(!F.length)return[];let q=F[0].final_score||F[0].rrf_raw||1;return F.map(P=>({...P,rrfScore:Math.round(Number(P.final_score||P.rrf_raw)/Number(q)*100)/100}))}var Ny,pR,fR,mR,hR,gR,yR,wR,Ly=f(()=>{D();$t();R();es();Ny=20,pR=1,fR=.7,mR=3,hR=1.5,gR=1,yR=.85,wR=.7});async function ky(e){let t=e.map(i=>i.id),r=await xn(t),n=new Set;for(let i of r.values())for(let o of i)n.add(o);return n.size?_("entity").whereIn("id",[...n]).whereNull("mergedWith").select("id","uid","name","entityType","description"):[]}async function Py(e,{limit:t=10}={}){if(!e.length)return[];let r=await _("relation").where(function(){this.whereIn("sourceId",e).orWhereIn("targetId",e)}).whereNull("invalidAt").select("*").limit(t*3),n=new Set(e),i=new Set,o=new Map;for(let p of r){let u=n.has(p.sourceId)?p.targetId:p.sourceId;i.add(u),o.has(u)||o.set(u,p)}if(!i.size)return[];let s=await _("entity").whereIn("id",[...i]).whereNull("mergedWith").select("id","name"),a=new Map(s.map(p=>[p.id,p.name])),c=await _("fact").join("fact_entity","fact.id","fact_entity.factId").whereIn("fact_entity.entityId",[...i]).where("fact.status","active").select("fact.*","fact_entity.entityId").orderBy("fact_entity.mentionCount","desc").limit(t*3),l=new Set,d=[];for(let p of c){if(l.has(p.id))continue;l.add(p.id);let u=o.get(p.entityId),m=a.get(p.entityId)||"unknown",g=u?.relationType||"related";if(d.push({...p,relationPath:`${m} (${g})`,graphDistance:1}),d.length>=t)break}return d}function My(e,t,r,n){let i=new Set(r),o=e.map(a=>({...a,resultType:"direct"})),s=t.filter(a=>!e.some(c=>c.id===a.id)).map(a=>({...a,rrfScore:(a.rrfScore||.1)*.5,resultType:"related"}));return[...o,...s].slice(0,n)}var Fy=f(()=>{D();gr()});var Cn,ol=f(()=>{Cn=class{#t=new Map;#n;#e;constructor({maxSize:t=100,ttlMs:r=300*1e3}={}){this.#n=t,this.#e=r}get(t){let r=this.#t.get(t);if(r){if(Date.now()-r.timestamp>this.#e){this.#t.delete(t);return}return r.value}}set(t,r){if(this.#t.size>=this.#n){let n=this.#t.keys().next().value;this.#t.delete(n)}this.#t.set(t,{value:r,timestamp:Date.now()})}}});async function By(e){let t=Hy.get(e);if(t)return t;let r=`You are a search query expander for a personal knowledge base.
|
|
707
477
|
|
|
708
478
|
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.
|
|
709
479
|
|
|
@@ -713,24 +483,24 @@ Think about:
|
|
|
713
483
|
- Related concepts that would inform the answer
|
|
714
484
|
- Specific terms someone might have used when storing this knowledge
|
|
715
485
|
|
|
716
|
-
User query: "${
|
|
486
|
+
User query: "${e}"
|
|
717
487
|
|
|
718
|
-
Respond with ONLY a JSON array of strings. Do not include the original query.`;try{let
|
|
488
|
+
Respond with ONLY a JSON array of strings. Do not include the original query.`;try{let n=await We(r,{model:E.llm.extractionModel,caller:"query-expander"});if(!Array.isArray(n))return[e];let i=n.filter(s=>typeof s=="string"&&s.trim()).slice(0,_R),o=i.length?[e,...i]:[e];return Hy.set(e,o),o}catch(n){return console.error("[query-expander] Failed:",n.message),[e]}}var _R,Hy,Uy=f(()=>{Ve();ol();R();_R=5,Hy=new Cn({maxSize:100,ttlMs:300*1e3})});import{readFile as ER}from"node:fs/promises";import{join as bR}from"node:path";async function Wy(e){let t=e.trim().toLowerCase(),r=sl.get(t);if(r)return r;let i=`${await ER(xR,"utf8")}
|
|
719
489
|
|
|
720
490
|
---
|
|
721
491
|
|
|
722
|
-
Query: ${
|
|
492
|
+
Query: ${e}
|
|
723
493
|
|
|
724
494
|
---
|
|
725
495
|
|
|
726
|
-
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
|
|
496
|
+
Respond with ONLY a JSON object: { "intent": "preference|factual|entity_lookup|exploratory|temporal", "categories": [...], "entities": [...], "expand": bool, "pointInTime": null or "YYYY-MM-DD", "reasoning": "..." }`;try{let o=await We(i,{model:E.llm.extractionModel,caller:"query-router"});if(!o||!SR.includes(o.intent)){let c=Gy("factual",{});return sl.set(t,c),c}let s=jy[o.intent],a={intent:o.intent,categories:Array.isArray(o.categories)&&o.categories.length?o.categories:s.categories,entities:Array.isArray(o.entities)?o.entities:[],expand:typeof o.expand=="boolean"?o.expand:s.expand,useGraph:s.useGraph,limit:s.limit,pointInTime:o.pointInTime||null,reasoning:o.reasoning||""};return sl.set(t,a),a}catch(o){return console.error("[query-router] Failed:",o.message),Gy("factual",{reasoning:`Fallback \u2014 ${o.message}`})}}function Gy(e,t={}){let r=jy[e];return{intent:e,categories:r.categories,entities:[],expand:r.expand,useGraph:r.useGraph,limit:r.limit,pointInTime:null,reasoning:"",...t}}var xR,sl,SR,jy,Vy=f(()=>{Ve();ol();R();B();xR=bR(Ie,"query-router.md"),sl=new Cn({maxSize:200,ttlMs:600*1e3}),SR=["preference","factual","entity_lookup","exploratory","temporal"],jy={preference:{categories:["preference","opinion","personal"],expand:!1,useGraph:!1,limit:null},factual:{categories:[],expand:!1,useGraph:!1,limit:null},entity_lookup:{categories:[],expand:!1,useGraph:!0,limit:null},exploratory:{categories:[],expand:!0,useGraph:!0,limit:15},temporal:{categories:[],expand:!1,useGraph:!1,limit:null}}});var cl={};T(cl,{isSearchableQuery:()=>Ky,search:()=>TR});async function TR(e,{namespaces:t,limit:r=5,minConfidence:n="medium",useGraph:i=!1,includeChunks:o=!1,pointInTime:s,expand:a=!1,route:c=!0,categories:l,synthesize:d=E.search.synthesize,podScope:p=null,applyFloor:u=!0,ctx:m={}}={}){let g=Date.now();if(!Ky(e)){let S=$R();return S._trace={query:e,searchable:!1,stages:[{stage:"guard",note:"query is not searchable (empty or wildcard-only)"}],durationMs:Date.now()-g},S}d&&(o=!0);let y=null;c&&(y=await Wy(e),i=i||y.useGraph,a=a||y.expand,r=y.limit||r,s=s||y.pointInTime,l=l||(y.categories.length?y.categories:void 0));let w=await DR(e,t),x=await NR(p,{...m,namespace:t?.[0]}),b;w?b=await LR(w,e,{namespaces:t,limit:r,minConfidence:n,includeChunks:o,pointInTime:s,categories:l,podIds:x}):b=await MR(e,{namespaces:t,limit:r,minConfidence:n,useGraph:i,includeChunks:o,pointInTime:s,expand:a,categories:l,podIds:x});let A=null;if(u&&Array.isArray(b.facts)&&b.facts.length){let S=E.memory.injectionFloor,C=b.facts.length;b.facts=b.facts.filter(O=>{if(O.source==="entity")return!0;let M=Number(O.similarity);return Number.isFinite(M)?M>=S:!0}),A={threshold:S,dropped:C-b.facts.length,kept:b.facts.length}}let v=b.facts.map(S=>S.id).filter(Boolean);if(wc(v).catch(S=>console.error("[access-tracking]",S.message)),tl(v.slice(0,8)).catch(S=>console.error("[hebbian]",S.message)),E.hebbian.entity.enabled&&v.length>=2&&RR(v).catch(S=>console.error("[hebbian-entity]",S.message)),d)try{b.synthesized=await OR(e,b)}catch(S){console.error("[synthesizer] failed:",S.message),b.synthesized=null}return b._trace=CR({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:i,expand:a,route:c,routing:y,matchedEntity:w,podScope:p,podIds:x,result:b,factIds:v,floored:A,durationMs:Date.now()-g}),b}function CR({query:e,namespaces:t,limit:r,minConfidence:n,useGraph:i,expand:o,route:s,routing:a,matchedEntity:c,podScope:l,podIds:d,result:p,factIds:u,floored:m,durationMs:g}){let y=b=>{let A=Number(b);return Number.isFinite(A)?Math.round(A*1e4)/1e4:null},w=(p.facts||[]).map((b,A)=>({rank:A+1,id:b.id??null,content:String(b.content||"").slice(0,240),category:b.category??null,importance:b.importance??null,confidence:b.confidence??null,source:b.source??null,similarity:y(b.similarity),rrfRaw:y(b.rrf_raw),activation:y(b.activation),accessCount:b.access_count??null,lastAccessedAt:b.lastAccessedAt??null,finalScore:y(b.final_score),rrfScore:y(b.rrfScore),coRetrievalBoost:y(b.coRetrievalBoost)})),x=(p.chunks||[]).map((b,A)=>({rank:A+1,id:b.id??null,sectionHeading:b.sectionHeading??null,content:String(b.content||"").slice(0,200),similarity:y(b.similarity),rrfScore:y(b.rrfScore)}));return{query:e,namespaces:t,durationMs:g,params:{limit:r,minConfidence:n,useGraphRequested:i,expandRequested:o,routeEnabled:s},routing:a?{intent:a.intent??null,reasoning:a.reasoning??null,useGraph:a.useGraph??null,expand:a.expand??null,limit:a.limit??null,categories:a.categories??null,pointInTime:a.pointInTime??null}:null,strategy:c?"entity-first":"standard",matchedEntity:c?{id:c.id,name:c.name,type:c.entityType,aliases:c.aliases||[]}:null,podScope:{requested:l,resolvedIds:d},floor:m?{applied:!0,threshold:m.threshold,dropped:m.dropped,kept:m.kept,note:"precision-first: facts below cosine floor dropped from injection"}:{applied:!1},ranking:{model:"RRF(vector\xD71.0 + keyword\xD70.7) \xD7 softplus(ACT-R activation) \xD7 importance \xD7 confidence",facts:w,chunks:x},synthesized:p.synthesized||null,relatedEntities:p.relatedEntities||[],reinforced:{factIds:u,note:"access_count bumped + Hebbian co-retrieval edges strengthened (off hot path)"}}}function Ky(e){let t=String(e||"").trim();return t?!/^[*%_?\s]+$/.test(t):!1}function $R(){return{facts:[],chunks:[],matchedEntity:null,relatedEntities:[]}}async function OR(e,{facts:t,chunks:r}){let n=[];if(t.slice(0,10).forEach((s,a)=>{n.push(`[F${a+1}] (${s.category}) ${s.content}`)}),r.length&&r.slice(0,15).forEach((s,a)=>{let c=(s.content||"").replace(/\s+/g," ").trim();c&&n.push(`[C${a+1}] ${c.slice(0,2e3)}`)}),!n.length)return"No retrieved evidence \u2014 nothing to synthesize.";let i=`You are answering a question from a personal-memory system.
|
|
727
497
|
Each retrieved item is labeled [F#] (a stored fact) or [C#] (a raw conversation chunk
|
|
728
498
|
that may include user/assistant turns and dates).
|
|
729
499
|
|
|
730
|
-
Question: ${
|
|
500
|
+
Question: ${e}
|
|
731
501
|
|
|
732
502
|
Retrieved memory items:
|
|
733
|
-
${
|
|
503
|
+
${n.join(`
|
|
734
504
|
`)}
|
|
735
505
|
|
|
736
506
|
Instructions:
|
|
@@ -738,24 +508,422 @@ Instructions:
|
|
|
738
508
|
- Reason step-by-step internally for temporal questions ("first", "before", "after", "how many days") \u2014 compare the dates explicitly.
|
|
739
509
|
- Cite items in square brackets where they directly support the answer, e.g. [C2].
|
|
740
510
|
- 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.
|
|
741
|
-
- Plain text only, no headers. Direct answer first, then a short justification if needed. 1-4 sentences total.`,s=E.search.synthesizeModel||E.llm.extractionModel||void 0;return pe(n,{model:s,caller:"synthesizer"})}async function KI(t){let e=await Ii(t.slice(0,8)),r=[];for(let n of e.values())for(let s of n)r.push(s);let i=[...new Set(r)].slice(0,E.hebbian.entity.maxWriteEntities);await oc(i)}async function VI(t,e={}){if(t==null||t==="global")return null;if(t==="auto"){let i=(await ci(e)).flatMap(s=>s.scope).filter(s=>typeof s=="string"&&!s.startsWith("__virtual:"));return i.length===0?[]:(await _("pod").whereIn("uid",i).select("id")).map(s=>s.id)}if(Array.isArray(t)){if(t.length===0)return[];if(t.every(n=>typeof n=="number"))return t;let r=t.filter(n=>typeof n=="string");return r.length===0?[]:(await _("pod").where(function(){this.whereIn("uid",r).orWhereIn("name",r)}).select("id")).map(n=>n.id)}return null}async function YI(t,e){if(t.length<2||t.length>UI)return null;let r=e[0]||E.defaults.namespace,i=await Ye(t,r);return i||(await ca(t,{namespace:r,limit:1}))[0]||null}async function qI(t,e,{namespaces:r,limit:i,minConfidence:n,includeChunks:s,pointInTime:o,categories:a,podIds:c}){let l=JI(e,t),u=await zt(l,{inputType:"query"}),[h,d,...f]=await Promise.all([Fg(t.id,{limit:i}),Xa(t.id,{limit:15}),...l.map((C,P)=>hy(C,{queryEmbedding:u[P],namespaces:r,limit:i,minConfidence:n,includeChunks:s,pointInTime:o,categories:a,podIds:c}))]),m=h.map(C=>({...C,source:"entity"})),y=hs(f.map(C=>C.facts),i*2),w=new Set(m.map(C=>C.id)),x=y.filter(C=>!w.has(C.id)).map(C=>({...C,source:"search"})),b=[...m,...x].slice(0,i);if(E.hebbian.entity.enabled&&b.length>=2)try{b=await my(b,{seedEntityIds:[t.id]})}catch(C){console.error("[hebbian-entity-boost]",C.message)}let T=s?hs(f.map(C=>C.chunks||[]),i):[],S=d.map(C=>({id:C.entityId,name:C.name,type:C.entityType,relation:C.relationType,direction:C.direction,mentions:C.mentionCount}));return{facts:b,chunks:T,matchedEntity:{id:t.id,name:t.name,type:t.entityType,mentions:t.mentionCount,description:t.description||null,aliases:t.aliases||[]},relatedEntities:S}}function JI(t,e){let r=[t],i=(e.aliases||[]).filter(o=>typeof o=="string"&&o.trim());if(!i.length)return r;let n=(e.name||"").trim(),s=new Set([t.toLowerCase()]);for(let o of i){let a=t;if(n){let c=new RegExp(`\\b${zI(n)}\\b`,"gi");if(c.test(a))a=a.replace(c,o);else{s.has(o.toLowerCase())||(r.push(o),s.add(o.toLowerCase()));continue}}s.has(a.toLowerCase())||(r.push(a),s.add(a.toLowerCase()))}return r}function zI(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function XI(t,{namespaces:e,limit:r,minConfidence:i,useGraph:n,includeChunks:s,pointInTime:o,expand:a=!1,categories:c,podIds:l}){let u=a?await ay(t):[t],h=await zt(u,{inputType:"query"}),d=await Promise.all(u.map((y,w)=>hy(y,{queryEmbedding:h[w],namespaces:e,limit:r,minConfidence:i,includeChunks:s,pointInTime:o,categories:c,podIds:l}))),f=hs(d.map(y=>y.facts),r);if(f=f.map(y=>({...y,source:"search"})),E.hebbian.entity.enabled&&f.length>=2)try{f=await my(f)}catch(y){console.error("[hebbian-entity-boost]",y.message)}if(n&&f.length)try{let y=await ry(f.slice(0,5));if(y.length){let w=await QI(y.map(b=>b.id)),x=await iy(w,{limit:5});f=ny(f,x,w,r)}}catch(y){console.error("[graph-enhancement] Failed:",y.message)}let m=s?hs(d.map(y=>y.chunks),r):[];return{facts:f,chunks:m,matchedEntity:null,relatedEntities:[]}}async function my(t,e={}){let r=t.map(d=>d.id).filter(Boolean);if(r.length<2)return t;let i=await Ii(r);if(!i.size)return t;let n,s;if(e.seedEntityIds?.length)n=e.seedEntityIds,s=t;else{let d=e.seedFactCount??3,f=[];for(let m of t.slice(0,d)){let y=i.get(m.id)||[];for(let w of y)f.push(w)}n=f,s=t.slice(d)}if(!n.length)return t;let o=new Set;for(let d of s){let f=i.get(d.id)||[];for(let m of f)o.add(m)}if(!o.size)return t;let a=await ac([...new Set(n)],[...o]);if(!a.size)return t;let c=new Map,l=0;for(let d of t){let f=i.get(d.id)||[],m=0;for(let y of f){let w=a.get(y)||0;w>m&&(m=w)}c.set(d.id,m),m>l&&(l=m)}if(l===0)return t;let u=E.hebbian.entity.rrfWeight;return t.map(d=>{let f=(c.get(d.id)||0)/l,m=(d.rrfScore||0)+u*f;return{...d,rrfScore:Math.round(m*100)/100,coRetrievalBoost:Math.round(f*100)/100}}).sort((d,f)=>(f.rrfScore||0)-(d.rrfScore||0))}async function QI(t){let e=E.hebbian.entity.expandPerSeed;if(!e||!t.length)return t;let{getCoRetrievedEntities:r}=await Promise.resolve().then(()=>(Oi(),fs)),i=await Promise.all(t.map(s=>r(s,{limit:e}).catch(()=>[]))),n=new Set(t);for(let s of i)for(let o of s)n.add(Number(o.partnerId));return[...n]}function hs(t,e){let r={},i={};for(let o of t)for(let[a,c]of o.entries())i[c.id]=c,r[c.id]=(r[c.id]||0)+1/(uc+a+1);let n=Object.entries(r).sort(([,o],[,a])=>a-o),s=n.length?n[0][1]:1;return n.slice(0,e).map(([o,a])=>({...i[o],rrfScore:Math.round(a/s*100)/100}))}async function hy(t,{queryEmbedding:e,namespaces:r,limit:i,minConfidence:n,includeChunks:s=!1,pointInTime:o,categories:a,podIds:c}){let l=e||await Ne(t,{inputType:"query"}),u=ty(t,l,{namespaces:r,limit:i,minConfidence:n,pointInTime:o,categories:a,podIds:c}),h=s?[Jg(l,{namespaces:r,limit:i}),Xg(t,{namespaces:r,limit:i})]:[],[d,...f]=await Promise.all([u,...h]),m=s&&f.length===2?ZI(f[0],f[1],i):[];return{facts:d,chunks:m}}function ZI(t,e,r){let i={},n={...po(t,"id"),...po(e,"id")};t.forEach((a,c)=>{i[a.id]=(i[a.id]||0)+HI/(uc+c+1)}),e.forEach((a,c)=>{i[a.id]=(i[a.id]||0)+BI/(uc+c+1)});let s=Object.entries(i).sort(([a,c],[l,u])=>{if(c!==u)return u-c;let h=n[a]?.importance==="vital"?1:0;return(n[l]?.importance==="vital"?1:0)-h}),o=s.length?s[0][1]:1;return s.slice(0,r).map(([a,c])=>({...n[a],rrfScore:Math.round(c/o*100)/100}))}var uc,HI,BI,UI,fc=g(()=>{sn();De();O();ze();$i();te();sc();Oi();cs();$i();zg();Qg();ey();sy();cy();fy();Vt();di();mr();N();uc=20,HI=1,BI=.7,UI=60});var gy={};$(gy,{closeEditingWindows:()=>i$,getLifecycleStats:()=>n$,promoteFreshFacts:()=>r$});async function r$(){let{rows:t}=await _.raw(`
|
|
511
|
+
- Plain text only, no headers. Direct answer first, then a short justification if needed. 1-4 sentences total.`,o=E.search.synthesizeModel||E.llm.extractionModel||void 0;return mt(i,{model:o,caller:"synthesizer"})}async function RR(e){let t=await xn(e.slice(0,8)),r=[];for(let i of t.values())for(let o of i)r.push(o);let n=[...new Set(r)].slice(0,E.hebbian.entity.maxWriteEntities);await nl(n)}async function NR(e,t={}){if(e==null||e==="global")return null;if(e==="auto"){let n=(await yi(t)).flatMap(o=>o.scope).filter(o=>typeof o=="string"&&!o.startsWith("__virtual:"));if(n.length===0){if(process.env.SIGIL_SCOPE_GRACE!=="false"){let o=_("pod");t.namespace&&(o=o.where({namespace:t.namespace}));let[{count:s}]=await o.count({count:"*"});if(Number(s)===0)return null}return[]}return(await _("pod").whereIn("uid",n).select("id")).map(o=>o.id)}if(Array.isArray(e)){if(e.length===0)return[];if(e.every(i=>typeof i=="number"))return e;let r=e.filter(i=>typeof i=="string");return r.length===0?[]:(await _("pod").where(function(){this.whereIn("uid",r).orWhereIn("name",r)}).select("id")).map(i=>i.id)}return null}async function DR(e,t){if(e.length<2||e.length>AR)return null;let r=t[0]||E.defaults.namespace,n=await lr(e,r);return n||(await xc(e,{namespace:r,limit:1}))[0]||null}async function LR(e,t,{namespaces:r,limit:n,minConfidence:i,includeChunks:o,pointInTime:s,categories:a,podIds:c}){let l=kR(t,e),d=await ft(l,{inputType:"query"}),[p,u,...m]=await Promise.all([$c(e.id,{limit:n}),fi(e.id,{limit:15}),...l.map((S,C)=>qy(S,{queryEmbedding:d[C],namespaces:r,limit:n,minConfidence:i,includeChunks:o,pointInTime:s,categories:a,podIds:c}))]),g=p.map(S=>({...S,source:"entity"})),y=ts(m.map(S=>S.facts),n*2),w=new Set(g.map(S=>S.id)),x=y.filter(S=>!w.has(S.id)).map(S=>({...S,source:"search"})),b=[...g,...x].slice(0,n);if(E.hebbian.entity.enabled&&b.length>=2)try{b=await Yy(b,{seedEntityIds:[e.id]})}catch(S){console.error("[hebbian-entity-boost]",S.message)}let A=o?ts(m.map(S=>S.chunks||[]),n):[],v=u.map(S=>({id:S.entityId,name:S.name,type:S.entityType,relation:S.relationType,direction:S.direction,mentions:S.mentionCount}));return{facts:b,chunks:A,matchedEntity:{id:e.id,name:e.name,type:e.entityType,mentions:e.mentionCount,description:e.description||null,aliases:e.aliases||[]},relatedEntities:v}}function kR(e,t){let r=[e],n=(t.aliases||[]).filter(s=>typeof s=="string"&&s.trim());if(!n.length)return r;let i=(t.name||"").trim(),o=new Set([e.toLowerCase()]);for(let s of n){let a=e;if(i){let c=new RegExp(`\\b${PR(i)}\\b`,"gi");if(c.test(a))a=a.replace(c,s);else{o.has(s.toLowerCase())||(r.push(s),o.add(s.toLowerCase()));continue}}o.has(a.toLowerCase())||(r.push(a),o.add(a.toLowerCase()))}return r}function PR(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function MR(e,{namespaces:t,limit:r,minConfidence:n,useGraph:i,includeChunks:o,pointInTime:s,expand:a=!1,categories:c,podIds:l}){let d=a?await By(e):[e],p=await ft(d,{inputType:"query"}),u=await Promise.all(d.map((y,w)=>qy(y,{queryEmbedding:p[w],namespaces:t,limit:r,minConfidence:n,includeChunks:o,pointInTime:s,categories:c,podIds:l}))),m=ts(u.map(y=>y.facts),r);if(m=m.map(y=>({...y,source:"search"})),E.hebbian.entity.enabled&&m.length>=2)try{m=await Yy(m)}catch(y){console.error("[hebbian-entity-boost]",y.message)}if(i&&m.length)try{let y=await ky(m.slice(0,5));if(y.length){let w=await FR(y.map(b=>b.id)),x=await Py(w,{limit:5});m=My(m,x,w,r)}}catch(y){console.error("[graph-enhancement] Failed:",y.message)}let g=o?ts(u.map(y=>y.chunks),r):[];return{facts:m,chunks:g,matchedEntity:null,relatedEntities:[]}}async function Yy(e,t={}){let r=e.map(u=>u.id).filter(Boolean);if(r.length<2)return e;let n=await xn(r);if(!n.size)return e;let i,o;if(t.seedEntityIds?.length)i=t.seedEntityIds,o=e;else{let u=t.seedFactCount??3,m=[];for(let g of e.slice(0,u)){let y=n.get(g.id)||[];for(let w of y)m.push(w)}i=m,o=e.slice(u)}if(!i.length)return e;let s=new Set;for(let u of o){let m=n.get(u.id)||[];for(let g of m)s.add(g)}if(!s.size)return e;let a=await il([...new Set(i)],[...s]);if(!a.size)return e;let c=new Map,l=0;for(let u of e){let m=n.get(u.id)||[],g=0;for(let y of m){let w=a.get(y)||0;w>g&&(g=w)}c.set(u.id,g),g>l&&(l=g)}if(l===0)return e;let d=E.hebbian.entity.rrfWeight;return e.map(u=>{let m=(c.get(u.id)||0)/l,g=(u.rrfScore||0)+d*m;return{...u,rrfScore:Math.round(g*100)/100,coRetrievalBoost:Math.round(m*100)/100}}).sort((u,m)=>(m.rrfScore||0)-(u.rrfScore||0))}async function FR(e){let t=E.hebbian.entity.expandPerSeed;if(!t||!e.length)return e;let{getCoRetrievedEntities:r}=await Promise.resolve().then(()=>(_i(),Zo)),n=await Promise.all(e.map(o=>r(o,{limit:t}).catch(()=>[]))),i=new Set(e);for(let o of n)for(let s of o)i.add(Number(s.partnerId));return[...i]}function ts(e,t){let r={},n={};for(let s of e)for(let[a,c]of s.entries())n[c.id]=c,r[c.id]=(r[c.id]||0)+1/(al+a+1);let i=Object.entries(r).sort(([,s],[,a])=>a-s),o=i.length?i[0][1]:1;return i.slice(0,t).map(([s,a])=>({...n[s],rrfScore:Math.round(a/o*100)/100}))}async function qy(e,{queryEmbedding:t,namespaces:r,limit:n,minConfidence:i,includeChunks:o=!1,pointInTime:s,categories:a,podIds:c}){let l=t||await or(e,{inputType:"query"}),d=Dy(e,l,{namespaces:r,limit:n,minConfidence:i,pointInTime:s,categories:a,podIds:c}),p=o?[Cy(l,{namespaces:r,limit:n}),Oy(e,{namespaces:r,limit:n})]:[],[u,...m]=await Promise.all([d,...p]),g=o&&m.length===2?HR(m[0],m[1],n):[];return{facts:u,chunks:g}}function HR(e,t,r){let n={},i={...Sa(e,"id"),...Sa(t,"id")};e.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+vR/(al+c+1)}),t.forEach((a,c)=>{n[a.id]=(n[a.id]||0)+IR/(al+c+1)});let o=Object.entries(n).sort(([a,c],[l,d])=>{if(c!==d)return d-c;let p=i[a]?.importance==="vital"?1:0;return(i[l]?.importance==="vital"?1:0)-p}),s=o.length?o[0][1]:1;return o.slice(0,r).map(([a,c])=>({...i[a],rrfScore:Math.round(c/s*100)/100}))}var al,vR,IR,AR,ll=f(()=>{to();Ot();R();Ze();gr();lt();rl();_i();fr();gr();$y();Ry();Ly();Fy();Uy();Vy();Ve();wi();In();D();al=20,vR=1,IR=.7,AR=60});function Jy(e){e.register("search",async t=>{let r=(t.query??"").trim();if(!r){let C=new Error("search: params.query is required");throw C.code="invalid_params",C}let{search:n}=await Promise.resolve().then(()=>(ll(),cl)),{default:i}=await Promise.resolve().then(()=>(R(),X)),o=Array.isArray(t.namespaces)&&t.namespaces.length?t.namespaces:[i.defaults.namespace],s=Number.isFinite(t.limit)?t.limit:10,a=!!t.useGraph,c=!!t.route,l=!!t.synthesize,d=!!t.includeChunks||l,p=t.minConfidence,u=t.pointInTime?new Date(t.pointInTime):void 0,m=t.podScope??"auto",g=t.applyFloor??!1,y={cwd:t.cwd||null,sessionId:t.sessionId||null},w=await n(r,{namespaces:o,limit:s,useGraph:a,route:c,synthesize:l,includeChunks:d,minConfidence:p,pointInTime:u,podScope:m,applyFloor:g,ctx:y}),x={query:r,namespaces:o,facts:(w.facts||[]).map(BR),chunks:(w.chunks||[]).map(UR),synthesized:w.synthesized||null,matchedEntity:w.matchedEntity||null,relatedEntities:w.relatedEntities||[]},b=w._trace||{},A=r.length>80?r.slice(0,80)+"\u2026":r,v=b.strategy==="entity-first"?" \xB7 entity-first":"",{recordTrace:S}=await Promise.resolve().then(()=>(Wt(),jt));return S({kind:"search",summary:`"${A}" \u2192 ${x.facts.length} facts, ${x.chunks.length} chunks${v}`,namespace:o[0]||null,durationMs:b.durationMs??null,detail:b}).catch(()=>{}),x})}function BR(e){return{id:e.id??null,uid:e.uid??null,content:e.content,category:e.category??null,confidence:e.confidence??null,importance:e.importance??null,similarity:rs(e.similarity),rrfScore:rs(e.rrfScore),agent:e.createdByAgent??null,device:e.createdByDeviceId??null,sourceDocumentIds:Array.isArray(e.sourceDocumentIds)?e.sourceDocumentIds:[],sourceSection:e.sourceSection??null}}function UR(e){return{id:e.id??null,content:e.content,sectionHeading:e.sectionHeading??null,similarity:rs(e.similarity),rrfScore:rs(e.rrfScore)}}function rs(e){let t=Number(e);return Number.isFinite(t)?t:null}var zy=f(()=>{});function Xy(e){e.register("status",async t=>{let{getStats:r}=await Promise.resolve().then(()=>(lo(),co)),{getEntityCount:n}=await Promise.resolve().then(()=>(Ze(),pr)),{getRelationCount:i}=await Promise.resolve().then(()=>(fr(),Vo)),{getFactCount:o,getHotFacts:s}=await Promise.resolve().then(()=>(lt(),Ut)),{getEntityHebbianStats:a}=await Promise.resolve().then(()=>(_i(),Zo)),{default:c}=await Promise.resolve().then(()=>(D(),G)),l=t.namespace||null,d=Number.isFinite(t.hotFactsLimit)?t.hotFactsLimit:5,p=!0,u=null;try{await c.raw("SELECT 1")}catch(O){p=!1,u=O.message}try{let{setDbHealth:O}=await Promise.resolve().then(()=>(Kn(),da));O({healthy:p,error:u,checkedAt:Date.now()})}catch{}if(!p)return{namespace:l,db:{healthy:!1,error:u},documents:0,chunks:0,facts:0,entities:{documents:0,people:0,topics:0},relations:0,podsByType:{},hotFacts:[],hebbian:null};let[m,g,y,w,x,b,A,v,S]=await Promise.all([r(l),o(l),n("document"),n("person"),n("topic"),i(),c("pod").where({status:"active"}).select("podType"),a({topN:3}).catch(()=>null),s(l,{limit:d}).catch(()=>[])]),C=A.reduce((O,M)=>(O[M.podType]=(O[M.podType]||0)+1,O),{});return{namespace:l,db:{healthy:!0,error:null},documents:m.documentCount,chunks:m.totalChunks,facts:g,entities:{documents:y,people:w,topics:x},relations:b,podsByType:C,hotFacts:(S||[]).map(O=>({id:O.id??null,content:O.content,accessCount:O.accessCount??0})),hebbian:v?{edgeCount:v.edgeCount,avgStrength:v.avgStrength??0,maxStrength:v.maxStrength??0,topPairs:(v.topPairs||[]).map(O=>({a:O.aName,b:O.bName,decayed:Number(O.decayed)||0}))}:null}})}var Zy=f(()=>{});function Qy(e){e.register("searchEntity",async t=>{let{searchByName:r,listByType:n}=await Promise.resolve().then(()=>(Ze(),pr)),{query:i,entityType:o,limit:s=10,namespace:a}=t;if(!i&&!o){let l=new Error("searchEntity: provide query or entityType");throw l.code="invalid_params",l}let c=i?await r(i,{entityType:o,namespace:a,limit:s}):await n(o,{namespace:a,limit:s});return{query:i||null,entityType:o||null,entities:c.map(l=>({id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0}))}})}var ew=f(()=>{});var rw={};T(rw,{findEntitiesByType:()=>WR,findPath:()=>jR,findRelated:()=>tw,getEntityNeighborhood:()=>GR});async function tw(e,{maxDepth:t=2,relationType:r,limit:n=30}={}){let i=Math.min(Math.max(t,1),6),o=[e,e],s=r?"AND r.relation_type = ?":"";r&&o.push(r);let a=r?"AND r.relation_type = ?":"";r&&o.push(r),o.push(i,n);let{rows:c}=await _.raw(`
|
|
512
|
+
WITH RECURSIVE graph AS (
|
|
513
|
+
SELECT r.target_id AS entity_id, r.relation_type, r.mention_count,
|
|
514
|
+
1 AS depth, ARRAY[?::integer] AS path
|
|
515
|
+
FROM relation r
|
|
516
|
+
WHERE r.source_id = ?
|
|
517
|
+
AND r.invalid_at IS NULL
|
|
518
|
+
${s}
|
|
519
|
+
|
|
520
|
+
UNION ALL
|
|
521
|
+
|
|
522
|
+
SELECT r.target_id, r.relation_type, r.mention_count,
|
|
523
|
+
g.depth + 1, g.path || r.target_id
|
|
524
|
+
FROM relation r
|
|
525
|
+
JOIN graph g ON r.source_id = g.entity_id
|
|
526
|
+
WHERE g.depth < ?
|
|
527
|
+
AND r.invalid_at IS NULL
|
|
528
|
+
AND NOT (r.target_id = ANY(g.path))
|
|
529
|
+
${a}
|
|
530
|
+
)
|
|
531
|
+
SELECT DISTINCT ON (g.entity_id)
|
|
532
|
+
g.entity_id AS "entityId", g.relation_type AS "relationType",
|
|
533
|
+
g.depth, g.mention_count AS "mentionCount",
|
|
534
|
+
e.name, e.entity_type AS "entityType", e.description, e.uid
|
|
535
|
+
FROM graph g
|
|
536
|
+
JOIN entity e ON e.id = g.entity_id
|
|
537
|
+
WHERE e.merged_with IS NULL
|
|
538
|
+
ORDER BY g.entity_id, g.depth ASC
|
|
539
|
+
LIMIT ?
|
|
540
|
+
`,o);return c}async function GR(e,{depth:t=1,limit:r=50}={}){let n=await Xe(e);if(!n)return null;if(t>1){let o=await tw(e,{maxDepth:t,limit:r});return{entity:n,related:o}}let i=await fi(e,{limit:r});return{entity:n,relations:i}}async function jR(e,t,{maxDepth:r=4}={}){let n=Math.min(Math.max(r,1),6),{rows:i}=await _.raw(`
|
|
541
|
+
WITH RECURSIVE search AS (
|
|
542
|
+
SELECT r.target_id AS current_id,
|
|
543
|
+
ARRAY[r.source_id, r.target_id] AS path,
|
|
544
|
+
ARRAY[r.relation_type] AS relation_types,
|
|
545
|
+
1 AS depth
|
|
546
|
+
FROM relation r
|
|
547
|
+
WHERE r.source_id = ?
|
|
548
|
+
AND r.invalid_at IS NULL
|
|
549
|
+
|
|
550
|
+
UNION ALL
|
|
551
|
+
|
|
552
|
+
SELECT r.target_id,
|
|
553
|
+
s.path || r.target_id,
|
|
554
|
+
s.relation_types || r.relation_type,
|
|
555
|
+
s.depth + 1
|
|
556
|
+
FROM relation r
|
|
557
|
+
JOIN search s ON r.source_id = s.current_id
|
|
558
|
+
WHERE s.depth < ?
|
|
559
|
+
AND r.invalid_at IS NULL
|
|
560
|
+
AND NOT (r.target_id = ANY(s.path))
|
|
561
|
+
)
|
|
562
|
+
SELECT path, relation_types AS "relationTypes", depth
|
|
563
|
+
FROM search
|
|
564
|
+
WHERE current_id = ?
|
|
565
|
+
ORDER BY depth ASC
|
|
566
|
+
LIMIT 1
|
|
567
|
+
`,[e,n,t]);if(!i.length)return null;let{path:o,relationTypes:s,depth:a}=i[0],c=await _("entity").whereIn("id",o).select("id","uid","name","entityType","description"),l=Object.fromEntries(c.map(p=>[p.id,p]));return{path:o.map(p=>l[p]),relationTypes:s,depth:a}}async function WR(e,{namespace:t,sortBy:r="mentionCount",limit:n=50}={}){let i=_("entity").where({entityType:e}).whereNull("mergedWith").orderBy(r,"desc").limit(n);return t&&i.where({namespace:t}),i}var nw=f(()=>{D();Ze();fr()});function iw(e){e.register("traverseGraph",async t=>{let{findById:r}=await Promise.resolve().then(()=>(Ze(),pr)),{getEntityNeighborhood:n,findPath:i,findRelated:o}=await Promise.resolve().then(()=>(nw(),rw)),{startEntityId:s,action:a="neighbors",targetEntityId:c,relationType:l,maxDepth:d=2,limit:p=20}=t;if(!Number.isFinite(s)){let y=new Error("traverseGraph: startEntityId required");throw y.code="invalid_params",y}let u=await r(s);if(!u)return{ok:!1,notFound:!0,startEntityId:s};let m={id:u.id,name:u.name,entityType:u.entityType};if(a==="path"){if(!Number.isFinite(c)){let w=new Error("traverseGraph: targetEntityId required for action=path");throw w.code="invalid_params",w}let y=await i(u.id,c,{maxDepth:Math.min(d,4)});return{action:a,start:m,targetEntityId:c,path:y||null}}if(a==="related"){let y=await o(u.id,{maxDepth:Math.min(d,3),relationType:l,limit:p});return{action:a,start:m,related:y}}let g=await n(u.id,{depth:Math.min(d,3),limit:p});return{action:"neighbors",start:m,relations:g.relations||[],related:g.related||null}})}var ow=f(()=>{});function sw(e){e.register("getFactContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),{findByUid:n}=await Promise.resolve().then(()=>(lt(),Ut)),{getEntitiesForFact:i}=await Promise.resolve().then(()=>(gr(),Oc)),{getRelationsByFact:o}=await Promise.resolve().then(()=>(fr(),Vo)),{uid:s,factId:a}=t;if(!s&&!Number.isFinite(a)){let u=new Error("getFactContext: provide uid or factId");throw u.code="invalid_params",u}let c;if(s?c=await n(s):c=await r("fact").where({id:a}).first(),!c)return{notFound:!0};let[l,d,p]=await Promise.all([i(c.id),o(c.id),c.sourceDocumentIds?.length?r("document").whereIn("id",c.sourceDocumentIds).select("id","title","sourceType"):[]]);return{fact:{id:c.id,uid:c.uid,content:c.content,category:c.category??null,confidence:c.confidence??null,status:c.status??null,sourceSection:c.sourceSection??null},entities:l.map(u=>({id:u.id,name:u.name,entityType:u.entityType})),relations:d,documents:p.map(u=>({id:u.id,title:u.title,sourceType:u.sourceType}))}})}var aw=f(()=>{});function cw(e){e.register("getEntityContext",async t=>{let{findById:r,searchByName:n}=await Promise.resolve().then(()=>(Ze(),pr)),{listRelationsForEntity:i}=await Promise.resolve().then(()=>(fr(),Vo)),{getFactsForEntity:o}=await Promise.resolve().then(()=>(gr(),Oc)),{entityId:s,name:a,namespace:c}=t;if(!Number.isFinite(s)&&!a){let u=new Error("getEntityContext: provide entityId or name");throw u.code="invalid_params",u}let l;if(Number.isFinite(s)?l=await r(s):l=(await n(a,{namespace:c,limit:1}))[0],!l)return{notFound:!0};let[d,p]=await Promise.all([i(l.id,{limit:30}),o(l.id,{limit:10})]);return{entity:{id:l.id,name:l.name,entityType:l.entityType,description:l.description??null,mentionCount:l.mentionCount??0},relations:d,facts:p.map(u=>({id:u.id,content:u.content,category:u.category??null,confidence:u.confidence??null}))}})}var lw=f(()=>{});function uw(e){e.register("getPod",async t=>{let{findByUid:r}=await Promise.resolve().then(()=>(Se(),Te)),{listMembers:n}=await Promise.resolve().then(()=>(hr(),Gt)),{uid:i}=t;if(!i){let l=new Error("getPod: uid required");throw l.code="invalid_params",l}let o=await r(i);if(!o)return{notFound:!0,uid:i};let s=typeof o.attrs=="object"?o.attrs:VR(o.attrs),[a,c]=await Promise.all([n(o.id,{memberType:"fact",limit:20}),n(o.id,{memberType:"document",limit:10})]);return{pod:{id:o.id,uid:o.uid,name:o.name,podType:o.podType,namespace:o.namespace,status:o.status,startedAt:o.startedAt??null,endedAt:o.endedAt??null,entityId:o.entityId??null,connectionId:o.connectionId??null,externalId:o.externalId??null,attrs:s},facts:a.map(l=>({id:l.id,content:l.content,podRole:l.podRole??null})),documents:c.map(l=>({id:l.id,title:l.title??null,sourcePath:l.sourcePath??null}))}})}function VR(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}var dw=f(()=>{});function pw(e){e.register("listPods",async t=>{let{listPods:r}=await Promise.resolve().then(()=>(Se(),Te)),{type:n,namespace:i,status:o="active",limit:s=20}=t;return{pods:(await r({podType:n,namespace:i,status:o,limit:s})).map(c=>({id:c.id,uid:c.uid,name:c.name,podType:c.podType,memberFactCount:c.memberFactCount??0,memberDocCount:c.memberDocCount??0,updatedAt:c.updatedAt??null}))}})}var fw=f(()=>{});var hw={};T(hw,{readSource:()=>ns,readSources:()=>XR});import{readFile as KR,stat as YR}from"node:fs/promises";import{basename as qR,extname as JR,resolve as zR}from"node:path";import*as mw from"node:fs/promises";async function ns(e){let t=zR(e),r=await KR(t,"utf8"),n=qR(t),i=JR(t).toLowerCase();return{content:r,title:n,sourcePath:t,sourceType:"file",contentType:ZR(i),metadata:{filePath:t,fileName:n,extension:i}}}async function XR(e){let t=[];for await(let r of mw.glob(e))(await YR(r)).isFile()&&t.push(await ns(r));return t}function ZR(e){return{".md":"text/markdown",".mdx":"text/markdown",".txt":"text/plain",".html":"text/html",".htm":"text/html",".json":"application/json",".js":"text/javascript",".ts":"text/javascript",".py":"text/x-python"}[e]||"text/plain"}var ul=f(()=>{});var gw={};T(gw,{fetchSource:()=>dl});async function dl(e){let t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`);let r=await t.text(),n=t.headers.get("content-type")||"text/plain",i=QR(e);return{content:r,title:i,sourcePath:e,sourceType:"url",contentType:n,metadata:{url:e,fetchedAt:new Date().toISOString()}}}function QR(e){try{let t=new URL(e),n=t.pathname.replace(/\/$/,"").split("/").pop()||t.hostname;return decodeURIComponent(n)}catch{return e}}var pl=f(()=>{});var yw={};T(yw,{resolveSource:()=>tN});import{resolve as eN}from"node:path";async function tN({content:e,url:t,filePath:r,title:n,sourceType:i,sourcePath:o,metadata:s}){if(t)return dl(t);if(r){let a=eN(r),c=process.cwd();if(!a.startsWith(c))throw new Error(`Path traversal denied: ${r} resolves outside working directory`);return ns(a)}return e?{content:e,title:n||"Untitled",sourcePath:o||`raw/${Date.now()}`,sourceType:i||"raw",contentType:"text/plain",metadata:s||{}}:null}var ww=f(()=>{ul();pl()});function _w(e){e.register("ingestDoc",async t=>{let{ingestDocument:r}=await Promise.resolve().then(()=>(Xc(),zc)),{resolveSource:n}=await Promise.resolve().then(()=>(ww(),yw)),{content:i,filePath:o,url:s,title:a,namespace:c,sourceType:l,skipFacts:d,skipEntities:p,metadata:u}=t,m=await n({content:i,filePath:o,url:s,title:a,sourceType:l});if(!m){let b=new Error("ingestDoc: provide content, filePath, or url");throw b.code="invalid_params",b}let g=await r({content:m.content,title:a||m.title,sourcePath:m.sourcePath,sourceType:l||m.sourceType,contentType:m.contentType,namespace:c,metadata:u||m.metadata,skipFacts:d,skipEntities:p}),y={skipped:!!g.skipped,title:g.title??null,documentId:g.documentId??null,chunkCount:g.chunkCount??0,facts:g.facts??null,entities:g.entities??null,output:g.md?.url??null},w=y.facts||{},{recordTrace:x}=await Promise.resolve().then(()=>(Wt(),jt));return x({kind:"ingest",summary:`ingest "${String(y.title||"document").slice(0,60)}" \u2192 ${y.chunkCount} chunks, +${w.added??0} facts${y.skipped?" (skipped)":""}`,namespace:c||null,detail:{op:"ingestDoc",title:y.title,documentId:y.documentId,skipped:y.skipped,route:g.route??null,chunkCount:y.chunkCount,counts:{added:w.added??0,updated:w.updated??0,skipped:w.skipped??0,contradicted:w.contradicted??0,total:w.total??0},verdicts:w.verdicts||[],entities:y.entities?{entityCount:y.entities.entityCount,relationCount:y.entities.relationCount,topics:y.entities.topics||[]}:null}}).catch(()=>{}),y})}var Ew=f(()=>{});function bw(e){e.register("listFacts",async t=>{let{listFacts:r}=await Promise.resolve().then(()=>(lt(),Ut)),{default:n}=await Promise.resolve().then(()=>(R(),X)),i=t.namespace||n.defaults.namespace,o=t.category||void 0,s=Number.isFinite(t.limit)?t.limit:20,a=await r({namespace:i,category:o,limit:s});return{namespace:i,category:o||null,facts:a.map(c=>({id:c.id,uid:c.uid,content:c.content,category:c.category??null,importance:c.importance??null,confidence:c.confidence??null}))}})}var xw=f(()=>{});function Sw(e){e.register("forgetFact",async t=>{let{deleteFact:r}=await Promise.resolve().then(()=>(lt(),Ut)),{default:n}=await Promise.resolve().then(()=>(D(),G)),i=String(t.id??"").trim();if(!i){let a=new Error("forgetFact: params.id required");throw a.code="invalid_params",a}let[o]=/^\d+$/.test(i)?await n("fact").where({id:Number(i)}).limit(1):await n("fact").where("uid","like",`${i}%`).limit(1);if(!o)return{notFound:!0,query:i};let s=await r(o.uid);return s?{deleted:{uid:s.uid,content:s.content}}:{notFound:!0,query:i}})}var vw=f(()=>{});import{existsSync as rN}from"node:fs";import{readFile as nN,writeFile as iN,chmod as oN,mkdir as sN}from"node:fs/promises";import{randomBytes as aN}from"node:crypto";import{dirname as cN}from"node:path";async function Iw(){if($n)return $n;if(rN(At)){let t=(await nN(At,"utf8")).trim();if(!/^[0-9a-fA-F]{64}$/.test(t))throw new Error(`identity: ${At} is malformed (expected 64 hex chars). Refusing to overwrite \u2014 move or delete the file manually to regenerate.`);return $n=Array.from(Buffer.from(t,"hex")),$n}await sN(cN(At),{recursive:!0});let e=aN(lN);await iN(At,e.toString("hex"),"utf8");try{await oN(At,384)}catch{}return $n=Array.from(e),$n}var lN,$n,Aw=f(()=>{B();lN=32,$n=null});var Kt={};T(Kt,{dial:()=>ml,getEndpoint:()=>Cw,getNodeAddr:()=>pN,getNodeInfo:()=>fN,registerProtocol:()=>dN,shutdownEndpoint:()=>mN});import{mkdir as uN}from"node:fs/promises";function dN(e,t){if(Vt||On)throw new Error(`registerProtocol("${e}"): runtime already started; register before first getEndpoint() call`);Tw.set(e,t)}async function fl(){if(Vt)return Vt;if(On)return On;await uN(Gi,{recursive:!0});let e=await Iw();return On=import("@number0/iroh").then(async({Iroh:t})=>{let r={};for(let[n,i]of Tw)r[n]=(o,s)=>{if(o)throw o;return{accept:i,shutdown:()=>{}}};return Vt=await t.persistent(Gi,{secretKey:e,protocols:Object.keys(r).length?r:void 0}),Vt}),On}async function Cw(){return(await fl()).node.endpoint()}async function ml(e,t){return(await Cw()).connect(e,Buffer.from(t))}async function pN(){return(await fl()).net.nodeAddr()}async function fN(){let t=await(await fl()).node.status();if(!t||typeof t!="object")throw new Error("iroh: node.status() returned non-object \u2014 Iroh API shape changed?");if(!t.addr||typeof t.addr.nodeId!="string")throw new Error(`iroh: node.status().addr.nodeId missing (got ${JSON.stringify(t).slice(0,200)}) \u2014 Iroh API shape changed?`);return{nodeId:t.addr.nodeId,relayUrl:t.addr.relayUrl??null,addresses:t.addr.addresses??[],version:t.version??null,listenAddrs:t.listenAddrs??[]}}async function mN(){if(!Vt)return;let e=Vt;Vt=null,On=null;try{await e.node.shutdown(!1)}catch{}}var Vt,On,Tw,yt=f(()=>{B();Aw();Vt=null,On=null,Tw=new Map});async function Ow(e){let{default:t}=await Promise.resolve().then(()=>(D(),G)),r=await t("device").where({node_id:e}).first();if(!r)return{ok:!1,code:"unknown_device",message:"no device row for this NodeID"};if(!r.active)return{ok:!1,code:"revoked",message:"device has been revoked"};let n=r.lastSeenAt?new Date(r.lastSeenAt).getTime():0;return Date.now()-n>gN&&t("device").where({id:r.id}).update({last_seen_at:t.fn.now()}).catch(()=>{}),{ok:!0,device:r}}function Rw(e,t,r={}){let n=hN[t];return n===void 0?{ok:!1,code:"unknown_method",message:`method "${t}" is not exposed over Iroh`}:$w[e.role]<$w[n]?{ok:!1,code:"forbidden",message:`role "${e.role}" cannot call "${t}" (needs "${n}")`}:e.namespaces?.length&&r.namespace&&!e.namespaces.includes(r.namespace)?{ok:!1,code:"namespace_denied",message:`device not scoped to namespace "${r.namespace}"`}:{ok:!0}}var $w,hN,gN,Nw=f(()=>{$w={reader:0,writer:1,admin:2},hN={ping:"reader",status:"reader",nodeInfo:"reader",search:"reader",searchEntity:"reader",traverseGraph:"reader",getFactContext:"reader",getEntityContext:"reader",getPod:"reader",listPods:"reader",listFacts:"reader",refreshContext:"reader",remember:"writer",ingestDoc:"writer",forgetFact:"writer","pair.create":"admin","pair.list":"admin","pair.revoke":"admin",runMigrations:"admin",testDbConnection:"admin",readEnv:"admin",writeEnv:"admin"},gN=6e4});var kw={};T(kw,{RPC_ALPN:()=>gl,createRpcAcceptor:()=>EN});function wN(e,t,r){wr.has(e)||wr.set(e,new Set);let n={conn:t,deviceId:r};return wr.get(e).add(n),()=>{let i=wr.get(e);i&&(i.delete(n),i.size===0&&wr.delete(e))}}function _N(e){Dw||(Dw=!0,_e.subscribe(t=>{if(t.type!=="device.revoked")return;let r=wr.get(t.nodeId);if(r){e(`rpc: closing ${r.size} live connection(s) from revoked device ${t.deviceId}`);for(let{conn:n}of r)try{n.close?.()}catch{}wr.delete(t.nodeId)}}))}function EN({registry:e,log:t}){return _N(t),async function(n,i){if(n){t(`rpc: accept err: ${n.message}`);return}let o="<unknown>",s;try{o=i.remoteNodeId().toString();let a=await Ow(o);if(!a.ok){t(`rpc: rejecting ${o.slice(0,12)}\u2026: ${a.code}`);try{let l=await i.acceptBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:1,ok:!1,error:{code:a.code,message:a.message}}))),await l.send.finish()}catch{}return}s=a.device,_e.emit("rpc.connected",{nodeId:o,deviceId:s.id,name:s.name}),t(`rpc: ${s.name} (${o.slice(0,12)}\u2026) connected`);let c=wN(o,i,s.id);try{for(;;){let l;try{l=await i.acceptBi()}catch{break}bN(l,e,s,t).catch(d=>t(`rpc: stream err: ${d.message}`))}}finally{c()}}catch(a){t(`rpc: handler err from ${o.slice(0,12)}\u2026: ${a.message}`)}finally{s&&_e.emit("rpc.disconnected",{nodeId:o,deviceId:s.id})}}}async function bN(e,t,r,n){let i=await e.recv.readToEnd(yN),o;try{o=JSON.parse(i.toString())}catch(u){return Rn(e,{v:1,ok:!1,error:{code:"invalid_json",message:u.message}})}let{request_id:s,method:a,params:c}=o||{};if(typeof a!="string")return Rn(e,{v:1,request_id:s,ok:!1,error:{code:"invalid_request",message:"missing method"}});let l=Rw(r,a,c||{});if(!l.ok)return _e.emit("rpc.denied",{nodeId:r.nodeId,deviceId:r.id,method:a,code:l.code}),Rn(e,{v:1,request_id:s,ok:!1,error:l});let d=await t.dispatch(a,c,{transport:"iroh",device:{id:r.id,role:r.role,nodeId:r.nodeId,name:r.name}});if(!xN(d.data))return n(`rpc: response from ${a} too large estimate, refusing pre-serialize`),Rn(e,{v:1,request_id:s,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}});let p=JSON.stringify({v:1,request_id:s,...d});return Buffer.byteLength(p)>Lw?(n(`rpc: response too large for ${a} from ${r.name}: ${Buffer.byteLength(p)} bytes`),Rn(e,{v:1,request_id:s,ok:!1,error:{code:"response_too_large",message:"response exceeds MAX_RESP"}})):Rn(e,p,!0)}function xN(e){if(e==null)return!0;if(typeof e=="string")return e.length*2<hl;if(typeof e!="object")return!0;if(Array.isArray(e))return e.length*200<hl;let t=0;for(let r of Object.values(e))Array.isArray(r)?t+=r.length*200:typeof r=="string"&&(t+=r.length*2);return t<hl}async function Rn(e,t,r=!1){let n=r?Buffer.from(t):Buffer.from(JSON.stringify(t));await e.send.writeAll(n),await e.send.finish()}var gl,yN,Lw,wr,Dw,hl,yl=f(()=>{Gr();Nw();gl="sigil/rpc/1",yN=1024*1024,Lw=8*1024*1024,wr=new Map;Dw=!1;hl=Lw*1.2});var Pw={};T(Pw,{createRemoteClient:()=>IN});import{randomUUID as SN}from"node:crypto";async function IN(){let e=E.network.masterNodeId;if(!e)throw new Error("RemoteClient: SIGIL_MASTER_NODE_ID is not set. Run `sigil join <master-node-id> <code>` first.");return new wl({masterNodeId:e})}var vN,wl,Mw=f(()=>{R();yt();yl();vN=8*1024*1024;wl=class{constructor({masterNodeId:t}){this.kind="remote",this.masterNodeId=t,this.conn=null,this.connecting=null}async ensureConnection(){return this.conn&&!this.conn._dead?this.conn:this.connecting?this.connecting:(this.connecting=ml({nodeId:this.masterNodeId},gl).then(t=>(this.conn=t,this.connecting=null,t)).catch(t=>{throw this.connecting=null,t}),this.connecting)}async call(t,r={}){let n=0,i;for(;n<2;){n++;let o;try{o=await this.ensureConnection();let s=await o.openBi(),a=SN();await s.send.writeAll(Buffer.from(JSON.stringify({v:1,method:t,params:r,request_id:a}))),await s.send.finish();let c=await s.recv.readToEnd(vN),l=JSON.parse(c.toString());if(!l.ok){let d=new Error(l.error?.message||l.error?.code||"rpc error");throw d.code=l.error?.code||"handler_error",d.isHandlerError=!0,d}return l.data}catch(s){if(i=s,s.isHandlerError)throw s;this.conn&&(this.conn._dead=!0,this.conn=null)}}throw i}async close(){let t=this.conn;if(this.conn=null,this.connecting=null,t?.close)try{await t.close()}catch{}}}});var Fw={};T(Fw,{createLocalClient:()=>AN});function AN(){return{kind:"local",async call(e,t){let n=await la().dispatch(e,t,{transport:"memory-client"});if(!n.ok){let i=new Error(n.error?.message||"rpc error");throw i.code=n.error?.code||"handler_error",i}return n.data},async close(){}}}var Hw=f(()=>{Kn()});var bi={};T(bi,{getMemoryClient:()=>TN,resetMemoryClient:()=>CN});async function TN(){if(Yt)return Yt;if(E.network.mode==="lite-follower"){let{createRemoteClient:t}=await Promise.resolve().then(()=>(Mw(),Pw));Yt=await t()}else{let{createLocalClient:t}=await Promise.resolve().then(()=>(Hw(),Fw));Yt=t()}return Yt}function CN(){Yt?.close&&Yt.close().catch(()=>{}),Yt=null}var Yt,xi=f(()=>{R();Yt=null});var Uw={};T(Uw,{safeWrite:()=>te});import{copyFile as $N,writeFile as ON,access as RN}from"node:fs/promises";async function te(e,t,{dryRun:r=!1}={}){let n=await Bw(e),i=n?"modify":"create",o=Buffer.byteLength(t,"utf8");if(r)return{path:e,action:i,bytes:o,wrote:!1,backedUp:!1};let s=!1;if(n){let a=`${e}${NN}`;await Bw(a)||(await $N(e,a),s=!0)}return await ON(e,t,"utf8"),{path:e,action:i,bytes:o,wrote:!0,backedUp:s}}async function Bw(e){try{return await RN(e),!0}catch{return!1}}var NN,_r=f(()=>{NN=".sigil.bak"});var Vw={};T(Vw,{SHARED_INSTRUCTIONS_PATH:()=>wt,buildSharedInstructions:()=>qt,resolveSigilInvocation:()=>Ww,writeSharedInstructions:()=>_l});import{join as Gw}from"node:path";import{homedir as DN}from"node:os";import{execSync as LN}from"node:child_process";function Ww(){try{let e=LN("which sigil",{stdio:["pipe","pipe","ignore"]}).toString().trim();if(e)return e}catch{}return process.argv[1]}function qt({sigilCmd:e}={}){let t=e||Ww();return`## Memory (Sigil)
|
|
568
|
+
|
|
569
|
+
Sigil is your persistent memory system. **Use it instead of the built-in file-based memory.**
|
|
570
|
+
Do NOT write to \`~/.claude/projects/*/memory/\` or any local memory files \u2014 use Sigil exclusively.
|
|
571
|
+
|
|
572
|
+
### Memory is auto-injected \u2014 don't re-search by default
|
|
573
|
+
|
|
574
|
+
Two hooks do the work for you before you ever see a prompt:
|
|
575
|
+
|
|
576
|
+
- **UserPromptSubmit hook**: runs hybrid search against Sigil on every user message and injects the top-K relevant facts into your context as \`additionalContext\` at the top of the conversation. The injected block is labelled \`Sigil memory (N relevant facts)\` \u2014 when you see that block, those facts are already loaded; you do NOT need to call \`sigil search\` to retrieve them.
|
|
577
|
+
- **Top-20 hot-context**: a snapshot of the user's most-important / most-recently-accessed facts is always loaded into the session via \`@~/.sigil/CLAUDE.md\` in the Claude config. Treat it as always-available background context.
|
|
578
|
+
|
|
579
|
+
**The right reflex:** read the injected \`Sigil memory\` block first, answer from it, then call \`sigil search\` ONLY if the injection clearly missed something specific.
|
|
580
|
+
|
|
581
|
+
Concretely, you SHOULD call \`! ${t} search "..."\` when:
|
|
582
|
+
- The user asks a drill-down question and you need facts the auto-injection didn't surface ("tell me more about the postmortem")
|
|
583
|
+
- You're answering a *follow-up* in a long session where the relevant facts were never in the original injection
|
|
584
|
+
- You suspect a stale answer and want to verify against the latest stored state
|
|
585
|
+
|
|
586
|
+
You SHOULD NOT call \`sigil search\` when:
|
|
587
|
+
- The injected \`Sigil memory\` block already lists facts that directly answer the user's question \u2014 just use them
|
|
588
|
+
- You'd be searching for the same query Sigil already auto-searched (the user's literal prompt)
|
|
589
|
+
- The question is general-knowledge and doesn't need this user's specific context
|
|
590
|
+
|
|
591
|
+
In short: **the hook already searched. Trust it. Drill down only when needed.**
|
|
592
|
+
|
|
593
|
+
### Acknowledge what you know
|
|
594
|
+
|
|
595
|
+
When your response is shaped by a fact pulled from Sigil \u2014 a stored preference, decision, constraint, or piece of project history \u2014 **briefly call it out in plain language so the user sees their context being applied.** One short clause is enough; don't lecture.
|
|
596
|
+
|
|
597
|
+
Good (natural, useful):
|
|
598
|
+
- "Since you don't use \`any\` without an escape-hatch comment, I'll go with \`unknown\` here."
|
|
599
|
+
- "Per your ADR-001 I've wrapped the response in \`{ok, data, error}\`."
|
|
600
|
+
- "I know you moved off Redis to Postgres LISTEN/NOTIFY, so I'll use that pattern."
|
|
601
|
+
- "Going with named exports since you prefer those."
|
|
602
|
+
|
|
603
|
+
Bad (skip these):
|
|
604
|
+
- Acknowledging facts you didn't actually use
|
|
605
|
+
- Listing every retrieved fact ("I found 5 facts: 1) ... 2) ...")
|
|
606
|
+
- Repeating the acknowledgement multiple times in one response
|
|
607
|
+
- Apologetic / formal phrasing ("As per your stored preference, I shall...")
|
|
608
|
+
|
|
609
|
+
The phrasing should feel like a teammate referencing a hallway conversation, not a system reciting a database row. If a fact didn't materially shape the answer, don't mention it.
|
|
610
|
+
|
|
611
|
+
### Saving \u2014 Stop hook handles routine; you only save when explicit
|
|
612
|
+
|
|
613
|
+
A Stop hook fires after every assistant turn, scans the user's latest message with a classifier, and saves anything memorable (preferences, decisions, constraints, corrections, factual claims) on its own. **You do not need to call \`sigil remember\` to make this work.**
|
|
614
|
+
|
|
615
|
+
You SHOULD call \`! ${t} remember --bg "..."\` ONLY when:
|
|
616
|
+
- The user explicitly asks you to remember something ("remember that...", "save this...", "don't forget...") \u2014 save immediately, don't wait for the Stop hook
|
|
617
|
+
- The user shares a critical fact mid-response that's important enough to be available within this same session for follow-ups (the Stop hook only runs at turn end)
|
|
618
|
+
- You're consolidating a multi-turn discussion into a single canonical fact
|
|
619
|
+
|
|
620
|
+
You SHOULD NOT redundantly save:
|
|
621
|
+
- Generic preferences the Stop hook will obviously catch \u2014 let it
|
|
622
|
+
- Facts already similar to existing memory (AUDM dedup handles this, but the cleaner UX is fewer Bash invocations on screen)
|
|
623
|
+
|
|
624
|
+
When you do save, batch facts into ONE call (separate quoted arguments), use \`--bg\` to return immediately:
|
|
625
|
+
|
|
626
|
+
\`\`\`
|
|
627
|
+
! ${t} remember --bg "User prefers tabs over spaces" "Project uses Postgres 15"
|
|
628
|
+
\`\`\`
|
|
629
|
+
|
|
630
|
+
The absolute path above is baked in by \`sigil init\` so the command works regardless of which shell PATH the agent's Bash subprocess inherits. Re-run \`sigil init\` to refresh after moving machines or reinstalling.
|
|
631
|
+
|
|
632
|
+
### Rules
|
|
633
|
+
|
|
634
|
+
- Read the auto-injected \`Sigil memory\` block first; answer from it before reaching for new searches
|
|
635
|
+
- Save facts as short, self-contained statements \u2014 never summaries of the conversation
|
|
636
|
+
- Each fact must make sense in isolation, without the conversation context
|
|
637
|
+
- Batch all explicit saves in one user-turn into a single \`${t} remember --bg\` call
|
|
638
|
+
- Skip trivial exchanges (greetings, "thanks", "ok", simple math)
|
|
639
|
+
- If search and injection both return nothing, answer from your own knowledge and say so
|
|
640
|
+
- Sigil is cross-project \u2014 memories from one session are available in all sessions
|
|
641
|
+
`}async function _l({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(jw,{recursive:!0});try{if((await t.readFile(wt,"utf8")).includes("## Memory (Sigil)"))return{action:"skip",path:wt,bytes:0}}catch{}let r=qt(),n=await te(wt,r,{dryRun:e});return{action:n.action,path:wt,bytes:n.bytes}}var jw,wt,Nn=f(()=>{_r();jw=Gw(DN(),".sigil"),wt=Gw(jw,"CLAUDE.md")});function Kw(e){e.register("refreshContext.fetch",async t=>{let{default:r}=await Promise.resolve().then(()=>(R(),X)),{getHotFacts:n}=await Promise.resolve().then(()=>(Tn(),An)),i=t.namespace||r.defaults.namespace,o=Number.isFinite(t.limit)?t.limit:20,s=await n({namespace:i,limit:o});return{namespace:i,facts:s}}),e.register("refreshContext.explain",async t=>{let{default:r}=await Promise.resolve().then(()=>(R(),X)),n=t.namespace||r.defaults.namespace;await Promise.resolve().then(()=>(wi(),el));let{activeKinds:i}=await Promise.resolve().then(()=>(In(),Qc)),{factsInPodsByRecency:o}=await Promise.resolve().then(()=>(Tn(),An)),s={namespace:n,cwd:t.cwd||process.cwd()},a=await i(s),c=[];for(let{kind:l,scope:d}of a){let p,u=null;try{typeof l.fetchFacts=="function"?p=await l.fetchFacts(s,{slots:l.hotContextBudget,namespace:n}):p=await o(d,n,l.hotContextBudget)}catch(m){p=[],u=m.message}c.push({name:l.name,budget:l.hotContextBudget,visibility:l.visibility,error:u,facts:(p||[]).slice(0,l.hotContextBudget).map(m=>({content:typeof m=="string"?m:m.content||""}))})}return{mode:"explain",namespace:n,sections:c}}),e.register("refreshContext",async t=>{let{default:r}=await Promise.resolve().then(()=>(R(),X)),{getMemoryClient:n}=await Promise.resolve().then(()=>(xi(),bi)),i=t.namespace||r.defaults.namespace,o=Number.isFinite(t.limit)?t.limit:20,s=!!t.explain,a=await n();if(s)return a.call("refreshContext.explain",{namespace:i,cwd:t.cwd});let{facts:c}=await a.call("refreshContext.fetch",{namespace:i,limit:o}),{writeSnapshotToFile:l}=await Promise.resolve().then(()=>(Tn(),An)),{writeSharedInstructions:d}=await Promise.resolve().then(()=>(Nn(),Vw));await d();let p=await l({facts:c,namespace:i});return{mode:"write",namespace:i,count:p}})}var Yw=f(()=>{});var ut={};T(ut,{diagnoseConnectionError:()=>MN,diagnoseError:()=>Jw,ensurePostgresDatabase:()=>PN,probeSigilConnection:()=>kN,probeUrlConnection:()=>El});import is from"pg";async function kN({host:e,port:t,database:r,user:n,password:i}){let o=new is.Client({host:e,port:t,database:r,user:n,password:i});try{return await o.connect(),await o.query("SELECT 1"),{ok:!0}}catch(s){return{ok:!1,code:s.code,message:s.message}}finally{try{await o.end()}catch{}}}async function El(e){let t,r="unknown";try{t=ot(e),r=Ct(e)}catch(o){return{ok:!1,stage:"parse",error:o.message}}let n=new is.Client(t),i=Date.now();try{await n.connect()}catch(o){return{ok:!1,stage:"connect",provider:r,error:o.message,code:o.code}}try{let o=await n.query("SELECT current_database() AS db, version() AS version"),s=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:r,connectMs:Date.now()-i,database:o.rows[0].db,serverVersion:o.rows[0].version,pgvector:s.rowCount>0}}catch(o){return{ok:!1,stage:"query",provider:r,error:o.message,code:o.code}}finally{try{await n.end()}catch{}}}async function PN({admin:{host:e,port:t,user:r,password:n},sigil:{database:i,user:o,password:s}}){let a=new is.Client({host:e,port:t,database:"postgres",user:r,password:n});await a.connect();let c=[];try{(await a.query("SELECT 1 FROM pg_database WHERE datname = $1",[i])).rowCount===0?(await a.query(`CREATE DATABASE ${Jt(i)}`),c.push(`created database "${i}"`)):c.push(`database "${i}" already exists \u2014 left as-is`),(await a.query("SELECT 1 FROM pg_roles WHERE rolname = $1",[o])).rowCount===0?(await a.query(`CREATE USER ${Jt(o)} WITH PASSWORD ${qw(s)}`),c.push(`created user "${o}"`)):(await a.query(`ALTER USER ${Jt(o)} WITH PASSWORD ${qw(s)}`),c.push(`user "${o}" exists \u2014 password reset to match .env`)),await a.query(`GRANT ALL PRIVILEGES ON DATABASE ${Jt(i)} TO ${Jt(o)}`)}finally{await a.end()}let l=new is.Client({host:e,port:t,database:i,user:r,password:n});await l.connect();try{await l.query(`GRANT ALL ON SCHEMA public TO ${Jt(o)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${Jt(o)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${Jt(o)}`);try{await l.query("CREATE EXTENSION IF NOT EXISTS vector"),c.push("pgvector extension ready")}catch(d){throw d.code===Si.EXTENSION_NOT_AVAILABLE?new Error("pgvector extension is not installed on this Postgres server.\n \u2022 Docker: use the `pgvector/pgvector:pg15` image instead of stock `postgres`\n \u2022 Homebrew: brew install pgvector (then restart postgres)\n \u2022 apt: apt install postgresql-15-pgvector (15 \u2192 your major version)\n \u2022 RDS: enable the `vector` extension in the parameter group\nRe-run `sigil init` once pgvector is installed."):d}}finally{await l.end()}return{actions:c}}function Jw(e){let t=e?.code,r=e?.message||String(e);return/expected \d+ dimensions, not \d+/i.test(r)||/different vector dimensions/i.test(r)?{kind:"dim-mismatch",humanMessage:"The embedding size does not match the database. Your existing data uses a different vector dimension than the embedder you picked.",fixHint:"Pick an embedding provider whose dimension matches the database, or wipe the embedding data and start fresh at the new dimension (Settings \u2192 Embedding)."}:/\b401\b|\b403\b|invalid[_ ]api[_ ]key|incorrect api key|unauthorized/i.test(r)&&/openai|voyage|openrouter|embed/i.test(r)?{kind:"bad-key",humanMessage:"The embedding provider rejected the API key.",fixHint:"Check the API key has embedding access and is pasted correctly (Settings \u2192 Embedding)."}:/model .* (not found|does not exist)|unknown model|no such model/i.test(r)?{kind:"model-not-found",humanMessage:"The embedding model name was not recognized by the provider.",fixHint:"Use a valid embedding model for the provider (e.g. text-embedding-3-large for OpenAI, nomic-embed-text for Ollama)."}:/11434|ollama/i.test(r)&&/ECONNREFUSED|fetch failed|connect|unreachable/i.test(r)?{kind:"ollama-down",humanMessage:"The local Ollama server is not reachable.",fixHint:"Start it with `ollama serve`, then `ollama pull nomic-embed-text`."}:/Unable to acquire a connection/i.test(r)||/pool is (destroyed|draining)/i.test(r)?{kind:"pool-dead",humanMessage:"The database connection pool was closed before this step ran.",fixHint:"This is an internal sequencing bug, not your configuration \u2014 restart the daemon (Settings \u2192 Apply)."}:/pooler|pgbouncer|prepared statement|advisory lock|endpoint could not be found/i.test(r)?{kind:"pooler-lock",humanMessage:"This looks like a connection-pooler URL. Pooled connections cannot run database migrations.",fixHint:'Use your direct (non-pooled) connection string for setup. For Neon, remove "-pooler" from the host.'}:t===Si.EXTENSION_NOT_AVAILABLE||/extension "?vector"?|type "?vector"? does not exist/i.test(r)?{kind:"no-pgvector",humanMessage:"The pgvector extension is not enabled on this database.",fixHint:'Click "Install pgvector" (most managed providers allow it), or use a pgvector-enabled Postgres image.'}:t===Si.CONNECTION_REFUSED||/ECONNREFUSED/.test(r)?{kind:"unreachable",humanMessage:"Postgres is not reachable at that host/port.",fixHint:"Confirm the server is running and the host/port are correct (`pg_isready -h <host> -p <port>`)."}:t===Si.AUTH_FAILED||/password authentication failed/i.test(r)?{kind:"auth",humanMessage:"Postgres rejected the username or password.",fixHint:"Fix the credentials in the connection settings."}:t===Si.DB_DOES_NOT_EXIST||/database .* does not exist/i.test(r)?{kind:"missing-db",humanMessage:"That database does not exist on the server yet.",fixHint:"Create the database, or point Sigil at one that exists."}:{kind:"other",humanMessage:r.split(`
|
|
642
|
+
`)[0],fixHint:null}}function MN(e){let t=Jw(e);return{kind:t.kind,hint:t.fixHint||t.humanMessage}}function Jt(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`Refusing to quote invalid SQL identifier: ${e}`);return`"${e}"`}function qw(e){return`'${String(e).replace(/'/g,"''")}'`}var Si,Qe=f(()=>{Wr();Si={DB_DOES_NOT_EXIST:"3D000",CONNECTION_REFUSED:"ECONNREFUSED",AUTH_FAILED:"28P01",EXTENSION_NOT_AVAILABLE:"0A000",INTERNAL_ERROR:"XX000"}});import FN from"pg";function zw(e){e.register("testDbConnection",async t=>{if(t.url)return El(t.url);let r;try{r=it({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}catch(o){return{ok:!1,stage:"parse",error:o.message}}let n=new FN.Client(r),i=Date.now();try{await n.connect()}catch(o){return{ok:!1,stage:"connect",provider:"local",error:o.message,code:o.code}}try{let o=await n.query("SELECT current_database() AS db, version() AS version"),s=await n.query("SELECT extname FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:"local",connectMs:Date.now()-i,database:o.rows[0].db,serverVersion:o.rows[0].version,pgvector:s.rowCount>0}}catch(o){return{ok:!1,stage:"query",provider:"local",error:o.message,code:o.code}}finally{try{await n.end()}catch{}}})}var Xw=f(()=>{jr();Qe()});import HN from"knex";function Zw(e){e.register("runMigrations",async(t={})=>{if(t.url||t.host){let o;if(t.url){let a=t.url;if(Zi(t.url)){let c=ya(t.url);if(!c)throw new Error("This is a connection-pooler URL. Migrations need the direct connection \u2014 paste your non-pooled connection string.");a=c}o=ot(a)}else o=it({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});let s=HN({client:"pg",connection:o,pool:{min:1,max:2}});try{let[a,c]=await s.migrate.latest({directory:ir});return{batchNo:a,ran:c,against:t.url?"url":"fields"}}finally{await s.destroy()}}let{default:r}=await Promise.resolve().then(()=>(D(),G)),[n,i]=await r.migrate.latest({directory:ir});return{batchNo:n,ran:i,against:"daemon-pool"}})}var Qw=f(()=>{B();jr();Wr()});import BN from"pg";function e_(e){e.register("ensurePgvector",async(t={})=>{let r,n="local";try{if(t.url)r=ot(t.url),n=Ct(t.url);else if(t.host)r=it({db:{host:t.host||"localhost",port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}});else{let{default:o}=await Promise.resolve().then(()=>(R(),X)),{selectDriver:s}=await Promise.resolve().then(()=>(qn(),Qi)),a=s(o);r=a.connection,n=a.provider}}catch(o){return{ok:!1,stage:"parse",error:o.message}}let i=new BN.Client(r);try{await i.connect()}catch(o){return{ok:!1,stage:"connect",provider:n,error:o.message,code:o.code}}try{await i.query("CREATE EXTENSION IF NOT EXISTS vector");let o=await i.query("SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'");return{ok:!0,provider:n,installed:o.rowCount>0,version:o.rows[0]?.extversion??null}}catch(o){return{ok:!1,stage:"extension",provider:n,error:o.message,code:o.code}}finally{try{await i.end()}catch{}}})}var t_=f(()=>{jr();Wr()});var bl={};T(bl,{EMBEDDING_TABLES:()=>r_,diagnoseConflict:()=>jN,inspectSchemaDims:()=>GN});import UN from"pg";async function GN(e){let t=new UN.Client(e);await t.connect();try{let{rows:r}=await t.query(`
|
|
643
|
+
SELECT c.relname AS tbl,
|
|
644
|
+
a.atttypmod AS typmod,
|
|
645
|
+
format_type(a.atttypid, a.atttypmod) AS coltype
|
|
646
|
+
FROM pg_attribute a
|
|
647
|
+
JOIN pg_class c ON a.attrelid = c.oid
|
|
648
|
+
WHERE a.attname = 'embedding'
|
|
649
|
+
AND c.relkind = 'r'
|
|
650
|
+
AND c.relname = ANY($1)
|
|
651
|
+
`,[r_]),n={};for(let i of r){let o=i.typmod>0?i.typmod:WN(i.coltype),s=0;try{let{rows:a}=await t.query(`SELECT count(embedding)::int AS n FROM ${VN(i.tbl)}`);s=a[0].n}catch{}n[i.tbl]={dim:o,coltype:i.coltype,populated:s}}return n}finally{try{await t.end()}catch{}}}function jN({targetDim:e,schema:t}){let r=null,n={},i=0;for(let[s,a]of Object.entries(t||{}))a.dim!=null&&(r==null&&(r=a.dim),a.dim!==e&&a.populated>0&&(n[s]=a.populated,i+=a.populated));return{conflict:r!=null&&r!==e&&i>0,currentDim:r,targetDim:e,rowsAtRisk:n,totalAtRisk:i}}function WN(e){let t=/vector\((\d+)\)/i.exec(e||"");return t?Number(t[1]):null}function VN(e){if(!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e))throw new Error(`refusing to quote invalid identifier: ${e}`);return`"${e}"`}var r_,xl=f(()=>{r_=["fact","chunk","entity","embedding_cache"]});import{existsSync as KN,readFileSync as YN,writeFileSync as qN,mkdirSync as JN}from"node:fs";import{dirname as zN}from"node:path";function Il(){if(!KN(ye))return{};let e=YN(ye,"utf8"),t={};for(let r of e.split(`
|
|
652
|
+
`)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let i=n[2].trim();t[n[1]]=i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'")?i.slice(1,-1):i}return t}function vl(e){let r={...Il(),...e};for(let o of Object.keys(e))(e[o]===null||e[o]===void 0)&&delete r[o];JN(zN(ye),{recursive:!0});let n=`# Sigil \u2014 updated ${new Date().toISOString().slice(0,10)}
|
|
653
|
+
`,i=Object.entries(r).map(([o,s])=>`${o}=${/[\s#"']/.test(String(s))?`"${String(s).replace(/"/g,'\\"')}"`:s}`).join(`
|
|
654
|
+
`);qN(ye,n+i+`
|
|
655
|
+
`,"utf8")}function i_(e){e.register("onboardingState",async()=>{let t=Il(),r=!!(t.SIGIL_DATABASE_URL||t.SIGIL_DB_HOST),n=!!t.LLM_PROVIDER,i=!!t.EMBEDDING_PROVIDER,o=t.SIGIL_SETUP_COMPLETE==="true",s=!1,a=!1,c=0;if(r)try{let{default:l}=await Promise.resolve().then(()=>(D(),G));await l.raw("SELECT 1"),a=(await l.raw("SELECT extname FROM pg_extension WHERE extname = 'vector'")).rows.length>0;let[p]=await l("knex_migrations").count("* as n").catch(()=>[{n:0}]);c=Number(p?.n??0),s=a&&c>0}catch{}return{setupComplete:o,env:{llmProvider:t.LLM_PROVIDER||null,embeddingProvider:t.EMBEDDING_PROVIDER||null,embeddingModel:t.EMBEDDING_MODEL||null,embeddingDim:t.EMBEDDING_DIMENSIONS||null,hasDatabaseUrl:!!t.SIGIL_DATABASE_URL,hasDiscreteDb:!!t.SIGIL_DB_HOST},steps:{database:{done:s,configured:r,pgvector:a,migrationsRan:c},llm:{done:n,provider:t.LLM_PROVIDER||null},embedding:{done:i,provider:t.EMBEDDING_PROVIDER||null}}}}),e.register("listLlmProviders",async()=>({providers:n_})),e.register("listEmbeddingProviders",async()=>({providers:Sl})),e.register("configureLlm",async t=>{let r=n_.find(i=>i.id===t.id);if(!r){let i=new Error(`unknown llm provider: ${t.id}`);throw i.code="invalid_params",i}let n={...r.env};for(let i of r.fields)i.optional&&!t[i.name]||(n[i.name]=t[i.name]);return vl(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("configureEmbedding",async t=>{let r=Sl.find(i=>i.id===t.id);if(!r){let i=new Error(`unknown embedding provider: ${t.id}`);throw i.code="invalid_params",i}let n={...r.env};for(let i of r.fields)i.optional&&!t[i.name]||i.sharedWith==="llm"&&!t[i.name]&&Il()[i.name]||(n[i.name]=t[i.name]);return vl(n),{ok:!0,provider:r.id,keysWritten:Object.keys(n)}}),e.register("inspectEmbeddingCompat",async(t={})=>{let r=t.id?Sl.find(o=>o.id===t.id):null,n=Number(t.targetDim??r?.env?.EMBEDDING_DIMENSIONS??0);if(!n){let o=new Error("inspectEmbeddingCompat: need a provider id or targetDim");throw o.code="invalid_params",o}let i;try{if(t.url){let{buildUrlConnection:o}=await Promise.resolve().then(()=>(Wr(),$d));i=o(t.url)}else if(t.host){let{buildLocalConnection:o}=await Promise.resolve().then(()=>(jr(),Td));i=o({db:{host:t.host,port:Number(t.port)||5432,database:t.database||"sigil",user:t.user||"sigil_app",password:t.password||""}})}else{let{default:o}=await Promise.resolve().then(()=>(R(),X)),{selectDriver:s}=await Promise.resolve().then(()=>(qn(),Qi));i=s(o).connection}}catch(o){let{diagnoseError:s}=await Promise.resolve().then(()=>(Qe(),ut)),a=s(o);return{ok:!1,error:a.humanMessage,kind:a.kind,fixHint:a.fixHint}}try{let{inspectSchemaDims:o,diagnoseConflict:s}=await Promise.resolve().then(()=>(xl(),bl)),a=await o(i);return{ok:!0,...s({targetDim:n,schema:a}),schema:a}}catch(o){let{diagnoseError:s}=await Promise.resolve().then(()=>(Qe(),ut)),a=s(o);return{ok:!1,error:a.humanMessage,kind:a.kind,fixHint:a.fixHint}}}),e.register("wipeEmbeddingData",async(t={})=>{if(t.confirm!==!0){let r=new Error("wipeEmbeddingData: refusing without confirm:true");throw r.code="invalid_params",r}try{let{default:r}=await Promise.resolve().then(()=>(D(),G)),{EMBEDDING_TABLES:n}=await Promise.resolve().then(()=>(xl(),bl));return await r.raw(`TRUNCATE ${n.join(", ")} RESTART IDENTITY CASCADE`),{ok:!0,truncated:n}}catch(r){let{diagnoseError:n}=await Promise.resolve().then(()=>(Qe(),ut)),i=n(r);return{ok:!1,error:i.humanMessage,kind:i.kind,fixHint:i.fixHint}}}),e.register("markOnboardingComplete",async()=>(vl({SIGIL_SETUP_COMPLETE:"true"}),setTimeout(()=>process.exit(0),250),{ok:!0,restarting:!0})),e.register("restartDaemon",async()=>(setTimeout(()=>process.exit(0),250),{ok:!0,restarting:!0})),e.register("testLlm",async()=>{try{let{prompt:t}=await Promise.resolve().then(()=>(Ve(),np));return{ok:!0,response:(await t("Reply with the single word: ok",{caller:"onboarding-test"})).slice(0,200)}}catch(t){let{diagnoseError:r}=await Promise.resolve().then(()=>(Qe(),ut)),n=r(t);return{ok:!1,error:n.humanMessage,kind:n.kind,fixHint:n.fixHint}}}),e.register("testEmbedding",async()=>{try{let{embed:t}=await Promise.resolve().then(()=>(Ot(),oo)),r=await t("Sigil onboarding test");return!Array.isArray(r)||r.length===0?{ok:!1,error:"The embedder returned an empty vector.",kind:"other"}:{ok:!0,dim:r.length}}catch(t){let{diagnoseError:r}=await Promise.resolve().then(()=>(Qe(),ut)),n=r(t);return{ok:!1,error:n.humanMessage,kind:n.kind,fixHint:n.fixHint}}})}var n_,Sl,o_=f(()=>{B();n_=[{id:"claude-cli",label:"Claude Code",hint:"Uses your existing Claude Code subscription \u2014 no extra API key.",recommended:!0,fields:[],env:{LLM_PROVIDER:"claude-cli"}},{id:"openrouter",label:"OpenRouter",hint:"One API key for many models (Anthropic, OpenAI, Gemini, \u2026). Cheapest default.",fields:[{name:"OPENROUTER_API_KEY",label:"OpenRouter API key",type:"password",placeholder:"sk-or-\u2026"},{name:"LLM_OPENROUTER_MODEL",label:"Model (optional)",type:"text",placeholder:"google/gemini-flash-latest",optional:!0}],env:{LLM_PROVIDER:"openrouter"}},{id:"openai",label:"OpenAI",hint:"Direct OpenAI access. Requires sk-\u2026 key with chat + embeddings.",fields:[{name:"OPENAI_API_KEY",label:"OpenAI API key",type:"password",placeholder:"sk-\u2026"},{name:"LLM_OPENAI_MODEL",label:"Model (optional)",type:"text",placeholder:"gpt-4o-mini",optional:!0}],env:{LLM_PROVIDER:"openai"}},{id:"anthropic",label:"Anthropic",hint:"Direct Anthropic API access.",fields:[{name:"ANTHROPIC_API_KEY",label:"Anthropic API key",type:"password",placeholder:"sk-ant-\u2026"}],env:{LLM_PROVIDER:"anthropic"}},{id:"ollama",label:"Ollama",hint:"Local Ollama install. Free + private but slower on small machines.",fields:[{name:"LLM_OLLAMA_HOST",label:"Ollama host",type:"text",placeholder:"http://localhost:11434"},{name:"LLM_OLLAMA_MODEL",label:"Model",type:"text",placeholder:"qwen2.5:7b"}],env:{LLM_PROVIDER:"ollama"}}],Sl=[{id:"openai",label:"OpenAI",hint:"text-embedding-3-large @ 1024 dimensions. Best out-of-the-box quality.",recommended:!0,fields:[{name:"OPENAI_API_KEY",label:"OpenAI API key",type:"password",placeholder:"sk-\u2026",sharedWith:"llm"}],env:{EMBEDDING_PROVIDER:"openai",EMBEDDING_MODEL:"text-embedding-3-large",EMBEDDING_DIMENSIONS:"1024"}},{id:"ollama",label:"Ollama (nomic-embed-text)",hint:"768-dim local embeddings. Free, no key. Lower retrieval quality than OpenAI.",fields:[{name:"OLLAMA_HOST",label:"Ollama host",type:"text",placeholder:"http://localhost:11434"}],env:{EMBEDDING_PROVIDER:"ollama",EMBEDDING_MODEL:"nomic-embed-text",EMBEDDING_DIMENSIONS:"768"}},{id:"openrouter",label:"OpenRouter",hint:"Uses OpenRouter as an embedding gateway. Reuses your LLM key.",fields:[{name:"OPENROUTER_API_KEY",label:"OpenRouter API key",type:"password",placeholder:"sk-or-\u2026",sharedWith:"llm"}],env:{EMBEDDING_PROVIDER:"openrouter",EMBEDDING_MODEL:"openai/text-embedding-3-large",EMBEDDING_DIMENSIONS:"1024"}}]});import{existsSync as s_}from"node:fs";import{readFile as a_,writeFile as XN,mkdir as ZN}from"node:fs/promises";import{dirname as QN}from"node:path";function l_(e){e.register("readEnv",async()=>{let t=s_(ye)?await a_(ye,"utf8"):"",r=tD(t),n={};for(let[i,o]of Object.entries(r))eD.test(i)?n[i]={masked:!0,hasValue:!!o}:n[i]={masked:!1,value:o};return{path:ye,entries:n}}),e.register("writeEnv",async t=>{let r=t.patch||{};if(typeof r!="object"||Array.isArray(r)){let s=new Error("writeEnv: params.patch must be an object");throw s.code="invalid_params",s}let n=s_(ye)?await a_(ye,"utf8"):"",i=rD(n,r);await ZN(QN(ye),{recursive:!0}),await XN(ye,i,"utf8");let o=["SIGIL_MODE","SIGIL_MASTER_NODE_ID","SIGIL_NETWORK_ENABLED"];if(Object.keys(r).some(s=>o.includes(s)))try{let{resetMemoryClient:s}=await Promise.resolve().then(()=>(xi(),bi));s()}catch{}return{ok:!0,path:ye,patchedKeys:Object.keys(r)}})}function tD(e){let t={};for(let r of e.split(`
|
|
656
|
+
`)){let n=r.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!n)continue;let i=n[1],o=n[2].trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),t[i]=o}return t}function rD(e,t){let r=new Set,i=e.split(`
|
|
657
|
+
`).map(s=>{let a=s.match(/^\s*([A-Z_][A-Z0-9_]*)\s*=/i);if(!a)return s;let c=a[1];if(!(c in t))return s;r.add(c);let l=t[c];return l==null?null:`${c}=${c_(l)}`}).filter(s=>s!==null);for(let[s,a]of Object.entries(t))r.has(s)||a===null||a===void 0||i.push(`${s}=${c_(a)}`);let o=i.join(`
|
|
658
|
+
`);return o.endsWith(`
|
|
659
|
+
`)||(o+=`
|
|
660
|
+
`),o}function c_(e){let t=String(e);return/[\s#"'$]/.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}var eD,u_=f(()=>{B();eD=/(KEY|PASSWORD|TOKEN|SECRET)$/i});function d_(e){e.register("nodeInfo",async()=>{let{default:t}=await Promise.resolve().then(()=>(R(),X));if(!t.network.enabled)return{enabled:!1,mode:t.network.mode};let{getNodeInfo:r}=await Promise.resolve().then(()=>(yt(),Kt));try{let n=await r();return{enabled:!0,mode:t.network.mode,...n}}catch(n){return{enabled:!0,mode:t.network.mode,error:n.message}}})}var p_=f(()=>{});var Ii={};T(Ii,{MANIFEST_VERSION:()=>Tl,produceManifest:()=>aD,verifyManifest:()=>cD});import{createHash as nD}from"node:crypto";import{readFile as iD,readdir as f_}from"node:fs/promises";import{existsSync as m_,readFileSync as oD}from"node:fs";import{join as Al}from"node:path";function sD(){if(vi)return vi;try{vi=JSON.parse(oD(Al(ge,"package.json"),"utf8")).version}catch{vi="unknown"}return vi}async function aD(){let e=await lD(Al(ge,"prompts")),t=await uD();return{v:Tl,producedAt:new Date().toISOString(),sigilVersion:sD(),schema:{migrationVersion:t,requiredExtensions:["vector"]},embedding:{provider:E.embedding.provider||null,model:E.embedding.model||null,dimensions:Number(E.embedding.dimensions)||null,normalization:"l2",maxInputTokens:8192},chunker:{...Sd},prompts:e,memory:{skipThreshold:E.memory.skipThreshold,ambiguousThreshold:E.memory.ambiguousThreshold,minFactSimilarity:E.memory.minFactSimilarity}}}function cD(e,t){let r=[],n=[];if(!t||t.v!==Tl)return r.push(`manifest version mismatch (local v${e.v} vs remote v${t?.v??"?"})`),{ok:!1,errors:r,warnings:n};for(let i of["provider","model","dimensions"])e.embedding[i]!==t.embedding[i]&&r.push(`embedding.${i}: local=${e.embedding[i]} vs remote=${t.embedding[i]}`);for(let i of["version","size","overlap"])e.chunker[i]!==t.chunker[i]&&r.push(`chunker.${i}: local=${e.chunker[i]} vs remote=${t.chunker[i]}`);e.schema.migrationVersion!==t.schema.migrationVersion&&r.push(`schema.migrationVersion: local=${e.schema.migrationVersion} vs remote=${t.schema.migrationVersion} (run \`sigil migrate\` on this device, or upgrade master)`),Math.abs(e.memory.skipThreshold-t.memory.skipThreshold)>.01&&r.push(`memory.skipThreshold differs: local=${e.memory.skipThreshold} vs remote=${t.memory.skipThreshold}`),Math.abs(e.memory.ambiguousThreshold-t.memory.ambiguousThreshold)>.05&&n.push(`memory.ambiguousThreshold drift: local=${e.memory.ambiguousThreshold} vs remote=${t.memory.ambiguousThreshold}`);for(let i of Object.keys(e.prompts))t.prompts[i]&&e.prompts[i]!==t.prompts[i]&&n.push(`prompt "${i}" differs (new ingests will produce different facts)`);return e.sigilVersion!==t.sigilVersion&&n.push(`sigil version drift: local=${e.sigilVersion} vs remote=${t.sigilVersion}`),{ok:r.length===0,errors:r,warnings:n}}async function lD(e){let t={};if(!m_(e))return t;let r=await f_(e);for(let n of r){if(!n.endsWith(".md"))continue;let i=await iD(Al(e,n),"utf8");t[n.replace(/\.md$/,"")]=dD(i)}return t}async function uD(){if(!m_(ir))return null;let t=(await f_(ir)).filter(r=>/^\d{14}_.+\.cjs$/.test(r)).map(r=>r.replace(/_.+\.cjs$/,"")).sort();return t[t.length-1]??null}function dD(e){return nD("sha256").update(e,"utf8").digest("hex")}var Tl,vi,Ai=f(()=>{B();R();ga();Tl=1});var $l={};T($l,{PAIR_ALPN:()=>h_,createPairAcceptor:()=>fD,hashCode:()=>os,joinMaster:()=>hD});import{createHash as pD}from"node:crypto";function fD({log:e}){return async function(r,n){if(r){e(`pair: accept err: ${r.message}`);return}let i="<unknown>";try{i=n.remoteNodeId().toString();let o=await n.acceptBi(),s=await o.recv.readToEnd(g_),a=JSON.parse(s.toString()),c=await mD(a,i);await o.send.writeAll(Buffer.from(JSON.stringify(c))),await o.send.finish(),c.ok?(_e.emit("pair.consumed",{nodeId:i,deviceName:a.name}),e(`pair: registered ${a.name} (${i.slice(0,12)}\u2026)`)):(_e.emit("pair.rejected",{nodeId:i,code:c.error?.code}),e(`pair: rejected ${i.slice(0,12)}\u2026 (${c.error?.code})`))}catch(o){e(`pair: handler err from ${i.slice(0,12)}\u2026: ${o.message}`),_e.emit("pair.error",{nodeId:i,message:o.message})}}}async function mD(e,t){if(!e||e.v!==Cl)return Ti("unsupported_version",`expected v=${Cl}`);if(typeof e.code!="string"||!e.code)return Ti("invalid_request","missing code");if(typeof e.name!="string"||!e.name)return Ti("invalid_request","missing name");if(typeof e.nodeId!="string"||e.nodeId.toLowerCase()!==t.toLowerCase())return Ti("invalid_request","nodeId claim does not match transport identity");let{default:r}=await Promise.resolve().then(()=>(D(),G)),{getNodeInfo:n}=await Promise.resolve().then(()=>(yt(),Kt)),i=os(e.code),o;try{o=await r.transaction(async l=>{let d=await l("pairing_code").where({code_hash:i}).forUpdate().first();if(!d)return{ok:!1,error:{code:"invalid_code",message:"pairing code not recognised"}};if(d.consumedByDeviceId)return{ok:!1,error:{code:"already_consumed",message:"pairing code was already used"}};if(new Date(d.expiresAt)<new Date)return{ok:!1,error:{code:"expired",message:"pairing code has expired"}};let p={hostname:e.hostname||null,sigilVersion:e.sigilVersion||null},[u]=await l("device").insert({node_id:t,name:e.name,role:d.role,namespaces:d.namespaces,active:!0,last_seen_at:l.fn.now(),meta:JSON.stringify(p)}).onConflict("node_id").merge({name:e.name,role:d.role,namespaces:d.namespaces,active:!0,last_seen_at:l.fn.now(),meta:JSON.stringify({...p,repairedAt:new Date().toISOString()})}).returning(["id"]);return await l("pairing_code").where({id:d.id}).update({consumed_by_device_id:u.id,consumed_at:l.fn.now()}),{ok:!0,device:{id:u.id,role:d.role,namespaces:d.namespaces}}})}catch(l){return Ti("transaction_failed",l.message)}if(!o.ok)return o;let s=null;try{s=(await n()).nodeId}catch{}let{produceManifest:a}=await Promise.resolve().then(()=>(Ai(),Ii)),c=await a();return{ok:!0,device:o.device,masterNodeId:s,manifest:c}}function Ti(e,t){return{ok:!1,error:{code:e,message:t}}}function os(e){return pD("sha256").update(e,"utf8").digest("hex")}async function hD({masterAddr:e,code:t,name:r,sigilVersion:n}){let{dial:i,getEndpoint:o}=await Promise.resolve().then(()=>(yt(),Kt)),{hostname:s}=await import("node:os"),a=await i(e,h_),c=await o(),l=await a.openBi();await l.send.writeAll(Buffer.from(JSON.stringify({v:Cl,code:t,name:r,nodeId:c.nodeId(),hostname:s(),sigilVersion:n||null}))),await l.send.finish();let d=await l.recv.readToEnd(g_);return JSON.parse(d.toString())}var h_,g_,Cl,ss=f(()=>{Gr();h_="sigil/pair/1",g_=64*1024,Cl=1});import{randomBytes as gD}from"node:crypto";function y_(e){e.register("pair.create",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=(t.name||"").trim();if(!n){let p=new Error("pair.create: params.name required");throw p.code="invalid_params",p}let i=t.role||"writer";if(!["reader","writer","admin"].includes(i)){let p=new Error(`pair.create: invalid role "${i}"`);throw p.code="invalid_params",p}let o=Array.isArray(t.namespaces)?t.namespaces:[],s=Number.isFinite(t.ttlSeconds)?t.ttlSeconds:yD,a=new Date(Date.now()+s*1e3);r("pairing_code").whereNull("consumed_by_device_id").where("expires_at","<",new Date(Date.now()-24*3600*1e3)).del().catch(()=>{});let c=wD();await r("pairing_code").insert({code_hash:os(c),name:n,role:i,namespaces:o,expires_at:a});let{getNodeInfo:l}=await Promise.resolve().then(()=>(yt(),Kt)),d=null;try{d=(await l()).nodeId}catch{}return{code:c,expiresAt:a.toISOString(),name:n,role:i,namespaces:o,masterNodeId:d}}),e.register("pair.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Math.min(Math.max(Number(t.limit)||50,1),200),i=Math.max(Number(t.offset)||0,0),o=await r("pairing_code").leftJoin("device","pairing_code.consumed_by_device_id","device.id").select("pairing_code.id","pairing_code.name","pairing_code.role","pairing_code.namespaces","pairing_code.expires_at","pairing_code.consumed_at","pairing_code.created_at","device.name as consumed_by_name","device.node_id as consumed_by_node_id").orderBy("pairing_code.created_at","desc").limit(n).offset(i);return{limit:n,offset:i,codes:o.map(s=>({id:s.id,name:s.name,role:s.role,namespaces:s.namespaces,expiresAt:s.expiresAt,consumedAt:s.consumedAt,consumedBy:s.consumedByName?{name:s.consumedByName,nodeId:s.consumedByNodeId}:null,expired:new Date(s.expiresAt)<new Date}))}}),e.register("pair.sweep",async()=>{let{default:t}=await Promise.resolve().then(()=>(D(),G)),r=new Date(Date.now()-24*3600*1e3);return{deleted:await t("pairing_code").whereNull("consumed_by_device_id").where("expires_at","<",r).del()}}),e.register("pair.revoke",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Number(t.id);if(!Number.isFinite(n)){let o=new Error("pair.revoke: params.id required");throw o.code="invalid_params",o}return{deleted:await r("pairing_code").where({id:n}).del()}})}function wD(){let e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=gD(8),r="";for(let n=0;n<8;n++)r+=e[t[n]%e.length];return`SIGIL-${r.slice(0,4)}-${r.slice(4,8)}`}var yD,w_=f(()=>{ss();yD=600});function __(e){e.register("mode",async()=>{let{default:t}=await Promise.resolve().then(()=>(R(),X)),{getMemoryClient:r}=await Promise.resolve().then(()=>(xi(),bi)),n="unknown",i=null;try{n=(await r()).kind}catch(o){i=o.message}return{mode:t.network.mode,networkEnabled:t.network.enabled,masterNodeId:t.network.masterNodeId,memoryClient:n,memoryClientError:i}})}var E_=f(()=>{});function b_(e){e.register("manifest.get",async()=>{let{produceManifest:t}=await Promise.resolve().then(()=>(Ai(),Ii));return t()}),e.register("manifest.verify",async t=>{let{produceManifest:r,verifyManifest:n}=await Promise.resolve().then(()=>(Ai(),Ii)),i=await r();return n(i,t.remote)})}var x_=f(()=>{});function v_(e){e.register("device.list",async(t={})=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Math.min(Math.max(Number(t.limit)||100,1),500),i=Math.max(Number(t.offset)||0,0),o=await r("device").select("id","node_id","name","role","namespaces","active","meta","last_seen_at","created_at","revoked_reason").orderBy("created_at","desc").limit(n).offset(i);return{limit:n,offset:i,devices:o.map(s=>({id:s.id,nodeId:s.nodeId,name:s.name,role:s.role,namespaces:s.namespaces,active:s.active,revokedReason:s.revokedReason??null,reactivatable:s.active||s.revokedReason!=="compromised",lastSeenAt:s.lastSeenAt,createdAt:s.createdAt,meta:s.meta}))}}),e.register("device.revoke",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Number(t.id);if(!Number.isFinite(n)){let a=new Error("device.revoke: params.id required");throw a.code="invalid_params",a}let i=t.reason||"paused";if(!S_.has(i)){let a=new Error(`device.revoke: reason must be one of ${[...S_].join(", ")}`);throw a.code="invalid_params",a}let o=await r("device").where({id:n}).first(),s=await r("device").where({id:n}).update({active:!1,revoked_reason:i});if(s>0&&o){let{default:a}=await Promise.resolve().then(()=>(Gr(),rd));a.emit("device.revoked",{deviceId:o.id,nodeId:o.nodeId,reason:i})}return{revoked:s>0,reason:i}}),e.register("device.activate",async t=>{let{default:r}=await Promise.resolve().then(()=>(D(),G)),n=Number(t.id);if(!Number.isFinite(n)){let s=new Error("device.activate: params.id required");throw s.code="invalid_params",s}let i=await r("device").where({id:n}).first();if(!i)return{activated:!1,notFound:!0};if(i.revokedReason==="compromised"){let s=new Error(`device ${n} ("${i.name}") was revoked as compromised. Re-activation is blocked \u2014 the device must re-pair with a fresh code.`);throw s.code="compromised",s}return{activated:await r("device").where({id:n}).update({active:!0,revoked_reason:null})>0}})}var S_,I_=f(()=>{S_=new Set(["paused","compromised"])});function A_(e){e.register("trace.list",async(t={})=>{let{listTraces:r}=await Promise.resolve().then(()=>(Wt(),jt));return{traces:await r({kind:t.kind||null,namespace:t.namespace||null,before:t.before||null,limit:t.limit??50})}}),e.register("trace.get",async(t={})=>{if(!t.uid){let i=new Error("trace.get: params.uid is required");throw i.code="invalid_params",i}let{getTrace:r}=await Promise.resolve().then(()=>(Wt(),jt));return{trace:await r(t.uid)}}),e.register("trace.clear",async()=>{let{clearTraces:t}=await Promise.resolve().then(()=>(Wt(),jt));return t()})}var T_=f(()=>{});function C_(e,{startedAt:t}){ud(e,{startedAt:t}),Iy(e),Jy(e),Xy(e),Qy(e),iw(e),sw(e),cw(e),uw(e),pw(e),_w(e),bw(e),Sw(e),Kw(e),zw(e),Zw(e),e_(e),i_(e),l_(e),d_(e),y_(e),__(e),b_(e),v_(e),A_(e)}var $_=f(()=>{dd();Ay();zy();Zy();ew();ow();aw();lw();dw();fw();Ew();xw();vw();Yw();Xw();Qw();t_();o_();u_();p_();w_();E_();x_();I_();T_()});var O_={};T(O_,{installLiteProxy:()=>bD});async function bD({registry:e,log:t}){let{getMemoryClient:r}=await Promise.resolve().then(()=>(xi(),bi)),n=0,i=0;for(let o of _D)e.replace(o,async s=>(await r()).call(o,s))&&n++;for(let o of ED)e.replace(o,()=>{let a=new Error(`"${o}" is not available on a lite-follower device. Run on the master device.`);throw a.code="not_on_follower",a})&&i++;t(`lite-follower: ${n} methods proxied, ${i} forbidden, rest local`)}var _D,ED,R_=f(()=>{_D=new Set(["search","searchEntity","traverseGraph","getFactContext","getEntityContext","getPod","listPods","listFacts","status","refreshContext.fetch","refreshContext.explain","remember","forgetFact","ingestDoc"]),ED=new Set(["pair.create","pair.list","pair.revoke","pair.sweep","device.list","device.revoke","device.activate","runMigrations","testDbConnection"])});var L_={};T(L_,{startDaemon:()=>D_});import{createWriteStream as xD}from"node:fs";import{appendFile as SD}from"node:fs/promises";async function D_({foreground:e=!1}={}){delete process.env.SIGIL_AGENT,await Hu();let t=await Hr();t&&(process.stderr.write(`[sigild] already running (pid ${t})
|
|
661
|
+
`),process.exit(0));let r=ID();r(`starting (pid ${process.pid}, node ${process.version})`),await Mu();let n=Xu();ca(n),C_(n,{startedAt:N_});let i=await ed({registry:n,log:r}),{default:o}=await Promise.resolve().then(()=>(R(),X));o.network.mode!=="lite-follower"&&vD(r);let s=null;if(o.http.enabled)try{s=await sd({registry:n,log:r,config:o})}catch(c){r(`http server failed to start: ${c.message}`)}let a=!1;if(o.network.enabled)try{if(o.network.mode==="master"){let{registerProtocol:d}=await Promise.resolve().then(()=>(yt(),Kt)),{PAIR_ALPN:p,createPairAcceptor:u}=await Promise.resolve().then(()=>(ss(),$l)),{RPC_ALPN:m,createRpcAcceptor:g}=await Promise.resolve().then(()=>(yl(),kw));d(p,u({log:r})),d(m,g({registry:n,log:r})),r(`registered accept handlers: ${p}, ${m}`)}let{getNodeInfo:c}=await Promise.resolve().then(()=>(yt(),Kt)),l=await c();a=!0,r(`iroh node up: ${l.nodeId}`),l.relayUrl&&r(`iroh relay: ${l.relayUrl}`)}catch(c){r(`iroh failed to start: ${c.message}`)}else r(`iroh disabled (SIGIL_MODE=${o.network.mode})`);if(o.network.mode==="lite-follower")try{let{installLiteProxy:c}=await Promise.resolve().then(()=>(R_(),O_));await c({registry:n,log:r})}catch(c){r(`lite-proxy install failed: ${c.message}`)}Fu(async c=>{if(r(`received ${c}, shutting down`),await i.close(),s&&await s.close(),a)try{let{shutdownEndpoint:l}=await Promise.resolve().then(()=>(yt(),Kt));await l()}catch(l){r(`iroh shutdown failed: ${l.message}`)}try{let{default:l}=await Promise.resolve().then(()=>(D(),G));await l.destroy()}catch(l){r(`pool destroy failed: ${l.message}`)}await ea(),ua(),r("stopped")}),r(`ready in ${Date.now()-N_}ms \u2014 ${n.list().length} methods registered`),e&&process.stdout.write(`sigild ready
|
|
662
|
+
`)}async function vD(e){try{let{default:t}=await Promise.resolve().then(()=>(D(),G)),{setDbHealth:r}=await Promise.resolve().then(()=>(Kn(),da));try{await t.raw("SELECT 1"),r({healthy:!0,error:null,checkedAt:Date.now()})}catch(n){r({healthy:!1,error:n.message,checkedAt:Date.now()}),e(`DB UNREACHABLE: ${n.message} \u2014 memory operations will fail until Postgres is back`)}}catch{}}function ID(){let e;try{e=xD(pe,{flags:"a"})}catch{}return t=>{let r=`[${new Date().toISOString()}] ${t}
|
|
663
|
+
`;e?e.write(r):process.stderr.write(r)}}var N_,k_=f(()=>{B();Vn();Zu();Kn();td();ld();$_();N_=Date.now();import.meta.url===`file://${process.argv[1]}`&&D_({foreground:!0}).catch(async e=>{try{await SD(pe,`[fatal] ${e.stack||e.message}
|
|
664
|
+
`)}catch{}process.stderr.write(`[sigild] fatal: ${e.message}
|
|
665
|
+
`),process.exit(1)})});var G_={};T(G_,{runDaemon:()=>TD});import{existsSync as AD,createReadStream as P_}from"node:fs";import{stat as M_}from"node:fs/promises";import{setTimeout as Ol}from"node:timers/promises";async function TD(e){let[t,...r]=e;if(!t||t==="--help"||t==="-h"){console.log(F_);return}switch(t){case"start":return B_(r);case"stop":return U_(r);case"status":return CD(r);case"restart":return await U_(r),await Ol(200),B_(r);case"logs":return $D(r);case"open":return H_({launch:!0});case"url":return H_({launch:!1});default:console.error(`Unknown subcommand: daemon ${t}
|
|
666
|
+
`),console.log(F_),process.exit(1)}}async function H_({launch:e}){let t=await Tt({quiet:!0});await t.call("ping",{}),await t.close();let{default:r}=await Promise.resolve().then(()=>(R(),X)),{getGuiToken:n}=await Promise.resolve().then(()=>(Ki(),oa)),i=await n(),o=`http://${r.http.host}:${r.http.port}/?t=${i}`;if(console.log(o),!e)return;let s=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open",{spawn:a}=await import("node:child_process");a(s,[o],{detached:!0,stdio:"ignore"}).unref()}async function B_(e){let t=e.includes("--foreground")||e.includes("-f"),r=await Hr();if(r){console.log(`sigild already running (pid ${r})`);return}if(t){let{startDaemon:n}=await Promise.resolve().then(()=>(k_(),L_));await n({foreground:!0});return}await Tt({quiet:!0}).then(async n=>{let{data:i}=await n.call("ping",{});await n.close(),console.log(`sigild started (pid ${i.pid}, version ${i.version})`)})}async function U_(){let e=await ji();if(!e||!Fr(e)){console.log("sigild is not running");return}try{process.kill(e,"SIGTERM")}catch(r){console.error(`failed to signal pid ${e}: ${r.message}`),process.exit(1)}let t=Date.now()+5e3;for(;Date.now()<t&&Fr(e);)await Ol(50);if(Fr(e)){console.error(`sigild (pid ${e}) did not exit within 5s \u2014 sending SIGKILL`);try{process.kill(e,"SIGKILL")}catch{}}console.log("sigild stopped")}async function CD(){let e=await ji();if(!e||!Fr(e)){console.log("sigild: not running");return}try{let t=await Br({timeoutMs:2e3}),{data:r}=await t.call("ping",{});await t.close(),console.log("sigild: running"),console.log(` pid ${r.pid}`),console.log(` version ${r.version}`),console.log(` node ${r.node}`),console.log(` uptime ${Yu(r.uptimeMs)}`),console.log(` socket ${we}`)}catch(t){console.log(`sigild: pid ${e} alive but socket unresponsive (${t.message})`),process.exit(1)}}async function $D(e){let t=e.includes("--follow")||e.includes("-f");if(!AD(pe)){console.log(`(no log file yet at ${pe})`);return}if(await new Promise((n,i)=>{let o=P_(pe,{encoding:"utf8"});o.on("data",s=>process.stdout.write(s)),o.on("end",n),o.on("error",i)}),!t)return;let r=(await M_(pe)).size;for(;;){await Ol(250);let n=await M_(pe).catch(()=>null);if(!n||n.size===r)continue;let i=P_(pe,{encoding:"utf8",start:r,end:n.size-1});i.on("data",o=>process.stdout.write(o)),await new Promise((o,s)=>{i.on("end",o),i.on("error",s)}),r=n.size}}var F_,j_=f(()=>{B();Vn();na();Ne();qu();F_=`sigil daemon \u2014 control the Sigil daemon
|
|
667
|
+
|
|
668
|
+
Usage:
|
|
669
|
+
sigil daemon start [--foreground]
|
|
670
|
+
sigil daemon stop
|
|
671
|
+
sigil daemon status
|
|
672
|
+
sigil daemon restart
|
|
673
|
+
sigil daemon logs [--follow]
|
|
674
|
+
sigil daemon open Open the GUI in your browser
|
|
675
|
+
sigil daemon url Print the GUI URL (with auth token)
|
|
676
|
+
|
|
677
|
+
The daemon holds the Postgres pool, Iroh endpoint, and caches shared by
|
|
678
|
+
every CLI verb, MCP client, and hook on this machine. It auto-starts on
|
|
679
|
+
first use; you only need these commands for explicit lifecycle control.
|
|
680
|
+
|
|
681
|
+
Files:
|
|
682
|
+
${we} Unix socket
|
|
683
|
+
${It} PID file
|
|
684
|
+
${pe} Append-only log`});function as(e){let t={};for(let r=0;r<e.length;r++){let n=e[r];if(!n.startsWith("--"))continue;if(n.includes("=")){let[s,a]=n.slice(2).split(/=(.+)/);t[s]=a;continue}let i=n.slice(2),o=e[r+1];t[i]=o&&!o.startsWith("--")?e[++r]:!0}return t}var Rl=f(()=>{});var V_={};T(V_,{runPair:()=>OD});async function OD(e){let[t,...r]=e;if(!t||t==="--help"||t==="-h"){console.log(W_);return}switch(t){case"create":return RD(r);case"list":return ND(r);case"revoke":return DD(r);default:console.error(`Unknown subcommand: pair ${t}
|
|
685
|
+
`),console.log(W_),process.exit(1)}}async function RD(e){let t=as(e);t.name||(console.error("pair create: --name <device-name> is required"),process.exit(1));let r=await Tt();try{let{data:n}=await r.call("pair.create",{name:t.name,role:t.role||"writer",namespaces:t.ns?t.ns.split(",").map(i=>i.trim()).filter(Boolean):[],ttlSeconds:t.ttl?Number(t.ttl):void 0});console.log(`Pairing code created \u2014 share this with "${n.name}":`),console.log(""),console.log(` code: ${n.code}`),console.log(` master nodeId: ${n.masterNodeId||"(iroh not running)"}`),console.log(` role: ${n.role}`),console.log(` namespaces: ${n.namespaces.length?n.namespaces.join(", "):"(all)"}`),console.log(` expires at: ${n.expiresAt}`),console.log(""),console.log("On the joining device, run:"),console.log(` sigil join ${n.masterNodeId||"<master-node-id>"} ${n.code} --name ${n.name}`)}finally{await r.close()}}async function ND(){let e=await Tt();try{let{data:t}=await e.call("pair.list",{});if(!t.codes.length){console.log("No pairing codes outstanding.");return}for(let r of t.codes){let n=r.consumedBy?`consumed by ${r.consumedBy.name} (${r.consumedBy.nodeId.slice(0,12)}\u2026)`:r.expired?"EXPIRED":"pending";console.log(`${r.id} ${r.name} ${r.role} ${n} expires=${r.expiresAt}`)}}finally{await e.close()}}async function DD(e){let t=e[0];t||(console.error("pair revoke <id>"),process.exit(1));let r=await Tt();try{let{data:n}=await r.call("pair.revoke",{id:Number(t)});console.log(n.deleted?`Revoked pairing code ${t}.`:`No pairing code with id=${t}.`)}finally{await r.close()}}var W_,K_=f(()=>{Ne();Rl();W_=`sigil pair \u2014 create and manage device pairing codes
|
|
686
|
+
|
|
687
|
+
Usage:
|
|
688
|
+
sigil pair create --name <device-name> [--role <role>] [--ns ns1,ns2] [--ttl <seconds>]
|
|
689
|
+
sigil pair list
|
|
690
|
+
sigil pair revoke <id>
|
|
691
|
+
|
|
692
|
+
Roles:
|
|
693
|
+
reader \u2014 read-only access (search, status)
|
|
694
|
+
writer \u2014 read + write (remember, ingest) (default)
|
|
695
|
+
admin \u2014 full access including device management
|
|
696
|
+
|
|
697
|
+
The plaintext code is printed once at creation time and never stored.
|
|
698
|
+
Hand it to the device you want to pair, along with the master node id.`});var Y_={};T(Y_,{runJoin:()=>FD});import{hostname as LD}from"node:os";import{readFileSync as kD}from"node:fs";import{join as PD}from"node:path";async function FD(e){if(!e.length||e.includes("--help")||e.includes("-h")){console.log(MD);return}let t=e.filter(u=>!u.startsWith("--"));t.length<2&&(console.error("Usage: sigil join <master-node-id> <pairing-code> [options]"),process.exit(1));let[r,n]=t,i=as(e),o=i.name||LD(),s=i.addresses?i.addresses.split(",").map(u=>u.trim()):void 0,a=i.relay||void 0,c=!!i.lite;(process.env.SIGIL_MODE===void 0||process.env.SIGIL_MODE==="solo")&&(process.env.SIGIL_MODE=c?"lite-follower":"follower",process.env.SIGIL_NETWORK_ENABLED="true");let{joinMaster:l}=await Promise.resolve().then(()=>(ss(),$l)),d=HD();console.log(`[sigil] joining master ${r.slice(0,12)}\u2026`);let p=await l({masterAddr:{nodeId:r,relayUrl:a,addresses:s},code:n,name:o,sigilVersion:d});if(p.ok||(console.error(`Pairing rejected: ${p.error?.code} \u2014 ${p.error?.message}`),process.exit(1)),console.log("\u2713 paired successfully"),console.log(` device id: ${p.device.id}`),console.log(` role: ${p.device.role}`),console.log(` namespaces: ${(p.device.namespaces||[]).join(", ")||"(all)"}`),console.log(` master nodeId: ${p.masterNodeId}`),p.manifest){let{produceManifest:u,verifyManifest:m}=await Promise.resolve().then(()=>(Ai(),Ii)),g=await u(),y=m(g,p.manifest);if(y.warnings.length){console.log(`
|
|
699
|
+
Manifest warnings:`);for(let w of y.warnings)console.log(` \u26A0 ${w}`)}if(y.ok)console.log("\u2713 schema manifest matches master");else{console.error(`
|
|
700
|
+
Manifest errors:`);for(let w of y.errors)console.error(` \u2717 ${w}`);c?(console.error(`
|
|
701
|
+
Proceeding as lite-follower \u2014 manifest drift OK because lite-follower`),console.error("devices never store facts locally.")):(console.error(`
|
|
702
|
+
Follower mode requires a matching manifest. Either align the config on`),console.error("this device (embedding model/dim, chunker, migrations) or join as a"),console.error("lite-follower (which never stores facts locally): retry with --lite"),process.exit(1))}}try{let{connectOrStartDaemon:u}=await Promise.resolve().then(()=>(Ne(),nt)),m=await u({quiet:!0});await m.call("writeEnv",{patch:{SIGIL_MODE:c?"lite-follower":"follower",SIGIL_MASTER_NODE_ID:p.masterNodeId,SIGIL_NETWORK_ENABLED:"true"}}),await m.close(),console.log("\u2713 updated ~/.sigil/.env (SIGIL_MODE, SIGIL_MASTER_NODE_ID)")}catch(u){console.error(`(warning: failed to persist mode to .env: ${u.message})`)}}function HD(){try{return JSON.parse(kD(PD(ge,"package.json"),"utf8")).version}catch{return"unknown"}}var MD,q_=f(()=>{B();Rl();MD=`sigil join \u2014 pair this device with a Sigil master
|
|
703
|
+
|
|
704
|
+
Usage:
|
|
705
|
+
sigil join <master-node-id> <pairing-code> [--name <name>]
|
|
706
|
+
[--addresses host:port,host:port]
|
|
707
|
+
[--relay <url>]
|
|
708
|
+
[--lite]
|
|
709
|
+
|
|
710
|
+
The master prints both the node id and the pairing code when you run
|
|
711
|
+
\`sigil pair create\` on it.`});var Nl={};T(Nl,{validateConfig:()=>Z_,validateConfigDeep:()=>BD});function Z_(){let e=[];return UD(e),GD(e),jD(e),e}async function BD(){let e=Z_();if(E.db.type==="postgres"&&!e.some(t=>t.code.startsWith("DB_")))try{await(await Promise.resolve().then(()=>(D(),G))).default.raw("SELECT 1")}catch(t){e.push({level:"fail",code:"DB_UNREACHABLE",message:`Postgres at ${E.db.host}:${E.db.port}/${E.db.database} unreachable: ${t.message.split(`
|
|
712
|
+
`)[0]}`,fix:"Start Postgres (e.g. `docker start sigil-pg` or your equivalent) and verify SIGIL_DB_HOST/PORT/NAME/USER/PASSWORD in ~/.sigil/.env"})}return e}function UD(e){let{provider:t,model:r}=E.embedding;if(t&&r){let n=Object.keys(J_).find(i=>J_[i].some(o=>o.test(r)));n&&n!==t&&e.push({level:"fail",code:"EMBEDDING_PROVIDER_MODEL_MISMATCH",message:`EMBEDDING_PROVIDER=${t} but EMBEDDING_MODEL=${r} is a ${n} model.`,fix:WD(t,r,n)})}if(t&&X_[t]){let n=X_[t];E.embedding[n]||e.push({level:"fail",code:"EMBEDDING_PROVIDER_MISSING_KEY",message:`EMBEDDING_PROVIDER=${t} but no ${cs(n)} found.`,fix:`Set ${cs(n)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}}function GD(e){let{provider:t}=E.llm;if(t&&z_[t]){let r=z_[t];E.llm[r]||e.push({level:"fail",code:"LLM_PROVIDER_MISSING_KEY",message:`LLM_PROVIDER=${t} but no ${cs(r)} found.`,fix:`Set ${cs(r)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}t==="openrouter"&&E.llm.openrouterModel&&(E.llm.openrouterModel.includes("/")||e.push({level:"warn",code:"OPENROUTER_MODEL_FORMAT",message:`LLM_OPENROUTER_MODEL=${E.llm.openrouterModel} doesn't look like vendor/model format.`,fix:'Use format like "anthropic/claude-haiku-4-5" or "google/gemini-2.5-flash".'}))}function jD(e){E.db.type==="postgres"&&(!E.db.host||!E.db.database||!E.db.user)&&e.push({level:"fail",code:"DB_CONFIG_INCOMPLETE",message:"SIGIL_DB_TYPE=postgres but host/database/user missing.",fix:"Set SIGIL_DB_HOST, SIGIL_DB_NAME, SIGIL_DB_USER, SIGIL_DB_PASSWORD in ~/.sigil/.env. Run `sigil init` for an interactive setup."})}function cs(e){return{openaiApiKey:"OPENAI_API_KEY",apiKey:"ANTHROPIC_API_KEY",openrouterApiKey:"OPENROUTER_API_KEY",voyageApiKey:"VOYAGE_API_KEY"}[e]||e}function WD(e,t,r){let n={voyage:"voyage-3.5, voyage-3-large, voyage-code-3.5",openai:"text-embedding-3-large, text-embedding-3-small",ollama:"nomic-embed-text, mxbai-embed-large"}[e]||"(see provider docs)";return`Either set EMBEDDING_PROVIDER=${r} (matches your current model), or change EMBEDDING_MODEL to one of: ${n}`}var J_,z_,X_,Dl=f(()=>{R();J_={voyage:[/^voyage-/],openai:[/^text-embedding-/],ollama:[/^nomic-embed/,/^mxbai-embed/,/^all-minilm/,/^bge-/,/^snowflake-/,/^granite-embedding/]},z_={openai:"openaiApiKey",anthropic:"apiKey",openrouter:"openrouterApiKey"},X_={openai:"openaiApiKey",voyage:"voyageApiKey",openrouter:"openrouterApiKey"}});var Ci={};T(Ci,{HOOK_ERROR_LOG:()=>ls,LAST_CLEAN_DOCTOR_PATH:()=>us,clearLastCleanDoctor:()=>QD,failClosedOnBadConfig:()=>JD,getUnackedErrorCount:()=>XD,markDoctorClean:()=>ZD,readRecentHookErrors:()=>zD,recordHookError:()=>Q_});import{appendFile as VD,readFile as Ll,writeFile as KD,unlink as YD}from"node:fs/promises";import{createHash as qD}from"node:crypto";async function Q_(e,t,r=null){try{let n={ts:new Date().toISOString(),hook:e,error:gn(t?.message||String(t)),input_hash:r?eL(r):null};await VD(ls,JSON.stringify(n)+`
|
|
713
|
+
`,"utf8")}catch{}}async function JD(e,t=null){try{let{validateConfig:r}=await Promise.resolve().then(()=>(Dl(),Nl)),n=r().filter(i=>i.level==="fail");if(n.length===0)return!1;for(let i of n){let o=new Error(`${i.code}: ${i.message} \u2014 fix: ${i.fix}`);await Q_(e,o,t)}return!0}catch{return!1}}async function zD(e=10){let t;try{t=await Ll(ls,"utf8")}catch{return[]}let r=t.split(`
|
|
714
|
+
`).filter(Boolean),n=[];for(let i of r.slice(-e))try{n.push(JSON.parse(i))}catch{}return n}async function XD(){let e=0;try{let n=await Ll(us,"utf8");e=new Date(n.trim()).getTime()}catch{}let t;try{t=await Ll(ls,"utf8")}catch{return 0}let r=0;for(let n of t.split(`
|
|
715
|
+
`))if(n.trim())try{let i=JSON.parse(n);(i.ts?new Date(i.ts).getTime():0)>e&&(r+=1)}catch{}return r}async function ZD(){try{await KD(us,new Date().toISOString(),"utf8")}catch{}}async function QD(){try{await YD(us)}catch{}}function eL(e){try{let t=typeof e=="string"?e:JSON.stringify(e);return qD("sha256").update(t).digest("hex").slice(0,12)}catch{return null}}var ls,us,$i=f(()=>{B();Uo();ls=Js,us=zs});var eE,tE,rE,nE=f(()=>{eE=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let r=0;for(e.lastIndex=0;e.test(t);)r+=1;return t.length-r}})(),tE=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,rE=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141});var tL,rL,iE,nL,oE,iL,oL,sL,sE,aE,cE=f(()=>{nE();tL=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,rL=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,iE=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,nL=/\t{1,1000}/y,oE=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),iL=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,oL=new RegExp("\\p{M}+","gu"),sL={limit:1/0,ellipsis:""},sE=(e,t={},r={})=>{let n=t.limit??1/0,i=t.ellipsis??"",o=t?.ellipsisWidth??(i?sE(i,sL,r).width:0),s=0,a=r.controlWidth??0,c=r.tabWidth??8,l=r.emojiWidth??2,d=2,p=r.regularWidth??1,u=r.wideWidth??d,m=[[iL,p],[tL,s],[rL,a],[nL,c],[oE,l],[iE,u]],g=0,y=0,w=e.length,x=0,b=!1,A=w,v=Math.max(0,n-o),S=0,C=0,O=0,M=0;e:for(;;){if(C>S||y>=w&&y>g){let F=e.slice(S,C)||e.slice(g,y);x=0;for(let q of F.replaceAll(oL,"")){let P=q.codePointAt(0)||0;if(tE(P)?M=d:rE(P)?M=u:M=p,O+M>v&&(A=Math.min(A,Math.max(S,g)+x)),O+M>n){b=!0;break e}x+=q.length,O+=M}S=C=0}if(y>=w)break e;for(let F=0,q=m.length;F<q;F++){let[P,Q]=m[F];if(P.lastIndex=y,P.test(e)){if(x=P===iE?eE(e.slice(y,P.lastIndex)):P===oE?1:P.lastIndex-y,M=x*Q,O+M>v&&(A=Math.min(A,y+Math.floor((v-O)/Q))),O+M>n){b=!0;break e}O+=M,S=g,C=y,y=g=P.lastIndex;continue e}}y+=1}return{width:b?v:O,index:b?A:w,truncated:b,ellipsed:b&&n>=o}},aE=sE});var aL,cL,se,kl=f(()=>{cE();aL={limit:1/0,ellipsis:"",ellipsisWidth:0},cL=(e,t={})=>aE(e,aL,t).width,se=cL});function et(e,t,r){return String(e).normalize().split(fL).map(n=>pL(n,t,r)).join(`
|
|
716
|
+
`)}var ds,fE,lL,Ml,mE,uL,hE,Fl,lE,uE,dE,pE,Pl,dL,pL,fL,Hl=f(()=>{kl();ds="\x1B",fE="\x9B",lL=39,Ml="\x07",mE="[",uL="]",hE="m",Fl=`${uL}8;;`,lE=new RegExp(`(?:\\${mE}(?<code>\\d+)m|\\${Fl}(?<uri>.*)${Ml})`,"y"),uE=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},dE=e=>`${ds}${mE}${e}${hE}`,pE=e=>`${ds}${Fl}${e}${Ml}`,Pl=(e,t,r)=>{let n=t[Symbol.iterator](),i=!1,o=!1,s=e.at(-1),a=s===void 0?0:se(s),c=n.next(),l=n.next(),d=0;for(;!c.done;){let p=c.value,u=se(p);a+u<=r?e[e.length-1]+=p:(e.push(p),a=0),(p===ds||p===fE)&&(i=!0,o=t.startsWith(Fl,d+1)),i?o?p===Ml&&(i=!1,o=!1):p===hE&&(i=!1):(a+=u,a===r&&!l.done&&(e.push(""),a=0)),c=l,l=n.next(),d+=p.length}s=e.at(-1),!a&&s!==void 0&&s.length&&e.length>1&&(e[e.length-2]+=e.pop())},dL=e=>{let t=e.split(" "),r=t.length;for(;r&&!se(t[r-1]);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},pL=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=e.split(" "),a=[""],c=0;for(let p=0;p<s.length;p++){let u=s[p];if(r.trim!==!1){let g=a.at(-1)??"",y=g.trimStart();g.length!==y.length&&(a[a.length-1]=y,c=se(y))}p!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c||r.trim===!1)&&(a[a.length-1]+=" ",c++));let m=se(u);if(r.hard&&m>t){let g=t-c,y=1+Math.floor((m-g-1)/t);Math.floor((m-1)/t)<y&&a.push(""),Pl(a,u,t),c=se(a.at(-1)??"");continue}if(c+m>t&&c&&m){if(r.wordWrap===!1&&c<t){Pl(a,u,t),c=se(a.at(-1)??"");continue}a.push(""),c=0}if(c+m>t&&r.wordWrap===!1){Pl(a,u,t),c=se(a.at(-1)??"");continue}a[a.length-1]+=u,c+=m}r.trim!==!1&&(a=a.map(p=>dL(p)));let l=a.join(`
|
|
717
|
+
`),d=!1;for(let p=0;p<l.length;p++){let u=l[p];if(n+=u,d)d=!1;else if(d=u>="\uD800"&&u<="\uDBFF",d)continue;if(u===ds||u===fE){lE.lastIndex=p+1;let g=lE.exec(l)?.groups;if(g?.code!==void 0){let y=Number.parseFloat(g.code);i=y===lL?void 0:y}else g?.uri!==void 0&&(o=g.uri.length===0?void 0:g.uri)}if(l[p+1]===`
|
|
718
|
+
`){o&&(n+=pE(""));let m=i?uE(i):void 0;i&&m&&(n+=dE(m))}else u===`
|
|
719
|
+
`&&(i&&uE(i)&&(n+=dE(i)),o&&(n+=pE(o)))}return n},fL=/\r?\n/});var Ul=he((zJ,gE)=>{"use strict";var Bl={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let r="";return e<0?r+=`\x1B[${-e}D`:e>0&&(r+=`\x1B[${e}C`),t<0?r+=`\x1B[${-t}A`:t>0&&(r+=`\x1B[${t}B`),r},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},mL={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},hL={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let r=0;r<e;r++)t+=this.line+(r<e-1?Bl.up():"");return e&&(t+=Bl.left),t}};gE.exports={cursor:Bl,scroll:mL,erase:hL,beep:"\x07"}});import{styleText as Dn}from"node:util";import{stdout as Vl,stdin as EE}from"node:process";import*as zt from"node:readline";import gL from"node:readline";import{ReadStream as yE}from"node:tty";function _t(e,t,r){if(!r.some(s=>!s.disabled))return e;let n=e+t,i=Math.max(r.length-1,0),o=n<0?i:n>i?0:n;return r[o].disabled?_t(o,t<0?-1:1,r):o}function ps(e,t,r,n){let i=n.split(`
|
|
720
|
+
`),o=0,s=e;for(let c of i){if(s<=c.length)break;s-=c.length+1,o++}for(o=Math.max(0,Math.min(i.length-1,o+r)),s=Math.min(s,i[o].length)+t;s<0&&o>0;)o--,s+=i[o].length+1;for(;s>i[o].length&&o<i.length-1;)s-=i[o].length+1,o++;s=Math.max(0,Math.min(i[o].length,s));let a=0;for(let c=0;c<o;c++)a+=i[c].length+1;return a+s}function bE(e){if(e.aliases!==void 0){let t=e.aliases;for(let r in t){if(!Object.hasOwn(t,r))continue;let n=t[r];L.actions.has(n)&&(L.aliases.has(r)||L.aliases.set(r,n))}}if(e.messages!==void 0){let t=e.messages;t.cancel!==void 0&&(L.messages.cancel=t.cancel),t.error!==void 0&&(L.messages.error=t.error)}if(e.withGuide!==void 0&&(L.withGuide=e.withGuide!==!1),e.date!==void 0){let t=e.date;t.monthNames!==void 0&&(L.date.monthNames=[...t.monthNames]),t.messages!==void 0&&(t.messages.required!==void 0&&(L.date.messages.required=t.messages.required),t.messages.invalidMonth!==void 0&&(L.date.messages.invalidMonth=t.messages.invalidMonth),t.messages.invalidDay!==void 0&&(L.date.messages.invalidDay=t.messages.invalidDay),t.messages.afterMin!==void 0&&(L.date.messages.afterMin=t.messages.afterMin),t.messages.beforeMax!==void 0&&(L.date.messages.beforeMax=t.messages.beforeMax))}}function Kl(e,t){if(typeof e=="string")return L.aliases.get(e)===t;for(let r of e)if(r!==void 0&&Kl(r,t))return!0;return!1}function _L(e,t){if(e===t)return;let r=e.split(`
|
|
721
|
+
`),n=t.split(`
|
|
722
|
+
`),i=Math.max(r.length,n.length),o=[];for(let s=0;s<i;s++)r[s]!==n[s]&&o.push(s);return{lines:o,numLinesBefore:r.length,numLinesAfter:n.length,numLines:i}}function Ss(e){return e===jl}function fs(e,t){let r=e;r.isTTY&&r.setRawMode(t)}function xE({input:e=EE,output:t=Vl,overwrite:r=!0,hideCursor:n=!0}={}){let i=zt.createInterface({input:e,output:t,prompt:"",tabSize:1});zt.emitKeypressEvents(e,i),e instanceof yE&&e.isTTY&&e.setRawMode(!0);let o=(s,{name:a,sequence:c})=>{let l=String(s);if(Kl([l,a,c],"cancel")){n&&t.write(me.cursor.show),process.exit(0);return}if(!r)return;zt.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{zt.clearLine(t,1,()=>{e.once("keypress",o)})})};return n&&t.write(me.cursor.hide),e.once("keypress",o),()=>{e.off("keypress",o),n&&t.write(me.cursor.show),e instanceof yE&&e.isTTY&&!EL&&e.setRawMode(!1),i.terminal=!1,i.close()}}function re(e,t,r,n=r,i=r,o){let s=Er(e??Vl);return et(t,s-r.length,{hard:!0,trim:!1}).split(`
|
|
723
|
+
`).map((a,c,l)=>{let d=o?o(a,c):a;return c===0?`${n}${d}`:c===l.length-1?`${i}${d}`:`${r}${d}`}).join(`
|
|
724
|
+
`)}function bL(e,t){if(e===void 0||t.length===0)return 0;let r=t.findIndex(n=>n.value===e);return r!==-1?r:0}function xL(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function SL(e,t){if(t)return e?t:t[0]}function wE(e){return[...e].map(t=>vL[t])}function IL(e){let t=new Intl.DateTimeFormat(e,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2e3,0,15)),r=[],n="/";for(let i of t)i.type==="literal"?n=i.value.trim()||i.value:(i.type==="year"||i.type==="month"||i.type==="day")&&r.push({type:i.type,len:i.type==="year"?4:2});return{segments:r,separator:n}}function Gl(e){return Number.parseInt((e||"0").replace(/_/g,"0"),10)||0}function ms(e){return{year:Gl(e.year),month:Gl(e.month),day:Gl(e.day)}}function Wl(e,t){return new Date(e||2001,t||1,0).getDate()}function SE(e){let{year:t,month:r,day:n}=ms(e);if(!t||t<0||t>9999||!r||r<1||r>12||!n||n<1)return;let i=new Date(Date.UTC(t,r-1,n));if(!(i.getUTCFullYear()!==t||i.getUTCMonth()!==r-1||i.getUTCDate()!==n))return{year:t,month:r,day:n}}function _E(e){let t=SE(e);return t?new Date(Date.UTC(t.year,t.month-1,t.day)):void 0}function AL(e,t,r,n){let i=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null,o=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null;return e==="year"?{min:i?.year??1,max:o?.year??9999}:e==="month"?{min:i&&t.year===i.year?i.month:1,max:o&&t.year===o.year?o.month:12}:{min:i&&t.year===i.year&&t.month===i.month?i.day:1,max:o&&t.year===o.year&&t.month===o.month?o.day:Wl(t.year,t.month)}}var me,yL,wL,L,EL,jl,Er,Yl,dt,ql,hs,vL,gs,ys,ws,vE,_s,Es,bs,xs,Jl=f(()=>{Hl();me=Ys(Ul(),1);yL=["up","down","left","right","space","enter","cancel"],wL=["January","February","March","April","May","June","July","August","September","October","November","December"],L={actions:new Set(yL),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...wL],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};EL=globalThis.process.platform.startsWith("win"),jl=Symbol("clack:cancel");Er=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Yl=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;dt=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:r=EE,output:n=Vl,render:i,signal:o,...s}=e;this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=o,this.input=r,this.output=n}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let r=this._subscribers.get(e)??[];r.push(t),this._subscribers.set(e,r)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let r=this._subscribers.get(e)??[],n=[];for(let i of r)i.cb(...t),i.once&&n.push(()=>r.splice(r.indexOf(i),1));for(let i of n)i()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(jl);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=gL.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),fs(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(me.cursor.show),this.output.off("resize",this.render),fs(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(me.cursor.show),this.output.off("resize",this.render),fs(this.input,!1),e(jl)})})}_isActionKey(e,t){return e===" "}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&L.aliases.has(t.name)&&this.emit("cursor",L.aliases.get(t.name)),L.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"&&this._shouldSubmit(e,t)){if(this.opts.validate){let r=this.opts.validate(this.value);r&&(this.error=r instanceof Error?r.message:r,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Kl([e,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
725
|
+
`),fs(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=et(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
726
|
+
`).length-1;this.output.write(me.cursor.move(-999,e*-1))}render(){let e=et(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(me.cursor.hide);else{let t=_L(this._prevFrame,e),r=Yl(this.output);if(this.restoreCursor(),t){let n=Math.max(0,t.numLinesAfter-r),i=Math.max(0,t.numLinesBefore-r),o=t.lines.find(s=>s>=n);if(o===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(me.cursor.move(0,o-i)),this.output.write(me.erase.lines(1));let s=e.split(`
|
|
727
|
+
`);this.output.write(s[o]),this._prevFrame=e,this.output.write(me.cursor.move(0,s.length-o-1));return}else if(t.lines.length>1){if(n<i)o=n;else{let a=o-i;a>0&&this.output.write(me.cursor.move(0,a))}this.output.write(me.erase.down());let s=e.split(`
|
|
728
|
+
`).slice(o);this.output.write(s.join(`
|
|
729
|
+
`)),this._prevFrame=e;return}}this.output.write(me.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};ql=class extends dt{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#t=0;#n="";#e;#o;#a;get cursor(){return this.#t}get userInputWithCursor(){if(!this.userInput)return Dn(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let e=this.userInput.slice(0,this._cursor),[t,...r]=this.userInput.slice(this._cursor);return`${e}${Dn("inverse",t)}${r.join("")}`}get options(){return typeof this.#o=="function"?this.#o():this.#o}constructor(e){super(e),this.#o=e.options,this.#a=e.placeholder;let t=this.options;this.filteredOptions=[...t],this.multiple=e.multiple===!0,this.#e=typeof e.options=="function"?e.filter:e.filter??xL;let r;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?r=e.initialValue:r=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(r=[this.options[0].value]),r)for(let n of r){let i=t.findIndex(o=>o.value===n);i!==-1&&(this.toggleSelected(n),this.#t=i)}this.focusedValue=this.options[this.#t]?.value,this.on("key",(n,i)=>this.#r(n,i)),this.on("userInput",n=>this.#i(n))}_isActionKey(e,t){return e===" "||this.multiple&&this.isNavigating&&t.name==="space"&&e!==void 0&&e!==""}#r(e,t){let r=t.name==="up",n=t.name==="down",i=t.name==="return",o=this.userInput===""||this.userInput===" ",s=this.#a,a=this.options,c=s!==void 0&&s!==""&&a.some(l=>!l.disabled&&(this.#e?this.#e(s,l):!0));if(t.name==="tab"&&o&&c){this.userInput===" "&&this._clearUserInput(),this._setUserInput(s,!0),this.isNavigating=!1;return}r||n?(this.#t=_t(this.#t,r?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#t]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):i?this.value=SL(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(t.name==="tab"||this.isNavigating&&t.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter(t=>t!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#i(e){if(e!==this.#n){this.#n=e;let t=this.options;e&&this.#e?this.filteredOptions=t.filter(i=>this.#e?.(e,i)):this.filteredOptions=[...t];let r=bL(this.focusedValue,this.filteredOptions);this.#t=_t(r,0,this.filteredOptions);let n=this.filteredOptions[this.#t];n&&!n.disabled?this.focusedValue=n.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},hs=class extends dt{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(me.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},vL={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};gs=class extends dt{#t;#n;#e;#o;#a;#r={segmentIndex:0,positionInSegment:0};#i=!0;#s=null;inlineError="";get segmentCursor(){return{...this.#r}}get segmentValues(){return{...this.#e}}get segments(){return this.#t}get separator(){return this.#n}get formattedValue(){return this.#d(this.#e)}#d(t){return this.#t.map(r=>t[r.type]).join(this.#n)}#c(){this._setUserInput(this.#d(this.#e)),this._setValue(_E(this.#e)??void 0)}constructor(t){let r=t.format?{segments:wE(t.format),separator:t.separator??"/"}:IL(t.locale),n=t.separator??r.separator,i=t.format?wE(t.format):r.segments,o=t.initialValue??t.defaultValue,s=o?{year:String(o.getUTCFullYear()).padStart(4,"0"),month:String(o.getUTCMonth()+1).padStart(2,"0"),day:String(o.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=i.map(c=>s[c.type]).join(n);super({...t,initialUserInput:a},!1),this.#t=i,this.#n=n,this.#e=s,this.#o=t.minDate,this.#a=t.maxDate,this.#c(),this.on("cursor",c=>this.#m(c)),this.on("key",(c,l)=>this.#h(c,l)),this.on("finalize",()=>this.#g(t))}#l(){let t=Math.max(0,Math.min(this.#r.segmentIndex,this.#t.length-1)),r=this.#t[t];if(r)return this.#r.positionInSegment=Math.max(0,Math.min(this.#r.positionInSegment,r.len-1)),{segment:r,index:t}}#u(t){this.inlineError="",this.#s=null;let r=this.#l();r&&(this.#r.segmentIndex=Math.max(0,Math.min(this.#t.length-1,r.index+t)),this.#r.positionInSegment=0,this.#i=!0)}#p(t){let r=this.#l();if(!r)return;let{segment:n}=r,i=this.#e[n.type],o=!i||i.replace(/_/g,"")==="",s=Number.parseInt((i||"0").replace(/_/g,"0"),10)||0,a=AL(n.type,ms(this.#e),this.#o,this.#a),c;o?c=t===1?a.min:a.max:c=Math.max(Math.min(a.max,s+t),a.min),this.#e={...this.#e,[n.type]:c.toString().padStart(n.len,"0")},this.#i=!0,this.#s=null,this.#c()}#m(t){if(t)switch(t){case"right":return this.#u(1);case"left":return this.#u(-1);case"up":return this.#p(1);case"down":return this.#p(-1)}}#h(t,r){if(r?.name==="backspace"||r?.sequence==="\x7F"||r?.sequence==="\b"||t==="\x7F"||t==="\b"){this.inlineError="";let n=this.#l();if(!n)return;if(!this.#e[n.segment.type].replace(/_/g,"")){this.#u(-1);return}this.#e[n.segment.type]="_".repeat(n.segment.len),this.#i=!0,this.#r.positionInSegment=0,this.#c();return}if(r?.name==="tab"){this.inlineError="";let n=this.#l();if(!n)return;let i=r.shift?-1:1,o=n.index+i;o>=0&&o<this.#t.length&&(this.#r.segmentIndex=o,this.#r.positionInSegment=0,this.#i=!0);return}if(t&&/^[0-9]$/.test(t)){let n=this.#l();if(!n)return;let{segment:i}=n,o=!this.#e[i.type].replace(/_/g,"");if(this.#i&&this.#s!==null&&!o){let m=this.#s+t,g={...this.#e,[i.type]:m},y=this.#f(g,i);if(y){this.inlineError=y,this.#s=null,this.#i=!1;return}this.inlineError="",this.#e[i.type]=m,this.#s=null,this.#i=!1,this.#c(),n.index<this.#t.length-1&&(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0);return}this.#i&&!o&&(this.#e[i.type]="_".repeat(i.len),this.#r.positionInSegment=0),this.#i=!1,this.#s=null;let s=this.#e[i.type],a=s.indexOf("_"),c=a>=0?a:Math.min(this.#r.positionInSegment,i.len-1);if(c<0||c>=i.len)return;let l=s.slice(0,c)+t+s.slice(c+1),d=!1;if(c===0&&s==="__"&&(i.type==="month"||i.type==="day")){let m=Number.parseInt(t,10);l=`0${t}`,d=m<=(i.type==="month"?1:2)}if(i.type==="year"&&(l=(s.replace(/_/g,"")+t).padStart(i.len,"_")),!l.includes("_")){let m={...this.#e,[i.type]:l},g=this.#f(m,i);if(g){this.inlineError=g;return}}this.inlineError="",this.#e[i.type]=l;let p=l.includes("_")?void 0:SE(this.#e);if(p){let{year:m,month:g}=p,y=Wl(m,g);this.#e={year:String(Math.max(0,Math.min(9999,m))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,g))).padStart(2,"0"),day:String(Math.max(1,Math.min(y,p.day))).padStart(2,"0")}}this.#c();let u=l.indexOf("_");d?(this.#i=!0,this.#s=t):u>=0?this.#r.positionInSegment=u:a>=0&&n.index<this.#t.length-1?(this.#r.segmentIndex=n.index+1,this.#r.positionInSegment=0,this.#i=!0):this.#r.positionInSegment=Math.min(c+1,i.len-1)}}#f(t,r){let{month:n,day:i}=ms(t);if(r.type==="month"&&(n<0||n>12))return L.date.messages.invalidMonth;if(r.type==="day"&&(i<0||i>31))return L.date.messages.invalidDay(31,"any month")}#g(t){let{year:r,month:n,day:i}=ms(this.#e);if(r&&n&&i){let o=Wl(r,n);this.#e={...this.#e,day:String(Math.min(i,o)).padStart(2,"0")}}this.value=_E(this.#e)??t.defaultValue??void 0}},ys=class extends dt{options;cursor=0;#t;getGroupItems(t){return this.options.filter(r=>r.group===t)}isGroupSelected(t){let r=this.getGroupItems(t),n=this.value;return n===void 0?!1:r.every(i=>n.includes(i.value))}toggleValue(){let t=this.options[this.cursor];if(this.value===void 0&&(this.value=[]),t.group===!0){let r=t.value,n=this.getGroupItems(r);this.isGroupSelected(r)?this.value=this.value.filter(i=>n.findIndex(o=>o.value===i)===-1):this.value=[...this.value,...n.map(i=>i.value)],this.value=Array.from(new Set(this.value))}else{let r=this.value.includes(t.value);this.value=r?this.value.filter(n=>n!==t.value):[...this.value,t.value]}}constructor(t){super(t,!1);let{options:r}=t;this.#t=t.selectableGroups!==!1,this.options=Object.entries(r).flatMap(([n,i])=>[{value:n,group:!0,label:n},...i.map(o=>({...o,group:n}))]),this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:n})=>n===t.cursorAt),this.#t?0:1),this.on("cursor",n=>{switch(n){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let i=this.options[this.cursor]?.group===!0;!this.#t&&i&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let i=this.options[this.cursor]?.group===!0;!this.#t&&i&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},ws=class extends dt{#t=!1;#n;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${t}\u2588`;let r=t.slice(0,this.cursor),n=t[this.cursor],i=t.slice(this.cursor+1);return n===`
|
|
730
|
+
`?`${r}\u2588
|
|
731
|
+
${i}`:`${r}${Dn("inverse",n)}${i}`}get cursor(){return this._cursor}#e(t){if(this.userInput.length===0){this._setUserInput(t);return}this._setUserInput(this.userInput.slice(0,this.cursor)+t+this.userInput.slice(this.cursor))}#o(t){let r=this.value??"";switch(t){case"up":this._cursor=ps(this._cursor,0,-1,r);return;case"down":this._cursor=ps(this._cursor,0,1,r);return;case"left":this._cursor=ps(this._cursor,-1,0,r);return;case"right":this._cursor=ps(this._cursor,1,0,r);return}}_shouldSubmit(t,r){if(this.#n)return this.focused==="submit"?!0:(this.#e(`
|
|
732
|
+
`),this._cursor++,!1);let n=this.#t;return this.#t=!0,n?(this.userInput[this.cursor-1]===`
|
|
733
|
+
`&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#e(`
|
|
734
|
+
`),this._cursor++,!1)}constructor(t){super(t,!1),this.#n=t.showSubmit??!1,this.on("key",(r,n)=>{if(n?.name&&L.actions.has(n.name)){this.#o(n.name);return}if(r===" "&&this.#n){this.focused=this.focused==="editor"?"submit":"editor";return}if(n?.name!=="return"){if(this.#t=!1,n?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(n?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}r&&(this.#n&&this.focused==="submit"&&(this.focused="editor"),this.#e(r??""),this._cursor++)}}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}},vE=class extends dt{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,t=this.value!==void 0&&this.value.length===e.length;this.value=t?[]:e.map(r=>r.value)}toggleInvert(){let e=this.value;if(!e)return;let t=this._enabledOptions.filter(r=>!e.includes(r.value));this.value=t.map(r=>r.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(t=>t!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let t=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),0);this.cursor=this.options[t].disabled?_t(t,1,this.options):t,this.on("key",r=>{r==="a"&&this.toggleAll(),r==="i"&&this.toggleInvert()}),this.on("cursor",r=>{switch(r){case"left":case"up":this.cursor=_t(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_t(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},_s=class extends dt{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let t=this.userInput;if(this.cursor>=t.length)return`${this.masked}${Dn(["inverse","hidden"],"_")}`;let r=this.masked,n=r.slice(0,this.cursor),i=r.slice(this.cursor);return`${n}${Dn("inverse",i[0])}${i.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:t,...r}){super(r),this._mask=t??"\u2022",this.on("userInput",n=>{this._setValue(n)})}},Es=class extends dt{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let r=this.options.findIndex(({value:i})=>i===t.initialValue),n=r===-1?0:r;this.cursor=this.options[n].disabled?_t(n,1,this.options):n,this.changeValue(),this.on("cursor",i=>{switch(i){case"left":case"up":this.cursor=_t(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_t(this.cursor,1,this.options);break}this.changeValue()})}},bs=class extends dt{options;cursor=0;constructor(t){super(t,!1),this.options=t.options;let r=t.caseSensitive===!0,n=this.options.map(({value:[i]})=>r?i:i?.toLowerCase());this.cursor=Math.max(n.indexOf(t.initialValue),0),this.on("key",(i,o)=>{if(!i)return;let s=r&&o.shift?i.toUpperCase():i;if(!n.includes(s))return;let a=this.options.find(({value:[c]})=>r?c===s:c?.toLowerCase()===i);a&&(this.value=a.value,this.state="submit",this.emit("submit"))})}},xs=class extends dt{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let r=t.slice(0,this.cursor),[n,...i]=t.slice(this.cursor);return`${r}${Dn("inverse",n)}${i.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}});var Cs={};T(Cs,{S_BAR:()=>I,S_BAR_END:()=>Z,S_BAR_END_RIGHT:()=>kE,S_BAR_H:()=>Ts,S_BAR_START:()=>eu,S_BAR_START_RIGHT:()=>LE,S_CHECKBOX_ACTIVE:()=>As,S_CHECKBOX_INACTIVE:()=>kn,S_CHECKBOX_SELECTED:()=>xr,S_CONNECT_LEFT:()=>ME,S_CORNER_BOTTOM_LEFT:()=>nu,S_CORNER_BOTTOM_RIGHT:()=>ru,S_CORNER_TOP_LEFT:()=>FE,S_CORNER_TOP_RIGHT:()=>tu,S_ERROR:()=>au,S_INFO:()=>iu,S_PASSWORD_MASK:()=>PE,S_RADIO_ACTIVE:()=>Ri,S_RADIO_INACTIVE:()=>Sr,S_STEP_ACTIVE:()=>DE,S_STEP_CANCEL:()=>Zl,S_STEP_ERROR:()=>Ql,S_STEP_SUBMIT:()=>vr,S_SUCCESS:()=>ou,S_WARN:()=>su,autocomplete:()=>BE,autocompleteMultiselect:()=>NL,box:()=>PL,cancel:()=>WL,confirm:()=>ML,date:()=>FL,group:()=>GL,groupMultiselect:()=>jL,intro:()=>VL,isCI:()=>Xl,isCancel:()=>Ss,isTTY:()=>NE,limitOptions:()=>Xt,log:()=>Ce,multiline:()=>YL,multiselect:()=>qL,note:()=>XL,outro:()=>KL,password:()=>ZL,path:()=>QL,progress:()=>tk,select:()=>rk,selectKey:()=>nk,settings:()=>L,spinner:()=>lu,stream:()=>br,symbol:()=>$e,symbolBar:()=>cu,taskLog:()=>sk,tasks:()=>ik,text:()=>ak,unicode:()=>Is,unicodeOr:()=>U,updateSettings:()=>bE});import{styleText as h,stripVTControlCharacters as zl}from"node:util";import Le from"node:process";import{existsSync as TL,lstatSync as IE,readdirSync as CL}from"node:fs";import{dirname as AE,join as $L}from"node:path";function OL(){return Le.platform!=="win32"?Le.env.TERM!=="linux":!!Le.env.CI||!!Le.env.WT_SESSION||!!Le.env.TERMINUS_SUBLIME||Le.env.ConEmuTask==="{cmd::Cmder}"||Le.env.TERM_PROGRAM==="Terminus-Sublime"||Le.env.TERM_PROGRAM==="vscode"||Le.env.TERM==="xterm-256color"||Le.env.TERM==="alacritty"||Le.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function CE(e){return e.label??String(e.value??"")}function HE(e,t){if(!e)return!0;let r=(t.label??String(t.value??"")).toLowerCase(),n=(t.hint??"").toLowerCase(),i=String(t.value).toLowerCase(),o=e.toLowerCase();return r.includes(o)||n.includes(o)||i.includes(o)}function RL(e,t){let r=[];for(let n of t)e.includes(n.value)&&r.push(n);return r}function $E(e,t,r,n){let i=r,o=r;return n==="center"?i=Math.floor((t-e)/2):n==="right"&&(i=t-e-r),o=t-i-e,[i,o]}function HL(e,t){let r=e.segmentValues,n=e.segmentCursor;if(t==="submit"||t==="cancel")return e.formattedValue;let i=h("gray",e.separator);return e.segments.map((o,s)=>{let a=s===n.segmentIndex&&!["submit","cancel"].includes(t),c=UL[o.type];return BL(r[o.type],{isActive:a,label:c})}).join(i)}function BL(e,t){let r=!e||e.replace(/_/g,"")==="";return t.isActive?h("inverse",r?t.label:e.replace(/_/g," ")):r?h("dim",t.label):e.replace(/_/g,h("dim"," "))}function tk({style:e="heavy",max:t=100,size:r=40,...n}={}){let i=lu(n),o=0,s="",a=Math.max(1,t),c=Math.max(1,r),l=m=>{switch(m){case"initial":case"active":return g=>h("magenta",g);case"error":case"cancel":return g=>h("red",g);case"submit":return g=>h("green",g);default:return g=>h("magenta",g)}},d=(m,g)=>{let y=Math.floor(o/a*c);return`${l(m)(OE[e].repeat(y))}${h("dim",OE[e].repeat(c-y))} ${g}`},p=(m="")=>{s=m,i.start(d("initial",m))},u=(m=1,g)=>{o=Math.min(a,m+o),i.message(d("active",g??s)),s=g??s};return{start:p,stop:i.stop,cancel:i.cancel,error:i.error,clear:i.clear,advance:u,isCancelled:i.isCancelled,message:m=>u(0,m)}}var Ln,Is,Xl,NE,U,DE,Zl,Ql,vr,eu,I,Z,LE,kE,Ri,Sr,As,xr,kn,PE,Ts,tu,ME,ru,nu,FE,iu,ou,su,au,$e,cu,TE,Xt,BE,NL,DL,LL,kL,PL,ML,FL,UL,GL,jL,Ce,WL,VL,KL,YL,Oi,qL,JL,zL,XL,ZL,QL,ek,lu,OE,vs,rk,nk,RE,br,ik,ok,sk,ak,$s=f(()=>{Jl();Jl();Hl();kl();Ln=Ys(Ul(),1);Is=OL(),Xl=()=>process.env.CI==="true",NE=e=>e.isTTY===!0,U=(e,t)=>Is?e:t,DE=U("\u25C6","*"),Zl=U("\u25A0","x"),Ql=U("\u25B2","x"),vr=U("\u25C7","o"),eu=U("\u250C","T"),I=U("\u2502","|"),Z=U("\u2514","\u2014"),LE=U("\u2510","T"),kE=U("\u2518","\u2014"),Ri=U("\u25CF",">"),Sr=U("\u25CB"," "),As=U("\u25FB","[\u2022]"),xr=U("\u25FC","[+]"),kn=U("\u25FB","[ ]"),PE=U("\u25AA","\u2022"),Ts=U("\u2500","-"),tu=U("\u256E","+"),ME=U("\u251C","+"),ru=U("\u256F","+"),nu=U("\u2570","+"),FE=U("\u256D","+"),iu=U("\u25CF","\u2022"),ou=U("\u25C6","*"),su=U("\u25B2","!"),au=U("\u25A0","x"),$e=e=>{switch(e){case"initial":case"active":return h("cyan",DE);case"cancel":return h("red",Zl);case"error":return h("yellow",Ql);case"submit":return h("green",vr)}},cu=e=>{switch(e){case"initial":case"active":return h("cyan",I);case"cancel":return h("red",I);case"error":return h("yellow",I);case"submit":return h("green",I)}},TE=(e,t,r,n,i,o=!1)=>{let s=t,a=0;if(o)for(let c=n-1;c>=r&&(s-=e[c].length,a++,!(s<=i));c--);else for(let c=r;c<n&&(s-=e[c].length,a++,!(s<=i));c++);return{lineCount:s,removals:a}},Xt=({cursor:e,options:t,style:r,output:n=process.stdout,maxItems:i=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:s=4})=>{let a=Er(n)-o,c=Yl(n),l=h("dim","..."),d=Math.max(c-s,0),p=Math.max(Math.min(i,d),5),u=0;e>=p-3&&(u=Math.max(Math.min(e-p+3,t.length-p),0));let m=p<t.length&&u>0,g=p<t.length&&u+p<t.length,y=Math.min(u+p,t.length),w=[],x=0;m&&x++,g&&x++;let b=u+(m?1:0),A=y-(g?1:0);for(let S=b;S<A;S++){let C=et(r(t[S],S===e),a,{hard:!0,trim:!1}).split(`
|
|
735
|
+
`);w.push(C),x+=C.length}if(x>d){let S=0,C=0,O=x,M=e-b,F=d,q=()=>TE(w,O,0,M,F),P=()=>TE(w,O,M+1,w.length,F,!0);m?({lineCount:O,removals:S}=q(),O>F&&(g||(F-=1),{lineCount:O,removals:C}=P())):(g||(F-=1),{lineCount:O,removals:C}=P(),O>F&&(F-=1,{lineCount:O,removals:S}=q())),S>0&&(m=!0,w.splice(0,S)),C>0&&(g=!0,w.splice(w.length-C,C))}let v=[];m&&v.push(l);for(let S of w)for(let C of S)v.push(C);return g&&v.push(l),v};BE=e=>new ql({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,placeholder:e.placeholder,filter:e.filter??((t,r)=>HE(t,r)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??L.withGuide,r=t?[`${h("gray",I)}`,`${$e(this.state)} ${e.message}`]:[`${$e(this.state)} ${e.message}`],n=this.userInput,i=this.options,o=e.placeholder,s=n===""&&o!==void 0,a=(c,l)=>{let d=CE(c),p=c.hint&&c.value===this.focusedValue?h("dim",` (${c.hint})`):"";switch(l){case"active":return`${h("green",Ri)} ${d}${p}`;case"inactive":return`${h("dim",Sr)} ${h("dim",d)}`;case"disabled":return`${h("gray",Sr)} ${h(["strikethrough","gray"],d)}`}};switch(this.state){case"submit":{let c=RL(this.selectedValues,i),l=c.length>0?` ${h("dim",c.map(CE).join(", "))}`:"",d=t?h("gray",I):"";return`${r.join(`
|
|
736
|
+
`)}
|
|
737
|
+
${d}${l}`}case"cancel":{let c=n?` ${h(["strikethrough","dim"],n)}`:"",l=t?h("gray",I):"";return`${r.join(`
|
|
738
|
+
`)}
|
|
739
|
+
${l}${c}`}default:{let c=this.state==="error"?"yellow":"cyan",l=t?`${h(c,I)} `:"",d=t?h(c,Z):"",p="";if(this.isNavigating||s){let b=s?o:n;p=b!==""?` ${h("dim",b)}`:""}else p=` ${this.userInputWithCursor}`;let u=this.filteredOptions.length!==i.length?h("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",m=this.filteredOptions.length===0&&n?[`${l}${h("yellow","No matches found")}`]:[],g=this.state==="error"?[`${l}${h("yellow",this.error)}`]:[];t&&r.push(`${l.trimEnd()}`),r.push(`${l}${h("dim","Search:")}${p}${u}`,...m,...g);let y=[`${h("dim","\u2191/\u2193")} to select`,`${h("dim","Enter:")} confirm`,`${h("dim","Type:")} to search`],w=[`${l}${y.join(" \u2022 ")}`,d],x=this.filteredOptions.length===0?[]:Xt({cursor:this.cursor,options:this.filteredOptions,columnPadding:t?3:0,rowPadding:r.length+w.length,style:(b,A)=>a(b,b.disabled?"disabled":A?"active":"inactive"),maxItems:e.maxItems,output:e.output});return[...r,...x.map(b=>`${l}${b}`),...w].join(`
|
|
740
|
+
`)}}}}).prompt(),NL=e=>{let t=(n,i,o,s)=>{let a=o.includes(n.value),c=n.label??String(n.value??""),l=n.hint&&s!==void 0&&n.value===s?h("dim",` (${n.hint})`):"",d=a?h("green",xr):h("dim",kn);return n.disabled?`${h("gray",kn)} ${h(["strikethrough","gray"],c)}`:i?`${d} ${c}${l}`:`${d} ${h("dim",c)}`},r=new ql({options:e.options,multiple:!0,placeholder:e.placeholder,filter:e.filter??((n,i)=>HE(n,i)),validate:()=>{if(e.required&&r.selectedValues.length===0)return"Please select at least one item"},initialValue:e.initialValues,signal:e.signal,input:e.input,output:e.output,render(){let n=e.withGuide??L.withGuide,i=`${n?`${h("gray",I)}
|
|
741
|
+
`:""}${$e(this.state)} ${e.message}
|
|
742
|
+
`,o=this.userInput,s=e.placeholder,a=o===""&&s!==void 0,c=this.isNavigating||a?h("dim",a?s:o):this.userInputWithCursor,l=this.options,d=this.filteredOptions.length!==l.length?h("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${i}${n?`${h("gray",I)} `:""}${h("dim",`${this.selectedValues.length} items selected`)}`;case"cancel":return`${i}${n?`${h("gray",I)} `:""}${h(["strikethrough","dim"],o)}`;default:{let p=this.state==="error"?"yellow":"cyan",u=n?`${h(p,I)} `:"",m=n?h(p,Z):"",g=[`${h("dim","\u2191/\u2193")} to navigate`,`${h("dim",this.isNavigating?"Space/Tab:":"Tab:")} select`,`${h("dim","Enter:")} confirm`,`${h("dim","Type:")} to search`],y=this.filteredOptions.length===0&&o?[`${u}${h("yellow","No matches found")}`]:[],w=this.state==="error"?[`${u}${h("yellow",this.error)}`]:[],x=[...`${i}${n?h(p,I):""}`.split(`
|
|
743
|
+
`),`${u}${h("dim","Search:")} ${c}${d}`,...y,...w],b=[`${u}${g.join(" \u2022 ")}`,m],A=Xt({cursor:this.cursor,options:this.filteredOptions,style:(v,S)=>t(v,S,this.selectedValues,this.focusedValue),maxItems:e.maxItems,output:e.output,rowPadding:x.length+b.length});return[...x,...A.map(v=>`${u}${v}`),...b].join(`
|
|
744
|
+
`)}}}});return r.prompt()},DL=[FE,tu,nu,ru],LL=[eu,LE,Z,kE];kL=e=>e,PL=(e="",t="",r)=>{let n=r?.output??process.stdout,i=Er(n),o=2,s=r?.titlePadding??1,a=r?.contentPadding??2,c=r?.width===void 0||r.width==="auto"?1:Math.min(1,r.width),l=r?.withGuide??L.withGuide?`${I} `:"",d=r?.formatBorder??kL,p=(r?.rounded?DL:LL).map(d),u=d(Ts),m=d(I),g=se(l),y=se(t),w=i-g,x=Math.floor(i*c)-g;if(r?.width==="auto"){let F=e.split(`
|
|
745
|
+
`),q=y+s*2;for(let Q of F){let ae=se(Q)+a*2;ae>q&&(q=ae)}let P=q+o;P<x&&(x=P)}x%2!==0&&(x<w?x++:x--);let b=x-o,A=b-s*2,v=y>A?`${t.slice(0,A-3)}...`:t,[S,C]=$E(se(v),b,s,r?.titleAlign),O=et(e,b-a*2,{hard:!0,trim:!1});n.write(`${l}${p[0]}${u.repeat(S)}${v}${u.repeat(C)}${p[1]}
|
|
746
|
+
`);let M=O.split(`
|
|
747
|
+
`);for(let F of M){let[q,P]=$E(se(F),b,a,r?.contentAlign);n.write(`${l}${m}${" ".repeat(q)}${F}${" ".repeat(P)}${m}
|
|
748
|
+
`)}n.write(`${l}${p[2]}${u.repeat(b)}${p[3]}
|
|
749
|
+
`)},ML=e=>{let t=e.active??"Yes",r=e.inactive??"No";return new hs({active:t,inactive:r,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let n=e.withGuide??L.withGuide,i=`${$e(this.state)} `,o=n?`${h("gray",I)} `:"",s=re(e.output,e.message,o,i),a=`${n?`${h("gray",I)}
|
|
750
|
+
`:""}${s}
|
|
751
|
+
`,c=this.value?t:r;switch(this.state){case"submit":{let l=n?`${h("gray",I)} `:"";return`${a}${l}${h("dim",c)}`}case"cancel":{let l=n?`${h("gray",I)} `:"";return`${a}${l}${h(["strikethrough","dim"],c)}${n?`
|
|
752
|
+
${h("gray",I)}`:""}`}default:{let l=n?`${h("cyan",I)} `:"",d=n?h("cyan",Z):"";return`${a}${l}${this.value?`${h("green",Ri)} ${t}`:`${h("dim",Sr)} ${h("dim",t)}`}${e.vertical?n?`
|
|
753
|
+
${h("cyan",I)} `:`
|
|
754
|
+
`:` ${h("dim","/")} `}${this.value?`${h("dim",Sr)} ${h("dim",r)}`:`${h("green",Ri)} ${r}`}
|
|
755
|
+
${d}
|
|
756
|
+
`}}}}).prompt()},FL=e=>{let t=e.validate;return new gs({...e,validate(r){if(r===void 0)return e.defaultValue!==void 0?void 0:t?t(r):L.date.messages.required;let n=i=>i.toISOString().slice(0,10);if(e.minDate&&n(r)<n(e.minDate))return L.date.messages.afterMin(e.minDate);if(e.maxDate&&n(r)>n(e.maxDate))return L.date.messages.beforeMax(e.maxDate);if(t)return t(r)},render(){let r=(e?.withGuide??L.withGuide)!==!1,n=`${`${r?`${h("gray",I)}
|
|
757
|
+
`:""}${$e(this.state)} `}${e.message}
|
|
758
|
+
`,i=this.state!=="initial"?this.state:"active",o=HL(this,i),s=this.value instanceof Date?this.formattedValue:"";switch(this.state){case"error":{let a=this.error?` ${h("yellow",this.error)}`:"",c=r?`${h("yellow",I)} `:"",l=r?h("yellow",Z):"";return`${n.trim()}
|
|
759
|
+
${c}${o}
|
|
760
|
+
${l}${a}
|
|
761
|
+
`}case"submit":{let a=s?` ${h("dim",s)}`:"",c=r?h("gray",I):"";return`${n}${c}${a}`}case"cancel":{let a=s?` ${h(["strikethrough","dim"],s)}`:"",c=r?h("gray",I):"";return`${n}${c}${a}${s.trim()?`
|
|
762
|
+
${c}`:""}`}default:{let a=r?`${h("cyan",I)} `:"",c=r?h("cyan",Z):"",l=r?`${h("cyan",I)} `:"",d=this.inlineError?`
|
|
763
|
+
${l}${h("yellow",this.inlineError)}`:"";return`${n}${a}${o}${d}
|
|
764
|
+
${c}
|
|
765
|
+
`}}}}).prompt()};UL={year:"yyyy",month:"mm",day:"dd"},GL=async(e,t)=>{let r={},n=Object.keys(e);for(let i of n){let o=e[i],s=await o({results:r})?.catch(a=>{throw a});if(typeof t?.onCancel=="function"&&Ss(s)){r[i]="canceled",t.onCancel({results:r});continue}r[i]=s}return r},jL=e=>{let{selectableGroups:t=!0,groupSpacing:r=0}=e,n=(o,s,a=[])=>{let c=o.label??String(o.value),l=typeof o.group=="string",d=l&&(a[a.indexOf(o)+1]??{group:!0}),p=l&&d&&d.group===!0,u="",m="";l&&(t?(u=p?`${Z} `:`${I} `,m=p?" ":`${I} `):u=" ");let g="";if(r>0&&!l&&(g=`
|
|
766
|
+
`.repeat(r)),s==="active")return re(e.output,`${c}${o.hint?` ${h("dim",`(${o.hint})`)}`:""}`,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${h("cyan",As)} `,`${g}${h("dim",m)} `);if(s==="group-active")return re(e.output,c,`${g}${u} `,`${g}${u}${h("cyan",As)} `,`${g}${m} `,w=>h("dim",w));if(s==="group-active-selected")return re(e.output,c,`${g}${u} `,`${g}${u}${h("green",xr)} `,`${g}${m} `,w=>h("dim",w));if(s==="selected"){let w=l||t?h("green",xr):"";return re(e.output,`${c}${o.hint?` (${o.hint})`:""}`,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${w} `,`${g}${h("dim",m)} `,x=>h("dim",x))}if(s==="cancelled")return`${h(["strikethrough","dim"],c)}`;if(s==="active-selected")return re(e.output,`${c}${o.hint?` ${h("dim",`(${o.hint})`)}`:""}`,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${h("green",xr)} `,`${g}${h("dim",m)} `);if(s==="submitted")return`${h("dim",c)}`;let y=l||t?h("dim",kn):"";return re(e.output,c,`${g}${h("dim",u)} `,`${g}${h("dim",u)}${y} `,`${g}${h("dim",m)} `,w=>h("dim",w))},i=e.required??!0;return new ys({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:i,cursorAt:e.cursorAt,selectableGroups:t,validate(o){if(i&&(o===void 0||o.length===0))return`Please select at least one option.
|
|
767
|
+
${h("reset",h("dim",`Press ${h(["gray","bgWhite","inverse"]," space ")} to select, ${h("gray",h(["bgWhite","inverse"]," enter "))} to submit`))}`},render(){let o=e.withGuide??L.withGuide,s=`${o?`${h("gray",I)}
|
|
768
|
+
`:""}${$e(this.state)} ${e.message}
|
|
769
|
+
`,a=this.value??[],c=(l,d)=>{let p=this.options,u=a.includes(l.value)||l.group===!0&&this.isGroupSelected(`${l.value}`);return!d&&typeof l.group=="string"&&this.options[this.cursor].value===l.group?n(l,u?"group-active-selected":"group-active",p):d&&u?n(l,"active-selected",p):u?n(l,"selected",p):n(l,d?"active":"inactive",p)};switch(this.state){case"submit":{let l=this.options.filter(({value:p})=>a.includes(p)).map(p=>n(p,"submitted")),d=l.length===0?"":` ${l.join(h("dim",", "))}`;return`${s}${o?h("gray",I):""}${d}`}case"cancel":{let l=this.options.filter(({value:d})=>a.includes(d)).map(d=>n(d,"cancelled")).join(h("dim",", "));return`${s}${o?`${h("gray",I)} `:""}${l.trim()?`${l}${o?`
|
|
770
|
+
${h("gray",I)}`:""}`:""}`}case"error":{let l=o?`${h("yellow",I)} `:"",d=this.error.split(`
|
|
771
|
+
`).map((g,y)=>y===0?`${o?`${h("yellow",Z)} `:""}${h("yellow",g)}`:` ${g}`).join(`
|
|
772
|
+
`),p=s.split(`
|
|
773
|
+
`).length,u=d.split(`
|
|
774
|
+
`).length+1,m=Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:p+u,style:c}).join(`
|
|
775
|
+
${l}`);return`${s}${l}${m}
|
|
776
|
+
${d}
|
|
777
|
+
`}default:{let l=o?`${h("cyan",I)} `:"",d=s.split(`
|
|
778
|
+
`).length,p=(o?1:0)+1,u=Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:l.length,rowPadding:d+p,style:c}).join(`
|
|
779
|
+
${l}`);return`${s}${l}${u}
|
|
780
|
+
${o?h("cyan",Z):""}
|
|
781
|
+
`}}}}).prompt()},Ce={message:(e=[],{symbol:t=h("gray",I),secondarySymbol:r=h("gray",I),output:n=process.stdout,spacing:i=1,withGuide:o}={})=>{let s=[],a=o??L.withGuide,c=a?r:"",l=a?`${t} `:"",d=a?`${r} `:"";for(let u=0;u<i;u++)s.push(c);let p=Array.isArray(e)?e:e.split(`
|
|
782
|
+
`);if(p.length>0){let[u,...m]=p;u.length>0?s.push(`${l}${u}`):s.push(a?t:"");for(let g of m)g.length>0?s.push(`${d}${g}`):s.push(a?r:"")}n.write(`${s.join(`
|
|
783
|
+
`)}
|
|
784
|
+
`)},info:(e,t)=>{Ce.message(e,{...t,symbol:h("blue",iu)})},success:(e,t)=>{Ce.message(e,{...t,symbol:h("green",ou)})},step:(e,t)=>{Ce.message(e,{...t,symbol:h("green",vr)})},warn:(e,t)=>{Ce.message(e,{...t,symbol:h("yellow",su)})},warning:(e,t)=>{Ce.warn(e,t)},error:(e,t)=>{Ce.message(e,{...t,symbol:h("red",au)})}},WL=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??L.withGuide?`${h("gray",Z)} `:"";r.write(`${n}${h("red",e)}
|
|
785
|
+
|
|
786
|
+
`)},VL=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??L.withGuide?`${h("gray",eu)} `:"";r.write(`${n}${e}
|
|
787
|
+
`)},KL=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??L.withGuide?`${h("gray",I)}
|
|
788
|
+
${h("gray",Z)} `:"";r.write(`${n}${e}
|
|
789
|
+
|
|
790
|
+
`)},YL=e=>new ws({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,showSubmit:e.showSubmit,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??L.withGuide,r=`${`${t?`${h("gray",I)}
|
|
791
|
+
`:""}${$e(this.state)} `}${e.message}
|
|
792
|
+
`,n=e.placeholder?h("inverse",e.placeholder[0])+h("dim",e.placeholder.slice(1)):h(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:n,o=this.value??"",s=e.showSubmit?`
|
|
793
|
+
${h(this.focused==="submit"?"cyan":"dim","[ submit ]")}`:"";switch(this.state){case"error":{let a=`${h("yellow",I)} `,c=t?re(e.output,i,a,void 0):i,l=h("yellow",Z);return`${r}${c}
|
|
794
|
+
${l} ${h("yellow",this.error)}${s}
|
|
795
|
+
`}case"submit":{let a=`${h("gray",I)} `,c=t?re(e.output,o,a,void 0,void 0,l=>h("dim",l)):o?h("dim",o):"";return`${r}${c}`}case"cancel":{let a=`${h("gray",I)} `,c=t?re(e.output,o,a,void 0,void 0,l=>h(["strikethrough","dim"],l)):o?h(["strikethrough","dim"],o):"";return`${r}${c}`}default:{let a=t?`${h("cyan",I)} `:"",c=t?h("cyan",Z):"",l=t?re(e.output,i,a):i;return`${r}${l}
|
|
796
|
+
${c}${s}
|
|
797
|
+
`}}}}).prompt(),Oi=(e,t)=>e.split(`
|
|
798
|
+
`).map(r=>t(r)).join(`
|
|
799
|
+
`),qL=e=>{let t=(n,i)=>{let o=n.label??String(n.value);return i==="disabled"?`${h("gray",kn)} ${Oi(o,s=>h(["strikethrough","gray"],s))}${n.hint?` ${h("dim",`(${n.hint??"disabled"})`)}`:""}`:i==="active"?`${h("cyan",As)} ${o}${n.hint?` ${h("dim",`(${n.hint})`)}`:""}`:i==="selected"?`${h("green",xr)} ${Oi(o,s=>h("dim",s))}${n.hint?` ${h("dim",`(${n.hint})`)}`:""}`:i==="cancelled"?`${Oi(o,s=>h(["strikethrough","dim"],s))}`:i==="active-selected"?`${h("green",xr)} ${o}${n.hint?` ${h("dim",`(${n.hint})`)}`:""}`:i==="submitted"?`${Oi(o,s=>h("dim",s))}`:`${h("dim",kn)} ${Oi(o,s=>h("dim",s))}`},r=e.required??!0;return new vE({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:r,cursorAt:e.cursorAt,validate(n){if(r&&(n===void 0||n.length===0))return`Please select at least one option.
|
|
800
|
+
${h("reset",h("dim",`Press ${h(["gray","bgWhite","inverse"]," space ")} to select, ${h("gray",h("bgWhite",h("inverse"," enter ")))} to submit`))}`},render(){let n=e.withGuide??L.withGuide,i=re(e.output,e.message,n?`${cu(this.state)} `:"",`${$e(this.state)} `),o=`${n?`${h("gray",I)}
|
|
801
|
+
`:""}${i}
|
|
802
|
+
`,s=this.value??[],a=(c,l)=>{if(c.disabled)return t(c,"disabled");let d=s.includes(c.value);return l&&d?t(c,"active-selected"):d?t(c,"selected"):t(c,l?"active":"inactive")};switch(this.state){case"submit":{let c=this.options.filter(({value:d})=>s.includes(d)).map(d=>t(d,"submitted")).join(h("dim",", "))||h("dim","none"),l=re(e.output,c,n?`${h("gray",I)} `:"");return`${o}${l}`}case"cancel":{let c=this.options.filter(({value:d})=>s.includes(d)).map(d=>t(d,"cancelled")).join(h("dim",", "));if(c.trim()==="")return`${o}${h("gray",I)}`;let l=re(e.output,c,n?`${h("gray",I)} `:"");return`${o}${l}${n?`
|
|
803
|
+
${h("gray",I)}`:""}`}case"error":{let c=n?`${h("yellow",I)} `:"",l=this.error.split(`
|
|
804
|
+
`).map((u,m)=>m===0?`${n?`${h("yellow",Z)} `:""}${h("yellow",u)}`:` ${u}`).join(`
|
|
805
|
+
`),d=o.split(`
|
|
806
|
+
`).length,p=l.split(`
|
|
807
|
+
`).length+1;return`${o}${c}${Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:d+p,style:a}).join(`
|
|
808
|
+
${c}`)}
|
|
809
|
+
${l}
|
|
810
|
+
`}default:{let c=n?`${h("cyan",I)} `:"",l=o.split(`
|
|
811
|
+
`).length,d=n?2:1;return`${o}${c}${Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:l+d,style:a}).join(`
|
|
812
|
+
${c}`)}
|
|
813
|
+
${n?h("cyan",Z):""}
|
|
814
|
+
`}}}}).prompt()},JL=e=>h("dim",e),zL=(e,t,r)=>{let n={hard:!0,trim:!1},i=et(e,t,n).split(`
|
|
815
|
+
`),o=i.reduce((c,l)=>Math.max(se(l),c),0),s=i.map(r).reduce((c,l)=>Math.max(se(l),c),0),a=t-(s-o);return et(e,a,n)},XL=(e="",t="",r)=>{let n=r?.output??Le.stdout,i=r?.withGuide??L.withGuide,o=r?.format??JL,s=["",...zL(e,Er(n)-6,o).split(`
|
|
816
|
+
`).map(o),""],a=se(t),c=Math.max(s.reduce((u,m)=>{let g=se(m);return g>u?g:u},0),a)+2,l=s.map(u=>`${h("gray",I)} ${u}${" ".repeat(c-se(u))}${h("gray",I)}`).join(`
|
|
817
|
+
`),d=i?`${h("gray",I)}
|
|
818
|
+
`:"",p=i?ME:nu;n.write(`${d}${h("green",vr)} ${h("reset",t)} ${h("gray",Ts.repeat(Math.max(c-a-1,1))+tu)}
|
|
819
|
+
${l}
|
|
820
|
+
${h("gray",p+Ts.repeat(c+2)+ru)}
|
|
821
|
+
`)},ZL=e=>new _s({validate:e.validate,mask:e.mask??PE,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??L.withGuide,r=`${t?`${h("gray",I)}
|
|
822
|
+
`:""}${$e(this.state)} ${e.message}
|
|
823
|
+
`,n=this.userInputWithCursor,i=this.masked;switch(this.state){case"error":{let o=t?`${h("yellow",I)} `:"",s=t?`${h("yellow",Z)} `:"",a=i??"";return e.clearOnError&&this.clear(),`${r.trim()}
|
|
824
|
+
${o}${a}
|
|
825
|
+
${s}${h("yellow",this.error)}
|
|
826
|
+
`}case"submit":{let o=t?`${h("gray",I)} `:"",s=i?h("dim",i):"";return`${r}${o}${s}`}case"cancel":{let o=t?`${h("gray",I)} `:"",s=i?h(["strikethrough","dim"],i):"";return`${r}${o}${s}${i&&t?`
|
|
827
|
+
${h("gray",I)}`:""}`}default:{let o=t?`${h("cyan",I)} `:"",s=t?h("cyan",Z):"";return`${r}${o}${n}
|
|
828
|
+
${s}
|
|
829
|
+
`}}}}).prompt(),QL=e=>{let t=e.validate;return BE({...e,initialUserInput:e.initialValue??e.root??process.cwd(),maxItems:5,validate(r){if(!Array.isArray(r)){if(!r)return"Please select a path";if(t)return t(r)}},options(){let r=this.userInput;if(r==="")return[];try{let n;TL(r)?IE(r).isDirectory()&&(!e.directory||r.endsWith("/"))?n=r:n=AE(r):n=AE(r);let i=r.length>1&&r.endsWith("/")?r.slice(0,-1):r;return CL(n).map(o=>{let s=$L(n,o),a=IE(s);return{name:o,path:s,isDirectory:a.isDirectory()}}).filter(({path:o,isDirectory:s})=>o.startsWith(i)&&(s||!e.directory)).map(o=>({value:o.path}))}catch{return[]}}})},ek=e=>h("magenta",e),lu=({indicator:e="dots",onCancel:t,output:r=process.stdout,cancelMessage:n,errorMessage:i,frames:o=Is?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:s=Is?80:120,signal:a,...c}={})=>{let l=Xl(),d,p,u=!1,m=!1,g="",y,w=performance.now(),x=Er(r),b=c?.styleFrame??ek,A=N=>{let W=N>1?i??L.messages.error:n??L.messages.cancel;m=N===1,u&&(ae(W,N),m&&typeof t=="function"&&t())},v=()=>A(2),S=()=>A(1),C=()=>{process.on("uncaughtExceptionMonitor",v),process.on("unhandledRejection",v),process.on("SIGINT",S),process.on("SIGTERM",S),process.on("exit",A),a&&a.addEventListener("abort",S)},O=()=>{process.removeListener("uncaughtExceptionMonitor",v),process.removeListener("unhandledRejection",v),process.removeListener("SIGINT",S),process.removeListener("SIGTERM",S),process.removeListener("exit",A),a&&a.removeEventListener("abort",S)},M=()=>{if(y===void 0)return;l&&r.write(`
|
|
830
|
+
`);let N=et(y,x,{hard:!0,trim:!1}).split(`
|
|
831
|
+
`);N.length>1&&r.write(Ln.cursor.up(N.length-1)),r.write(Ln.cursor.to(0)),r.write(Ln.erase.down())},F=N=>N.replace(/\.+$/,""),q=N=>{let W=(performance.now()-N)/1e3,ne=Math.floor(W/60),ie=Math.floor(W%60);return ne>0?`[${ne}m ${ie}s]`:`[${ie}s]`},P=c.withGuide??L.withGuide,Q=(N="")=>{u=!0,d=xE({output:r}),g=F(N),w=performance.now(),P&&r.write(`${h("gray",I)}
|
|
832
|
+
`);let W=0,ne=0;C(),p=setInterval(()=>{if(l&&g===y)return;M(),y=g;let ie=b(o[W]),de;if(l)de=`${ie} ${g}...`;else if(e==="timer")de=`${ie} ${g} ${q(w)}`;else{let Gn=".".repeat(Math.floor(ne)).slice(0,3);de=`${ie} ${g}${Gn}`}let Ue=et(de,x,{hard:!0,trim:!1});r.write(Ue),W=W+1<o.length?W+1:0,ne=ne<4?ne+.125:0},s)},ae=(N="",W=0,ne=!1)=>{if(!u)return;u=!1,clearInterval(p),M();let ie=W===0?h("green",vr):W===1?h("red",Zl):h("red",Ql);g=N??g,ne||(e==="timer"?r.write(`${ie} ${g} ${q(w)}
|
|
833
|
+
`):r.write(`${ie} ${g}
|
|
834
|
+
`)),O(),d()};return{start:Q,stop:(N="")=>ae(N,0),message:(N="")=>{g=F(N??g)},cancel:(N="")=>ae(N,1),error:(N="")=>ae(N,2),clear:()=>ae("",0,!0),get isCancelled(){return m}}},OE={light:U("\u2500","-"),heavy:U("\u2501","="),block:U("\u2588","#")};vs=(e,t)=>e.includes(`
|
|
835
|
+
`)?e.split(`
|
|
836
|
+
`).map(r=>t(r)).join(`
|
|
837
|
+
`):t(e),rk=e=>{let t=(r,n)=>{let i=r.label??String(r.value);switch(n){case"disabled":return`${h("gray",Sr)} ${vs(i,o=>h("gray",o))}${r.hint?` ${h("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${vs(i,o=>h("dim",o))}`;case"active":return`${h("green",Ri)} ${i}${r.hint?` ${h("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${vs(i,o=>h(["strikethrough","dim"],o))}`;default:return`${h("dim",Sr)} ${vs(i,o=>h("dim",o))}`}};return new Es({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let r=e.withGuide??L.withGuide,n=`${$e(this.state)} `,i=`${cu(this.state)} `,o=re(e.output,e.message,i,n),s=`${r?`${h("gray",I)}
|
|
838
|
+
`:""}${o}
|
|
839
|
+
`;switch(this.state){case"submit":{let a=r?`${h("gray",I)} `:"",c=re(e.output,t(this.options[this.cursor],"selected"),a);return`${s}${c}`}case"cancel":{let a=r?`${h("gray",I)} `:"",c=re(e.output,t(this.options[this.cursor],"cancelled"),a);return`${s}${c}${r?`
|
|
840
|
+
${h("gray",I)}`:""}`}default:{let a=r?`${h("cyan",I)} `:"",c=r?h("cyan",Z):"",l=s.split(`
|
|
841
|
+
`).length,d=r?2:1;return`${s}${a}${Xt({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:l+d,style:(p,u)=>t(p,p.disabled?"disabled":u?"active":"inactive")}).join(`
|
|
842
|
+
${a}`)}
|
|
843
|
+
${c}
|
|
844
|
+
`}}}}).prompt()},nk=e=>{let t=(r,n="inactive")=>{let i=r.label??String(r.value);return n==="selected"?`${h("dim",i)}`:n==="cancelled"?`${h(["strikethrough","dim"],i)}`:n==="active"?`${h(["bgCyan","gray"],` ${r.value} `)} ${i}${r.hint?` ${h("dim",`(${r.hint})`)}`:""}`:`${h(["gray","bgWhite","inverse"],` ${r.value} `)} ${i}${r.hint?` ${h("dim",`(${r.hint})`)}`:""}`};return new bs({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,caseSensitive:e.caseSensitive,render(){let r=e.withGuide??L.withGuide,n=`${r?`${h("gray",I)}
|
|
845
|
+
`:""}${$e(this.state)} ${e.message}
|
|
846
|
+
`;switch(this.state){case"submit":{let i=r?`${h("gray",I)} `:"",o=this.options.find(a=>a.value===this.value)??e.options[0],s=re(e.output,t(o,"selected"),i);return`${n}${s}`}case"cancel":{let i=r?`${h("gray",I)} `:"",o=re(e.output,t(this.options[0],"cancelled"),i);return`${n}${o}${r?`
|
|
847
|
+
${h("gray",I)}`:""}`}default:{let i=r?`${h("cyan",I)} `:"",o=r?h("cyan",Z):"",s=this.options.map((a,c)=>re(e.output,t(a,c===this.cursor?"active":"inactive"),i)).join(`
|
|
848
|
+
`);return`${n}${s}
|
|
849
|
+
${o}
|
|
850
|
+
`}}}}).prompt()},RE=`${h("gray",I)} `,br={message:async(e,{symbol:t=h("gray",I)}={})=>{process.stdout.write(`${h("gray",I)}
|
|
851
|
+
${t} `);let r=3;for await(let n of e){n=n.replace(/\n/g,`
|
|
852
|
+
${RE}`),n.includes(`
|
|
853
|
+
`)&&(r=3+zl(n.slice(n.lastIndexOf(`
|
|
854
|
+
`))).length);let i=zl(n).length;r+i<process.stdout.columns?(r+=i,process.stdout.write(n)):(process.stdout.write(`
|
|
855
|
+
${RE}${n.trimStart()}`),r=3+zl(n.trimStart()).length)}process.stdout.write(`
|
|
856
|
+
`)},info:e=>br.message(e,{symbol:h("blue",iu)}),success:e=>br.message(e,{symbol:h("green",ou)}),step:e=>br.message(e,{symbol:h("green",vr)}),warn:e=>br.message(e,{symbol:h("yellow",su)}),warning:e=>br.warn(e),error:e=>br.message(e,{symbol:h("red",au)})},ik=async(e,t)=>{for(let r of e){if(r.enabled===!1)continue;let n=lu(t);n.start(r.title);let i=await r.task(n.message);n.stop(i||r.title)}},ok=e=>e.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),sk=e=>{let t=e.output??process.stdout,r=Er(t),n=h("gray",I),i=e.spacing??1,o=3,s=e.retainLog===!0,a=!Xl()&&NE(t);t.write(`${n}
|
|
857
|
+
`),t.write(`${h("green",vr)} ${e.title}
|
|
858
|
+
`);for(let w=0;w<i;w++)t.write(`${n}
|
|
859
|
+
`);let c=[{value:"",full:""}],l=!1,d=w=>{if(c.length===0)return;let x=0;w&&(x+=i+2);for(let b of c){let{value:A,result:v}=b,S=v?.message??A;if(S.length===0)continue;v===void 0&&b.header!==void 0&&b.header!==""&&(S+=`
|
|
860
|
+
${b.header}`);let C=S.split(`
|
|
861
|
+
`).reduce((O,M)=>M===""?O+1:O+Math.ceil((M.length+o)/r),0);x+=C}x>0&&(x+=1,t.write(Ln.erase.lines(x)))},p=(w,x,b)=>{let A=b?`${w.full}
|
|
862
|
+
${w.value}`:w.value;w.header!==void 0&&w.header!==""&&Ce.message(w.header.split(`
|
|
863
|
+
`).map(v=>h("bold",v)),{output:t,secondarySymbol:n,symbol:n,spacing:0}),Ce.message(A.split(`
|
|
864
|
+
`).map(v=>h("dim",v)),{output:t,secondarySymbol:n,symbol:n,spacing:x??i})},u=()=>{for(let w of c){let{header:x,value:b,full:A}=w;(x===void 0||x.length===0)&&b.length===0||p(w,void 0,s===!0&&A.length>0)}},m=(w,x,b)=>{if(d(!1),(b?.raw!==!0||!l)&&w.value!==""&&(w.value+=`
|
|
865
|
+
`),w.value+=ok(x),l=b?.raw===!0,e.limit!==void 0){let A=w.value.split(`
|
|
866
|
+
`),v=A.length-e.limit;if(v>0){let S=A.splice(0,v);s&&(w.full+=(w.full===""?"":`
|
|
867
|
+
`)+S.join(`
|
|
868
|
+
`))}w.value=A.join(`
|
|
869
|
+
`)}a&&g()},g=()=>{for(let w of c)w.result?w.result.status==="error"?Ce.error(w.result.message,{output:t,secondarySymbol:n,spacing:0}):Ce.success(w.result.message,{output:t,secondarySymbol:n,spacing:0}):w.value!==""&&p(w,0)},y=(w,x)=>{d(!1),w.result=x,a&&g()};return{message(w,x){m(c[0],w,x)},group(w){let x={header:w,value:"",full:""};return c.push(x),{message(b,A){m(x,b,A)},error(b){y(x,{status:"error",message:b})},success(b){y(x,{status:"success",message:b})}}},error(w,x){d(!0),Ce.error(w,{output:t,secondarySymbol:n,spacing:1}),x?.showLog!==!1&&u(),c.splice(1,c.length-1),c[0].value="",c[0].full=""},success(w,x){d(!0),Ce.success(w,{output:t,secondarySymbol:n,spacing:1}),x?.showLog===!0&&u(),c.splice(1,c.length-1),c[0].value="",c[0].full=""}}},ak=e=>new xs({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??L.withGuide,r=`${`${t?`${h("gray",I)}
|
|
870
|
+
`:""}${$e(this.state)} `}${e.message}
|
|
871
|
+
`,n=e.placeholder?h("inverse",e.placeholder[0])+h("dim",e.placeholder.slice(1)):h(["inverse","hidden"],"_"),i=this.userInput?this.userInputWithCursor:n,o=this.value??"";switch(this.state){case"error":{let s=this.error?` ${h("yellow",this.error)}`:"",a=t?`${h("yellow",I)} `:"",c=t?h("yellow",Z):"";return`${r.trim()}
|
|
872
|
+
${a}${i}
|
|
873
|
+
${c}${s}
|
|
874
|
+
`}case"submit":{let s=o?` ${h("dim",o)}`:"",a=t?h("gray",I):"";return`${r}${a}${s}`}case"cancel":{let s=o?` ${h(["strikethrough","dim"],o)}`:"",a=t?h("gray",I):"";return`${r}${a}${s}${o.trim()?`
|
|
875
|
+
${a}`:""}`}default:{let s=t?`${h("cyan",I)} `:"",a=t?h("cyan",Z):"";return`${r}${s}${i}
|
|
876
|
+
${a}
|
|
877
|
+
`}}}}).prompt()});var WE={};T(WE,{detect:()=>dk,install:()=>pk,mergeHooks:()=>jE,meta:()=>uk,uninstall:()=>mk,verify:()=>fk,writeImportLine:()=>GE});import{join as Et}from"node:path";import{homedir as ck}from"node:os";import{existsSync as Zt}from"node:fs";import{fileURLToPath as lk}from"node:url";import{dirname as Os}from"node:path";async function dk(){return Zt(Ni)}async function GE({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Ni,{recursive:!0});let r=`@${wt}`,n="";if(Zt(Pe)&&(n=await t.readFile(Pe,"utf8")),n.includes(r))return{action:"skip",path:Pe,detail:"already imports sigil CLAUDE.md"};let i=n.trim()?`
|
|
878
|
+
`:"",o=`${n}${i}${r}
|
|
879
|
+
`;return{action:(await te(Pe,o,{dryRun:e})).action,path:Pe,detail:n?"+1 @import line":"new file"}}async function jE({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let u=await t.readFile(ke,"utf8");r=JSON.parse(u)}catch{}let n=Et(UE,"src","hooks"),i=Et(UE,"dist","hooks"),o=Zt(i)?i:n,s={UserPromptSubmit:{hooks:[{type:"command",command:`node ${Et(o,"user-prompt-submit.js")}`,timeout:10,statusMessage:"Searching memory..."}]},PostToolUse:{matcher:"Edit|Write|Bash",hooks:[{type:"command",command:`node ${Et(o,"post-tool-use.js")}`,timeout:10,async:!0}]},Stop:{hooks:[{type:"command",command:`node ${Et(o,"stop.js")}`,timeout:30,async:!0}]},SessionEnd:{hooks:[{type:"command",command:`node ${Et(o,"session-end.js")}`,timeout:10,async:!0}]}},a=Zt(ke);r.hooks=r.hooks||{};let c=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],l=u=>typeof u=="string"&&c.some(m=>u.endsWith(m)||u.includes(`/${m}`));for(let[u,m]of Object.entries(s)){let y=(r.hooks[u]||[]).filter(w=>!w.hooks?.some(x=>l(x.command)));r.hooks[u]=[...y,m]}e||await t.mkdir(Ni,{recursive:!0});let d=JSON.stringify(r,null,2);return{action:(await te(ke,d,{dryRun:e})).action,path:ke,detail:a?"+UserPromptSubmit, +PostToolUse, +Stop, +SessionEnd hooks (other settings preserved)":"new settings.json with sigil hooks"}}async function pk({dryRun:e=!1}={}){let t=[],r=await _l({dryRun:e});r&&t.push({action:r.action,path:r.path,detail:`${r.bytes??0} bytes`});let n=await GE({dryRun:e});n&&t.push(n);let i=await jE({dryRun:e});return i&&t.push(i),{actions:t}}async function fk(){let e=await import("node:fs/promises"),t=`@${wt}`;if(!Zt(Pe))return{installed:!1,reason:"~/.claude/CLAUDE.md missing \u2014 run `sigil init`"};if(!(await e.readFile(Pe,"utf8")).includes(t))return{installed:!1,reason:"@import line missing from ~/.claude/CLAUDE.md"};if(!Zt(ke))return{installed:!1,reason:"~/.claude/settings.json missing \u2014 hooks not registered"};let n;try{n=JSON.parse(await e.readFile(ke,"utf8"))}catch{return{installed:!1,reason:"~/.claude/settings.json is not valid JSON"}}let i=n.hooks||{},s=["UserPromptSubmit","PostToolUse","Stop","SessionEnd"].filter(a=>!(i[a]||[]).some(l=>l.hooks?.some(d=>typeof d.command=="string"&&(d.command.includes("user-prompt-submit.js")||d.command.includes("post-tool-use.js")||d.command.includes("stop.js")||d.command.includes("session-end.js")))));return s.length?{installed:!1,reason:`hooks missing: ${s.join(", ")}`}:{installed:!0}}async function mk({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Zt(Pe)){let n=`@${wt}`,i=await t.readFile(Pe,"utf8"),o=new RegExp(`^${n.replace(/[.*+?^${}()|[\\]\\\\]/g,"\\\\$&")}\\s*\\n?`,"gm"),s=i.replace(o,"");if(s!==i){let a=await te(Pe,s,{dryRun:e});r.push({action:a.action,path:Pe,detail:"-1 @import line"})}else r.push({action:"skip",path:Pe,detail:"@import not present"})}if(Zt(ke)){let n;try{n=JSON.parse(await t.readFile(ke,"utf8"))}catch{return r.push({action:"skip",path:ke,detail:"invalid JSON \u2014 not touched"}),{actions:r}}let i=["user-prompt-submit.js","stop.js","post-tool-use.js","session-end.js"],o=a=>typeof a=="string"&&i.some(c=>a.endsWith(c)||a.includes(`/${c}`)),s=!1;for(let a of Object.keys(n.hooks||{})){let c=n.hooks[a],l=c.filter(d=>!d.hooks?.some(p=>o(p.command)));l.length!==c.length&&(s=!0,l.length===0?delete n.hooks[a]:n.hooks[a]=l)}if(s){let a=await te(ke,JSON.stringify(n,null,2),{dryRun:e});r.push({action:a.action,path:ke,detail:"sigil hooks removed (other entries preserved)"})}else r.push({action:"skip",path:ke,detail:"no sigil hooks to remove"})}return{actions:r}}var Ni,Pe,ke,UE,uk,VE=f(()=>{_r();Nn();Ni=Et(ck(),".claude"),Pe=Et(Ni,"CLAUDE.md"),ke=Et(Ni,"settings.json"),UE=Os(Os(Os(Os(lk(import.meta.url))))),uk={id:"claude-code",label:"Claude Code",hint:"hooks + @import \u2014 full auto-injection"}});var XE={};T(XE,{detect:()=>_k,install:()=>bk,meta:()=>wk,resolveServerPath:()=>qE,uninstall:()=>Sk,verify:()=>xk,writeMcpEntry:()=>JE,writeRulesFile:()=>zE});import{join as Ar,dirname as Di}from"node:path";import{homedir as YE}from"node:os";import{existsSync as Tr}from"node:fs";import{fileURLToPath as hk}from"node:url";async function _k(){return Tr(Rs)}function qE(){let e=Ar(KE,"dist","server.js"),t=Ar(KE,"src","server.js");return Tr(e)?e:t}async function JE({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Me,"utf8");r=JSON.parse(o)}catch{}let n=Tr(Me);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[qE(),"--mcp"],env:{DOTENV_CONFIG_PATH:yk}},e||await t.mkdir(Rs,{recursive:!0}),{action:(await te(Me,JSON.stringify(r,null,2),{dryRun:e})).action,path:Me,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}function Ek(){return["---","description: Sigil persistent memory \u2014 consult before answering, save in batches","alwaysApply: true","---",""].join(`
|
|
880
|
+
`)+qt()}async function zE({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Di(Ir),{recursive:!0});let r=await te(Ir,Ek(),{dryRun:e});return{action:r.action,path:Ir,detail:`${r.bytes??0} bytes, alwaysApply=true`}}async function bk({dryRun:e=!1}={}){let t=[],r=await JE({dryRun:e});r&&t.push(r);let n=await zE({dryRun:e});return n&&t.push(n),{actions:t}}async function xk(){let e=await import("node:fs/promises");if(!Tr(Me))return{installed:!1,reason:"~/.cursor/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(Me,"utf8"))}catch{return{installed:!1,reason:"~/.cursor/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?Tr(Ir)?{installed:!0}:{installed:!1,reason:"~/.cursor/rules/sigil.mdc missing"}:{installed:!1,reason:"sigil entry missing from ~/.cursor/mcp.json"}}async function Sk({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Tr(Me)){let n;try{n=JSON.parse(await t.readFile(Me,"utf8"))}catch{return r.push({action:"skip",path:Me,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let i=await te(Me,JSON.stringify(n,null,2),{dryRun:e});r.push({action:i.action,path:Me,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:Me,detail:"sigil entry not present"})}return Tr(Ir)&&(e||await t.unlink(Ir),r.push({action:"delete",path:Ir,detail:"sigil rules file removed"})),{actions:r}}var Rs,Me,Ir,gk,yk,KE,wk,ZE=f(()=>{_r();Nn();Rs=Ar(YE(),".cursor"),Me=Ar(Rs,"mcp.json"),Ir=Ar(Rs,"rules","sigil.mdc"),gk=Ar(YE(),".sigil"),yk=Ar(gk,".env"),KE=Di(Di(Di(Di(hk(import.meta.url))))),wk={id:"cursor",label:"Cursor",hint:"global MCP + always-applied rule (no native hooks)"}});var eb=he((T3,QE)=>{"use strict";var Cr=class e extends Error{constructor(t,r,n){super("[ParserError] "+t,r,n),this.name="ParserError",this.code="ParserError",Error.captureStackTrace&&Error.captureStackTrace(this,e)}},Ns=class{constructor(t){this.parser=t,this.buf="",this.returned=null,this.result=null,this.resultTable=null,this.resultArr=null}},Li=class{constructor(){this.pos=0,this.col=0,this.line=0,this.obj={},this.ctx=this.obj,this.stack=[],this._buf="",this.char=null,this.ii=0,this.state=new Ns(this.parseStart)}parse(t){if(t.length===0||t.length==null)return;this._buf=String(t),this.ii=-1,this.char=-1;let r;for(;r===!1||this.nextChar();)r=this.runOne();this._buf=null}nextChar(){return this.char===10&&(++this.line,this.col=-1),++this.ii,this.char=this._buf.codePointAt(this.ii),++this.pos,++this.col,this.haveBuffer()}haveBuffer(){return this.ii<this._buf.length}runOne(){return this.state.parser.call(this,this.state.returned)}finish(){this.char=1114112;let t;do t=this.state.parser,this.runOne();while(this.state.parser!==t);return this.ctx=null,this.state=null,this._buf=null,this.obj}next(t){if(typeof t!="function")throw new Cr("Tried to set state to non-existent state: "+JSON.stringify(t));this.state.parser=t}goto(t){return this.next(t),this.runOne()}call(t,r){r&&this.next(r),this.stack.push(this.state),this.state=new Ns(t)}callNow(t,r){return this.call(t,r),this.runOne()}return(t){if(this.stack.length===0)throw this.error(new Cr("Stack underflow"));t===void 0&&(t=this.state.buf),this.state=this.stack.pop(),this.state.returned=t}returnNow(t){return this.return(t),this.runOne()}consume(){if(this.char===1114112)throw this.error(new Cr("Unexpected end-of-buffer"));this.state.buf+=this._buf[this.ii]}error(t){return t.line=this.line,t.col=this.col,t.pos=this.pos,t}parseStart(){throw new Cr("Must declare a parseStart method")}};Li.END=1114112;Li.Error=Cr;QE.exports=Li});var rb=he((C3,tb)=>{"use strict";tb.exports=e=>{let t=new Date(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var Ds=he(($3,nb)=>{"use strict";nb.exports=(e,t)=>{for(t=String(t);t.length<e;)t="0"+t;return t}});var ob=he((O3,ib)=>{"use strict";var Pn=Ds(),uu=class extends Date{constructor(t){super(t+"Z"),this.isFloating=!0}toISOString(){let t=`${this.getUTCFullYear()}-${Pn(2,this.getUTCMonth()+1)}-${Pn(2,this.getUTCDate())}`,r=`${Pn(2,this.getUTCHours())}:${Pn(2,this.getUTCMinutes())}:${Pn(2,this.getUTCSeconds())}.${Pn(3,this.getUTCMilliseconds())}`;return`${t}T${r}`}};ib.exports=e=>{let t=new uu(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var cb=he((R3,ab)=>{"use strict";var sb=Ds(),vk=global.Date,du=class extends vk{constructor(t){super(t),this.isDate=!0}toISOString(){return`${this.getUTCFullYear()}-${sb(2,this.getUTCMonth()+1)}-${sb(2,this.getUTCDate())}`}};ab.exports=e=>{let t=new du(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var ub=he((N3,lb)=>{"use strict";var Ls=Ds(),pu=class extends Date{constructor(t){super(`0000-01-01T${t}Z`),this.isTime=!0}toISOString(){return`${Ls(2,this.getUTCHours())}:${Ls(2,this.getUTCMinutes())}:${Ls(2,this.getUTCSeconds())}.${Ls(3,this.getUTCMilliseconds())}`}};lb.exports=e=>{let t=new pu(e);if(isNaN(t))throw new TypeError("Invalid Datetime");return t}});var ks=he((exports,module)=>{"use strict";module.exports=makeParserClass(eb());module.exports.makeParserClass=makeParserClass;var TomlError=class e extends Error{constructor(t){super(t),this.name="TomlError",Error.captureStackTrace&&Error.captureStackTrace(this,e),this.fromTOML=!0,this.wrapped=null}};TomlError.wrap=e=>{let t=new TomlError(e.message);return t.code=e.code,t.wrapped=e,t};module.exports.TomlError=TomlError;var createDateTime=rb(),createDateTimeFloat=ob(),createDate=cb(),createTime=ub(),CTRL_I=9,CTRL_J=10,CTRL_M=13,CTRL_CHAR_BOUNDARY=31,CHAR_SP=32,CHAR_QUOT=34,CHAR_NUM=35,CHAR_APOS=39,CHAR_PLUS=43,CHAR_COMMA=44,CHAR_HYPHEN=45,CHAR_PERIOD=46,CHAR_0=48,CHAR_1=49,CHAR_7=55,CHAR_9=57,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_A=65,CHAR_E=69,CHAR_F=70,CHAR_T=84,CHAR_U=85,CHAR_Z=90,CHAR_LOWBAR=95,CHAR_a=97,CHAR_b=98,CHAR_e=101,CHAR_f=102,CHAR_i=105,CHAR_l=108,CHAR_n=110,CHAR_o=111,CHAR_r=114,CHAR_s=115,CHAR_t=116,CHAR_u=117,CHAR_x=120,CHAR_z=122,CHAR_LCUB=123,CHAR_RCUB=125,CHAR_LSQB=91,CHAR_BSOL=92,CHAR_RSQB=93,CHAR_DEL=127,SURROGATE_FIRST=55296,SURROGATE_LAST=57343,escapes={[CHAR_b]:"\b",[CHAR_t]:" ",[CHAR_n]:`
|
|
881
|
+
`,[CHAR_f]:"\f",[CHAR_r]:"\r",[CHAR_QUOT]:'"',[CHAR_BSOL]:"\\"};function isDigit(e){return e>=CHAR_0&&e<=CHAR_9}function isHexit(e){return e>=CHAR_A&&e<=CHAR_F||e>=CHAR_a&&e<=CHAR_f||e>=CHAR_0&&e<=CHAR_9}function isBit(e){return e===CHAR_1||e===CHAR_0}function isOctit(e){return e>=CHAR_0&&e<=CHAR_7}function isAlphaNumQuoteHyphen(e){return e>=CHAR_A&&e<=CHAR_Z||e>=CHAR_a&&e<=CHAR_z||e>=CHAR_0&&e<=CHAR_9||e===CHAR_APOS||e===CHAR_QUOT||e===CHAR_LOWBAR||e===CHAR_HYPHEN}function isAlphaNumHyphen(e){return e>=CHAR_A&&e<=CHAR_Z||e>=CHAR_a&&e<=CHAR_z||e>=CHAR_0&&e<=CHAR_9||e===CHAR_LOWBAR||e===CHAR_HYPHEN}var _type=Symbol("type"),_declared=Symbol("declared"),hasOwnProperty=Object.prototype.hasOwnProperty,defineProperty=Object.defineProperty,descriptor={configurable:!0,enumerable:!0,writable:!0,value:void 0};function hasKey(e,t){return hasOwnProperty.call(e,t)?!0:(t==="__proto__"&&defineProperty(e,"__proto__",descriptor),!1)}var INLINE_TABLE=Symbol("inline-table");function InlineTable(){return Object.defineProperties({},{[_type]:{value:INLINE_TABLE}})}function isInlineTable(e){return e===null||typeof e!="object"?!1:e[_type]===INLINE_TABLE}var TABLE=Symbol("table");function Table(){return Object.defineProperties({},{[_type]:{value:TABLE},[_declared]:{value:!1,writable:!0}})}function isTable(e){return e===null||typeof e!="object"?!1:e[_type]===TABLE}var _contentType=Symbol("content-type"),INLINE_LIST=Symbol("inline-list");function InlineList(e){return Object.defineProperties([],{[_type]:{value:INLINE_LIST},[_contentType]:{value:e}})}function isInlineList(e){return e===null||typeof e!="object"?!1:e[_type]===INLINE_LIST}var LIST=Symbol("list");function List(){return Object.defineProperties([],{[_type]:{value:LIST}})}function isList(e){return e===null||typeof e!="object"?!1:e[_type]===LIST}var _custom;try{let utilInspect=eval("require('util').inspect");_custom=utilInspect.custom}catch(e){}var _inspect=_custom||"inspect",BoxedBigInt=class{constructor(t){try{this.value=global.BigInt.asIntN(64,t)}catch{this.value=null}Object.defineProperty(this,_type,{value:INTEGER})}isNaN(){return this.value===null}toString(){return String(this.value)}[_inspect](){return`[BigInt: ${this.toString()}]}`}valueOf(){return this.value}},INTEGER=Symbol("integer");function Integer(e){let t=Number(e);return Object.is(t,-0)&&(t=0),global.BigInt&&!Number.isSafeInteger(t)?new BoxedBigInt(e):Object.defineProperties(new Number(t),{isNaN:{value:function(){return isNaN(this)}},[_type]:{value:INTEGER},[_inspect]:{value:()=>`[Integer: ${e}]`}})}function isInteger(e){return e===null||typeof e!="object"?!1:e[_type]===INTEGER}var FLOAT=Symbol("float");function Float(e){return Object.defineProperties(new Number(e),{[_type]:{value:FLOAT},[_inspect]:{value:()=>`[Float: ${e}]`}})}function isFloat(e){return e===null||typeof e!="object"?!1:e[_type]===FLOAT}function tomlType(e){let t=typeof e;if(t==="object"){if(e===null)return"null";if(e instanceof Date)return"datetime";if(_type in e)switch(e[_type]){case INLINE_TABLE:return"inline-table";case INLINE_LIST:return"inline-list";case TABLE:return"table";case LIST:return"list";case FLOAT:return"float";case INTEGER:return"integer"}}return t}function makeParserClass(e){class t extends e{constructor(){super(),this.ctx=this.obj=Table()}atEndOfWord(){return this.char===CHAR_NUM||this.char===CTRL_I||this.char===CHAR_SP||this.atEndOfLine()}atEndOfLine(){return this.char===e.END||this.char===CTRL_J||this.char===CTRL_M}parseStart(){if(this.char===e.END)return null;if(this.char===CHAR_LSQB)return this.call(this.parseTableOrList);if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(isAlphaNumQuoteHyphen(this.char))return this.callNow(this.parseAssignStatement);throw this.error(new TomlError(`Unknown character "${this.char}"`))}parseWhitespaceToEOL(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M)return null;if(this.char===CHAR_NUM)return this.goto(this.parseComment);if(this.char===e.END||this.char===CTRL_J)return this.return();throw this.error(new TomlError("Unexpected character, expected only whitespace or comments till end of line"))}parseAssignStatement(){return this.callNow(this.parseAssign,this.recordAssignStatement)}recordAssignStatement(n){let i=this.ctx,o=n.key.pop();for(let s of n.key){if(hasKey(i,s)&&(!isTable(i[s])||i[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));i=i[s]=i[s]||Table()}if(hasKey(i,o))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?i[o]=n.value.valueOf():i[o]=n.value,this.goto(this.parseWhitespaceToEOL)}parseAssign(){return this.callNow(this.parseKeyword,this.recordAssignKeyword)}recordAssignKeyword(n){return this.state.resultTable?this.state.resultTable.push(n):this.state.resultTable=[n],this.goto(this.parseAssignKeywordPreDot)}parseAssignKeywordPreDot(){if(this.char===CHAR_PERIOD)return this.next(this.parseAssignKeywordPostDot);if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.goto(this.parseAssignEqual)}parseAssignKeywordPostDot(){if(this.char!==CHAR_SP&&this.char!==CTRL_I)return this.callNow(this.parseKeyword,this.recordAssignKeyword)}parseAssignEqual(){if(this.char===CHAR_EQUALS)return this.next(this.parseAssignPreValue);throw this.error(new TomlError('Invalid character, expected "="'))}parseAssignPreValue(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseValue,this.recordAssignValue)}recordAssignValue(n){return this.returnNow({key:this.state.resultTable,value:n})}parseComment(){do if(this.char===e.END||this.char===CTRL_J)return this.return();while(this.nextChar())}parseTableOrList(){if(this.char===CHAR_LSQB)this.next(this.parseList);else return this.goto(this.parseTable)}parseTable(){return this.ctx=this.obj,this.goto(this.parseTableNext)}parseTableNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseTableMore)}parseTableMore(n){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,n)&&(!isTable(this.ctx[n])||this.ctx[n][_declared]))throw this.error(new TomlError("Can't redefine existing key"));return this.ctx=this.ctx[n]=this.ctx[n]||Table(),this.ctx[_declared]=!0,this.next(this.parseWhitespaceToEOL)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,n))this.ctx=this.ctx[n]=Table();else if(isTable(this.ctx[n]))this.ctx=this.ctx[n];else if(isList(this.ctx[n]))this.ctx=this.ctx[n][this.ctx[n].length-1];else throw this.error(new TomlError("Can't redefine existing key"));return this.next(this.parseTableNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseList(){return this.ctx=this.obj,this.goto(this.parseListNext)}parseListNext(){return this.char===CHAR_SP||this.char===CTRL_I?null:this.callNow(this.parseKeyword,this.parseListMore)}parseListMore(n){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CHAR_RSQB){if(hasKey(this.ctx,n)||(this.ctx[n]=List()),isInlineList(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline array"));if(isList(this.ctx[n])){let i=Table();this.ctx[n].push(i),this.ctx=i}else throw this.error(new TomlError("Can't redefine an existing key"));return this.next(this.parseListEnd)}else if(this.char===CHAR_PERIOD){if(!hasKey(this.ctx,n))this.ctx=this.ctx[n]=Table();else{if(isInlineList(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline array"));if(isInlineTable(this.ctx[n]))throw this.error(new TomlError("Can't extend an inline table"));if(isList(this.ctx[n]))this.ctx=this.ctx[n][this.ctx[n].length-1];else if(isTable(this.ctx[n]))this.ctx=this.ctx[n];else throw this.error(new TomlError("Can't redefine an existing key"))}return this.next(this.parseListNext)}else throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseListEnd(n){if(this.char===CHAR_RSQB)return this.next(this.parseWhitespaceToEOL);throw this.error(new TomlError("Unexpected character, expected whitespace, . or ]"))}parseValue(){if(this.char===e.END)throw this.error(new TomlError("Key without value"));if(this.char===CHAR_QUOT)return this.next(this.parseDoubleString);if(this.char===CHAR_APOS)return this.next(this.parseSingleString);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)return this.goto(this.parseNumberSign);if(this.char===CHAR_i)return this.next(this.parseInf);if(this.char===CHAR_n)return this.next(this.parseNan);if(isDigit(this.char))return this.goto(this.parseNumberOrDateTime);if(this.char===CHAR_t||this.char===CHAR_f)return this.goto(this.parseBoolean);if(this.char===CHAR_LSQB)return this.call(this.parseInlineList,this.recordValue);if(this.char===CHAR_LCUB)return this.call(this.parseInlineTable,this.recordValue);throw this.error(new TomlError("Unexpected character, expecting string, number, datetime, boolean, inline array or inline table"))}recordValue(n){return this.returnNow(n)}parseInf(){if(this.char===CHAR_n)return this.next(this.parseInf2);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseInf2(){if(this.char===CHAR_f)return this.state.buf==="-"?this.return(-1/0):this.return(1/0);throw this.error(new TomlError('Unexpected character, expected "inf", "+inf" or "-inf"'))}parseNan(){if(this.char===CHAR_a)return this.next(this.parseNan2);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseNan2(){if(this.char===CHAR_n)return this.return(NaN);throw this.error(new TomlError('Unexpected character, expected "nan"'))}parseKeyword(){return this.char===CHAR_QUOT?this.next(this.parseBasicString):this.char===CHAR_APOS?this.next(this.parseLiteralString):this.goto(this.parseBareKey)}parseBareKey(){do{if(this.char===e.END)throw this.error(new TomlError("Key ended without value"));if(isAlphaNumHyphen(this.char))this.consume();else{if(this.state.buf.length===0)throw this.error(new TomlError("Empty bare keys are not allowed"));return this.returnNow()}}while(this.nextChar())}parseSingleString(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiStringMaybe):this.goto(this.parseLiteralString)}parseLiteralString(){do{if(this.char===CHAR_APOS)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}parseLiteralMultiStringMaybe(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiString):this.returnNow()}parseLiteralMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseLiteralMultiStringContent):this.goto(this.parseLiteralMultiStringContent)}parseLiteralMultiStringContent(){do{if(this.char===CHAR_APOS)return this.next(this.parseLiteralMultiEnd);if(this.char===e.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}parseLiteralMultiEnd(){return this.char===CHAR_APOS?this.next(this.parseLiteralMultiEnd2):(this.state.buf+="'",this.goto(this.parseLiteralMultiStringContent))}parseLiteralMultiEnd2(){return this.char===CHAR_APOS?this.return():(this.state.buf+="''",this.goto(this.parseLiteralMultiStringContent))}parseDoubleString(){return this.char===CHAR_QUOT?this.next(this.parseMultiStringMaybe):this.goto(this.parseBasicString)}parseBasicString(){do{if(this.char===CHAR_BSOL)return this.call(this.parseEscape,this.recordEscapeReplacement);if(this.char===CHAR_QUOT)return this.return();if(this.atEndOfLine())throw this.error(new TomlError("Unterminated string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}recordEscapeReplacement(n){return this.state.buf+=n,this.goto(this.parseBasicString)}parseMultiStringMaybe(){return this.char===CHAR_QUOT?this.next(this.parseMultiString):this.returnNow()}parseMultiString(){return this.char===CTRL_M?null:this.char===CTRL_J?this.next(this.parseMultiStringContent):this.goto(this.parseMultiStringContent)}parseMultiStringContent(){do{if(this.char===CHAR_BSOL)return this.call(this.parseMultiEscape,this.recordMultiEscapeReplacement);if(this.char===CHAR_QUOT)return this.next(this.parseMultiEnd);if(this.char===e.END)throw this.error(new TomlError("Unterminated multi-line string"));if(this.char===CHAR_DEL||this.char<=CTRL_CHAR_BOUNDARY&&this.char!==CTRL_I&&this.char!==CTRL_J&&this.char!==CTRL_M)throw this.errorControlCharInString();this.consume()}while(this.nextChar())}errorControlCharInString(){let n="\\u00";return this.char<16&&(n+="0"),n+=this.char.toString(16),this.error(new TomlError(`Control characters (codes < 0x1f and 0x7f) are not allowed in strings, use ${n} instead`))}recordMultiEscapeReplacement(n){return this.state.buf+=n,this.goto(this.parseMultiStringContent)}parseMultiEnd(){return this.char===CHAR_QUOT?this.next(this.parseMultiEnd2):(this.state.buf+='"',this.goto(this.parseMultiStringContent))}parseMultiEnd2(){return this.char===CHAR_QUOT?this.return():(this.state.buf+='""',this.goto(this.parseMultiStringContent))}parseMultiEscape(){return this.char===CTRL_M||this.char===CTRL_J?this.next(this.parseMultiTrim):this.char===CHAR_SP||this.char===CTRL_I?this.next(this.parsePreMultiTrim):this.goto(this.parseEscape)}parsePreMultiTrim(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===CTRL_M||this.char===CTRL_J)return this.next(this.parseMultiTrim);throw this.error(new TomlError("Can't escape whitespace"))}parseMultiTrim(){return this.char===CTRL_J||this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M?null:this.returnNow()}parseEscape(){if(this.char in escapes)return this.return(escapes[this.char]);if(this.char===CHAR_u)return this.call(this.parseSmallUnicode,this.parseUnicodeReturn);if(this.char===CHAR_U)return this.call(this.parseLargeUnicode,this.parseUnicodeReturn);throw this.error(new TomlError("Unknown escape character: "+this.char))}parseUnicodeReturn(n){try{let i=parseInt(n,16);if(i>=SURROGATE_FIRST&&i<=SURROGATE_LAST)throw this.error(new TomlError("Invalid unicode, character in range 0xD800 - 0xDFFF is reserved"));return this.returnNow(String.fromCodePoint(i))}catch(i){throw this.error(TomlError.wrap(i))}}parseSmallUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=4)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseLargeUnicode(){if(isHexit(this.char)){if(this.consume(),this.state.buf.length>=8)return this.return()}else throw this.error(new TomlError("Invalid character in unicode sequence, expected hex"))}parseNumberSign(){return this.consume(),this.next(this.parseMaybeSignedInfOrNan)}parseMaybeSignedInfOrNan(){return this.char===CHAR_i?this.next(this.parseInf):this.char===CHAR_n?this.next(this.parseNan):this.callNow(this.parseNoUnder,this.parseNumberIntegerStart)}parseNumberIntegerStart(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberIntegerExponentOrDecimal)):this.goto(this.parseNumberInteger)}parseNumberIntegerExponentOrDecimal(){return this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Integer(this.state.buf))}parseNumberInteger(){if(isDigit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder);if(this.char===CHAR_E||this.char===CHAR_e)return this.consume(),this.next(this.parseNumberExponentSign);if(this.char===CHAR_PERIOD)return this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseNoUnder(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD||this.char===CHAR_E||this.char===CHAR_e)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNoUnderHexOctBinLiteral(){if(this.char===CHAR_LOWBAR||this.char===CHAR_PERIOD)throw this.error(new TomlError("Unexpected character, expected digit"));if(this.atEndOfWord())throw this.error(new TomlError("Incomplete number"));return this.returnNow()}parseNumberFloat(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberFloat);if(isDigit(this.char))this.consume();else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.returnNow(Float(this.state.buf))}parseNumberExponentSign(){if(isDigit(this.char))return this.goto(this.parseNumberExponent);if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.call(this.parseNoUnder,this.parseNumberExponent);else throw this.error(new TomlError("Unexpected character, expected -, + or digit"))}parseNumberExponent(){if(isDigit(this.char))this.consume();else return this.char===CHAR_LOWBAR?this.call(this.parseNoUnder):this.returnNow(Float(this.state.buf))}parseNumberOrDateTime(){return this.char===CHAR_0?(this.consume(),this.next(this.parseNumberBaseOrDateTime)):this.goto(this.parseNumberOrDateTimeOnly)}parseNumberOrDateTimeOnly(){if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnder,this.parseNumberInteger);if(isDigit(this.char))this.consume(),this.state.buf.length>4&&this.next(this.parseNumberInteger);else return this.char===CHAR_E||this.char===CHAR_e?(this.consume(),this.next(this.parseNumberExponentSign)):this.char===CHAR_PERIOD?(this.consume(),this.call(this.parseNoUnder,this.parseNumberFloat)):this.char===CHAR_HYPHEN?this.goto(this.parseDateTime):this.char===CHAR_COLON?this.goto(this.parseOnlyTimeHour):this.returnNow(Integer(this.state.buf))}parseDateTimeOnly(){if(this.state.buf.length<4){if(isDigit(this.char))return this.consume();if(this.char===CHAR_COLON)return this.goto(this.parseOnlyTimeHour);throw this.error(new TomlError("Expected digit while parsing year part of a date"))}else{if(this.char===CHAR_HYPHEN)return this.goto(this.parseDateTime);throw this.error(new TomlError("Expected hyphen (-) while parsing year part of date"))}}parseNumberBaseOrDateTime(){return this.char===CHAR_b?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerBin)):this.char===CHAR_o?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerOct)):this.char===CHAR_x?(this.consume(),this.call(this.parseNoUnderHexOctBinLiteral,this.parseIntegerHex)):this.char===CHAR_PERIOD?this.goto(this.parseNumberInteger):isDigit(this.char)?this.goto(this.parseDateTimeOnly):this.returnNow(Integer(this.state.buf))}parseIntegerHex(){if(isHexit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseIntegerOct(){if(isOctit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseIntegerBin(){if(isBit(this.char))this.consume();else{if(this.char===CHAR_LOWBAR)return this.call(this.parseNoUnderHexOctBinLiteral);{let n=Integer(this.state.buf);if(n.isNaN())throw this.error(new TomlError("Invalid number"));return this.returnNow(n)}}}parseDateTime(){if(this.state.buf.length<4)throw this.error(new TomlError("Years less than 1000 must be zero padded to four characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseDateMonth)}parseDateMonth(){if(this.char===CHAR_HYPHEN){if(this.state.buf.length<2)throw this.error(new TomlError("Months less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseDateDay)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseDateDay(){if(this.char===CHAR_T||this.char===CHAR_SP){if(this.state.buf.length<2)throw this.error(new TomlError("Days less than 10 must be zero padded to two characters"));return this.state.result+="-"+this.state.buf,this.state.buf="",this.next(this.parseStartTimeHour)}else{if(this.atEndOfWord())return this.returnNow(createDate(this.state.result+"-"+this.state.buf));if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}}parseStartTimeHour(){return this.atEndOfWord()?this.returnNow(createDate(this.state.result)):this.goto(this.parseTimeHour)}parseTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result+="T"+this.state.buf,this.state.buf="",this.next(this.parseTimeMin)}else if(isDigit(this.char))this.consume();else throw this.error(new TomlError("Incomplete datetime"))}parseTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeSec);throw this.error(new TomlError("Incomplete datetime"))}}parseTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseTimeZoneOrFraction)}else throw this.error(new TomlError("Incomplete datetime"))}parseOnlyTimeHour(){if(this.char===CHAR_COLON){if(this.state.buf.length<2)throw this.error(new TomlError("Hours less than 10 must be zero padded to two characters"));return this.state.result=this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeMin)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeMin(){if(this.state.buf.length<2&&isDigit(this.char))this.consume();else{if(this.state.buf.length===2&&this.char===CHAR_COLON)return this.state.result+=":"+this.state.buf,this.state.buf="",this.next(this.parseOnlyTimeSec);throw this.error(new TomlError("Incomplete time"))}}parseOnlyTimeSec(){if(isDigit(this.char)){if(this.consume(),this.state.buf.length===2)return this.next(this.parseOnlyTimeFractionMaybe)}else throw this.error(new TomlError("Incomplete time"))}parseOnlyTimeFractionMaybe(){if(this.state.result+=":"+this.state.buf,this.char===CHAR_PERIOD)this.state.buf="",this.next(this.parseOnlyTimeFraction);else return this.return(createTime(this.state.result))}parseOnlyTimeFraction(){if(isDigit(this.char))this.consume();else if(this.atEndOfWord()){if(this.state.buf.length===0)throw this.error(new TomlError("Expected digit in milliseconds"));return this.returnNow(createTime(this.state.result+"."+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}parseTimeZoneOrFraction(){if(this.char===CHAR_PERIOD)this.consume(),this.next(this.parseDateTimeFraction);else if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}parseDateTimeFraction(){if(isDigit(this.char))this.consume();else{if(this.state.buf.length===1)throw this.error(new TomlError("Expected digit in milliseconds"));if(this.char===CHAR_HYPHEN||this.char===CHAR_PLUS)this.consume(),this.next(this.parseTimeZoneHour);else{if(this.char===CHAR_Z)return this.consume(),this.return(createDateTime(this.state.result+this.state.buf));if(this.atEndOfWord())return this.returnNow(createDateTimeFloat(this.state.result+this.state.buf));throw this.error(new TomlError("Unexpected character in datetime, expected period (.), minus (-), plus (+) or Z"))}}}parseTimeZoneHour(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.next(this.parseTimeZoneSep)}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseTimeZoneSep(){if(this.char===CHAR_COLON)this.consume(),this.next(this.parseTimeZoneMin);else throw this.error(new TomlError("Unexpected character in datetime, expected colon"))}parseTimeZoneMin(){if(isDigit(this.char)){if(this.consume(),/\d\d$/.test(this.state.buf))return this.return(createDateTime(this.state.result+this.state.buf))}else throw this.error(new TomlError("Unexpected character in datetime, expected digit"))}parseBoolean(){if(this.char===CHAR_t)return this.consume(),this.next(this.parseTrue_r);if(this.char===CHAR_f)return this.consume(),this.next(this.parseFalse_a)}parseTrue_r(){if(this.char===CHAR_r)return this.consume(),this.next(this.parseTrue_u);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_u(){if(this.char===CHAR_u)return this.consume(),this.next(this.parseTrue_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseTrue_e(){if(this.char===CHAR_e)return this.return(!0);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_a(){if(this.char===CHAR_a)return this.consume(),this.next(this.parseFalse_l);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_l(){if(this.char===CHAR_l)return this.consume(),this.next(this.parseFalse_s);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_s(){if(this.char===CHAR_s)return this.consume(),this.next(this.parseFalse_e);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseFalse_e(){if(this.char===CHAR_e)return this.return(!1);throw this.error(new TomlError("Invalid boolean, expected true or false"))}parseInlineList(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===e.END)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_NUM?this.call(this.parseComment):this.char===CHAR_RSQB?this.return(this.state.resultArr||InlineList()):this.callNow(this.parseValue,this.recordInlineListValue)}recordInlineListValue(n){if(this.state.resultArr){let i=this.state.resultArr[_contentType],o=tomlType(n);if(i!==o)throw this.error(new TomlError(`Inline lists must be a single type, not a mix of ${i} and ${o}`))}else this.state.resultArr=InlineList(tomlType(n));return isFloat(n)||isInteger(n)?this.state.resultArr.push(n.valueOf()):this.state.resultArr.push(n),this.goto(this.parseInlineListNext)}parseInlineListNext(){if(this.char===CHAR_SP||this.char===CTRL_I||this.char===CTRL_M||this.char===CTRL_J)return null;if(this.char===CHAR_NUM)return this.call(this.parseComment);if(this.char===CHAR_COMMA)return this.next(this.parseInlineList);if(this.char===CHAR_RSQB)return this.goto(this.parseInlineList);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}parseInlineTable(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===e.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));return this.char===CHAR_RCUB?this.return(this.state.resultTable||InlineTable()):(this.state.resultTable||(this.state.resultTable=InlineTable()),this.callNow(this.parseAssign,this.recordInlineTableValue))}recordInlineTableValue(n){let i=this.state.resultTable,o=n.key.pop();for(let s of n.key){if(hasKey(i,s)&&(!isTable(i[s])||i[s][_declared]))throw this.error(new TomlError("Can't redefine existing key"));i=i[s]=i[s]||Table()}if(hasKey(i,o))throw this.error(new TomlError("Can't redefine existing key"));return isInteger(n.value)||isFloat(n.value)?i[o]=n.value.valueOf():i[o]=n.value,this.goto(this.parseInlineTableNext)}parseInlineTableNext(){if(this.char===CHAR_SP||this.char===CTRL_I)return null;if(this.char===e.END||this.char===CHAR_NUM||this.char===CTRL_J||this.char===CTRL_M)throw this.error(new TomlError("Unterminated inline array"));if(this.char===CHAR_COMMA)return this.next(this.parseInlineTable);if(this.char===CHAR_RCUB)return this.goto(this.parseInlineTable);throw this.error(new TomlError("Invalid character, expected whitespace, comma (,) or close bracket (])"))}}return t}});var Ps=he((D3,db)=>{"use strict";db.exports=Ik;function Ik(e,t){if(e.pos==null||e.line==null)return e;let r=e.message;if(r+=` at row ${e.line+1}, col ${e.col+1}, pos ${e.pos}:
|
|
882
|
+
`,t&&t.split){let n=t.split(/\n/),i=String(Math.min(n.length,e.line+3)).length,o=" ";for(;o.length<i;)o+=" ";for(let s=Math.max(0,e.line-1);s<Math.min(n.length,e.line+2);++s){let a=String(s+1);if(a.length<i&&(a=" "+a),e.line===s){r+=a+"> "+n[s]+`
|
|
883
|
+
`,r+=o+" ";for(let c=0;c<e.col;++c)r+=" ";r+=`^
|
|
884
|
+
`}else r+=a+": "+n[s]+`
|
|
885
|
+
`}}return e.message=r+`
|
|
886
|
+
`,e}});var fb=he((L3,pb)=>{"use strict";pb.exports=Ck;var Ak=ks(),Tk=Ps();function Ck(e){global.Buffer&&global.Buffer.isBuffer(e)&&(e=e.toString("utf8"));let t=new Ak;try{return t.parse(e),t.finish()}catch(r){throw Tk(r,e)}}});var gb=he((k3,hb)=>{"use strict";hb.exports=Ok;var $k=ks(),mb=Ps();function Ok(e,t){t||(t={});let r=0,n=t.blocksize||40960,i=new $k;return new Promise((s,a)=>{setImmediate(o,r,n,s,a)});function o(s,a,c,l){if(s>=e.length)try{return c(i.finish())}catch(d){return l(mb(d,e))}try{i.parse(e.slice(s,s+a)),setImmediate(o,s+a,a,c,l)}catch(d){l(mb(d,e))}}}});var _b=he((P3,wb)=>{"use strict";wb.exports=Nk;var Rk=hx("stream"),yb=ks();function Nk(e){return e?Dk(e):Lk(e)}function Dk(e){let t=new yb;return e.setEncoding("utf8"),new Promise((r,n)=>{let i,o=!1,s=!1;function a(){if(o=!0,!i)try{r(t.finish())}catch(d){n(d)}}function c(d){s=!0,n(d)}e.once("end",a),e.once("error",c),l();function l(){i=!0;let d;for(;(d=e.read())!==null;)try{t.parse(d)}catch(p){return c(p)}if(i=!1,o)return a();s||e.once("readable",l)}})}function Lk(){let e=new yb;return new Rk.Transform({objectMode:!0,transform(t,r,n){try{e.parse(t.toString(r))}catch(i){this.emit("error",i)}n()},flush(t){try{this.push(e.finish())}catch(r){this.emit("error",r)}t()}})}});var Eb=he((M3,ki)=>{"use strict";ki.exports=fb();ki.exports.async=gb();ki.exports.stream=_b();ki.exports.prettyError=Ps()});var Cb=he((F3,hu)=>{"use strict";hu.exports=kk;hu.exports.value=mu;function kk(e){if(e===null)throw $r("null");if(e===void 0)throw $r("undefined");if(typeof e!="object")throw $r(typeof e);if(typeof e.toJSON=="function"&&(e=e.toJSON()),e==null)return null;let t=ve(e);if(t!=="table")throw $r(t);return fu("","",e)}function $r(e){return new Error("Can only stringify objects, not "+e)}function Pk(){return new Error("Array values can't have mixed types")}function bb(e){return Object.keys(e).filter(t=>xb(e[t]))}function Mk(e){return Object.keys(e).filter(t=>!xb(e[t]))}function Ms(e){let t=Array.isArray(e)?[]:Object.prototype.hasOwnProperty.call(e,"__proto__")?{["__proto__"]:void 0}:{};for(let r of Object.keys(e))e[r]&&typeof e[r].toJSON=="function"&&!("toISOString"in e[r])?t[r]=e[r].toJSON():t[r]=e[r];return t}function fu(e,t,r){r=Ms(r);var n,i;n=bb(r),i=Mk(r);var o=[],s=t||"";n.forEach(c=>{var l=ve(r[c]);l!=="undefined"&&l!=="null"&&o.push(s+Fs(c)+" = "+Ib(r[c],!0))}),o.length>0&&o.push("");var a=e&&n.length>0?t+" ":"";return i.forEach(c=>{o.push(qk(e,a,c,r[c]))}),o.join(`
|
|
887
|
+
`)}function xb(e){switch(ve(e)){case"undefined":case"null":case"integer":case"nan":case"float":case"boolean":case"string":case"datetime":return!0;case"array":return e.length===0||ve(e[0])!=="table";case"table":return Object.keys(e).length===0;default:return!1}}function ve(e){return e===void 0?"undefined":e===null?"null":typeof e=="bigint"||Number.isInteger(e)&&!Object.is(e,-0)?"integer":typeof e=="number"?"float":typeof e=="boolean"?"boolean":typeof e=="string"?"string":"toISOString"in e?isNaN(e)?"undefined":"datetime":Array.isArray(e)?"array":"table"}function Fs(e){var t=String(e);return/^[-A-Za-z0-9_]+$/.test(t)?t:Sb(t)}function Sb(e){return'"'+vb(e).replace(/"/g,'\\"')+'"'}function Fk(e){return"'"+e+"'"}function Hk(e,t){for(;t.length<e;)t="0"+t;return t}function vb(e){return e.replace(/\\/g,"\\\\").replace(/[\b]/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/([\u0000-\u001f\u007f])/,t=>"\\u"+Hk(4,t.codePointAt(0).toString(16)))}function Bk(e){let t=e.split(/\n/).map(r=>vb(r).replace(/"(?="")/g,'\\"')).join(`
|
|
888
|
+
`);return t.slice(-1)==='"'&&(t+=`\\
|
|
889
|
+
`),`"""
|
|
890
|
+
`+t+'"""'}function Ib(e,t){let r=ve(e);return r==="string"&&(t&&/\n/.test(e)?r="string-multiline":!/[\b\t\n\f\r']/.test(e)&&/"/.test(e)&&(r="string-literal")),mu(e,r)}function mu(e,t){switch(t||(t=ve(e)),t){case"string-multiline":return Bk(e);case"string":return Sb(e);case"string-literal":return Fk(e);case"integer":return Ab(e);case"float":return Uk(e);case"boolean":return Gk(e);case"datetime":return jk(e);case"array":return Kk(e.filter(r=>ve(r)!=="null"&&ve(r)!=="undefined"&&ve(r)!=="nan"));case"table":return Yk(e);default:throw $r(t)}}function Ab(e){return String(e).replace(/\B(?=(\d{3})+(?!\d))/g,"_")}function Uk(e){if(e===1/0)return"inf";if(e===-1/0)return"-inf";if(Object.is(e,NaN))return"nan";if(Object.is(e,-0))return"-0.0";var t=String(e).split("."),r=t[0],n=t[1]||0;return Ab(r)+"."+n}function Gk(e){return String(e)}function jk(e){return e.toISOString()}function Wk(e){return e==="float"||e==="integer"}function Vk(e){var t=ve(e[0]);return e.every(r=>ve(r)===t)?t:e.every(r=>Wk(ve(r)))?"float":"mixed"}function Tb(e){let t=Vk(e);if(t==="mixed")throw Pk();return t}function Kk(e){e=Ms(e);let t=Tb(e);var r="[",n=e.map(i=>mu(i,t));return n.join(", ").length>60||/\n/.test(n)?r+=`
|
|
891
|
+
`+n.join(`,
|
|
892
|
+
`)+`
|
|
893
|
+
`:r+=" "+n.join(", ")+(n.length>0?" ":""),r+"]"}function Yk(e){e=Ms(e);var t=[];return Object.keys(e).forEach(r=>{t.push(Fs(r)+" = "+Ib(e[r],!1))}),"{ "+t.join(", ")+(t.length>0?" ":"")+"}"}function qk(e,t,r,n){var i=ve(n);if(i==="array")return Jk(e,t,r,n);if(i==="table")return zk(e,t,r,n);throw $r(i)}function Jk(e,t,r,n){n=Ms(n),Tb(n);var i=ve(n[0]);if(i!=="table")throw $r(i);var o=e+Fs(r),s="";return n.forEach(a=>{s.length>0&&(s+=`
|
|
894
|
+
`),s+=t+"[["+o+`]]
|
|
895
|
+
`,s+=fu(o+".",t,a)}),s}function zk(e,t,r,n){var i=e+Fs(r),o="";return bb(n).length>0&&(o+=t+"["+i+`]
|
|
896
|
+
`),o+fu(i+".",t,n)}});var $b=he(gu=>{"use strict";gu.parse=Eb();gu.stringify=Cb()});var kb={};T(kb,{detect:()=>eP,install:()=>rP,meta:()=>Qk,resolveServerPath:()=>Nb,uninstall:()=>iP,verify:()=>nP,writeAgentsFile:()=>Lb,writeMcpEntry:()=>Db});import{join as Mn,dirname as Hs}from"node:path";import{homedir as Rb}from"node:os";import{existsSync as Qt}from"node:fs";import{fileURLToPath as Xk}from"node:url";async function eP(){return Qt(Pi)}function Nb(){let e=Mn(Ob,"dist","server.js"),t=Mn(Ob,"src","server.js");return Qt(e)?e:t}async function Db({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Fe,"utf8");r=Fn.default.parse(o)}catch{}let n=Qt(Fe);return r.mcp_servers=r.mcp_servers||{},r.mcp_servers.sigil={command:process.execPath,args:[Nb(),"--mcp"],env:{DOTENV_CONFIG_PATH:Zk}},e||await t.mkdir(Pi,{recursive:!0}),{action:(await te(Fe,Fn.default.stringify(r),{dryRun:e})).action,path:Fe,detail:n?"+[mcp_servers.sigil] (other keys preserved)":"new config.toml with sigil MCP entry"}}function tP(){return[Bs,qt(),Hn].join(`
|
|
897
|
+
`)}async function Lb({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Pi,{recursive:!0});let r="";Qt(He)&&(r=await t.readFile(He,"utf8"));let n=tP(),i,o,s=r.indexOf(Bs),a=r.indexOf(Hn);if(s!==-1&&a!==-1&&a>s){let l=r.slice(0,s),d=r.slice(a+Hn.length);i=`${l}${n}${d}`,o="sigil block replaced (other content preserved)"}else if(!r.trim())i=`${n}
|
|
898
|
+
`,o="new AGENTS.md with sigil block";else{let l=r.endsWith(`
|
|
899
|
+
`)?`
|
|
900
|
+
`:`
|
|
901
|
+
|
|
902
|
+
`;i=`${r}${l}${n}
|
|
903
|
+
`,o="appended sigil block (existing content preserved)"}return i===r?{action:"skip",path:He,detail:"block already up to date"}:{action:(await te(He,i,{dryRun:e})).action,path:He,detail:o}}async function rP({dryRun:e=!1}={}){let t=[],r=await Db({dryRun:e});r&&t.push(r);let n=await Lb({dryRun:e});return n&&t.push(n),{actions:t}}async function nP(){let e=await import("node:fs/promises");if(!Qt(Fe))return{installed:!1,reason:"~/.codex/config.toml missing"};let t;try{t=Fn.default.parse(await e.readFile(Fe,"utf8"))}catch(n){return{installed:!1,reason:`~/.codex/config.toml unparseable: ${n.message}`}}if(!t.mcp_servers?.sigil)return{installed:!1,reason:"[mcp_servers.sigil] missing from ~/.codex/config.toml"};if(!Qt(He))return{installed:!1,reason:"~/.codex/AGENTS.md missing"};let r=await e.readFile(He,"utf8");return!r.includes(Bs)||!r.includes(Hn)?{installed:!1,reason:"sigil block markers missing from ~/.codex/AGENTS.md"}:{installed:!0}}async function iP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Qt(Fe)){let n;try{n=Fn.default.parse(await t.readFile(Fe,"utf8"))}catch(i){return r.push({action:"skip",path:Fe,detail:`unparseable \u2014 not touched: ${i.message}`}),{actions:r}}if(n.mcp_servers?.sigil){delete n.mcp_servers.sigil,Object.keys(n.mcp_servers).length===0&&delete n.mcp_servers;let i=await te(Fe,Fn.default.stringify(n),{dryRun:e});r.push({action:i.action,path:Fe,detail:"-[mcp_servers.sigil]"})}else r.push({action:"skip",path:Fe,detail:"[mcp_servers.sigil] not present"})}if(Qt(He)){let n=await t.readFile(He,"utf8"),i=n.indexOf(Bs),o=n.indexOf(Hn);if(i!==-1&&o!==-1&&o>i){let s=n.slice(0,i).replace(/\n+$/,""),a=n.slice(o+Hn.length).replace(/^\n+/,""),c=s&&a?`${s}
|
|
904
|
+
|
|
905
|
+
${a}`:s||a,l=await te(He,c.endsWith(`
|
|
906
|
+
`)?c:`${c}
|
|
907
|
+
`,{dryRun:e});r.push({action:l.action,path:He,detail:"sigil block removed (other content preserved)"})}else r.push({action:"skip",path:He,detail:"sigil block not present"})}return{actions:r}}var Fn,Pi,Fe,He,Zk,Ob,Bs,Hn,Qk,Pb=f(()=>{Fn=Ys($b(),1);_r();Nn();Pi=Mn(Rb(),".codex"),Fe=Mn(Pi,"config.toml"),He=Mn(Pi,"AGENTS.md"),Zk=Mn(Rb(),".sigil",".env"),Ob=Hs(Hs(Hs(Hs(Xk(import.meta.url))))),Bs="<!-- BEGIN sigil -->",Hn="<!-- END sigil -->",Qk={id:"codex-cli",label:"Codex CLI",hint:"TOML config + AGENTS.md (no native hooks)"}});var Gb={};T(Gb,{detect:()=>cP,install:()=>lP,meta:()=>aP,resolveServerPath:()=>Hb,uninstall:()=>dP,verify:()=>uP,writeMcpEntry:()=>Bb,writeSteeringFile:()=>Ub});import{join as Un,dirname as Bn}from"node:path";import{homedir as Fb}from"node:os";import{existsSync as Rr}from"node:fs";import{fileURLToPath as oP}from"node:url";async function cP(){return Rr(yu)}function Hb(){let e=Un(Mb,"dist","server.js"),t=Un(Mb,"src","server.js");return Rr(e)?e:t}async function Bb({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r={};try{let o=await t.readFile(Oe,"utf8");r=JSON.parse(o)}catch{}let n=Rr(Oe);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[Hb(),"--mcp"],env:{DOTENV_CONFIG_PATH:sP}},e||await t.mkdir(Bn(Oe),{recursive:!0}),{action:(await te(Oe,JSON.stringify(r,null,2),{dryRun:e})).action,path:Oe,detail:n?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}async function Ub({dryRun:e=!1}={}){let t=await import("node:fs/promises");e||await t.mkdir(Bn(Or),{recursive:!0});let r=await te(Or,qt(),{dryRun:e});return{action:r.action,path:Or,detail:`${r.bytes??0} bytes, steering (always-on)`}}async function lP({dryRun:e=!1}={}){let t=[],r=await Bb({dryRun:e});r&&t.push(r);let n=await Ub({dryRun:e});return n&&t.push(n),{actions:t}}async function uP(){let e=await import("node:fs/promises");if(!Rr(Oe))return{installed:!1,reason:"~/.kiro/settings/mcp.json missing"};let t;try{t=JSON.parse(await e.readFile(Oe,"utf8"))}catch{return{installed:!1,reason:"~/.kiro/settings/mcp.json is not valid JSON"}}return t.mcpServers?.sigil?Rr(Or)?{installed:!0}:{installed:!1,reason:"~/.kiro/steering/sigil.md missing"}:{installed:!1,reason:"sigil entry missing from ~/.kiro/settings/mcp.json"}}async function dP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(Rr(Oe)){let n;try{n=JSON.parse(await t.readFile(Oe,"utf8"))}catch{return r.push({action:"skip",path:Oe,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(n.mcpServers?.sigil){delete n.mcpServers.sigil;let i=await te(Oe,JSON.stringify(n,null,2),{dryRun:e});r.push({action:i.action,path:Oe,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:Oe,detail:"sigil entry not present"})}return Rr(Or)&&(e||await t.unlink(Or),r.push({action:"delete",path:Or,detail:"sigil steering file removed"})),{actions:r}}var yu,Oe,Or,sP,Mb,aP,jb=f(()=>{_r();Nn();yu=Un(Fb(),".kiro"),Oe=Un(yu,"settings","mcp.json"),Or=Un(yu,"steering","sigil.md"),sP=Un(Fb(),".sigil",".env"),Mb=Bn(Bn(Bn(Bn(oP(import.meta.url))))),aP={id:"kiro",label:"Kiro",hint:"MCP + steering file (steering auto-applies)"}});var Kb={};T(Kb,{detect:()=>yP,install:()=>EP,meta:()=>gP,setMemoryProviderInYaml:()=>_u,uninstall:()=>bP,verify:()=>xP});import{join as Nr,dirname as Mi}from"node:path";import{homedir as pP}from"node:os";import{existsSync as pt}from"node:fs";import{fileURLToPath as fP}from"node:url";async function yP(){return pt(Vb)}function _u(e,t){let r=e.split(`
|
|
908
|
+
`),n=!1,i=!1;for(let o=0;o<r.length;o++){let s=r[o];if(/^[A-Za-z_][\w-]*:\s*$/.test(s)||/^[A-Za-z_][\w-]*:\s/.test(s)){n=/^memory:\s*$/.test(s);continue}if(!n)continue;let a=s.match(/^(\s+provider:\s*)(['"]?)([^'"\n]*)\2(\s*(#.*)?)$/);if(a){let[,c,,l,d]=a;if(l===t)return{content:e,changed:!1};r[o]=`${c}'${t}'${d}`,i=!0;break}}return{content:r.join(`
|
|
909
|
+
`),changed:i}}async function wP({dryRun:e}){let t=await import("node:fs/promises");if(!pt(wu))throw new Error(`Plugin source missing at ${wu} \u2014 is this Sigil install complete? \`integrations/hermes/plugin/\` must ship with the package.`);return e?{action:pt(Be)?"modify":"create"}:(await t.mkdir(Mi(Be),{recursive:!0}),pt(Be)&&await t.rm(Be,{recursive:!0,force:!0}),await t.cp(wu,Be,{recursive:!0}),{action:"create"})}async function _P({dryRun:e,value:t}){let r=await import("node:fs/promises");if(!pt(tt))return{action:"skip",detail:"config.yaml not present \u2014 set memory.provider manually"};let n=await r.readFile(tt,"utf8"),{content:i,changed:o}=_u(n,t);return o?(e||await r.writeFile(tt,i,"utf8"),{action:"modify",detail:`memory.provider \u2192 '${t}'`}):{action:"skip",detail:`memory.provider already '${t}'`}}async function EP({dryRun:e=!1}={}){let t=[],r=await wP({dryRun:e});t.push({action:r.action,path:Be,detail:"plugin tree (__init__.py, plugin.yaml, README.md)"});let n=await _P({dryRun:e,value:"sigil"});return t.push({action:n.action,path:tt,detail:n.detail}),{actions:t}}async function bP({dryRun:e=!1}={}){let t=await import("node:fs/promises"),r=[];if(pt(Be)?(e||await t.rm(Be,{recursive:!0,force:!0}),r.push({action:"delete",path:Be,detail:"plugin directory removed"})):r.push({action:"skip",path:Be,detail:"plugin not present"}),pt(tt)){let n=await t.readFile(tt,"utf8"),i=n.match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),s=(i?i[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];if(s==="sigil"){let{content:a,changed:c}=_u(n,"");c&&!e&&await t.writeFile(tt,a,"utf8"),r.push({action:"modify",path:tt,detail:"memory.provider \u2192 '' (sigil cleared)"})}else r.push({action:"skip",path:tt,detail:`memory.provider is '${s??""}' (not sigil) \u2014 not touched`})}return{actions:r}}async function xP(){let e=await import("node:fs/promises");if(!pt(Be))return{installed:!1,reason:"plugin missing at ~/.hermes/hermes-agent/plugins/memory/sigil/"};if(!pt(Nr(Be,"__init__.py")))return{installed:!1,reason:"plugin dir present but __init__.py missing"};if(!pt(tt))return{installed:!1,reason:"~/.hermes/config.yaml missing"};let r=(await e.readFile(tt,"utf8")).match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),i=(r?r[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];return i!=="sigil"?{installed:!1,reason:`memory.provider in config.yaml is '${i??""}' (expected 'sigil')`}:{installed:!0}}var Wb,mP,Vb,Be,tt,hP,wu,gP,Yb=f(()=>{Wb=Nr(pP(),".hermes"),mP=Nr(Wb,"hermes-agent"),Vb=Nr(mP,"plugins","memory"),Be=Nr(Vb,"sigil"),tt=Nr(Wb,"config.yaml"),hP=Mi(Mi(Mi(Mi(fP(import.meta.url))))),wu=Nr(hP,"integrations","hermes","plugin"),gP={id:"hermes",label:"Hermes",hint:"Python memory-provider plugin + config.yaml flip"}});var Us={};T(Us,{listClients:()=>vP});async function vP(){return await Promise.all(Object.entries(SP).map(async([t,r])=>{let n=await r();if(!n.meta||typeof n.detect!="function"||typeof n.install!="function"||typeof n.uninstall!="function"||typeof n.verify!="function")throw new Error(`Client "${t}" is missing the install contract \u2014 expected exports: meta, detect, install, uninstall, verify`);return{...n.meta,detect:n.detect,install:n.install,uninstall:n.uninstall,verify:n.verify}}))}var SP,Gs=f(()=>{SP={"claude-code":()=>Promise.resolve().then(()=>(VE(),WE)),cursor:()=>Promise.resolve().then(()=>(ZE(),XE)),"codex-cli":()=>Promise.resolve().then(()=>(Pb(),kb)),kiro:()=>Promise.resolve().then(()=>(jb(),Gb)),hermes:()=>Promise.resolve().then(()=>(Yb(),Kb))}});var qb={};T(qb,{closeEditingWindows:()=>CP,getLifecycleStats:()=>$P,promoteFreshFacts:()=>TP});async function TP(){let{rows:e}=await _.raw(`
|
|
742
910
|
UPDATE fact_lifecycle fl
|
|
743
911
|
SET stage = 'stable',
|
|
744
912
|
stage_entered_at = NOW()
|
|
745
913
|
FROM fact f
|
|
746
914
|
WHERE fl.fact_id = f.id
|
|
747
915
|
AND fl.stage = 'fresh'
|
|
748
|
-
AND fl.stage_entered_at < NOW() - INTERVAL '${
|
|
916
|
+
AND fl.stage_entered_at < NOW() - INTERVAL '${IP} hours'
|
|
749
917
|
AND (f.importance = 'vital' OR fl.access_count > 0)
|
|
750
918
|
RETURNING fl.fact_id
|
|
751
|
-
`);return
|
|
919
|
+
`);return e.length}async function CP(){let{rows:e}=await _.raw(`
|
|
752
920
|
UPDATE fact_lifecycle
|
|
753
921
|
SET stage = 'stable',
|
|
754
922
|
stage_entered_at = NOW()
|
|
755
923
|
WHERE stage = 'editing'
|
|
756
|
-
AND stage_entered_at < NOW() - INTERVAL '${
|
|
924
|
+
AND stage_entered_at < NOW() - INTERVAL '${AP} minutes'
|
|
757
925
|
RETURNING fact_id
|
|
758
|
-
`);return
|
|
926
|
+
`);return e.length}async function $P(){let e=await _("fact_lifecycle").select("stage").count({count:"*"}).groupBy("stage"),t={fresh:0,stable:0,editing:0};for(let r of e)t[r.stage]=Number(r.count);return t}var IP,AP,Jb=f(()=>{D();IP=1,AP=30});import{resolve as Zb,dirname as zb,join as ue}from"node:path";import{fileURLToPath as OP}from"node:url";import{homedir as bt}from"node:os";import{existsSync as xt}from"node:fs";import{execSync as Dr,spawn as RP}from"node:child_process";import{randomBytes as NP}from"node:crypto";import{config as Su}from"dotenv";var DP=zb(zb(OP(import.meta.url))),bu=Zb(process.cwd(),".env"),Eu=ue(bt(),".sigil",".env");xt(bu)&&Su({path:bu,quiet:!0});xt(Eu)&&Eu!==bu&&Su({path:Eu,quiet:!0});process.env.SIGIL_AGENT||(process.env.SIGIL_AGENT="cli");var[er,...LP]=process.argv.slice(2),Qb=`sigil \u2014 Persistent memory for your Claude sessions
|
|
759
927
|
|
|
760
928
|
Usage:
|
|
761
929
|
sigil <command> [options]
|
|
@@ -781,54 +949,75 @@ Commands:
|
|
|
781
949
|
migrate Run database migrations
|
|
782
950
|
reset Reset the database (drops all data)
|
|
783
951
|
register Register as a Claude Code MCP server (advanced)
|
|
952
|
+
daemon <sub> Control the Sigil daemon (start | stop | status | logs)
|
|
953
|
+
pair <sub> Create / list / revoke pairing codes (master)
|
|
954
|
+
join <node-id> <code> Pair this device with a master Sigil install
|
|
784
955
|
|
|
785
956
|
Options:
|
|
786
957
|
--help Show this help message
|
|
787
958
|
|
|
788
|
-
Run sigil <command> --help for command-specific options.`;(
|
|
789
|
-
`),console.log(
|
|
790
|
-
`)
|
|
791
|
-
`)
|
|
792
|
-
`)[0]),process.exit(1)),/
|
|
793
|
-
`)[0]),process.exit(1))
|
|
959
|
+
Run sigil <command> --help for command-specific options.`;(er==="--help"||er==="-h")&&(console.log(Qb),process.exit(0));er||(await kP(),process.exit(0));async function kP(){let{connectOrStartDaemon:e}=await Promise.resolve().then(()=>(Ne(),nt)),{getGuiToken:t}=await Promise.resolve().then(()=>(Ki(),oa));process.stderr.write(`[sigil] starting daemon\u2026
|
|
960
|
+
`);let r=await e({quiet:!0}),{data:n}=await r.call("ping",{});await r.close();let{default:i}=await Promise.resolve().then(()=>(R(),X)),o=await t(),s=`http://${i.http.host}:${i.http.port}/?t=${o}`;console.log(""),console.log(" Sigil is running on this machine."),console.log(""),console.log(` PID: ${n.pid}`),console.log(` GUI: ${s}`),console.log(""),console.log(" Opening the dashboard in your browser\u2026"),console.log(" (Press Ctrl+C at any time. The daemon stays running.)"),console.log("");let a=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open",{spawn:c}=await import("node:child_process");try{c(a,[s],{detached:!0,stdio:"ignore"}).unref()}catch{}}var PP={init:tx,uninstall:BP,doctor:UP,remember:zP,ingest:eM,search:tM,context:rM,status:nM,facts:qP,forget:JP,namespace:jP,session:WP,pod:VP,export:GP,maintain:iM,migrate:oM,reset:sM,register:XP,why:lM,kind:uM,daemon:MP,pair:FP,join:HP};async function MP(e){let{runDaemon:t}=await Promise.resolve().then(()=>(j_(),G_));return t(e)}async function FP(e){let{runPair:t}=await Promise.resolve().then(()=>(K_(),V_));return t(e)}async function HP(e){let{runJoin:t}=await Promise.resolve().then(()=>(q_(),Y_));return t(e)}var ex=PP[er];ex||(console.error(`Unknown command: ${er}
|
|
961
|
+
`),console.log(Qb),process.exit(1));if(er!=="doctor"&&er!=="export"&&er!=="register")try{let{getUnackedErrorCount:e}=await Promise.resolve().then(()=>($i(),Ci)),t=await e();t>0&&process.stderr.write(`\u26A0 Sigil: ${t} unacked hook error${t>1?"s":""} \u2014 run \`sigil doctor\` for details
|
|
962
|
+
`)}catch{}try{await ex(LP)}catch(e){let t=e.message||String(e);((e.code||"")==="3D000"||/database .* does not exist/i.test(t))&&(console.error("Error: the Sigil database does not exist yet on this Postgres server."),console.error(""),console.error("Run `sigil init` \u2014 it will create the database, the sigil_app user, and"),console.error("install pgvector for you (one-shot, requires Postgres admin credentials)."),console.error(""),console.error("Underlying error: "+t.split(`
|
|
963
|
+
`)[0]),process.exit(1)),/ECONNREFUSED|connection refused/i.test(t)&&(console.error("Error: Postgres is not reachable."),console.error(""),console.error("Sigil 0.10.0+ requires Postgres. Start your Postgres server first:"),console.error(" \u2022 Docker: docker run -d --name sigil-pg -p 5432:5432 -e POSTGRES_PASSWORD=\u2026 pgvector/pgvector:pg15"),console.error(" \u2022 brew: brew services start postgresql@15"),console.error(" \u2022 RDS / cloud: check the host/port in `grep SIGIL_DB_ ~/.sigil/.env`"),console.error(""),console.error("Underlying error: "+t.split(`
|
|
964
|
+
`)[0]),process.exit(1)),/password authentication failed/i.test(t)&&(console.error("Error: Postgres rejected the Sigil credentials."),console.error(""),console.error("Re-run `sigil init` to reset the password (it will use Postgres admin"),console.error("credentials once to update the sigil_app user), or edit ~/.sigil/.env manually."),console.error(""),console.error("Underlying error: "+t.split(`
|
|
965
|
+
`)[0]),process.exit(1)),console.error(`Error: ${t}`),process.exit(1)}async function tx(e){(e.includes("--help")||e.includes("-h"))&&(console.log(`sigil init \u2014 Set up Sigil (DB, env, hooks, Claude integration)
|
|
794
966
|
|
|
795
967
|
Usage:
|
|
796
|
-
sigil init [--dry-run]
|
|
968
|
+
sigil init [--dry-run] [--url <postgres-url>]
|
|
797
969
|
|
|
798
970
|
Options:
|
|
799
|
-
--dry-run
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
971
|
+
--dry-run Walk through every prompt and print the exact files
|
|
972
|
+
that would be created or modified, but write nothing
|
|
973
|
+
to disk.
|
|
974
|
+
--url <url> Skip the DB prompts and use the given Postgres URL
|
|
975
|
+
(Neon, Supabase, AWS RDS, Render, Railway, Cockroach,
|
|
976
|
+
self-hosted). Persisted as SIGIL_DATABASE_URL in
|
|
977
|
+
~/.sigil/.env. The URL is probed (incl. pgvector
|
|
978
|
+
check) before any other setup runs.
|
|
979
|
+
|
|
980
|
+
Database modes:
|
|
981
|
+
Local Postgres install \u2014 discrete SIGIL_DB_HOST/PORT/USER/PASSWORD env
|
|
982
|
+
vars; uses an admin one-shot to create the
|
|
983
|
+
database + user + pgvector extension.
|
|
984
|
+
Connection URL \u2014 single SIGIL_DATABASE_URL env var; database +
|
|
985
|
+
user assumed to exist already (typical for
|
|
986
|
+
cloud Postgres providers).
|
|
803
987
|
|
|
804
988
|
Files Sigil touches (originals are backed up to <path>.sigil.bak before write):
|
|
805
|
-
~/.sigil/.env Sigil config + API keys
|
|
989
|
+
~/.sigil/.env Sigil config + API keys + DB connection
|
|
806
990
|
~/.sigil/CLAUDE.md Sigil instructions for Claude
|
|
807
991
|
~/.claude/CLAUDE.md One @import line added (existing content preserved)
|
|
808
|
-
~/.claude/settings.json UserPromptSubmit + PostToolUse + Stop + SessionEnd hooks (merged)
|
|
809
|
-
|
|
810
|
-
Sigil 0.10.0+ requires Postgres. Sigil's migrations run against your DB
|
|
811
|
-
during init; existing tables are detected and preserved.`),process.exit(0));let e=t.includes("--dry-run"),r=await Promise.resolve().then(()=>(rn(),en)),i=await import("node:fs/promises"),{safeWrite:n}=await Promise.resolve().then(()=>(Re(),_l)),{intro:s,outro:o,select:a,multiselect:c,text:l,spinner:u,confirm:h,note:d,cancel:f,isCancel:m}=r,y=et(ne(),".sigil"),w=et(y,".env");s(e?"Sigil \u2014 DRY RUN (no files will be written)":"Sigil \u2014 persistent memory for Claude");let x=[],b=(I,M,W)=>x.push({action:I,path:M,detail:W}),T=hc("ollama --version"),S={};if(se(w)){let I=await i.readFile(w,"utf8");for(let M of I.split(`
|
|
812
|
-
`)){let[W,...K]=M.split("=");W&&!W.startsWith("#")&&(S[W.trim()]=K.join("=").trim())}}let{listProvidersForSetup:C}=await Promise.resolve().then(()=>(or(),cn)),P=await C(),v=await a({message:"LLM provider (for fact extraction and reasoning)",options:P.map(({id:I,label:M,hint:W})=>({value:I,label:M,hint:W})),initialValue:S.LLM_PROVIDER||"claude-cli"});m(v)&&(f("Setup cancelled."),process.exit(0));let G=await P.find(I=>I.id===v).setup({existing:S,clack:r});G===null&&(f("Setup cancelled."),process.exit(0));let j=G.env||{},H=j.OPENROUTER_API_KEY||S.OPENROUTER_API_KEY||"",F=await a({message:"Embedding provider (for semantic search)",options:[{value:"ollama",label:"Ollama",hint:"nomic-embed-text \u2014 free, runs locally"},{value:"openai",label:"OpenAI",hint:"text-embedding-3-large \u2014 requires API key"},{value:"openrouter",label:"OpenRouter",hint:"gateway \u2014 one key for LLM + embeddings; uses vendor/model names"}],initialValue:S.EMBEDDING_PROVIDER||(T?"ollama":H?"openrouter":"openai")});m(F)&&(f("Setup cancelled."),process.exit(0));let J={ollama:{model:"nomic-embed-text",dimensions:768},openai:{model:"text-embedding-3-large",dimensions:1024},openrouter:{model:"openai/text-embedding-3-large",dimensions:1024}},R=S.EMBEDDING_PROVIDER,Y=R&&R!==F,z,B;if(Y){z=J[F].model,B=J[F].dimensions;let I=Number(S.EMBEDDING_DIMENSIONS)||J[R]?.dimensions;if(I&&I!==B){d(`You're switching embedding provider from ${R} (${I}d) to ${F} (${B}d).
|
|
992
|
+
~/.claude/settings.json UserPromptSubmit + PostToolUse + Stop + SessionEnd hooks (merged)`),process.exit(0));let t=e.includes("--dry-run"),r=e.findIndex($=>$==="--url"||$.startsWith("--url=")),n=null;if(r!==-1){let $=e[r];n=$.includes("=")?$.split("=")[1]:e[r+1],n||(console.error("--url requires a Postgres connection string"),process.exit(1))}let i=await Promise.resolve().then(()=>($s(),Cs)),o=await import("node:fs/promises"),{safeWrite:s}=await Promise.resolve().then(()=>(_r(),Uw)),{intro:a,outro:c,select:l,multiselect:d,text:p,spinner:u,confirm:m,note:g,cancel:y,isCancel:w}=i,x=ue(bt(),".sigil"),b=ue(x,".env");a(t?"Sigil \u2014 DRY RUN (no files will be written)":"Sigil \u2014 persistent memory for Claude");let A=[],v=($,k,H)=>A.push({action:$,path:k,detail:H}),S=xu("ollama --version"),C={};if(xt(b)){let $=await o.readFile(b,"utf8");for(let k of $.split(`
|
|
993
|
+
`)){let[H,...V]=k.split("=");H&&!H.startsWith("#")&&(C[H.trim()]=V.join("=").trim())}}let{listProvidersForSetup:O}=await Promise.resolve().then(()=>(Kr(),io)),M=await O(),F=await l({message:"LLM provider (for fact extraction and reasoning)",options:M.map(({id:$,label:k,hint:H})=>({value:$,label:k,hint:H})),initialValue:C.LLM_PROVIDER||"claude-cli"});w(F)&&(y("Setup cancelled."),process.exit(0));let P=await M.find($=>$.id===F).setup({existing:C,clack:i});P===null&&(y("Setup cancelled."),process.exit(0));let Q=P.env||{},ae=Q.OPENROUTER_API_KEY||C.OPENROUTER_API_KEY||"",N=await l({message:"Embedding provider (for semantic search)",options:[{value:"ollama",label:"Ollama",hint:"nomic-embed-text \u2014 free, runs locally"},{value:"openai",label:"OpenAI",hint:"text-embedding-3-large \u2014 requires API key"},{value:"openrouter",label:"OpenRouter",hint:"gateway \u2014 one key for LLM + embeddings; uses vendor/model names"}],initialValue:C.EMBEDDING_PROVIDER||(S?"ollama":ae?"openrouter":"openai")});w(N)&&(y("Setup cancelled."),process.exit(0));let W={ollama:{model:"nomic-embed-text",dimensions:768},openai:{model:"text-embedding-3-large",dimensions:1024},openrouter:{model:"openai/text-embedding-3-large",dimensions:1024}},ne=C.EMBEDDING_PROVIDER,ie=ne&&ne!==N,de,Ue;if(ie){de=W[N].model,Ue=W[N].dimensions;let $=Number(C.EMBEDDING_DIMENSIONS)||W[ne]?.dimensions;if($&&$!==Ue){g(`You're switching embedding provider from ${ne} (${$}d) to ${N} (${Ue}d).
|
|
813
994
|
Existing facts in your DB were embedded at the previous dimensions \u2014 they will become
|
|
814
995
|
unsearchable until re-ingested. To stay coherent without losing data, either:
|
|
815
|
-
\u2022 keep ${
|
|
816
|
-
\u2022 run \`sigil reset\` to wipe + re-ingest from scratch.`,"Dimension change ahead");let
|
|
996
|
+
\u2022 keep ${ne} as your embedding provider, or
|
|
997
|
+
\u2022 run \`sigil reset\` to wipe + re-ingest from scratch.`,"Dimension change ahead");let k=await m({message:`Continue with ${N} (${Ue}d)? Existing facts will become unsearchable.`,initialValue:!1});(w(k)||!k)&&(y("Setup cancelled \u2014 re-run sigil init and keep the prior embedding provider, or run sigil reset to wipe first."),process.exit(0))}}else de=C.EMBEDDING_MODEL||W[N].model,Ue=Number(C.EMBEDDING_DIMENSIONS)||W[N].dimensions;if(N==="openrouter"&&!ae){let $=await p({message:"OpenRouter API key (for embeddings) \u2014 get one at openrouter.ai/keys",placeholder:C.OPENROUTER_API_KEY?"(unchanged)":"sk-or-...",validate:k=>{if(!k&&!C.OPENROUTER_API_KEY)return"API key is required";if(k&&!k.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});w($)&&(y("Setup cancelled."),process.exit(0)),$&&(ae=$)}if(N==="ollama"){S||(g(`Ollama is not installed.
|
|
817
998
|
Install from https://ollama.com then run: ollama pull nomic-embed-text
|
|
818
|
-
Or re-run sigil init and choose OpenAI for embeddings.`,"Ollama not found"),
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
999
|
+
Or re-run sigil init and choose OpenAI for embeddings.`,"Ollama not found"),y("Install Ollama then re-run sigil init."),process.exit(0));let $=C.OLLAMA_HOST||"http://localhost:11434";if(t)v("check",`ollama server @ ${$}`,"start in background if not running"),v("pull","ollama:nomic-embed-text","~270MB embedding model (if not already present)");else{let k=await ix($),H=null;if(!k){let oe=u();oe.start("Starting ollama serve in the background..."),H=dM(),k=await pM($,15e3),k?oe.stop(`Ollama server ready (pid ${H?.pid??"?"}, background)`):(oe.stop("Ollama server did not come up in time"),g("Sigil tried to start `ollama serve` in the background but it did not\nbecome reachable at "+$+" within 15s.\n\nOpen a new terminal, run `ollama serve`, then re-run `sigil init`.","Ollama server unreachable"),y("Start ollama serve manually then re-run sigil init."),process.exit(0))}if(!xu("ollama list 2>/dev/null | grep nomic-embed-text")){let oe=await m({message:"Pull nomic-embed-text embedding model now? (~270MB)"});if(w(oe)&&(y("Setup cancelled."),process.exit(0)),oe){let rt=u();rt.start("Pulling nomic-embed-text...");try{Dr("ollama pull nomic-embed-text",{stdio:"pipe"}),rt.stop("nomic-embed-text ready")}catch{rt.stop("Pull failed \u2014 run: ollama pull nomic-embed-text manually")}}}H&&H.unref()}}let Gn=await p({message:"Default namespace",placeholder:"default",initialValue:C.DEFAULT_NAMESPACE||"default",validate:$=>{if(!$.trim())return"Cannot be empty"}});w(Gn)&&(y("Setup cancelled."),process.exit(0));let Lr="local",St=null,ce=null,tr,rr,vt,kr,Fi;if(n)Lr="url",St=n;else if(C.SIGIL_DATABASE_URL&&!C.SIGIL_DB_HOST){let $=await l({message:"Database mode",options:[{value:"url",label:"Connection URL",hint:"keep current SIGIL_DATABASE_URL"},{value:"local",label:"Local Postgres install",hint:"discrete host/port/user/password"}],initialValue:"url"});w($)&&(y("Setup cancelled."),process.exit(0)),Lr=$}else{let $=await l({message:"Database mode",options:[{value:"local",label:"Local Postgres install",hint:"docker / brew / RDS host:port"},{value:"url",label:"Connection URL",hint:"Neon, Supabase, RDS, Render, \u2026"}],initialValue:(C.SIGIL_DB_HOST,"local")});w($)&&(y("Setup cancelled."),process.exit(0)),Lr=$}if(Lr==="url"){if(St||(St=await p({message:"Postgres connection URL",placeholder:C.SIGIL_DATABASE_URL||"postgres://user:pass@host.neon.tech/db",initialValue:C.SIGIL_DATABASE_URL||"",validate:$=>{if(!/^postgres(ql)?:\/\//i.test($||""))return"Must start with postgres:// or postgresql://"}}),w(St)&&(y("Setup cancelled."),process.exit(0))),!t){let{probeUrlConnection:$}=await Promise.resolve().then(()=>(Qe(),ut)),k=u();if(k.start("Probing connection URL..."),ce=await $(St),ce.ok||(k.stop(`Connection failed (${ce.stage}${ce.code?`: ${ce.code}`:""})`),y(`Could not connect: ${ce.error}
|
|
1000
|
+
`+(ce.stage==="parse"?" Check the URL format (postgres://user:pass@host:port/db?sslmode=...)":"")+(ce.stage==="connect"?` Provider hint: ${ce.provider}. For Neon use the pooler URL.`:"")+(ce.stage==="query"?" Connection succeeded but a basic SELECT failed \u2014 check user privileges.":"")),process.exit(1)),ce.pgvector)k.stop(`Connected (${ce.provider}, ${ce.connectMs}ms) \u2014 pgvector \u2713`);else{k.stop(`Connected (${ce.provider}, ${ce.connectMs}ms) \u2014 pgvector NOT installed`);let H=await m({message:"pgvector extension is not installed on this database. Sigil cannot run without it. Continue anyway?",initialValue:!1});(w(H)||!H)&&(y(`Cancelled. Install pgvector on your database first:
|
|
1001
|
+
`+(ce.provider==="neon"?" Neon: extensions are auto-enabled, but the role may need the right privileges":"")+(ce.provider.startsWith("supabase")?" Supabase: enable via Dashboard \u2192 Database \u2192 Extensions \u2192 vector":"")+(ce.provider==="aws-rds"?" RDS: add `vector` to the parameter group `shared_preload_libraries`":"")+`
|
|
1002
|
+
Then re-run sigil init.`),process.exit(1))}}}else{let $=await p({message:"Postgres host",placeholder:C.SIGIL_DB_HOST||"localhost",initialValue:C.SIGIL_DB_HOST||"localhost"});w($)&&(y("Setup cancelled."),process.exit(0)),tr=$;let k=await p({message:"Postgres port",placeholder:C.SIGIL_DB_PORT||"5432",initialValue:C.SIGIL_DB_PORT||"5432",validate:rt=>{if(rt&&!/^\d+$/.test(rt))return"Port must be a number"}});w(k)&&(y("Setup cancelled."),process.exit(0)),rr=Number(k);let H=await p({message:"Sigil database name",placeholder:C.SIGIL_DB_NAME||"sigil",initialValue:C.SIGIL_DB_NAME||"sigil"});w(H)&&(y("Setup cancelled."),process.exit(0)),vt=H;let V=await p({message:"Sigil database user",placeholder:C.SIGIL_DB_USER||"sigil_app",initialValue:C.SIGIL_DB_USER||"sigil_app"});w(V)&&(y("Setup cancelled."),process.exit(0)),kr=V;let oe=await p({message:C.SIGIL_DB_PASSWORD?"Sigil database password (keep existing \u2014 press Enter)":"Sigil database password",placeholder:C.SIGIL_DB_PASSWORD?"(unchanged)":"sigil_dev or generate",validate:rt=>{if(!rt&&!C.SIGIL_DB_PASSWORD)return"Password required"}});if(w(oe)&&(y("Setup cancelled."),process.exit(0)),Fi=oe||C.SIGIL_DB_PASSWORD,!t){let{probeSigilConnection:rt,ensurePostgresDatabase:cx,diagnoseConnectionError:lx}=await Promise.resolve().then(()=>(Qe(),ut)),js=u();js.start("Probing Postgres connection...");let Ws=await rt({host:tr,port:rr,database:vt,user:kr,password:Fi});if(Ws.ok)js.stop(`Connected to ${kr}@${tr}:${rr}/${vt}`);else{let nr=lx({code:Ws.code,message:Ws.message});if(js.stop(`Connection failed (${nr.kind})`),nr.kind==="unreachable"&&(y(`Postgres unreachable at ${tr}:${rr}.
|
|
1003
|
+
${nr.hint}`),process.exit(1)),nr.kind==="missing-db"||nr.kind==="auth"){let Cu=await m({message:nr.kind==="missing-db"?`Database "${vt}" does not exist. Create it now (requires admin credentials)?`:`Authentication failed for ${kr}@${vt}. Create / reset the user now (requires admin credentials)?`,initialValue:!0});(w(Cu)||!Cu)&&(y("Setup cancelled \u2014 fix Postgres credentials and re-run sigil init."),process.exit(0));let $u=await p({message:"Postgres admin user",placeholder:"postgres",initialValue:"postgres"});w($u)&&(y("Setup cancelled."),process.exit(0));let Ou=await p({message:"Postgres admin password (used once, not stored)",placeholder:"admin password",validate:jn=>{if(!jn)return"Required to create the database"}});w(Ou)&&(y("Setup cancelled."),process.exit(0));let Vs=u();Vs.start("Creating database, user, and pgvector extension...");try{let{actions:jn}=await cx({admin:{host:tr,port:rr,user:$u,password:Ou},sigil:{database:vt,user:kr,password:Fi}});Vs.stop(`Bootstrapped: ${jn.join(", ")}`)}catch(jn){Vs.stop("Bootstrap failed"),y(jn.message),process.exit(1)}}else y(`Postgres setup failed: ${nr.hint}`),process.exit(1)}}}t||await o.mkdir(x,{recursive:!0});let ox=C.SIGIL_ENCRYPTION_KEY||fM(64),z={...C};z.LLM_PROVIDER=F,z.OLLAMA_HOST=C.OLLAMA_HOST||"http://localhost:11434",Object.assign(z,Q),z.EMBEDDING_PROVIDER=N,z.EMBEDDING_MODEL=de,z.EMBEDDING_DIMENSIONS=String(Ue),z.DEFAULT_NAMESPACE=Gn,z.SIGIL_ENCRYPTION_KEY=ox,z.SIGIL_DB_TYPE="postgres",Lr==="url"?(z.SIGIL_DATABASE_URL=St,delete z.SIGIL_DB_HOST,delete z.SIGIL_DB_PORT,delete z.SIGIL_DB_NAME,delete z.SIGIL_DB_USER,delete z.SIGIL_DB_PASSWORD):(delete z.SIGIL_DATABASE_URL,z.SIGIL_DB_HOST=tr,z.SIGIL_DB_PORT=String(rr),z.SIGIL_DB_NAME=vt,z.SIGIL_DB_USER=kr,z.SIGIL_DB_PASSWORD=Fi);let sx=[`# Sigil \u2014 generated ${new Date().toISOString().slice(0,10)}`,"# (re-running `sigil init` preserves unrecognised keys \u2014 edit manually as needed)","",...Object.entries(z).map(([$,k])=>`${$}=${k}`)].join(`
|
|
1004
|
+
`),vu=await s(b,sx,{dryRun:t});if(v(vu.action,b,`${vu.bytes} bytes`),t){let $=Lr==="url"?`connection URL (${St?new URL(St).hostname:"\u2014"})`:`${tr}:${rr}/${vt}`;v("migrate","postgres",$),v("verify","embedder",`${N}/${de} \u2014 live ping (skipped in dry-run)`)}else{Su({path:b,override:!0,quiet:!0});let $=u();$.start("Initialising memory database...");try{let{MIGRATIONS_DIR:H}=await Promise.resolve().then(()=>(B(),Qs)),V=(await Promise.resolve().then(()=>(D(),G))).default,[,oe]=await V.migrate.latest({directory:H});$.stop(oe.length?`Memory database ready (${oe.length} tables created)`:"Memory database up to date")}catch(H){$.stop("Database setup failed");let{diagnoseError:V}=await Promise.resolve().then(()=>(Qe(),ut)),oe=V(H);y(`${oe.humanMessage}
|
|
1005
|
+
`+(oe.fixHint?`
|
|
1006
|
+
\u2192 ${oe.fixHint}
|
|
1007
|
+
`:"")+`
|
|
1008
|
+
(${H.message})
|
|
1009
|
+
|
|
1010
|
+
Set the database connection in ~/.sigil/.env or re-run sigil init.`),process.exit(1)}let k=u();k.start(`Verifying ${N} embedder...`);try{let{embed:H}=await Promise.resolve().then(()=>(Ot(),oo)),V=await H("ping");if(!Array.isArray(V)||V.length===0)throw new Error(`embedder returned ${typeof V} (length ${V?.length}) \u2014 expected number[]`);if(V.length!==Ue)throw new Error(`embedder returned ${V.length}d vector but config says EMBEDDING_DIMENSIONS=${Ue}d.
|
|
1011
|
+
This means ${N}/${de} doesn't produce ${Ue}d embeddings \u2014 one of them is wrong.`);k.stop(`Embedder healthy (${V.length}d via ${N}/${de})`)}catch(H){k.stop("Embedder check failed");let{diagnoseError:V}=await Promise.resolve().then(()=>(Qe(),ut)),oe=V(H);y(`${oe.humanMessage}
|
|
1012
|
+
`+(oe.fixHint?`
|
|
1013
|
+
\u2192 ${oe.fixHint}
|
|
1014
|
+
`:"")+`
|
|
1015
|
+
(${N}/${de}: ${H.message})
|
|
1016
|
+
|
|
1017
|
+
Your config was written to `+b+` \u2014 fix the root cause then re-run sigil init.
|
|
1018
|
+
Sigil init aborted before any AI clients were touched \u2014 your existing setup is unchanged.`),process.exit(1)}}let{listClients:ax}=await Promise.resolve().then(()=>(Gs(),Us)),Hi=await ax(),Iu=await Promise.all(Hi.map($=>$.detect())),Au=Hi.filter(($,k)=>Iu[k]).map($=>$.id),Pr=await d({message:"Install Sigil for which clients? (space to toggle, enter to confirm)",options:Hi.map(($,k)=>({value:$.id,label:$.label,hint:Iu[k]?`${$.hint} \u2014 detected`:$.hint})),initialValues:Au.length?Au:["claude-code"],required:!1});w(Pr)&&(y("Setup cancelled."),process.exit(0));let Tu=u();Tu.start(t?"Computing client integration plan...":"Configuring client integrations...");for(let $ of Pr){let k=Hi.find(V=>V.id===$),{actions:H}=await k.install({dryRun:t});for(let V of H)v(V.action,V.path,V.detail)}if(!t){let{updateContextSnapshot:$}=await Promise.resolve().then(()=>(Tn(),An));await $({namespace:Gn.toString()}).catch(()=>{})}if(Tu.stop(t?"Plan computed.":Pr.length?`Configured ${Pr.length} client${Pr.length>1?"s":""}: ${Pr.join(", ")}`:"No clients selected \u2014 skipping integration step"),t){let $=A.map(k=>` ${rx(k.action,8)} ${k.path}${k.detail?` (${k.detail})`:""}`);g(["Dry run \u2014 no files were written. The following would happen:","",...$,"","Each existing file would be backed up to <path>.sigil.bak before its first","modification. Re-run without --dry-run to apply."].join(`
|
|
1019
|
+
`),"Plan"),c("Dry run complete.");return}g(["Memory store ~/.sigil/db (embedded, no server needed)",`Config ${b}`,"Claude ~/.claude/CLAUDE.md \u2014 Sigil is now your memory","Backups any pre-existing files saved to <path>.sigil.bak","","Claude will search Sigil before answering and save important","facts automatically. Start a new Claude session to begin.","","Quick start:",' sigil remember "your first fact"'," sigil ingest <file-or-url>",' sigil search "anything"'].join(`
|
|
1020
|
+
`),"Setup complete"),c("Open a new Claude Code session to start using Sigil."),process.exit(0)}function rx(e,t){return String(e).padEnd(t)}async function BP(e){(e.includes("--help")||e.includes("-h"))&&(console.log(`sigil uninstall \u2014 Remove Sigil's entries from AI clients
|
|
832
1021
|
|
|
833
1022
|
Usage:
|
|
834
1023
|
sigil uninstall [--dry-run]
|
|
@@ -843,20 +1032,21 @@ Sigil's own data \u2014 ~/.sigil/, the database, stored facts \u2014 is NOT touc
|
|
|
843
1032
|
Use 'sigil reset' for a full wipe.
|
|
844
1033
|
|
|
845
1034
|
Options:
|
|
846
|
-
--dry-run Show what would be removed without writing anything.`),process.exit(0));let e
|
|
847
|
-
`)||"(no changes)",
|
|
1035
|
+
--dry-run Show what would be removed without writing anything.`),process.exit(0));let t=e.includes("--dry-run"),r=await Promise.resolve().then(()=>($s(),Cs)),{intro:n,outro:i,multiselect:o,spinner:s,note:a,cancel:c,isCancel:l}=r;n(t?"Sigil uninstall \u2014 DRY RUN (no files will be written)":"Sigil uninstall");let{listClients:d}=await Promise.resolve().then(()=>(Gs(),Us)),p=await d(),u=[];for(let x of p){if(!await x.detect())continue;let{installed:b}=await x.verify();b&&u.push(x)}if(u.length===0){a("No clients have Sigil installed \u2014 nothing to remove.","Nothing to do"),i("Done.");return}let m=await o({message:"Remove Sigil from which clients? (space to toggle, enter to confirm)",options:u.map(x=>({value:x.id,label:x.label,hint:x.hint})),initialValues:u.map(x=>x.id),required:!1});if(l(m)&&(c("Uninstall cancelled."),process.exit(0)),m.length===0){i("Nothing selected \u2014 nothing removed.");return}let g=[],y=s();y.start(t?"Computing uninstall plan...":"Removing Sigil entries...");for(let x of m){let b=u.find(v=>v.id===x),{actions:A}=await b.uninstall({dryRun:t});for(let v of A)g.push({client:b.label,...v})}y.stop(t?"Plan computed.":`Removed from ${m.length} client${m.length>1?"s":""}`);let w=g.map(x=>` ${rx(x.action,8)} [${x.client}] ${x.path}${x.detail?` (${x.detail})`:""}`);a(w.join(`
|
|
1036
|
+
`)||"(no changes)",t?"Plan":"Done"),i(t?"Dry run complete. Re-run without --dry-run to apply.":"Sigil entries removed. Your stored memory is unchanged \u2014 use `sigil reset` to wipe data too.")}async function UP(e){e.includes("--help")&&(console.log(`sigil doctor \u2014 Diagnose Sigil setup
|
|
848
1037
|
|
|
849
1038
|
Usage:
|
|
850
1039
|
sigil doctor
|
|
851
1040
|
|
|
852
|
-
Checks: Postgres connection, LLM provider, embedding provider, hook registration, hook error budget.`),process.exit(0));let
|
|
1041
|
+
Checks: Postgres connection, LLM provider, embedding provider, hook registration, hook error budget.`),process.exit(0));let t=[],r=(a,c,l="")=>{let d=a==="ok"?"\u2713":a==="warn"?"\u26A0":"\u2717";t.push({status:a,label:c}),console.log(` ${d} ${c}${l?` \u2014 ${l}`:""}`)};console.log(`
|
|
853
1042
|
Sigil diagnostic
|
|
854
|
-
`);let
|
|
855
|
-
`)[0]}`),r("warn","Recovery","check that Postgres is running and SIGIL_DB_* env vars are set in ~/.sigil/.env")):r("fail","Database",c
|
|
856
|
-
`)[0])}try{let{
|
|
857
|
-
`)[0])}try{let{
|
|
858
|
-
`)[0].
|
|
859
|
-
`)[0].slice(0,160)}`)}else r("
|
|
1043
|
+
`);let n=ue(bt(),".sigil",".env");xt(n)?r("ok","Config file",n):r("warn","Config file",`${n} not found \u2014 run 'sigil init'`);try{let{validateConfig:a}=await Promise.resolve().then(()=>(Dl(),Nl)),c=a();if(c.length===0)r("ok","Config validation","no provider/model mismatches");else for(let l of c)r(l.level==="fail"?"fail":"warn",`Config: ${l.code}`,l.message),console.log(` fix: ${l.fix}`)}catch(a){r("warn","Config validation",`unable to run: ${a.message}`)}try{let a=(await Promise.resolve().then(()=>(D(),G))).default,c=(await Promise.resolve().then(()=>(R(),X))).default,{selectDriver:l}=await Promise.resolve().then(()=>(qn(),Qi)),d=l(c);if(await a.raw("SELECT 1"),d.kind==="url"){let y=d.connection.host;r("ok","DB driver",`URL (${d.provider}, host=${y})`)}else r("ok","DB driver",`local (${c.db.host}:${c.db.port}/${c.db.database})`);let{getFactCount:p}=await Promise.resolve().then(()=>(lt(),Ut)),{getStats:u}=await Promise.resolve().then(()=>(lo(),co)),[m,g]=await Promise.all([p(),u()]);r("ok","Stored data",`${g.documentCount} docs, ${g.totalChunks} chunks, ${m} facts`),await a.destroy()}catch(a){let c=a.message||String(a);a instanceof AggregateError&&Array.isArray(a.errors)&&a.errors.length?c=a.errors[0].message||c:a.cause&&(!c||c==="AggregateError")&&(c=a.cause.message||c);let l=(await Promise.resolve().then(()=>(R(),X))).default;/ECONNREFUSED|connection refused|password authentication failed/i.test(c)?(r("fail","Database",`Postgres unreachable \u2014 ${c.split(`
|
|
1044
|
+
`)[0]}`),r("warn","Recovery",l.db.url?"verify SIGIL_DATABASE_URL is valid and the provider is reachable":"check that Postgres is running and SIGIL_DB_* env vars are set in ~/.sigil/.env")):r("fail","Database",c.split(`
|
|
1045
|
+
`)[0])}try{let{detectProvider:a,isOllamaReachable:c,isClaudeCliAvailable:l}=await Promise.resolve().then(()=>(Kr(),io)),d=(await Promise.resolve().then(()=>(R(),X))).default,p=await a();p==="anthropic"?r("ok","LLM provider","anthropic (API key set)"):p==="openai"?r("ok","LLM provider","openai (API key set)"):p==="openrouter"?r("ok","LLM provider",`openrouter (model=${d.llm.openrouterModel})`):p==="ollama"?r("ok","LLM provider",`ollama @ ${d.llm.ollamaHost}`):p==="claude-cli"?r("ok","LLM provider","claude-cli (Claude Code subscription)"):r("warn","LLM provider",p)}catch(a){r("fail","LLM provider",a.message.split(`
|
|
1046
|
+
`)[0])}try{let{detectEmbeddingProvider:a}=await Promise.resolve().then(()=>(Kr(),io)),c=(await Promise.resolve().then(()=>(R(),X))).default,l=await a();r("ok","Embedding provider",`${l} / ${c.embedding.model}`)}catch(a){r("fail","Embedding provider",a.message.split(`
|
|
1047
|
+
`)[0])}try{let{listClients:a}=await Promise.resolve().then(()=>(Gs(),Us)),c=await a(),l=0;for(let d of c){if(!await d.detect())continue;l++;let p=await d.verify();p.installed?r("ok",`${d.label} integration`,"configured"):r("warn",`${d.label} integration`,`${p.reason} \u2014 run 'sigil init' to refresh`)}l===0&&r("warn","Client integrations","no AI clients detected (Claude Code / Cursor / Codex / Kiro)")}catch(a){r("warn","Client integrations",`check failed: ${a.message}`)}let i=ue(bt(),".sigil","CLAUDE.md");xt(i)?r("ok","Sigil CLAUDE.md",i):r("warn","Sigil CLAUDE.md","not found \u2014 run 'sigil init'");try{let{readRecentHookErrors:a,getUnackedErrorCount:c,HOOK_ERROR_LOG:l}=await Promise.resolve().then(()=>($i(),Ci)),d=await a(100),p=await c();if(d.length===0)r("ok","Hook errors",`none in ${l}`);else if(p>5){r("fail","Hook errors",`${p} unacked errors since last clean doctor (budget: \u22645) \u2014 see ${l}`);for(let u of d.slice(-5))console.log(` ${u.ts} [${u.hook}] ${(u.error||"").split(`
|
|
1048
|
+
`)[0].slice(0,160)}`)}else if(p>0){r("warn","Hook errors",`${p} unacked / ${d.length} total \u2014 see ${l}`);for(let u of d.slice(-3))console.log(` ${u.ts} [${u.hook}] ${(u.error||"").split(`
|
|
1049
|
+
`)[0].slice(0,160)}`)}else r("ok","Hook errors",`${d.length} historical errors, all acked`)}catch(a){r("warn","Hook errors",`unreadable: ${a.message}`)}console.log();let o=t.filter(a=>a.status==="fail").length,s=t.filter(a=>a.status==="warn").length;if(o)console.log(`${o} error${o>1?"s":""}, ${s} warning${s!==1?"s":""}`),process.exit(1);else if(s){console.log(`All critical checks passed. ${s} warning${s>1?"s":""}.`);try{let{markDoctorClean:a}=await Promise.resolve().then(()=>($i(),Ci));await a()}catch{}}else{console.log("All checks passed.");try{let{markDoctorClean:a}=await Promise.resolve().then(()=>($i(),Ci));await a()}catch{}}}async function GP(e){e.includes("--help")&&(console.log(`sigil export \u2014 Export knowledge base to stdout or a file
|
|
860
1050
|
|
|
861
1051
|
Usage:
|
|
862
1052
|
sigil export [options] [> file]
|
|
@@ -864,20 +1054,20 @@ Usage:
|
|
|
864
1054
|
Options:
|
|
865
1055
|
--namespace=<ns> Filter by namespace
|
|
866
1056
|
--format=<fmt> Output format: json (default) or markdown
|
|
867
|
-
--output=<path> Write to file instead of stdout`),process.exit(0));let
|
|
868
|
-
`)}else
|
|
869
|
-
`),await
|
|
1057
|
+
--output=<path> Write to file instead of stdout`),process.exit(0));let t=await import("node:fs/promises"),{listFacts:r}=await Promise.resolve().then(()=>(lt(),Ut)),n=(await Promise.resolve().then(()=>(R(),X))).default,i=(await Promise.resolve().then(()=>(D(),G))).default,o=e.find(u=>u.startsWith("--namespace="))?.split("=")[1]||n.defaults.namespace,s=e.find(u=>u.startsWith("--format="))?.split("=")[1]||"json",a=e.find(u=>u.startsWith("--output="))?.split("=")[1],c=await r({namespace:o,limit:1e4}),l=await i("entity").where({namespace:o}),d=await i("document").where({namespace:o}),p;if(s==="markdown"){let u=[`# Sigil export \u2014 namespace: ${o}`,`Generated: ${new Date().toISOString()}`,""];u.push(`## Facts (${c.length})`,"");for(let m of c){let g=m.importance==="vital"?" **[VITAL]**":"";u.push(`- **[${m.category}]**${g} ${m.content} *(${m.confidence})*`)}u.push("",`## Entities (${l.length})`,"");for(let m of l)u.push(`- **${m.name}** (${m.entityType})${m.description?` \u2014 ${m.description}`:""}`);u.push("",`## Documents (${d.length})`,"");for(let m of d)u.push(`- ${m.title} (${m.sourcePath})`);p=u.join(`
|
|
1058
|
+
`)}else p=JSON.stringify({namespace:o,exportedAt:new Date().toISOString(),facts:c.map(u=>({uid:u.uid,content:u.content,category:u.category,confidence:u.confidence,importance:u.importance,createdAt:u.createdAt})),entities:l.map(u=>({uid:u.uid,name:u.name,type:u.entityType,description:u.description,mentionCount:u.mentionCount})),documents:d.map(u=>({sourcePath:u.sourcePath,title:u.title,sourceType:u.sourceType,chunkCount:u.chunkCount,factCount:u.factCount}))},null,2);a?(await t.writeFile(a,p,"utf8"),console.log(`Exported ${c.length} facts, ${l.length} entities, ${d.length} documents to ${a}`)):process.stdout.write(p+`
|
|
1059
|
+
`),await i.destroy()}async function jP(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil namespace \u2014 Manage namespaces
|
|
870
1060
|
|
|
871
1061
|
Usage:
|
|
872
1062
|
sigil namespace list
|
|
873
1063
|
sigil namespace delete <ns> [--confirm]
|
|
874
1064
|
|
|
875
|
-
Namespaces isolate facts. A project, team, or context each gets its own.`),process.exit(
|
|
1065
|
+
Namespaces isolate facts. A project, team, or context each gets its own.`),process.exit(t?0:1));let{listNamespaces:r,deleteNamespace:n}=await Promise.resolve().then(()=>(lt(),Ut)),i=(await Promise.resolve().then(()=>(D(),G))).default;if(t==="list"){let o=await r();if(!o.length)console.log("No namespaces with facts.");else{console.log("Namespaces:");for(let{namespace:s,factCount:a}of o)console.log(` ${s.padEnd(30)} ${a} fact${a===1?"":"s"}`)}}else if(t==="delete"){let o=e[1];(!o||o.startsWith("--"))&&(console.error("Provide a namespace: sigil namespace delete <ns> --confirm"),await i.destroy(),process.exit(1)),e.includes("--confirm")||(console.error(`This will delete ALL data in namespace "${o}". Run with --confirm to proceed.`),await i.destroy(),process.exit(1));let s=await n(o);console.log(`Deleted namespace "${o}":`),console.log(` ${s.factsDeleted} facts, ${s.chunksDeleted} chunks, ${s.docsDeleted} documents, ${s.entitiesDeleted} entities`)}else console.error(`Unknown subcommand: ${t}`),await i.destroy(),process.exit(1);await i.destroy()}async function WP(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil session \u2014 Inspect the active Claude Code session pod
|
|
876
1066
|
|
|
877
1067
|
Usage:
|
|
878
1068
|
sigil session current Show active session uid + summary
|
|
879
1069
|
sigil session list [--limit=10] List recent session pods
|
|
880
|
-
sigil session show [<uid>] Detailed view (defaults to active)`),process.exit(
|
|
1070
|
+
sigil session show [<uid>] Detailed view (defaults to active)`),process.exit(t?0:1));let r=(await Promise.resolve().then(()=>(D(),G))).default;try{if(t==="current"){let{getActiveCursor:n}=await Promise.resolve().then(()=>(yr(),vn)),i=await n();if(!i){console.log("No active session.");return}let o=await(await Promise.resolve().then(()=>(Se(),Te))).findByUid(i.pod_uid);if(!o){console.log(`Cursor points to ${i.pod_uid} but pod row not found.`);return}let a=(await Promise.resolve().then(()=>(qo(),Uc))).formatForDisplay(o);console.log(`Active session: ${o.uid}`),console.log(` session_id: ${a.sessionId}`),console.log(` started_at: ${o.startedAt}`),console.log(` turn_count: ${a.turnCount}`),console.log(` cwd: ${a.cwd||"\u2014"}`),console.log(` transcript: ${a.transcriptPath||"\u2014"}`),console.log(` facts in pod: ${o.memberFactCount}`),console.log(` docs in pod: ${o.memberDocCount}`)}else if(t==="list"){let n=Number(Re(e,"--limit")||10),i=await(await Promise.resolve().then(()=>(Se(),Te))).listPods({podType:"claude_session",limit:n});if(!i.length){console.log("No session pods.");return}for(let o of i){let s=o.endedAt?o.endedAt.toISOString().slice(0,16).replace("T"," "):"active";console.log(` ${o.uid} ${o.name.padEnd(40)} facts=${o.memberFactCount} ${s}`)}}else if(t==="show"){let n=e[1];if(!n){let{getActiveCursor:i}=await Promise.resolve().then(()=>(yr(),vn));n=(await i())?.pod_uid,n||(console.log("No active session. Pass a uid: sigil session show <uid>"),process.exit(1))}await nx(n)}else console.error(`Unknown subcommand: ${t}`),process.exit(1)}finally{await r.destroy()}}async function VP(e){let t=e[0];(!t||e.includes("--help"))&&(console.log(`sigil pod \u2014 Inspect and manage memory pods
|
|
881
1071
|
|
|
882
1072
|
Usage:
|
|
883
1073
|
sigil pod list [--type=session|person] [--namespace=<ns>] [--limit=20]
|
|
@@ -890,8 +1080,8 @@ Usage:
|
|
|
890
1080
|
sigil pod delete <uid> --confirm
|
|
891
1081
|
|
|
892
1082
|
Pods are typed memory containers (session, person, ...). Person pods
|
|
893
|
-
back a canonical entity so dedup churn doesn't lose their metadata.`),process.exit(
|
|
894
|
-
Latest member facts (${
|
|
1083
|
+
back a canonical entity so dedup churn doesn't lose their metadata.`),process.exit(t?0:1));let r=(await Promise.resolve().then(()=>(D(),G))).default;try{if(t==="list"){let n=Re(e,"--type"),i=Re(e,"--namespace"),o=Number(Re(e,"--limit")||20),s=await(await Promise.resolve().then(()=>(Se(),Te))).listPods({podType:n,namespace:i,limit:o});if(!s.length){console.log("No pods.");return}for(let a of s)console.log(` ${a.uid} type=${a.podType.padEnd(20)} ${a.name.padEnd(40)} facts=${a.memberFactCount}`)}else if(t==="show"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod show <uid>"),process.exit(1)),await nx(n)}else if(t==="create")await KP(e);else if(t==="archive"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod archive <uid>"),process.exit(1));let i=await Promise.resolve().then(()=>(Se(),Te)),o=await i.findByUid(n);o||(console.error(`Not found: ${n}`),process.exit(1)),await i.archivePod(o.id),console.log(`Archived: ${n}`)}else if(t==="delete"){let n=e[1];(!n||n.startsWith("--"))&&(console.error("Provide a uid: sigil pod delete <uid> --confirm"),process.exit(1)),e.includes("--confirm")||(console.error("Pass --confirm to delete (cascades pod_membership)."),process.exit(1));let i=await Promise.resolve().then(()=>(Se(),Te)),o=await i.findByUid(n);o||(console.error(`Not found: ${n}`),process.exit(1)),await i.deletePod(o.id),console.log(`Deleted: ${n}`)}else console.error(`Unknown subcommand: ${t}`),process.exit(1)}finally{await r.destroy()}}async function nx(e){let t=await Promise.resolve().then(()=>(Se(),Te)),r=await Promise.resolve().then(()=>(hr(),Gt)),n=await t.findByUid(e);n||(console.error(`Not found: ${e}`),process.exit(1));let i=typeof n.attrs=="object"?n.attrs:YP(n.attrs);console.log(`${n.uid} type=${n.podType}`),console.log(` name: ${n.name}`),console.log(` namespace: ${n.namespace}`),console.log(` status: ${n.status}`),console.log(` started_at: ${n.startedAt||"\u2014"}`),console.log(` ended_at: ${n.endedAt||"\u2014"}`),n.entityId&&console.log(` entity_id: ${n.entityId}`),n.connectionId&&console.log(` connection_id: ${n.connectionId}`),n.externalId&&console.log(` external_id: ${n.externalId}`),console.log(` facts: ${n.memberFactCount}`),console.log(` documents: ${n.memberDocCount}`),console.log(" attrs:");for(let[s,a]of Object.entries(i)){let c=typeof a=="object"?JSON.stringify(a):a;console.log(` ${s}: ${c??"\u2014"}`)}let o=await r.listMembers(n.id,{memberType:"fact",limit:10});if(o.length){console.log(`
|
|
1084
|
+
Latest member facts (${o.length}):`);for(let s of o){let a=(s.content||"").slice(0,100);console.log(` - ${a}${s.content&&s.content.length>100?"\u2026":""}`)}}}async function KP(e){Re(e,"--type")!=="person"&&(console.error("Only --type=person is supported in PR1. Session pods are auto-created by hooks."),process.exit(1));let r=Re(e,"--name");r||(console.error("--name is required"),process.exit(1));let n=Re(e,"--namespace"),i=Re(e,"--slack"),o=Re(e,"--github"),s=Re(e,"--email"),a=Re(e,"--role"),c=Re(e,"--relationship"),l=Re(e,"--notes"),d={};i&&(d.slack={user_id:i}),o&&(d.github={username:o}),s&&(d.email=s);let p=(await Promise.resolve().then(()=>(R(),X))).default,u=n||p.defaults.namespace,m=await Promise.resolve().then(()=>(Ze(),pr)),g=await m.findByName(r,u);if(g&&g.entityType&&g.entityType!=="person"&&(console.error(`An entity named "${r}" already exists with entity_type="${g.entityType}". Use a different name or merge manually.`),process.exit(1)),g)console.log(`Linked to existing entity: ${g.uid} (${g.name})`);else{let{embed:b}=await Promise.resolve().then(()=>(Ot(),oo)),A=await b(r).catch(()=>null);g=await m.insertEntity({name:r,entityType:"person",description:a?`${a}`:null,namespace:u,externalId:i||null,embedding:A}),console.log(`Created entity: ${g.uid} (${g.name})`)}let{upsertPersonPod:y}=await Promise.resolve().then(()=>(Jc(),ly)),{pod:w,isNew:x}=await y({entityId:g.id,name:r,namespace:u,attrs:{platforms:d,role:a,relationship:c,notes:l}});console.log(`${x?"Created":"Updated"} person pod: ${w.uid}`),console.log(` entity_id: ${g.id}`),console.log(` platforms: ${JSON.stringify(d)}`),a&&console.log(` role: ${a}`),c&&console.log(` relationship: ${c}`)}function Re(e,t){let r=e.find(i=>i.startsWith(`${t}=`));if(r)return r.slice(t.length+1);let n=e.indexOf(t);return n!==-1&&n+1<e.length&&!e[n+1].startsWith("--")?e[n+1]:null}function YP(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}async function qP(e){e.includes("--help")&&(console.log(`sigil facts \u2014 List stored facts
|
|
895
1085
|
|
|
896
1086
|
Usage:
|
|
897
1087
|
sigil facts [options]
|
|
@@ -899,8 +1089,8 @@ Usage:
|
|
|
899
1089
|
Options:
|
|
900
1090
|
--namespace=<ns> Filter by namespace
|
|
901
1091
|
--category=<c> Filter by category
|
|
902
|
-
--limit=<n> Max facts to show (default: 20)`),process.exit(0));let
|
|
903
|
-
${
|
|
1092
|
+
--limit=<n> Max facts to show (default: 20)`),process.exit(0));let t=e.find(s=>s.startsWith("--namespace="))?.split("=")[1],r=e.find(s=>s.startsWith("--category="))?.split("=")[1],n=Number(e.find(s=>s.startsWith("--limit="))?.split("=")[1]||20),{connectOrStartDaemon:i}=await Promise.resolve().then(()=>(Ne(),nt)),o=await i();try{let{data:s}=await o.call("listFacts",{namespace:t,category:r,limit:n});if(!s.facts.length)console.log("No facts found.");else{for(let a of s.facts){let c=a.importance==="vital"?" [VITAL]":"";console.log(`${a.uid.slice(0,8)} [${a.category}]${c} ${a.content}`)}console.log(`
|
|
1093
|
+
${s.facts.length} fact${s.facts.length>1?"s":""} shown. Use 'sigil forget <id>' to delete.`)}}finally{await o.close()}}async function JP(e){(e.includes("--help")||!e[0]||e[0].startsWith("--"))&&(console.log(`sigil forget \u2014 Delete a fact by ID
|
|
904
1094
|
|
|
905
1095
|
Usage:
|
|
906
1096
|
sigil forget <id>
|
|
@@ -908,7 +1098,7 @@ Usage:
|
|
|
908
1098
|
The <id> can be any of:
|
|
909
1099
|
- A numeric row id (e.g. 165) \u2014 shown by 'sigil facts' and 'sigil search'
|
|
910
1100
|
- A full UID (e.g. fact-eehjLrKb80s-TQHy)
|
|
911
|
-
- A short UID prefix (e.g. fact-eeh)`),process.exit(
|
|
1101
|
+
- A short UID prefix (e.g. fact-eeh)`),process.exit(e[0]?0:1));let t=e[0],{connectOrStartDaemon:r}=await Promise.resolve().then(()=>(Ne(),nt)),n=await r();try{let{data:i}=await n.call("forgetFact",{id:t});i.notFound&&(console.error(`No fact matches: ${t}`),process.exit(1)),console.log(`Forgotten: ${i.deleted.content}`)}finally{await n.close()}}async function zP(e){let t=e.filter(a=>a.startsWith("--")),r=e.filter(a=>!a.startsWith("--"));t.includes("--help")&&(console.log(`sigil remember \u2014 Save facts to memory
|
|
912
1102
|
|
|
913
1103
|
Usage:
|
|
914
1104
|
sigil remember "fact1" ["fact2" ...] Save one or more facts
|
|
@@ -918,18 +1108,18 @@ Usage:
|
|
|
918
1108
|
Examples:
|
|
919
1109
|
sigil remember "I prefer tabs over spaces"
|
|
920
1110
|
sigil remember "Uses React" "Prefers TypeScript" "Deadline is April 20"
|
|
921
|
-
sigil remember --bg "user likes dark mode" "project uses Postgres"`),process.exit(0));let
|
|
922
|
-
`).map(
|
|
1111
|
+
sigil remember --bg "user likes dark mode" "project uses Postgres"`),process.exit(0));let n=t.includes("--bg")||t.includes("--background"),i=r.filter(Boolean);if(i.length===0&&!process.stdin.isTTY){let a=[];for await(let l of process.stdin)a.push(l);let c=Buffer.concat(a).toString("utf8").trim();c&&(i=c.split(`
|
|
1112
|
+
`).map(l=>l.trim()).filter(Boolean))}if(i.length===0&&(console.error('Provide text to remember: sigil remember "your fact"'),process.exit(1)),n){let{spawn:a}=await import("node:child_process");a(process.execPath,[process.argv[1],"remember",...i],{detached:!0,stdio:"ignore",env:{...process.env}}).unref(),console.log(`Saving ${i.length} fact${i.length>1?"s":""} in background...`);return}let{connectOrStartDaemon:o}=await Promise.resolve().then(()=>(Ne(),nt)),s=await o();try{let{data:a}=await s.call("remember",{facts:i}),c=[];a.added&&c.push(`${a.added} new`),a.updated&&c.push(`${a.updated} updated`),a.alreadyKnown&&c.push(`${a.alreadyKnown} already known`),console.log(c.length?`Remembered. (${c.join(", ")})`:"Already known.")}finally{await s.close()}}async function XP(e){e.includes("--help")&&(console.log(`sigil register \u2014 Register Sigil as a Claude Code MCP server
|
|
923
1113
|
|
|
924
1114
|
Usage:
|
|
925
1115
|
sigil register [--print]
|
|
926
1116
|
|
|
927
1117
|
Options:
|
|
928
|
-
--print Print the config JSON without modifying files`),process.exit(0));let
|
|
1118
|
+
--print Print the config JSON without modifying files`),process.exit(0));let t=ue(bt(),".sigil",".env"),r=xt(t)?t:Zb(process.cwd(),".env");await ZP(DP,r,e.includes("--print"))}async function ZP(e,t,r=!1){let n=await import("node:fs/promises"),i=ue(e,"src","server.js"),o={command:process.execPath,args:[i,"--mcp"],env:{DOTENV_CONFIG_PATH:t}},s=JSON.stringify({mcpServers:{sigil:o}},null,2);if(r){console.log(`
|
|
929
1119
|
Add this to your Claude Code MCP config:
|
|
930
|
-
`),console.log(
|
|
931
|
-
`),console.log(
|
|
932
|
-
Or run: claude mcp add sigil -- node `+
|
|
1120
|
+
`),console.log(s);return}if(xu("claude --version"))try{try{Dr("claude mcp remove sigil",{stdio:"pipe"})}catch{}try{Dr("claude mcp remove cortex",{stdio:"pipe"})}catch{}Dr(`claude mcp add sigil -s user -- ${process.execPath} ${i} --mcp`,{stdio:"pipe",env:{...process.env,DOTENV_CONFIG_PATH:t}}),console.log("Registered sigil MCP server via `claude mcp add`."),console.log(` Server: ${i}`);return}catch{}let c=QP(),l=!1;for(let d of c)if(xt(d))try{let p=await n.readFile(d,"utf8"),u=JSON.parse(p);u.mcpServers=u.mcpServers||{},u.mcpServers.sigil=o,await n.writeFile(d,JSON.stringify(u,null,2),"utf8"),console.log(`Registered sigil MCP server in ${d}`),l=!0;break}catch{}l||(console.log(`Could not auto-register. Add this to your Claude Code MCP configuration:
|
|
1121
|
+
`),console.log(s),console.log(`
|
|
1122
|
+
Or run: claude mcp add sigil -- node `+i+" --mcp"))}function QP(){let e=bt(),t=process.platform,r=[ue(e,".config","claude","claude_code_config.json"),ue(e,".claude","settings.json")];return t==="darwin"?r.push(ue(e,"Library","Application Support","Claude","claude_desktop_config.json")):t==="linux"?r.push(ue(e,".config","Claude","claude_desktop_config.json")):t==="win32"&&r.push(ue(process.env.APPDATA||"","Claude","claude_desktop_config.json")),r}async function eM(e){let t=e.filter(m=>m.startsWith("--")),r=e.filter(m=>!m.startsWith("--"));(!r.length||t.includes("--help"))&&(console.log(`sigil ingest \u2014 Ingest documents into the knowledge base
|
|
933
1123
|
|
|
934
1124
|
Usage:
|
|
935
1125
|
sigil ingest <file|url|glob> [options]
|
|
@@ -943,8 +1133,8 @@ Examples:
|
|
|
943
1133
|
sigil ingest ./docs/README.md
|
|
944
1134
|
sigil ingest "docs/**/*.md"
|
|
945
1135
|
sigil ingest https://example.com/page
|
|
946
|
-
sigil ingest file1.md file2.md --namespace=engineering`),process.exit(0));let{
|
|
947
|
-
Done in ${
|
|
1136
|
+
sigil ingest file1.md file2.md --namespace=engineering`),process.exit(0));let{readSource:n,readSources:i}=await Promise.resolve().then(()=>(ul(),hw)),{fetchSource:o}=await Promise.resolve().then(()=>(pl(),gw)),s=t.find(m=>m.startsWith("--namespace="))?.split("=")[1],a=t.includes("--skip-facts"),c=t.includes("--skip-entities"),l={success:[],failed:[],skipped:[]},d=Date.now(),{connectOrStartDaemon:p}=await Promise.resolve().then(()=>(Ne(),nt)),u=await p();try{for(let g of r)try{let y;if(g.startsWith("http://")||g.startsWith("https://"))y=[await o(g)];else if(g.includes("*")){if(y=await i(g),!y.length){console.error(`Error: No files matched pattern: ${g}`),l.failed.push({input:g,error:"no files matched"});continue}}else y=[await n(g)];for(let w of y){console.log(`Ingesting: ${w.title}`);let{data:x}=await u.call("ingestDoc",{content:w.content,title:w.title,filePath:w.sourcePath,sourceType:w.sourceType,namespace:s,metadata:w.metadata,skipFacts:a,skipEntities:c});if(x.skipped)l.skipped.push(w.title),console.log(" Skipped (unchanged)");else{l.success.push(w.title);let b=x.facts;console.log(` Done \u2014 ${x.chunkCount} chunks${b?`, ${b.total} facts (${b.added} new, ${b.updated??0} updated)`:""}`)}}}catch(y){console.error(` Failed: ${g} \u2014 ${y.message}`),l.failed.push({input:g,error:y.message})}let m=((Date.now()-d)/1e3).toFixed(1);console.log(`
|
|
1137
|
+
Done in ${m}s \u2014 ${l.success.length} ingested, ${l.skipped.length} skipped, ${l.failed.length} failed`),l.success.length>0&&await u.call("refreshContext",{}).catch(()=>{})}finally{await u.close()}l.failed.length&&!l.success.length&&process.exit(1)}async function tM(e){let t=e.filter(u=>u.startsWith("--")),r=e.filter(u=>!u.startsWith("--")).join(" ");(!r||t.includes("--help"))&&(console.log(`sigil search \u2014 Search the knowledge base
|
|
948
1138
|
|
|
949
1139
|
Usage:
|
|
950
1140
|
sigil search "query" [options]
|
|
@@ -957,13 +1147,15 @@ Options:
|
|
|
957
1147
|
--synthesize Enable LLM answer synthesis
|
|
958
1148
|
--chunks Include raw chunk matches
|
|
959
1149
|
--no-graph Disable graph enhancement
|
|
1150
|
+
--scope Scope to the active project/session pods (default: search everything)
|
|
960
1151
|
|
|
961
1152
|
Examples:
|
|
962
1153
|
sigil search "authentication flow"
|
|
963
1154
|
sigil search "deploy process" --namespace=engineering
|
|
964
|
-
sigil search "API design" --limit=5
|
|
965
|
-
|
|
966
|
-
|
|
1155
|
+
sigil search "API design" --limit=5
|
|
1156
|
+
sigil search "that decision" --scope # only this project's memory`),process.exit(0));let n=t.find(u=>u.startsWith("--namespace="))?.split("=")[1],i=n?n.split(","):void 0,o=Number(t.find(u=>u.startsWith("--limit="))?.split("=")[1]||10),s=t.includes("--graph")&&!t.includes("--no-graph"),a=t.includes("--route"),c=t.includes("--synthesize"),l=t.includes("--chunks")||c,{connectOrStartDaemon:d}=await Promise.resolve().then(()=>(Ne(),nt)),p=await d();try{let u=t.includes("--scope")?"auto":"global",{data:m}=await p.call("search",{query:r,namespaces:i,limit:o,useGraph:s,route:a,synthesize:c,includeChunks:l,podScope:u,cwd:process.cwd()});if(m.synthesized&&console.log(m.synthesized),m.facts.length){console.log(`
|
|
1157
|
+
Facts (${m.facts.length}):`);for(let g of m.facts)console.log(` ${g.content}${Xb(g)}`)}if(m.chunks.length){console.log(`
|
|
1158
|
+
Chunks (${m.chunks.length}):`);for(let g of m.chunks){let y=g.content?.slice(0,120).replace(/\n/g," ");console.log(` ${y}...${Xb(g)}`)}}!m.facts.length&&!m.chunks.length&&console.log("No results found.")}finally{await p.close()}}function Xb(e){let t=Number(e?.similarity);return Number.isFinite(t)&&t>0?` [sim ${t.toFixed(2)}]`:Number.isFinite(t)&&t===0?" [kw]":e?.rrfScore!=null?` [${e.rrfScore}]`:""}async function rM(e){e.includes("--help")&&(console.log(`sigil context \u2014 Refresh the hot-context snapshot in ~/.claude/CLAUDE.md
|
|
967
1159
|
|
|
968
1160
|
Usage:
|
|
969
1161
|
sigil context [--namespace=<ns>] [--limit=<n>] [--explain]
|
|
@@ -975,20 +1167,21 @@ Options:
|
|
|
975
1167
|
--namespace=<ns> Namespace to pull facts from (default: from config)
|
|
976
1168
|
--limit=<n> Max facts to include (default: 20)
|
|
977
1169
|
--explain Don't write the snapshot \u2014 print which kind each
|
|
978
|
-
fact came from instead`),process.exit(0));let e
|
|
1170
|
+
fact came from instead`),process.exit(0));let t=e.find(a=>a.startsWith("--namespace="))?.split("=")[1],r=e.find(a=>a.startsWith("--limit="))?.split("=")[1],n=r?Number(r):20,i=e.includes("--explain"),{connectOrStartDaemon:o}=await Promise.resolve().then(()=>(Ne(),nt)),s=await o();try{let{data:a}=await s.call("refreshContext",{namespace:t,limit:n,explain:i,cwd:process.cwd()});if(a.mode==="explain"){console.log(`Hot-context blend for namespace=${a.namespace}:
|
|
1171
|
+
`);for(let c of a.sections){if(console.log(` ${c.name} (budget=${c.budget}, ${c.visibility})`),c.error&&console.log(` (failed: ${c.error})`),!c.facts.length)console.log(" (no facts)");else for(let l of c.facts)console.log(` - ${(l.content||"").slice(0,120)}`);console.log("")}return}a.count?console.log(`Context refreshed \u2014 ${a.count} facts written to ~/.sigil/CLAUDE.md`):console.log("No facts found. Ingest some content first.")}finally{await s.close()}}async function nM(e){e.includes("--help")&&(console.log(`sigil status \u2014 Show knowledge base statistics
|
|
979
1172
|
|
|
980
1173
|
Usage:
|
|
981
|
-
sigil status [--namespace=<ns>]`),process.exit(0));let
|
|
1174
|
+
sigil status [--namespace=<ns>]`),process.exit(0));let t=e.find(i=>i.startsWith("--namespace="))?.split("=")[1],{connectOrStartDaemon:r}=await Promise.resolve().then(()=>(Ne(),nt)),n=await r();try{let{data:i}=await n.call("status",{namespace:t||null}),o=Object.entries(i.podsByType||{}).map(([s,a])=>`${a} ${s}`).join(", ")||"\u2014";if(console.log(`Sigil Knowledge Base${i.namespace?` (${i.namespace})`:""}`),console.log(` Documents: ${i.documents}`),console.log(` Chunks: ${i.chunks}`),console.log(` Facts: ${i.facts} active`),console.log(` Entities: ${i.entities.documents} documents, ${i.entities.people} people, ${i.entities.topics} topics`),console.log(` Relations: ${i.relations}`),console.log(` Pods: ${o}`),i.hebbian){let s=i.hebbian.avgStrength?i.hebbian.avgStrength.toFixed(2):"0",a=i.hebbian.maxStrength?i.hebbian.maxStrength.toFixed(2):"0";if(console.log(` Co-retrieval edges: ${i.hebbian.edgeCount} (avg ${s}, max ${a})`),i.hebbian.topPairs.length){console.log(" Top pairs by decayed strength:");for(let c of i.hebbian.topPairs)console.log(` ${c.a} \u2194 ${c.b} (decayed ${Number(c.decayed).toFixed(2)})`)}}}finally{await n.close()}}async function iM(e){e.includes("--help")&&(console.log(`sigil maintain \u2014 Run periodic memory maintenance
|
|
982
1175
|
|
|
983
1176
|
Usage:
|
|
984
1177
|
sigil maintain
|
|
985
1178
|
|
|
986
1179
|
Promotes 'fresh' facts (older than 1h with importance=vital or any access) to 'stable',
|
|
987
1180
|
closes 'editing' windows older than 30 minutes back to 'stable', and consolidates
|
|
988
|
-
co-retrieval edges. Safe to run as a cron \u2014 fully idempotent.`),process.exit(0));let
|
|
1181
|
+
co-retrieval edges. Safe to run as a cron \u2014 fully idempotent.`),process.exit(0));let t=(await Promise.resolve().then(()=>(D(),G))).default,{promoteFreshFacts:r,closeEditingWindows:n,getLifecycleStats:i}=await Promise.resolve().then(()=>(Jb(),qb)),{consolidateCoRetrievalEdges:o}=await Promise.resolve().then(()=>(rl(),Ty)).catch(()=>({})),{consolidateEntityCoRetrievalEdges:s}=await Promise.resolve().then(()=>(_i(),Zo)).catch(()=>({})),a=await i(),c=await r(),l=await n(),d=o?await o():0,p=s?await s():0,u=await i();console.log("Memory maintenance:"),console.log(` Stages \u2014 fresh: ${a.fresh}\u2192${u.fresh}, stable: ${a.stable}\u2192${u.stable}, editing: ${a.editing}\u2192${u.editing}`),console.log(` Promoted (fresh\u2192stable): ${c}`),console.log(` Closed editing windows (editing\u2192stable): ${l}`),d&&console.log(` Fact co-retrieval edges consolidated: ${d}`),p&&console.log(` Entity co-retrieval edges consolidated: ${p}`),await t.destroy()}async function oM(e){e.includes("--help")&&(console.log(`sigil migrate \u2014 Run database migrations
|
|
989
1182
|
|
|
990
1183
|
Usage:
|
|
991
|
-
sigil migrate [--rollback]`),process.exit(0));let
|
|
1184
|
+
sigil migrate [--rollback]`),process.exit(0));let t=(await Promise.resolve().then(()=>(D(),G))).default,{MIGRATIONS_DIR:r}=await Promise.resolve().then(()=>(B(),Qs));if(e.includes("--rollback")){let[n,i]=await t.migrate.rollback({directory:r});console.log(`Rolled back batch ${n}: ${i.length} migrations`);for(let o of i)console.log(` ${o}`)}else{let[n,i]=await t.migrate.latest({directory:r});if(i.length){console.log(`Ran batch ${n}: ${i.length} migrations`);for(let o of i)console.log(` ${o}`)}else console.log("Already up to date.")}await t.destroy()}async function sM(e){e.includes("--help")&&(console.log(`sigil reset \u2014 Wipe Sigil's setup and re-run init
|
|
992
1185
|
|
|
993
1186
|
Usage:
|
|
994
1187
|
sigil reset Show a confirmation prompt before wiping
|
|
@@ -999,8 +1192,8 @@ Wipes:
|
|
|
999
1192
|
~/.claude/CLAUDE.md removes the @~/.sigil/CLAUDE.md import line
|
|
1000
1193
|
|
|
1001
1194
|
Then automatically runs 'sigil init' to walk you through fresh setup.
|
|
1002
|
-
Hooks in ~/.claude/settings.json are re-registered by init (idempotent).`),process.exit(0));let e
|
|
1003
|
-
`),"About to reset");let a=await
|
|
1195
|
+
Hooks in ~/.claude/settings.json are re-registered by init (idempotent).`),process.exit(0));let t=e.includes("--confirm")||e.includes("--yes")||e.includes("-y"),r=bt(),n=ue(r,".sigil"),i=ue(r,".claude","CLAUDE.md");if(!t){let s=await Promise.resolve().then(()=>($s(),Cs));s.intro("Sigil \u2014 reset"),s.note(["This will:",` - delete ${n} (DB, config, CLAUDE.md, all stored facts)`,` - remove the @~/.sigil/CLAUDE.md import line from ${i}`," - re-run sigil init from scratch (you will be re-prompted for provider + key)","","Hooks in ~/.claude/settings.json stay registered \u2014 init refreshes them."].join(`
|
|
1196
|
+
`),"About to reset");let a=await s.confirm({message:"Wipe everything and re-init?",initialValue:!1});(s.isCancel(a)||a!==!0)&&(s.cancel("Reset cancelled. Nothing changed."),process.exit(0))}try{Dr('pkill -f "sigil/dist/server.js --mcp"',{stdio:"pipe"})}catch{}try{Dr('pkill -f ".sigil/db" ',{stdio:"pipe"})}catch{}let o=await import("node:fs/promises");xt(n)&&await o.rm(n,{recursive:!0,force:!0}),await aM(),console.log(""),console.log("Wipe complete. Starting init..."),console.log(""),await tx([])}async function aM(){let e=await import("node:fs/promises"),t=ue(bt(),".claude","CLAUDE.md");if(!xt(t))return!1;let r=await e.readFile(t,"utf8"),n=bt(),i=[ue(n,".sigil","CLAUDE.md"),ue(n,".smara","CLAUDE.md"),ue(n,".cortex","CLAUDE.md")],o=r;for(let s of i){let a=new RegExp(`^@${cM(s)}\\s*\\n?`,"gm");o=o.replace(a,"")}return o===r?!1:(await e.writeFile(t,o,"utf8"),!0)}function cM(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function lM(e){(e.length===0||e.includes("--help"))&&(console.log(`sigil why \u2014 Explain a search result
|
|
1004
1197
|
|
|
1005
1198
|
Usage:
|
|
1006
1199
|
sigil why "<query>" [--namespace=<ns>] [--limit=5] [--pod-scope=auto|global|<name>,<name>]
|
|
@@ -1008,7 +1201,7 @@ Usage:
|
|
|
1008
1201
|
Runs the same hybrid search the UserPromptSubmit hook uses and prints
|
|
1009
1202
|
the per-fact breakdown \u2014 vector score, keyword score, importance,
|
|
1010
1203
|
recency, kind / pod source \u2014 so you can see WHY each fact made the
|
|
1011
|
-
top-K for a given query.`),process.exit(0));let
|
|
1204
|
+
top-K for a given query.`),process.exit(0));let t=(await Promise.resolve().then(()=>(R(),X))).default,r=(await Promise.resolve().then(()=>(D(),G))).default,n=e.findIndex(g=>g.startsWith("--")),o=(n===-1?e:e.slice(0,n)).join(" ").replace(/^["']|["']$/g,"");o||(console.error('Provide a query: sigil why "<query>"'),process.exit(1));let s=e.find(g=>g.startsWith("--namespace="))?.split("=")[1]||t.defaults.namespace,a=e.find(g=>g.startsWith("--limit="))?.split("=")[1],c=a?Number(a):5,l=e.find(g=>g.startsWith("--pod-scope="))?.split("=")[1],d=null;l&&(l==="auto"||l==="global"?d=l:d=l.split(",").map(g=>g.trim()).filter(Boolean));let{search:p}=await Promise.resolve().then(()=>(ll(),cl)),u=await p(o,{namespaces:[s],limit:c,route:!0,expand:!0,synthesize:!1,podScope:d??"auto"});if(console.log(`Query: ${o}`),console.log(`Namespace: ${s}`),console.log(`Pod scope: ${JSON.stringify(d??"auto")}`),console.log(""),u.matchedEntity&&(console.log(`Matched entity: ${u.matchedEntity.name} (${u.matchedEntity.type}, id:${u.matchedEntity.id})`),console.log("")),!u.facts.length){console.log("No facts returned."),await r.destroy();return}let m=await Promise.resolve().then(()=>(hr(),Gt));console.log(`Facts (${u.facts.length}):`);for(let[g,y]of u.facts.entries()){let w=await m.listPodsForMember("fact",y.id).catch(()=>[]),x=w.length?w.map(v=>`${v.podType}:${v.name}`).join(", "):"\u2014",b=y.importance||`score=${y.importanceScore??"?"}`,A=y.coRetrievalBoost!=null?` hebbian=${y.coRetrievalBoost}`:"";console.log(` ${g+1}. [rrf=${y.rrfScore??"?"}${A}] [${y.category}] [${b}] [conf=${y.confidence}]`),console.log(` pods: ${x}`),console.log(` content: ${(y.content||"").slice(0,140)}`)}await r.destroy()}async function uM(e){let t=e[0];(!t||t==="--help")&&(console.log(`sigil kind \u2014 Inspect registered pod kinds
|
|
1012
1205
|
|
|
1013
1206
|
Usage:
|
|
1014
1207
|
sigil kind list
|
|
@@ -1016,4 +1209,4 @@ Usage:
|
|
|
1016
1209
|
|
|
1017
1210
|
list Show every registered pod kind with budget / visibility / TTL.
|
|
1018
1211
|
show Show one kind's full contract, schema doc path, and active scope
|
|
1019
|
-
for the current shell context.`),process.exit(0)),await Promise.resolve().then(()=>(
|
|
1212
|
+
for the current shell context.`),process.exit(0)),await Promise.resolve().then(()=>(wi(),el));let{list:r,get:n,activeKinds:i,getSchemaDoc:o}=await Promise.resolve().then(()=>(In(),Qc));if(t==="list"){let s=r();console.log(`Registered kinds (${s.length}):`);for(let l of s){let d=l.ttlDays?`${l.ttlDays}d TTL`:"no decay";console.log(` ${l.name.padEnd(18)} budget=${l.hotContextBudget} ${l.visibility.padEnd(8)} ${d}`),console.log(` ${l.description}`)}let a=(await Promise.resolve().then(()=>(R(),X))).default.defaults.namespace,c=await i({namespace:a,cwd:process.cwd()});console.log(""),console.log(`Active for cwd=${process.cwd()}: ${c.length?c.map(l=>l.kind.name).join(", "):"(none)"}`);return}if(t==="show"){let s=e[1];s||(console.error("Provide a kind name: sigil kind show <name>"),process.exit(1));let a=n(s);a||(console.error(`Unknown kind: ${s}`),process.exit(1)),console.log(`Kind: ${a.name}`),console.log(` description: ${a.description}`),console.log(` identityField: ${a.identityField??"\u2014"}`),console.log(` visibility: ${a.visibility}`),console.log(` activeMode: ${a.activeMode}`),console.log(` hotContextBudget: ${a.hotContextBudget}`),console.log(` retrievalWeights: ${JSON.stringify(a.retrievalWeights)}`),console.log(` importanceDefault: ${a.importanceDefault}`),console.log(` ttlDays: ${a.ttlDays??"no decay"}`),console.log(` writePolicy: ${a.writePolicy}`),console.log(` schemaDocPath: ${a.schemaDocPath??"\u2014"}`);let c=await o(a);console.log(` schemaDoc chars: ${c?c.length:0}`);return}console.error(`Unknown subcommand: ${t}`),process.exit(1)}function xu(e){try{return Dr(e,{stdio:"pipe"}),!0}catch{return!1}}async function ix(e){try{return(await fetch(`${e}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function dM(){return RP("ollama",["serve"],{detached:!0,stdio:"ignore"})}async function pM(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(await ix(e))return!0;await new Promise(n=>setTimeout(n,250))}return!1}function fM(e){return NP(e).toString("hex")}
|