@anmol-srv/sigil 0.10.3

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.
Files changed (49) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +417 -0
  3. package/dist/cli.js +1019 -0
  4. package/dist/hooks/post-tool-use.js +70 -0
  5. package/dist/hooks/session-end.js +222 -0
  6. package/dist/hooks/stop.js +259 -0
  7. package/dist/hooks/user-prompt-submit.js +279 -0
  8. package/dist/server.js +573 -0
  9. package/integrations/hermes/README.md +41 -0
  10. package/integrations/hermes/plugin/README.md +72 -0
  11. package/integrations/hermes/plugin/__init__.py +353 -0
  12. package/integrations/hermes/plugin/plugin.yaml +10 -0
  13. package/knexfile.js +15 -0
  14. package/package.json +100 -0
  15. package/prompts/audm-decision.md +31 -0
  16. package/prompts/chunk-context.md +23 -0
  17. package/prompts/default-extraction.md +35 -0
  18. package/prompts/entity-extraction.md +37 -0
  19. package/prompts/input-classifier.md +23 -0
  20. package/prompts/query-router.md +18 -0
  21. package/src/db/migrations/20260310120000_create-cortex-document-table.cjs +21 -0
  22. package/src/db/migrations/20260310120001_create-cortex-chunk-table.cjs +37 -0
  23. package/src/db/migrations/20260310120002_create-cortex-fact-table.cjs +37 -0
  24. package/src/db/migrations/20260310120003_create-cortex-entity-table.cjs +26 -0
  25. package/src/db/migrations/20260310120004_create-cortex-relation-table.cjs +27 -0
  26. package/src/db/migrations/20260310120005_create-cortex-history-table.cjs +16 -0
  27. package/src/db/migrations/20260311120000_add-entity-namespace-and-relation-indexes.cjs +32 -0
  28. package/src/db/migrations/20260312120000_add-fact-entity-linking.cjs +22 -0
  29. package/src/db/migrations/20260313093130_create-api-key-table.cjs +15 -0
  30. package/src/db/migrations/20260313120000_add-entity-dedup-support.cjs +13 -0
  31. package/src/db/migrations/20260313150000_create-connector-tables.cjs +46 -0
  32. package/src/db/migrations/20260318120000_add-contextual-chunk-prefix.cjs +11 -0
  33. package/src/db/migrations/20260318120001_add-fact-temporal-validity.cjs +15 -0
  34. package/src/db/migrations/20260318120002_add-fact-importance.cjs +11 -0
  35. package/src/db/migrations/20260318120003_add-fact-access-tracking.cjs +13 -0
  36. package/src/db/migrations/20260405120000_add-unique-constraints.cjs +58 -0
  37. package/src/db/migrations/20260405140000_create-llm-log-table.cjs +21 -0
  38. package/src/db/migrations/20260424120000_split-fact-lifecycle.cjs +86 -0
  39. package/src/db/migrations/20260424120002_create-embedding-cache.cjs +26 -0
  40. package/src/db/migrations/20260429120000_halfvec-index-compression.cjs +34 -0
  41. package/src/db/migrations/20260429120100_create-hebbian-edge-table.cjs +37 -0
  42. package/src/db/migrations/20260429120200_upgrade-embedding-dim-1024.cjs +68 -0
  43. package/src/db/migrations/20260504120000_scope-document-source-path-uniqueness.cjs +45 -0
  44. package/src/db/migrations/20260508001733_add-entity-aliases.cjs +42 -0
  45. package/src/db/migrations/20260512120000_create-entity-hebbian-edge.cjs +42 -0
  46. package/src/db/migrations/20260512120000_create-pod-tables.cjs +71 -0
  47. package/src/db/migrations/20260512120100_create-pod-membership.cjs +50 -0
  48. package/src/db/migrations/20260512120200_add-document-source-metadata.cjs +32 -0
  49. package/src/db/migrations/20260514023428_rewrite-session-pods-and-add-fact-attribution-columns.cjs +86 -0
package/dist/cli.js ADDED
@@ -0,0 +1,1019 @@
1
+ #!/usr/bin/env node
2
+ var Oy=Object.create;var ws=Object.defineProperty;var Ry=Object.getOwnPropertyDescriptor;var Ny=Object.getOwnPropertyNames;var Dy=Object.getPrototypeOf,Ly=Object.prototype.hasOwnProperty;var Py=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var g=(t,e)=>()=>(t&&(e=t(t=0)),e);var at=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),$=(t,e)=>{for(var r in e)ws(t,r,{get:e[r],enumerable:!0})},My=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ny(e))!Ly.call(t,n)&&n!==r&&ws(t,n,{get:()=>e[n],enumerable:!(i=Ry(e,n))||i.enumerable});return t};var _s=(t,e,r)=>(r=t!=null?Oy(Dy(t)):{},My(e||!t||!t.__esModule?ws(r,"default",{value:t,enumerable:!0}):r,t));var vs={};$(vs,{CLAUDE_HOME:()=>Ts,CLAUDE_MD_PATH:()=>Vy,CLAUDE_SETTINGS_PATH:()=>Ky,MIGRATIONS_DIR:()=>By,PKG_ROOT:()=>Es,PROMPTS_DIR:()=>mt,SIGIL_ACTIVE_SESSION_CURSOR:()=>Cs,SIGIL_DB_PATH:()=>jy,SIGIL_ENV_PATH:()=>Uy,SIGIL_HOME:()=>Ut,SIGIL_HOOK_DEDUP:()=>Gy,SIGIL_HOOK_ERRORS_LOG:()=>Ss,SIGIL_LAST_CLEAN_DOCTOR:()=>As,SIGIL_MD_PATH:()=>xs,SIGIL_SCHEMAS_DIR:()=>bs,SIGIL_STOP_CURSOR:()=>Wy});import{fileURLToPath as Fy}from"node:url";import{dirname as Cc,join as rt}from"node:path";import{existsSync as Tc}from"node:fs";import{homedir as ky}from"node:os";function Hy(){let t=Cc(Fy(import.meta.url));for(let e=0;e<10;e++){if(Tc(rt(t,"package.json"))&&Tc(rt(t,"prompts")))return t;let r=Cc(t);if(r===t)break;t=r}return process.cwd()}var Es,mt,By,vc,Ut,Uy,jy,xs,bs,Ss,As,Cs,Wy,Gy,Ts,Ky,Vy,ht=g(()=>{Es=Hy(),mt=rt(Es,"prompts"),By=rt(Es,"src","db","migrations"),vc=ky(),Ut=rt(vc,".sigil"),Uy=rt(Ut,".env"),jy=rt(Ut,"db"),xs=rt(Ut,"CLAUDE.md"),bs=rt(Ut,"schemas"),Ss=rt(Ut,".hook-errors.log"),As=rt(Ut,".last-clean-doctor"),Cs=rt(Ut,".active-session.json"),Wy=rt(Ut,".stop-cursor.json"),Gy=rt(Ut,".hook-dedup.json"),Ts=rt(vc,".claude"),Ky=rt(Ts,"settings.json"),Vy=rt(Ts,"CLAUDE.md")});var gt={};$(gt,{default:()=>E});var it,Ic,Yy,E,O=g(()=>{it=(t,e)=>process.env[t]??e,Ic=it("SIGIL_DB_TYPE","postgres");if(Ic!=="postgres")throw new Error(`SIGIL_DB_TYPE=${Ic} is no longer supported. Sigil 0.10.0+ is Postgres-only.
3
+ PGlite was deprecated; existing PGlite data at ~/.sigil/db is preserved but unreachable from this version.
4
+ 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.`);Yy={db:{type:"postgres",host:it("SIGIL_DB_HOST","localhost"),port:Number(it("SIGIL_DB_PORT",5432)),database:it("SIGIL_DB_NAME","sigil"),user:it("SIGIL_DB_USER","sigil_app"),password:it("SIGIL_DB_PASSWORD","")},embedding:{provider:process.env.EMBEDDING_PROVIDER||"",model:process.env.EMBEDDING_MODEL||"nomic-embed-text",dimensions:Number(process.env.EMBEDDING_DIMENSIONS)||768,ollamaHost:process.env.OLLAMA_HOST||"http://localhost:11434",openaiApiKey:process.env.OPENAI_API_KEY||"",voyageApiKey: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"},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},search:{synthesize:it("SIGIL_SYNTHESIZE","true")!=="false",synthesizeModel:it("SIGIL_SYNTH_MODEL","")},ingest:{eagerExtract:it("SIGIL_EAGER_EXTRACT","true")!=="false"},hebbian:{entity:{enabled:it("SIGIL_HEBBIAN_ENTITY_ENABLED",null,"true")!=="false",eta:Number(it("SIGIL_HEBBIAN_ENTITY_ETA",null,1)),cap:Number(it("SIGIL_HEBBIAN_ENTITY_CAP",null,50)),halfLifeDays:Number(it("SIGIL_HEBBIAN_ENTITY_HALF_LIFE_DAYS",null,30)),minEffective:Number(it("SIGIL_HEBBIAN_ENTITY_MIN_EFFECTIVE",null,.5)),rrfWeight:Number(it("SIGIL_HEBBIAN_ENTITY_RRF_WEIGHT",null,.3)),maxWriteEntities:Number(it("SIGIL_HEBBIAN_ENTITY_MAX_WRITE",null,12)),expandPerSeed:Number(it("SIGIL_HEBBIAN_ENTITY_EXPAND_PER_SEED",null,3))}}},E=Yy});var Z={};$(Z,{default:()=>_});import qy from"knex";function zy(t){return Array.isArray(t)?t.map(Is):t&&typeof t=="object"?Is(t):t}function Xy(t,e){return e(Qy(t))}function Is(t){if(!t||typeof t!="object"||t instanceof Date)return t;if(Array.isArray(t))return t.map(Is);let e={};for(let[r,i]of Object.entries(t))e[r.replace(/_([a-z])/g,(n,s)=>s.toUpperCase())]=i;return e}function Qy(t){return t.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`)}var Jy,_,N=g(()=>{O();Jy=qy({client:"pg",connection:{host:E.db.host,port:E.db.port,database:E.db.database,user:E.db.user,password:E.db.password},pool:{min:2,max:10},postProcessResponse:zy,wrapIdentifier:Xy});_=Jy});var $s={};$($s,{validateConfig:()=>Nc,validateConfigDeep:()=>Zy});function Nc(){let t=[];return tw(t),ew(t),rw(t),t}async function Zy(){let t=Nc();if(E.db.type==="postgres"&&!t.some(e=>e.code.startsWith("DB_")))try{await(await Promise.resolve().then(()=>(N(),Z))).default.raw("SELECT 1")}catch(e){t.push({level:"fail",code:"DB_UNREACHABLE",message:`Postgres at ${E.db.host}:${E.db.port}/${E.db.database} unreachable: ${e.message.split(`
6
+ `)[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 t}function tw(t){let{provider:e,model:r}=E.embedding;if(e&&r){let i=Object.keys($c).find(n=>$c[n].some(s=>s.test(r)));i&&i!==e&&t.push({level:"fail",code:"EMBEDDING_PROVIDER_MODEL_MISMATCH",message:`EMBEDDING_PROVIDER=${e} but EMBEDDING_MODEL=${r} is a ${i} model.`,fix:iw(e,r,i)})}if(e&&Rc[e]){let i=Rc[e];E.embedding[i]||t.push({level:"fail",code:"EMBEDDING_PROVIDER_MISSING_KEY",message:`EMBEDDING_PROVIDER=${e} but no ${Li(i)} found.`,fix:`Set ${Li(i)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}}function ew(t){let{provider:e}=E.llm;if(e&&Oc[e]){let r=Oc[e];E.llm[r]||t.push({level:"fail",code:"LLM_PROVIDER_MISSING_KEY",message:`LLM_PROVIDER=${e} but no ${Li(r)} found.`,fix:`Set ${Li(r)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}e==="openrouter"&&E.llm.openrouterModel&&(E.llm.openrouterModel.includes("/")||t.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 rw(t){E.db.type==="postgres"&&(!E.db.host||!E.db.database||!E.db.user)&&t.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 Li(t){return{openaiApiKey:"OPENAI_API_KEY",apiKey:"ANTHROPIC_API_KEY",openrouterApiKey:"OPENROUTER_API_KEY",voyageApiKey:"VOYAGE_API_KEY"}[t]||t}function iw(t,e,r){let i={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"}[t]||"(see provider docs)";return`Either set EMBEDDING_PROVIDER=${r} (matches your current model), or change EMBEDDING_MODEL to one of: ${i}`}var $c,Oc,Rc,Os=g(()=>{O();$c={voyage:[/^voyage-/],openai:[/^text-embedding-/],ollama:[/^nomic-embed/,/^mxbai-embed/,/^all-minilm/,/^bge-/,/^snowflake-/,/^granite-embedding/]},Oc={openai:"openaiApiKey",anthropic:"apiKey",openrouter:"openrouterApiKey"},Rc={openai:"openaiApiKey",voyage:"voyageApiKey",openrouter:"openrouterApiKey"}});var qr={};$(qr,{HOOK_ERROR_LOG:()=>Pi,LAST_CLEAN_DOCTOR_PATH:()=>Mi,clearLastCleanDoctor:()=>fw,failClosedOnBadConfig:()=>cw,getUnackedErrorCount:()=>uw,markDoctorClean:()=>dw,readRecentHookErrors:()=>lw,recordHookError:()=>Dc});import{appendFile as nw,readFile as Rs,writeFile as sw,unlink as ow}from"node:fs/promises";import{createHash as aw}from"node:crypto";async function Dc(t,e,r=null){try{let i={ts:new Date().toISOString(),hook:t,error:e?.message||String(e),input_hash:r?pw(r):null};await nw(Pi,JSON.stringify(i)+`
7
+ `,"utf8")}catch{}}async function cw(t,e=null){try{let{validateConfig:r}=await Promise.resolve().then(()=>(Os(),$s)),i=r().filter(n=>n.level==="fail");if(i.length===0)return!1;for(let n of i){let s=new Error(`${n.code}: ${n.message} \u2014 fix: ${n.fix}`);await Dc(t,s,e)}return!0}catch{return!1}}async function lw(t=10){let e;try{e=await Rs(Pi,"utf8")}catch{return[]}let r=e.split(`
8
+ `).filter(Boolean),i=[];for(let n of r.slice(-t))try{i.push(JSON.parse(n))}catch{}return i}async function uw(){let t=0;try{let i=await Rs(Mi,"utf8");t=new Date(i.trim()).getTime()}catch{}let e;try{e=await Rs(Pi,"utf8")}catch{return 0}let r=0;for(let i of e.split(`
9
+ `))if(i.trim())try{let n=JSON.parse(i);(n.ts?new Date(n.ts).getTime():0)>t&&(r+=1)}catch{}return r}async function dw(){try{await sw(Mi,new Date().toISOString(),"utf8")}catch{}}async function fw(){try{await ow(Mi)}catch{}}function pw(t){try{let e=typeof t=="string"?t:JSON.stringify(t);return aw("sha256").update(e).digest("hex").slice(0,12)}catch{return null}}var Pi,Mi,Jr=g(()=>{ht();Pi=Ss,Mi=As});var Lc,Pc,Mc,Fc=g(()=>{Lc=t=>t===161||t===164||t===167||t===168||t===170||t===173||t===174||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||t===198||t===208||t===215||t===216||t>=222&&t<=225||t===230||t>=232&&t<=234||t===236||t===237||t===240||t===242||t===243||t>=247&&t<=250||t===252||t===254||t===257||t===273||t===275||t===283||t===294||t===295||t===299||t>=305&&t<=307||t===312||t>=319&&t<=322||t===324||t>=328&&t<=331||t===333||t===338||t===339||t===358||t===359||t===363||t===462||t===464||t===466||t===468||t===470||t===472||t===474||t===476||t===593||t===609||t===708||t===711||t>=713&&t<=715||t===717||t===720||t>=728&&t<=731||t===733||t===735||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||t===1025||t>=1040&&t<=1103||t===1105||t===8208||t>=8211&&t<=8214||t===8216||t===8217||t===8220||t===8221||t>=8224&&t<=8226||t>=8228&&t<=8231||t===8240||t===8242||t===8243||t===8245||t===8251||t===8254||t===8308||t===8319||t>=8321&&t<=8324||t===8364||t===8451||t===8453||t===8457||t===8467||t===8470||t===8481||t===8482||t===8486||t===8491||t===8531||t===8532||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||t===8585||t>=8592&&t<=8601||t===8632||t===8633||t===8658||t===8660||t===8679||t===8704||t===8706||t===8707||t===8711||t===8712||t===8715||t===8719||t===8721||t===8725||t===8730||t>=8733&&t<=8736||t===8739||t===8741||t>=8743&&t<=8748||t===8750||t>=8756&&t<=8759||t===8764||t===8765||t===8776||t===8780||t===8786||t===8800||t===8801||t>=8804&&t<=8807||t===8810||t===8811||t===8814||t===8815||t===8834||t===8835||t===8838||t===8839||t===8853||t===8857||t===8869||t===8895||t===8978||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||t===9632||t===9633||t>=9635&&t<=9641||t===9650||t===9651||t===9654||t===9655||t===9660||t===9661||t===9664||t===9665||t>=9670&&t<=9672||t===9675||t>=9678&&t<=9681||t>=9698&&t<=9701||t===9711||t===9733||t===9734||t===9737||t===9742||t===9743||t===9756||t===9758||t===9792||t===9794||t===9824||t===9825||t>=9827&&t<=9829||t>=9831&&t<=9834||t===9836||t===9837||t===9839||t===9886||t===9887||t===9919||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||t===9955||t===9960||t===9961||t>=9963&&t<=9969||t===9972||t>=9974&&t<=9977||t===9979||t===9980||t===9982||t===9983||t===10045||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||t===65533||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||t===127375||t===127376||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109,Pc=t=>t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510,Mc=t=>t>=4352&&t<=4447||t===8986||t===8987||t===9001||t===9002||t>=9193&&t<=9196||t===9200||t===9203||t===9725||t===9726||t===9748||t===9749||t>=9800&&t<=9811||t===9855||t===9875||t===9889||t===9898||t===9899||t===9917||t===9918||t===9924||t===9925||t===9934||t===9940||t===9962||t===9970||t===9971||t===9973||t===9978||t===9981||t===9989||t===9994||t===9995||t===10024||t===10060||t===10062||t>=10067&&t<=10069||t===10071||t>=10133&&t<=10135||t===10160||t===10175||t===11035||t===11036||t===11088||t===11093||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=19968&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||t===94192||t===94193||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101632&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||t===110589||t===110590||t>=110592&&t<=110882||t===110898||t>=110928&&t<=110930||t===110933||t>=110948&&t<=110951||t>=110960&&t<=111355||t===126980||t===127183||t===127374||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t===127568||t===127569||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||t===127988||t>=127992&&t<=128062||t===128064||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||t===128378||t===128405||t===128406||t===128420||t>=128507&&t<=128591||t>=128640&&t<=128709||t===128716||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||t===128747||t===128748||t>=128756&&t<=128764||t>=128992&&t<=129003||t===129008||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129672||t>=129680&&t<=129725||t>=129727&&t<=129733||t>=129742&&t<=129755||t>=129760&&t<=129768||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141});var Ns,Fi,ki,Ds,Hi,mw,hw,kc,Hc,Bc=g(()=>{Fc();Ns=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Fi=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,ki=/\t{1,1000}/y,Ds=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"),Hi=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,mw=new RegExp("\\p{M}+","gu"),hw={limit:1/0,ellipsis:""},kc=(t,e={},r={})=>{let i=e.limit??1/0,n=e.ellipsis??"",s=e?.ellipsisWidth??(n?kc(n,hw,r).width:0),o=r.ansiWidth??0,a=r.controlWidth??0,c=r.tabWidth??8,l=r.ambiguousWidth??1,u=r.emojiWidth??2,h=r.fullWidthWidth??2,d=r.regularWidth??1,f=r.wideWidth??2,m=0,y=0,w=t.length,x=0,b=!1,T=w,S=Math.max(0,i-s),C=0,P=0,v=0,L=0;t:for(;;){if(P>C||y>=w&&y>m){let G=t.slice(C,P)||t.slice(m,y);x=0;for(let j of G.replaceAll(mw,"")){let H=j.codePointAt(0)||0;if(Pc(H)?L=h:Mc(H)?L=f:l!==d&&Lc(H)?L=l:L=d,v+L>S&&(T=Math.min(T,Math.max(C,m)+x)),v+L>i){b=!0;break t}x+=j.length,v+=L}C=P=0}if(y>=w)break;if(Hi.lastIndex=y,Hi.test(t)){if(x=Hi.lastIndex-y,L=x*d,v+L>S&&(T=Math.min(T,y+Math.floor((S-v)/d))),v+L>i){b=!0;break}v+=L,C=m,P=y,y=m=Hi.lastIndex;continue}if(Ns.lastIndex=y,Ns.test(t)){if(v+o>S&&(T=Math.min(T,y)),v+o>i){b=!0;break}v+=o,C=m,P=y,y=m=Ns.lastIndex;continue}if(Fi.lastIndex=y,Fi.test(t)){if(x=Fi.lastIndex-y,L=x*a,v+L>S&&(T=Math.min(T,y+Math.floor((S-v)/a))),v+L>i){b=!0;break}v+=L,C=m,P=y,y=m=Fi.lastIndex;continue}if(ki.lastIndex=y,ki.test(t)){if(x=ki.lastIndex-y,L=x*c,v+L>S&&(T=Math.min(T,y+Math.floor((S-v)/c))),v+L>i){b=!0;break}v+=L,C=m,P=y,y=m=ki.lastIndex;continue}if(Ds.lastIndex=y,Ds.test(t)){if(v+u>S&&(T=Math.min(T,y)),v+u>i){b=!0;break}v+=u,C=m,P=y,y=m=Ds.lastIndex;continue}y+=1}return{width:b?S:v,index:b?T:w,truncated:b,ellipsed:b&&i>=s}},Hc=kc});var gw,yw,X,Ls=g(()=>{Bc();gw={limit:1/0,ellipsis:"",ellipsisWidth:0},yw=(t,e={})=>Hc(t,gw,e).width,X=yw});function Nt(t,e,r){return String(t).normalize().split(bw).map(i=>xw(i,e,r)).join(`
10
+ `)}var Bi,Kc,ww,Ms,Vc,_w,Yc,Fs,Uc,jc,Wc,Gc,Ps,Ew,xw,bw,ks=g(()=>{Ls();Bi="\x1B",Kc="\x9B",ww=39,Ms="\x07",Vc="[",_w="]",Yc="m",Fs=`${_w}8;;`,Uc=new RegExp(`(?:\\${Vc}(?<code>\\d+)m|\\${Fs}(?<uri>.*)${Ms})`,"y"),jc=t=>{if(t>=30&&t<=37||t>=90&&t<=97)return 39;if(t>=40&&t<=47||t>=100&&t<=107)return 49;if(t===1||t===2)return 22;if(t===3)return 23;if(t===4)return 24;if(t===7)return 27;if(t===8)return 28;if(t===9)return 29;if(t===0)return 0},Wc=t=>`${Bi}${Vc}${t}${Yc}`,Gc=t=>`${Bi}${Fs}${t}${Ms}`,Ps=(t,e,r)=>{let i=e[Symbol.iterator](),n=!1,s=!1,o=t.at(-1),a=o===void 0?0:X(o),c=i.next(),l=i.next(),u=0;for(;!c.done;){let h=c.value,d=X(h);a+d<=r?t[t.length-1]+=h:(t.push(h),a=0),(h===Bi||h===Kc)&&(n=!0,s=e.startsWith(Fs,u+1)),n?s?h===Ms&&(n=!1,s=!1):h===Yc&&(n=!1):(a+=d,a===r&&!l.done&&(t.push(""),a=0)),c=l,l=i.next(),u+=h.length}o=t.at(-1),!a&&o!==void 0&&o.length&&t.length>1&&(t[t.length-2]+=t.pop())},Ew=t=>{let e=t.split(" "),r=e.length;for(;r&&!X(e[r-1]);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},xw=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let i="",n,s,o=t.split(" "),a=[""],c=0;for(let h=0;h<o.length;h++){let d=o[h];if(r.trim!==!1){let m=a.at(-1)??"",y=m.trimStart();m.length!==y.length&&(a[a.length-1]=y,c=X(y))}h!==0&&(c>=e&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c||r.trim===!1)&&(a[a.length-1]+=" ",c++));let f=X(d);if(r.hard&&f>e){let m=e-c,y=1+Math.floor((f-m-1)/e);Math.floor((f-1)/e)<y&&a.push(""),Ps(a,d,e),c=X(a.at(-1)??"");continue}if(c+f>e&&c&&f){if(r.wordWrap===!1&&c<e){Ps(a,d,e),c=X(a.at(-1)??"");continue}a.push(""),c=0}if(c+f>e&&r.wordWrap===!1){Ps(a,d,e),c=X(a.at(-1)??"");continue}a[a.length-1]+=d,c+=f}r.trim!==!1&&(a=a.map(h=>Ew(h)));let l=a.join(`
11
+ `),u=!1;for(let h=0;h<l.length;h++){let d=l[h];if(i+=d,!u)u=d>="\uD800"&&d<="\uDBFF";else continue;if(d===Bi||d===Kc){Uc.lastIndex=h+1;let m=Uc.exec(l)?.groups;if(m?.code!==void 0){let y=Number.parseFloat(m.code);n=y===ww?void 0:y}else m?.uri!==void 0&&(s=m.uri.length===0?void 0:m.uri)}if(l[h+1]===`
12
+ `){s&&(i+=Gc(""));let f=n?jc(n):void 0;n&&f&&(i+=Wc(f))}else d===`
13
+ `&&(n&&jc(n)&&(i+=Wc(n)),s&&(i+=Gc(s)))}return i},bw=/\r?\n/});var Bs=at((iO,qc)=>{"use strict";var Hs={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Sw={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Aw={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?Hs.up():"");return t&&(e+=Hs.left),e}};qc.exports={cursor:Hs,scroll:Sw,erase:Aw,beep:"\x07"}});import{styleText as zr}from"node:util";import{stdout as Gs,stdin as Qc}from"node:process";import*as ae from"node:readline";import Cw from"node:readline";import{ReadStream as Jc}from"node:tty";function qt(t,e,r){if(!r.some(o=>!o.disabled))return t;let i=t+e,n=Math.max(r.length-1,0),s=i<0?n:i>n?0:i;return r[s].disabled?qt(s,e<0?-1:1,r):s}function Zc(t){if(t.aliases!==void 0){let e=t.aliases;for(let r in e){if(!Object.hasOwn(e,r))continue;let i=e[r];D.actions.has(i)&&(D.aliases.has(r)||D.aliases.set(r,i))}}if(t.messages!==void 0){let e=t.messages;e.cancel!==void 0&&(D.messages.cancel=e.cancel),e.error!==void 0&&(D.messages.error=e.error)}if(t.withGuide!==void 0&&(D.withGuide=t.withGuide!==!1),t.date!==void 0){let e=t.date;e.monthNames!==void 0&&(D.date.monthNames=[...e.monthNames]),e.messages!==void 0&&(e.messages.required!==void 0&&(D.date.messages.required=e.messages.required),e.messages.invalidMonth!==void 0&&(D.date.messages.invalidMonth=e.messages.invalidMonth),e.messages.invalidDay!==void 0&&(D.date.messages.invalidDay=e.messages.invalidDay),e.messages.afterMin!==void 0&&(D.date.messages.afterMin=e.messages.afterMin),e.messages.beforeMax!==void 0&&(D.date.messages.beforeMax=e.messages.beforeMax))}}function Ks(t,e){if(typeof t=="string")return D.aliases.get(t)===e;for(let r of t)if(r!==void 0&&Ks(r,e))return!0;return!1}function Iw(t,e){if(t===e)return;let r=t.split(`
14
+ `),i=e.split(`
15
+ `),n=Math.max(r.length,i.length),s=[];for(let o=0;o<n;o++)r[o]!==i[o]&&s.push(o);return{lines:s,numLinesBefore:r.length,numLinesAfter:i.length,numLines:n}}function zi(t){return t===js}function Ui(t,e){let r=t;r.isTTY&&r.setRawMode(e)}function tl({input:t=Qc,output:e=Gs,overwrite:r=!0,hideCursor:i=!0}={}){let n=ae.createInterface({input:t,output:e,prompt:"",tabSize:1});ae.emitKeypressEvents(t,n),t instanceof Jc&&t.isTTY&&t.setRawMode(!0);let s=(o,{name:a,sequence:c})=>{let l=String(o);if(Ks([l,a,c],"cancel")){i&&e.write(nt.cursor.show),process.exit(0);return}if(!r)return;ae.moveCursor(e,a==="return"?0:-1,a==="return"?-1:0,()=>{ae.clearLine(e,1,()=>{t.once("keypress",s)})})};return i&&e.write(nt.cursor.hide),t.once("keypress",s),()=>{t.off("keypress",s),i&&e.write(nt.cursor.show),t instanceof Jc&&t.isTTY&&!$w&&t.setRawMode(!1),n.terminal=!1,n.close()}}function Dt(t,e,r,i=r){let n=Te(t??Gs);return Nt(e,n-r.length,{hard:!0,trim:!1}).split(`
16
+ `).map((s,o)=>`${o===0?i:r}${s}`).join(`
17
+ `)}function Ow(t,e){if(t===void 0||e.length===0)return 0;let r=e.findIndex(i=>i.value===t);return r!==-1?r:0}function Rw(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function Nw(t,e){if(e)return t?e:e[0]}function zc(t){return[...t].map(e=>Dw[e])}function Lw(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2e3,0,15)),r=[],i="/";for(let n of e)n.type==="literal"?i=n.value.trim()||n.value:(n.type==="year"||n.type==="month"||n.type==="day")&&r.push({type:n.type,len:n.type==="year"?4:2});return{segments:r,separator:i}}function Us(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function ji(t){return{year:Us(t.year),month:Us(t.month),day:Us(t.day)}}function Ws(t,e){return new Date(t||2001,e||1,0).getDate()}function el(t){let{year:e,month:r,day:i}=ji(t);if(!e||e<0||e>9999||!r||r<1||r>12||!i||i<1)return;let n=new Date(Date.UTC(e,r-1,i));if(!(n.getUTCFullYear()!==e||n.getUTCMonth()!==r-1||n.getUTCDate()!==i))return{year:e,month:r,day:i}}function Xc(t){let e=el(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function Pw(t,e,r,i){let n=r?{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}:null,s=i?{year:i.getUTCFullYear(),month:i.getUTCMonth()+1,day:i.getUTCDate()}:null;return t==="year"?{min:n?.year??1,max:s?.year??9999}:t==="month"?{min:n&&e.year===n.year?n.month:1,max:s&&e.year===s.year?s.month:12}:{min:n&&e.year===n.year&&e.month===n.month?n.day:1,max:s&&e.year===s.year&&e.month===s.month?s.day:Ws(e.year,e.month)}}var nt,Tw,vw,D,$w,js,Te,Vs,Jt,Ys,Wi,Dw,Gi,Ki,rl,Vi,Yi,qi,Ji,qs=g(()=>{ks();nt=_s(Bs(),1);Tw=["up","down","left","right","space","enter","cancel"],vw=["January","February","March","April","May","June","July","August","September","October","November","December"],D={actions:new Set(Tw),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:[...vw],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:t=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:t=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};$w=globalThis.process.platform.startsWith("win"),js=Symbol("clack:cancel");Te=t=>"columns"in t&&typeof t.columns=="number"?t.columns:80,Vs=t=>"rows"in t&&typeof t.rows=="number"?t.rows:20;Jt=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(t,e=!0){let{input:r=Qc,output:i=Gs,render:n,signal:s,...o}=t;this.opts=o,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=n.bind(this),this._track=e,this._abortSignal=s,this.input=r,this.output=i}unsubscribe(){this._subscribers.clear()}setSubscriber(t,e){let r=this._subscribers.get(t)??[];r.push(e),this._subscribers.set(t,r)}on(t,e){this.setSubscriber(t,{cb:e})}once(t,e){this.setSubscriber(t,{cb:e,once:!0})}emit(t,...e){let r=this._subscribers.get(t)??[],i=[];for(let n of r)n.cb(...e),n.once&&i.push(()=>r.splice(r.indexOf(n),1));for(let n of i)n()}prompt(){return new Promise(t=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(js);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=Cw.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),Ui(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(nt.cursor.show),this.output.off("resize",this.render),Ui(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(nt.cursor.show),this.output.off("resize",this.render),Ui(this.input,!1),t(js)})})}_isActionKey(t,e){return t===" "}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,e){this.userInput=t??"",this.emit("userInput",this.userInput),e&&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(t,e){if(this._track&&e.name!=="return"&&(e.name&&this._isActionKey(t,e)&&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"),e?.name&&(!this._track&&D.aliases.has(e.name)&&this.emit("cursor",D.aliases.get(e.name)),D.actions.has(e.name)&&this.emit("cursor",e.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t?.toLowerCase(),e),e?.name==="return"){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")}Ks([t,e?.name,e?.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(`
18
+ `),Ui(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=Nt(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
19
+ `).length-1;this.output.write(nt.cursor.move(-999,t*-1))}render(){let t=Nt(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(nt.cursor.hide);else{let e=Iw(this._prevFrame,t),r=Vs(this.output);if(this.restoreCursor(),e){let i=Math.max(0,e.numLinesAfter-r),n=Math.max(0,e.numLinesBefore-r),s=e.lines.find(o=>o>=i);if(s===void 0){this._prevFrame=t;return}if(e.lines.length===1){this.output.write(nt.cursor.move(0,s-n)),this.output.write(nt.erase.lines(1));let o=t.split(`
20
+ `);this.output.write(o[s]),this._prevFrame=t,this.output.write(nt.cursor.move(0,o.length-s-1));return}else if(e.lines.length>1){if(i<n)s=i;else{let a=s-n;a>0&&this.output.write(nt.cursor.move(0,a))}this.output.write(nt.erase.down());let o=t.split(`
21
+ `).slice(s);this.output.write(o.join(`
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
+ `);w.push(P),x+=P.length}if(x>u){let C=0,P=0,v=x,L=t-b,G=(j,H)=>Bw(w,v,j,H,u);f?({lineCount:v,removals:C}=G(0,L),v>u&&({lineCount:v,removals:P}=G(L+1,w.length))):({lineCount:v,removals:P}=G(L+1,w.length),v>u&&({lineCount:v,removals:C}=G(0,L))),C>0&&(f=!0,w.splice(0,C)),P>0&&(m=!0,w.splice(w.length-P,P))}let S=[];f&&S.push(l);for(let C of w)for(let P of C)S.push(P);return m&&S.push(l),S};yl=t=>new Ys({options:t.options,initialValue:t.initialValue?[t.initialValue]:void 0,initialUserInput:t.initialUserInput,placeholder:t.placeholder,filter:t.filter??((e,r)=>gl(e,r)),signal:t.signal,input:t.input,output:t.output,validate:t.validate,render(){let e=t.withGuide??D.withGuide,r=e?[`${p("gray",A)}`,`${bt(this.state)} ${t.message}`]:[`${bt(this.state)} ${t.message}`],i=this.userInput,n=this.options,s=t.placeholder,o=i===""&&s!==void 0,a=(c,l)=>{let u=sl(c),h=c.hint&&c.value===this.focusedValue?p("dim",` (${c.hint})`):"";switch(l){case"active":return`${p("green",Qr)} ${u}${h}`;case"inactive":return`${p("dim",$e)} ${p("dim",u)}`;case"disabled":return`${p("gray",$e)} ${p(["strikethrough","gray"],u)}`}};switch(this.state){case"submit":{let c=Uw(this.selectedValues,n),l=c.length>0?` ${p("dim",c.map(sl).join(", "))}`:"",u=e?p("gray",A):"";return`${r.join(`
24
+ `)}
25
+ ${u}${l}`}case"cancel":{let c=i?` ${p(["strikethrough","dim"],i)}`:"",l=e?p("gray",A):"";return`${r.join(`
26
+ `)}
27
+ ${l}${c}`}default:{let c=this.state==="error"?"yellow":"cyan",l=e?`${p(c,A)} `:"",u=e?p(c,Q):"",h="";if(this.isNavigating||o){let b=o?s:i;h=b!==""?` ${p("dim",b)}`:""}else h=` ${this.userInputWithCursor}`;let d=this.filteredOptions.length!==n.length?p("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",f=this.filteredOptions.length===0&&i?[`${l}${p("yellow","No matches found")}`]:[],m=this.state==="error"?[`${l}${p("yellow",this.error)}`]:[];e&&r.push(`${l.trimEnd()}`),r.push(`${l}${p("dim","Search:")}${h}${d}`,...f,...m);let y=[`${p("dim","\u2191/\u2193")} to select`,`${p("dim","Enter:")} confirm`,`${p("dim","Type:")} to search`],w=[`${l}${y.join(" \u2022 ")}`,u],x=this.filteredOptions.length===0?[]:nr({cursor:this.cursor,options:this.filteredOptions,columnPadding:e?3:0,rowPadding:r.length+w.length,style:(b,T)=>a(b,b.disabled?"disabled":T?"active":"inactive"),maxItems:t.maxItems,output:t.output});return[...r,...x.map(b=>`${l}${b}`),...w].join(`
28
+ `)}}}}).prompt(),jw=t=>{let e=(i,n,s,o)=>{let a=s.includes(i.value),c=i.label??String(i.value??""),l=i.hint&&o!==void 0&&i.value===o?p("dim",` (${i.hint})`):"",u=a?p("green",Ie):p("dim",ir);return i.disabled?`${p("gray",ir)} ${p(["strikethrough","gray"],c)}`:n?`${u} ${c}${l}`:`${u} ${p("dim",c)}`},r=new Ys({options:t.options,multiple:!0,placeholder:t.placeholder,filter:t.filter??((i,n)=>gl(i,n)),validate:()=>{if(t.required&&r.selectedValues.length===0)return"Please select at least one item"},initialValue:t.initialValues,signal:t.signal,input:t.input,output:t.output,render(){let i=t.withGuide??D.withGuide,n=`${i?`${p("gray",A)}
29
+ `:""}${bt(this.state)} ${t.message}
30
+ `,s=this.userInput,o=t.placeholder,a=s===""&&o!==void 0,c=this.isNavigating||a?p("dim",a?o:s):this.userInputWithCursor,l=this.options,u=this.filteredOptions.length!==l.length?p("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${n}${i?`${p("gray",A)} `:""}${p("dim",`${this.selectedValues.length} items selected`)}`;case"cancel":return`${n}${i?`${p("gray",A)} `:""}${p(["strikethrough","dim"],s)}`;default:{let h=this.state==="error"?"yellow":"cyan",d=i?`${p(h,A)} `:"",f=i?p(h,Q):"",m=[`${p("dim","\u2191/\u2193")} to navigate`,`${p("dim",this.isNavigating?"Space/Tab:":"Tab:")} select`,`${p("dim","Enter:")} confirm`,`${p("dim","Type:")} to search`],y=this.filteredOptions.length===0&&s?[`${d}${p("yellow","No matches found")}`]:[],w=this.state==="error"?[`${d}${p("yellow",this.error)}`]:[],x=[...`${n}${i?p(h,A):""}`.split(`
31
+ `),`${d}${p("dim","Search:")} ${c}${u}`,...y,...w],b=[`${d}${m.join(" \u2022 ")}`,f],T=nr({cursor:this.cursor,options:this.filteredOptions,style:(S,C)=>e(S,C,this.selectedValues,this.focusedValue),maxItems:t.maxItems,output:t.output,rowPadding:x.length+b.length});return[...x,...T.map(S=>`${d}${S}`),...b].join(`
32
+ `)}}}});return r.prompt()},Ww=[hl,to,ro,eo],Gw=[Zs,dl,Q,fl];Kw=t=>t,Vw=(t="",e="",r)=>{let i=r?.output??process.stdout,n=Te(i),s=2,o=r?.titlePadding??1,a=r?.contentPadding??2,c=r?.width===void 0||r.width==="auto"?1:Math.min(1,r.width),l=r?.withGuide??D.withGuide?`${A} `:"",u=r?.formatBorder??Kw,h=(r?.rounded?Ww:Gw).map(u),d=u(tn),f=u(A),m=X(l),y=X(e),w=n-m,x=Math.floor(n*c)-m;if(r?.width==="auto"){let G=t.split(`
33
+ `),j=y+o*2;for(let F of G){let J=X(F)+a*2;J>j&&(j=J)}let H=j+s;H<x&&(x=H)}x%2!==0&&(x<w?x++:x--);let b=x-s,T=b-o*2,S=y>T?`${e.slice(0,T-3)}...`:e,[C,P]=ol(X(S),b,o,r?.titleAlign),v=Nt(t,b-a*2,{hard:!0,trim:!1});i.write(`${l}${h[0]}${d.repeat(C)}${S}${d.repeat(P)}${h[1]}
34
+ `);let L=v.split(`
35
+ `);for(let G of L){let[j,H]=ol(X(G),b,a,r?.contentAlign);i.write(`${l}${f}${" ".repeat(j)}${G}${" ".repeat(H)}${f}
36
+ `)}i.write(`${l}${h[2]}${d.repeat(b)}${h[3]}
37
+ `)},Yw=t=>{let e=t.active??"Yes",r=t.inactive??"No";return new Wi({active:e,inactive:r,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let i=t.withGuide??D.withGuide,n=`${bt(this.state)} `,s=i?`${p("gray",A)} `:"",o=Dt(t.output,t.message,s,n),a=`${i?`${p("gray",A)}
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.
158
+ 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 $0,R0,Al,sr,Tl=g(()=>{O();$0="https://openrouter.ai/api/v1";R0={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},Al="google/gemini-flash-latest",sr={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var vl={};$(vl,{chat:()=>F0,meta:()=>k0,setup:()=>H0});import{spawn as D0}from"node:child_process";function M0(t,e){let r=E.llm.cliTimeout||12e4;return new Promise((i,n)=>{let s=D0("claude",t,{stdio:["pipe","pipe","pipe"]}),o=setTimeout(()=>{s.kill("SIGTERM"),n(new Error(`claude CLI timed out after ${r}ms`))},r),a="",c="";s.stdout.on("data",l=>{a+=l}),s.stderr.on("data",l=>{c+=l}),s.on("error",l=>{clearTimeout(o),n(new Error(`Failed to spawn claude CLI: ${l.message}`))}),s.on("close",l=>{clearTimeout(o),i({stdout:a,stderr:c,code:l})}),s.stdin.write(e),s.stdin.end()})}async function F0(t,{model:e,jsonMode:r=!1}={}){let i=e||E.llm.cliModel||"haiku",n=L0[i]||i,s=["-p","--model",n,"--output-format","json"];r&&s.push("--json-schema",P0);let{stdout:o,stderr:a,code:c}=await M0(s,t);if(c!==0)throw new Error(`claude CLI exited ${c}: ${(a||o).slice(0,500)}`);let l;try{l=JSON.parse(o)}catch{return{text:o.trim(),inputTokens:Lt(t),outputTokens:Lt(o),model:n}}if(l.is_error)throw new Error(`claude CLI error: ${l.result||"unknown error"}`);let u=r&&l.structured_output?JSON.stringify(l.structured_output):(l.result||"").trim(),h=l.usage||{};return{text:u,inputTokens:h.input_tokens||Lt(t),outputTokens:h.output_tokens||Lt(u),model:n,cost:l.total_cost_usd||0}}async function H0(){return{env:{}}}var L0,P0,k0,Il=g(()=>{O();ti();L0={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},P0=JSON.stringify({type:"object",additionalProperties:!0});k0={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var $l={};$($l,{chat:()=>B0,meta:()=>U0,setup:()=>j0});async function B0(t,{model:e,jsonMode:r=!1}={}){let i=e||E.llm.ollamaModel,n=`${E.llm.ollamaHost}/api/chat`,s={model:i,messages:[{role:"user",content:t}],stream:!1};r&&(s.format="json");let o=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!o.ok){let c=await o.text();throw new Error(`Ollama error ${o.status}: ${c}`)}let a=await o.json();return{text:a.message.content.trim(),inputTokens:a.prompt_eval_count||Lt(t),outputTokens:a.eval_count||Lt(a.message.content),model:i}}async function j0({existing:t,clack:e}){let r=t.OLLAMA_HOST||"http://localhost:11434",i=await e.text({message:"Ollama host",placeholder:r,initialValue:r,validate:n=>{if(n&&!/^https?:\/\//.test(n))return"Must start with http:// or https://"}});return e.isCancel(i)?null:{env:{OLLAMA_HOST:i||r}}}var U0,Ol=g(()=>{O();ti();U0={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function po(t,e){let r={};for(let i of t)r[i[e]]=i;return r}function nn(t,e){if(e<1)return[];let r=[];for(let i=0;i<t.length;i+=e)r.push(t.slice(i,i+e));return r}var sn=g(()=>{});var Rl={};$(Rl,{embedBatch:()=>G0});async function G0(t,{model:e,ollamaHost:r}){let i=nn(t,W0),n=[];for(let s of i){let o=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:e,input:s})});if(!o.ok)throw new Error(`Ollama embed failed: ${o.status} ${await o.text()}`);let a=await o.json();n.push(...a.embeddings)}return n}var W0,Nl=g(()=>{sn();W0=50});var Dl={};$(Dl,{embedBatch:()=>K0});async function K0(t,{model:e,openaiApiKey:r,dimensions:i}={}){let n={model:e,input:t};i&&/^text-embedding-3/.test(e)&&(n.dimensions=i);let s=await fetch("https://api.openai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(n)});if(!s.ok)throw new Error(`OpenAI embed failed: ${s.status} ${await s.text()}`);return(await s.json()).data.map(a=>a.embedding)}var Ll=g(()=>{});var Pl={};$(Pl,{embedBatch:()=>Y0});async function Y0(t,{model:e,voyageApiKey:r,inputType:i="document",dimensions:n}={}){if(!r)throw new Error("VOYAGE_API_KEY is not set. Get one at dashboard.voyageai.com.");let s=nn(t,V0),o=[];for(let a of s){let c={input:a,model:e||"voyage-3-large",input_type:i==="query"?"query":"document"};n&&(c.output_dimension=n);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 d=await l.text();throw new Error(`Voyage embed failed: ${l.status} ${d}`)}let h=[...(await l.json()).data].sort((d,f)=>d.index-f.index);o.push(...h.map(d=>d.embedding))}return o}var V0,Ml=g(()=>{sn();V0=50});var Fl={};$(Fl,{embedBatch:()=>J0});async function J0(t,{model:e,openrouterApiKey:r,openrouterBaseUrl:i,openrouterReferer:n,openrouterTitle:s,dimensions:o}={}){if(!r)throw new Error("OPENROUTER_API_KEY is not set");if(!e)throw new Error('No OpenRouter embedding model resolved. Set EMBEDDING_MODEL (e.g. "openai/text-embedding-3-large").');let a={model:e,input:t};o&&/(^|\/)text-embedding-3/.test(e)&&(a.dimensions=o);let c=(i||q0).replace(/\/+$/,""),l={"Content-Type":"application/json",Authorization:`Bearer ${r}`};n&&(l["HTTP-Referer"]=n),s&&(l["X-Title"]=s);let u=await fetch(`${c}/embeddings`,{method:"POST",headers:l,body:JSON.stringify(a)});if(!u.ok)throw new Error(`OpenRouter embed failed: ${u.status} ${await u.text()}`);return[...(await u.json()).data].sort((f,m)=>f.index-m.index).map(f=>f.embedding)}var q0,kl=g(()=>{q0="https://openrouter.ai/api/v1"});var cn={};$(cn,{detectEmbeddingProvider:()=>Eo,detectProvider:()=>_o,getEmbedder:()=>go,getProvider:()=>an,isClaudeCliAvailable:()=>Bl,isOllamaReachable:()=>wo,listProvidersForSetup:()=>Q0,resetDetection:()=>X0,resolveProviderAndModel:()=>yo});import{spawn as z0}from"node:child_process";async function an(t){if(!mo[t]){let e=on[t];if(!e)throw new Error(`Unknown LLM provider: "${t}". Available: ${Object.keys(on).join(", ")}`);let r=await e();mo[t]=r.chat}return mo[t]}async function go(t){if(!ho[t]){let e=Hl[t];if(!e)throw new Error(`Unknown embedding provider: "${t}". Available: ${Object.keys(Hl).join(", ")}`);let r=await e();ho[t]=r.embedBatch}return ho[t]}function yo(t,e){if(!t)return{provider:e,model:null};let r=t.indexOf(":");return r>0&&on[t.slice(0,r)]?{provider:t.slice(0,r),model:t.slice(r+1)}:{provider:e,model:t}}async function wo(){let t=E.llm.ollamaHost||E.embedding.ollamaHost||"http://localhost:11434";try{return(await fetch(`${t}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function Bl(){return new Promise(t=>{let e=z0("claude",["--version"],{stdio:"pipe"});e.on("error",()=>t(!1)),e.on("close",r=>t(r===0)),setTimeout(()=>{e.kill(),t(!1)},3e3)})}async function _o(){if(ct)return ct;if(E.llm.provider)return ct=E.llm.provider,ct;if(E.llm.openrouterApiKey)return ct="openrouter",ct;if(E.llm.apiKey)return ct="anthropic",ct;if(E.llm.openaiApiKey)return ct="openai",ct;if(await wo())return ct="ollama",ct;if(await Bl())return ct="claude-cli",ct;throw new Error(`No LLM provider available. Either:
160
+ - Set LLM_PROVIDER (openai, anthropic, openrouter, ollama, claude-cli)
161
+ - Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY
162
+ - Start Ollama locally
163
+ - Install the Claude CLI (claude)`)}async function Eo(){if(wt)return wt;if(E.embedding.provider)return wt=E.embedding.provider,wt;if(E.embedding.voyageApiKey)return wt="voyage",wt;if(await wo())return wt="ollama",wt;if(E.embedding.openaiApiKey)return wt="openai",wt;if(E.embedding.openrouterApiKey)return wt="openrouter",wt;throw new Error(`No embedding provider available. Either:
164
+ - Set EMBEDDING_PROVIDER (voyage, ollama, openai, openrouter)
165
+ - Set VOYAGE_API_KEY (recommended \u2014 best quality)
166
+ - Start Ollama locally
167
+ - Set OPENAI_API_KEY
168
+ - Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}function X0(){ct=null,wt=null}async function Q0(){return await Promise.all(Object.entries(on).map(async([e,r])=>{let i=await r();if(!i.meta||typeof i.setup!="function")throw new Error(`Provider "${e}" is missing the init contract \u2014 expected exports: meta, setup`);return{...i.meta,setup:i.setup}}))}var on,Hl,mo,ho,ct,wt,or=g(()=>{O();on={openai:()=>Promise.resolve().then(()=>(xl(),El)),anthropic:()=>Promise.resolve().then(()=>(Sl(),bl)),openrouter:()=>Promise.resolve().then(()=>(Tl(),Cl)),"claude-cli":()=>Promise.resolve().then(()=>(Il(),vl)),ollama:()=>Promise.resolve().then(()=>(Ol(),$l))},Hl={ollama:()=>Promise.resolve().then(()=>(Nl(),Rl)),openai:()=>Promise.resolve().then(()=>(Ll(),Dl)),voyage:()=>Promise.resolve().then(()=>(Ml(),Pl)),openrouter:()=>Promise.resolve().then(()=>(kl(),Fl))},mo={},ho={};ct=null,wt=null});var jl={};$(jl,{diagnoseConnectionError:()=>e_,ensurePostgresDatabase:()=>t_,probeSigilConnection:()=>Z0});import xo from"pg";async function Z0({host:t,port:e,database:r,user:i,password:n}){let s=new xo.Client({host:t,port:e,database:r,user:i,password:n});try{return await s.connect(),await s.query("SELECT 1"),{ok:!0}}catch(o){return{ok:!1,code:o.code,message:o.message}}finally{try{await s.end()}catch{}}}async function t_({admin:{host:t,port:e,user:r,password:i},sigil:{database:n,user:s,password:o}}){let a=new xo.Client({host:t,port:e,database:"postgres",user:r,password:i});await a.connect();let c=[];try{(await a.query("SELECT 1 FROM pg_database WHERE datname = $1",[n])).rowCount===0?(await a.query(`CREATE DATABASE ${ce(n)}`),c.push(`created database "${n}"`)):c.push(`database "${n}" already exists \u2014 left as-is`),(await a.query("SELECT 1 FROM pg_roles WHERE rolname = $1",[s])).rowCount===0?(await a.query(`CREATE USER ${ce(s)} WITH PASSWORD ${Ul(o)}`),c.push(`created user "${s}"`)):(await a.query(`ALTER USER ${ce(s)} WITH PASSWORD ${Ul(o)}`),c.push(`user "${s}" exists \u2014 password reset to match .env`)),await a.query(`GRANT ALL PRIVILEGES ON DATABASE ${ce(n)} TO ${ce(s)}`)}finally{await a.end()}let l=new xo.Client({host:t,port:e,database:n,user:r,password:i});await l.connect();try{await l.query(`GRANT ALL ON SCHEMA public TO ${ce(s)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${ce(s)}`),await l.query(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${ce(s)}`);try{await l.query("CREATE EXTENSION IF NOT EXISTS vector"),c.push("pgvector extension ready")}catch(u){throw u.code===ln.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."):u}}finally{await l.end()}return{actions:c}}function e_(t){let e=t?.code,r=t?.message||String(t);return e===ln.CONNECTION_REFUSED||/ECONNREFUSED/.test(r)?{kind:"unreachable",hint:"Is Postgres running? Try `docker ps | grep postgres` or `pg_isready -h <host> -p <port>`."}:e===ln.AUTH_FAILED||/password authentication failed/i.test(r)?{kind:"auth",hint:"Wrong username or password. Re-run `sigil init` to reset, or edit ~/.sigil/.env."}:e===ln.DB_DOES_NOT_EXIST||/database .* does not exist/i.test(r)?{kind:"missing-db",hint:"The Sigil database does not exist yet. Run `sigil init` to create it."}:{kind:"other",hint:r.split(`
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(`
170
+ INSERT INTO embedding_cache (key, provider, model, embedding, hits, created_at, last_used_at)
171
+ VALUES (?, ?, ?, ?, 0, NOW(), NOW())
172
+ ON CONFLICT (key) DO UPDATE
173
+ SET last_used_at = NOW(),
174
+ hits = embedding_cache.hits + 1
175
+ `,[i,e,r,st(n)]);await u_()}}async function u_(){let t=Date.now();if(t-Vl<l_)return;Vl=t;let[{count:e}]=await _("embedding_cache").count("key as count"),r=Number(e);if(r<=Kl)return;let i=Math.min(r-Kl,i_);await _.raw(`
176
+ DELETE FROM embedding_cache WHERE key IN (
177
+ SELECT key FROM embedding_cache ORDER BY last_used_at ASC LIMIT ?
178
+ )
179
+ `,[i])}async function Yl(t,e,r,i,n,s={}){if(!t.length)return[];let o=s.inputType||n?.inputType||"document",a=t.map(f=>n_(e,r,f,o)),c=await s_(a),l=[],u=[],h=new Array(t.length);for(let f=0;f<t.length;f++){let m=c.get(a[f]);m?h[f]=m:(l.push(t[f]),u.push(f))}if(l.length){let f=await i(l,n),m=[];for(let y=0;y<l.length;y++){let w=u[y];h[w]=f[y],m.push({key:a[w],embedding:f[y]})}c_(m,e,r).catch(y=>{process.stderr.write(`[embedding-cache] store failed: ${y.message}
180
+ `)})}let d=a.filter(f=>c.has(f));return d.length&&a_(d).catch(()=>{}),h}var Kl,i_,Vl,l_,ql=g(()=>{le();N();Kl=1e4,i_=500;Vl=0,l_=6e4});var bo={};$(bo,{dimensions:()=>d_,embed:()=>Ne,embedBatch:()=>zt});async function Ne(t,e={}){let[r]=await zt([t],e);return r}async function zt(t,{inputType:e="document"}={}){if(!t.length)return[];let r=await Eo(),i=await go(r),n=E.embedding.model,s={...E.embedding,inputType:e};return Yl(t,r,n,i,s,{inputType:e})}var d_,De=g(()=>{O();or();ql();({dimensions:d_}=E.embedding)});var Ql={};$(Ql,{SHARED_INSTRUCTIONS_PATH:()=>Xt,buildSharedInstructions:()=>ue,resolveSigilInvocation:()=>Xl,writeSharedInstructions:()=>So});import{join as Jl}from"node:path";import{homedir as f_}from"node:os";import{execSync as p_}from"node:child_process";function Xl(){try{let t=p_("which sigil",{stdio:["pipe","pipe","ignore"]}).toString().trim();if(t)return t}catch{}return process.argv[1]}function ue({sigilCmd:t}={}){let e=t||Xl();return`## Memory (Sigil)
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.
209
+
210
+ Good (natural, useful):
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.**
227
+
228
+ You SHOULD call \`! ${e} remember --bg "..."\` ONLY when:
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
232
+
233
+ You SHOULD NOT redundantly save:
234
+ - Generic preferences the Stop hook will obviously catch \u2014 let it
235
+ - Facts already similar to existing memory (AUDM dedup handles this, but the cleaner UX is fewer Bash invocations on screen)
236
+
237
+ When you do save, batch facts into ONE call (separate quoted arguments), use \`--bg\` to return immediately:
238
+
239
+ \`\`\`
240
+ ! ${e} remember --bg "User prefers tabs over spaces" "Project uses Postgres 15"
241
+ \`\`\`
242
+
243
+ 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.
244
+
245
+ ### Rules
246
+
247
+ - Read the auto-injected \`Sigil memory\` block first; answer from it before reaching for new searches
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
+ `:`
278
+
279
+ `;n=`${r}${l}${i}
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}
281
+
282
+ ${a}`:o||a,l=await q(vt,c.endsWith(`
283
+ `)?c:`${c}
284
+ `,{dryRun:t});r.push({action:l.action,path:vt,detail:"sigil block removed (other content preserved)"})}else r.push({action:"skip",path:vt,detail:"sigil block not present"})}return{actions:r}}var ur,si,Tt,vt,nE,ju,En,dr,sE,qu=g(()=>{ur=_s(Uu(),1);Re();ar();si=lr(Wu(),".codex"),Tt=lr(si,"config.toml"),vt=lr(si,"AGENTS.md"),nE=lr(Wu(),".sigil",".env"),ju=_n(_n(_n(_n(iE(import.meta.url))))),En="<!-- BEGIN sigil -->",dr="<!-- END sigil -->",sE={id:"codex-cli",label:"Codex CLI",hint:"TOML config + AGENTS.md (no native hooks)"}});var td={};$(td,{detect:()=>mE,install:()=>hE,meta:()=>pE,resolveServerPath:()=>Xu,uninstall:()=>yE,verify:()=>gE,writeMcpEntry:()=>Qu,writeSteeringFile:()=>Zu});import{join as pr,dirname as fr}from"node:path";import{homedir as zu}from"node:os";import{existsSync as Be}from"node:fs";import{fileURLToPath as dE}from"node:url";async function mE(){return Be(Ro)}function Xu(){let t=pr(Ju,"dist","server.js"),e=pr(Ju,"src","server.js");return Be(t)?t:e}async function Qu({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r={};try{let s=await e.readFile(_t,"utf8");r=JSON.parse(s)}catch{}let i=Be(_t);return r.mcpServers=r.mcpServers||{},r.mcpServers.sigil={command:process.execPath,args:[Xu(),"--mcp"],env:{DOTENV_CONFIG_PATH:fE}},t||await e.mkdir(fr(_t),{recursive:!0}),{action:(await q(_t,JSON.stringify(r,null,2),{dryRun:t})).action,path:_t,detail:i?"+sigil MCP server (other entries preserved)":"new mcp.json with sigil entry"}}async function Zu({dryRun:t=!1}={}){let e=await import("node:fs/promises");t||await e.mkdir(fr(He),{recursive:!0});let r=await q(He,ue(),{dryRun:t});return{action:r.action,path:He,detail:`${r.bytes??0} bytes, steering (always-on)`}}async function hE({dryRun:t=!1}={}){let e=[],r=await Qu({dryRun:t});r&&e.push(r);let i=await Zu({dryRun:t});return i&&e.push(i),{actions:e}}async function gE(){let t=await import("node:fs/promises");if(!Be(_t))return{installed:!1,reason:"~/.kiro/settings/mcp.json missing"};let e;try{e=JSON.parse(await t.readFile(_t,"utf8"))}catch{return{installed:!1,reason:"~/.kiro/settings/mcp.json is not valid JSON"}}return e.mcpServers?.sigil?Be(He)?{installed:!0}:{installed:!1,reason:"~/.kiro/steering/sigil.md missing"}:{installed:!1,reason:"sigil entry missing from ~/.kiro/settings/mcp.json"}}async function yE({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r=[];if(Be(_t)){let i;try{i=JSON.parse(await e.readFile(_t,"utf8"))}catch{return r.push({action:"skip",path:_t,detail:"invalid JSON \u2014 not touched"}),{actions:r}}if(i.mcpServers?.sigil){delete i.mcpServers.sigil;let n=await q(_t,JSON.stringify(i,null,2),{dryRun:t});r.push({action:n.action,path:_t,detail:"-sigil MCP entry"})}else r.push({action:"skip",path:_t,detail:"sigil entry not present"})}return Be(He)&&(t||await e.unlink(He),r.push({action:"delete",path:He,detail:"sigil steering file removed"})),{actions:r}}var Ro,_t,He,fE,Ju,pE,ed=g(()=>{Re();ar();Ro=pr(zu(),".kiro"),_t=pr(Ro,"settings","mcp.json"),He=pr(Ro,"steering","sigil.md"),fE=pr(zu(),".sigil",".env"),Ju=fr(fr(fr(fr(dE(import.meta.url))))),pE={id:"kiro",label:"Kiro",hint:"MCP + steering file (steering auto-applies)"}});var nd={};$(nd,{detect:()=>SE,install:()=>TE,meta:()=>bE,setMemoryProviderInYaml:()=>Do,uninstall:()=>vE,verify:()=>IE});import{join as Ue,dirname as oi}from"node:path";import{homedir as wE}from"node:os";import{existsSync as Gt}from"node:fs";import{fileURLToPath as _E}from"node:url";async function SE(){return Gt(id)}function Do(t,e){let r=t.split(`
285
+ `),i=!1,n=!1;for(let s=0;s<r.length;s++){let o=r[s];if(/^[A-Za-z_][\w-]*:\s*$/.test(o)||/^[A-Za-z_][\w-]*:\s/.test(o)){i=/^memory:\s*$/.test(o);continue}if(!i)continue;let a=o.match(/^(\s+provider:\s*)(['"]?)([^'"\n]*)\2(\s*(#.*)?)$/);if(a){let[,c,,l,u]=a;if(l===e)return{content:t,changed:!1};r[s]=`${c}'${e}'${u}`,n=!0;break}}return{content:r.join(`
286
+ `),changed:n}}async function AE({dryRun:t}){let e=await import("node:fs/promises");if(!Gt(No))throw new Error(`Plugin source missing at ${No} \u2014 is this Sigil install complete? \`integrations/hermes/plugin/\` must ship with the package.`);return t?{action:Gt(It)?"modify":"create"}:(await e.mkdir(oi(It),{recursive:!0}),Gt(It)&&await e.rm(It,{recursive:!0,force:!0}),await e.cp(No,It,{recursive:!0}),{action:"create"})}async function CE({dryRun:t,value:e}){let r=await import("node:fs/promises");if(!Gt(Pt))return{action:"skip",detail:"config.yaml not present \u2014 set memory.provider manually"};let i=await r.readFile(Pt,"utf8"),{content:n,changed:s}=Do(i,e);return s?(t||await r.writeFile(Pt,n,"utf8"),{action:"modify",detail:`memory.provider \u2192 '${e}'`}):{action:"skip",detail:`memory.provider already '${e}'`}}async function TE({dryRun:t=!1}={}){let e=[],r=await AE({dryRun:t});e.push({action:r.action,path:It,detail:"plugin tree (__init__.py, plugin.yaml, README.md)"});let i=await CE({dryRun:t,value:"sigil"});return e.push({action:i.action,path:Pt,detail:i.detail}),{actions:e}}async function vE({dryRun:t=!1}={}){let e=await import("node:fs/promises"),r=[];if(Gt(It)?(t||await e.rm(It,{recursive:!0,force:!0}),r.push({action:"delete",path:It,detail:"plugin directory removed"})):r.push({action:"skip",path:It,detail:"plugin not present"}),Gt(Pt)){let i=await e.readFile(Pt,"utf8"),n=i.match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),o=(n?n[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];if(o==="sigil"){let{content:a,changed:c}=Do(i,"");c&&!t&&await e.writeFile(Pt,a,"utf8"),r.push({action:"modify",path:Pt,detail:"memory.provider \u2192 '' (sigil cleared)"})}else r.push({action:"skip",path:Pt,detail:`memory.provider is '${o??""}' (not sigil) \u2014 not touched`})}return{actions:r}}async function IE(){let t=await import("node:fs/promises");if(!Gt(It))return{installed:!1,reason:"plugin missing at ~/.hermes/hermes-agent/plugins/memory/sigil/"};if(!Gt(Ue(It,"__init__.py")))return{installed:!1,reason:"plugin dir present but __init__.py missing"};if(!Gt(Pt))return{installed:!1,reason:"~/.hermes/config.yaml missing"};let r=(await t.readFile(Pt,"utf8")).match(/^memory:\s*\n([\s\S]*?)(?=^[A-Za-z_])/m),n=(r?r[1]:"").match(/^\s+provider:\s*['"]?([^'"\n]*)['"]?/m)?.[1];return n!=="sigil"?{installed:!1,reason:`memory.provider in config.yaml is '${n??""}' (expected 'sigil')`}:{installed:!0}}var rd,EE,id,It,Pt,xE,No,bE,sd=g(()=>{rd=Ue(wE(),".hermes"),EE=Ue(rd,"hermes-agent"),id=Ue(EE,"plugins","memory"),It=Ue(id,"sigil"),Pt=Ue(rd,"config.yaml"),xE=oi(oi(oi(oi(_E(import.meta.url))))),No=Ue(xE,"integrations","hermes","plugin"),bE={id:"hermes",label:"Hermes",hint:"Python memory-provider plugin + config.yaml flip"}});var xn={};$(xn,{listClients:()=>OE});async function OE(){return await Promise.all(Object.entries($E).map(async([e,r])=>{let i=await r();if(!i.meta||typeof i.detect!="function"||typeof i.install!="function"||typeof i.uninstall!="function"||typeof i.verify!="function")throw new Error(`Client "${e}" is missing the install contract \u2014 expected exports: meta, detect, install, uninstall, verify`);return{...i.meta,detect:i.detect,install:i.install,uninstall:i.uninstall,verify:i.verify}}))}var $E,bn=g(()=>{$E={"claude-code":()=>Promise.resolve().then(()=>(iu(),ru)),cursor:()=>Promise.resolve().then(()=>(uu(),lu)),"codex-cli":()=>Promise.resolve().then(()=>(qu(),Yu)),kiro:()=>Promise.resolve().then(()=>(ed(),td)),hermes:()=>Promise.resolve().then(()=>(sd(),nd))}});var Po={};$(Po,{_reset:()=>jE,activeKinds:()=>ci,get:()=>kE,getSchemaDoc:()=>UE,list:()=>HE,register:()=>Lo,validateAttrs:()=>BE});import{readFile as od}from"node:fs/promises";import{fileURLToPath as RE}from"node:url";import{dirname as NE,join as ad}from"node:path";function Lo(t){for(let e of DE)if(!t[e])throw new Error(`Pod kind missing required field: ${e}`);if(t.visibility&&!LE.has(t.visibility))throw new Error(`Pod kind ${t.name}: invalid visibility ${t.visibility}`);if(t.activeMode&&!PE.has(t.activeMode))throw new Error(`Pod kind ${t.name}: invalid activeMode ${t.activeMode}`);if(t.writePolicy&&!ME.has(t.writePolicy))throw new Error(`Pod kind ${t.name}: invalid writePolicy ${t.writePolicy}`);ai.set(t.name,FE(t))}function FE(t){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...t}}function kE(t){return ai.get(t)||null}function HE(){return Array.from(ai.values())}async function ci(t={}){let e=[];for(let r of ai.values())if(typeof r.resolveActiveScope=="function")try{let i=await r.resolveActiveScope(t);Array.isArray(i)&&i.length>0&&e.push({kind:r,scope:i})}catch{}return e}function BE(t,e={}){if(!t||!t.attrsSchema)return{valid:!0};let r=[];for(let[i,n]of Object.entries(t.attrsSchema)){let s=e[i];if(s==null)continue;let o=Array.isArray(s)?"array":typeof s;n!==o&&r.push(`attr "${i}" expected ${n}, got ${o}`)}return r.length?{valid:!1,errors:r}:{valid:!0}}async function UE(t){if(!t)return null;let e=ad(bs,`${t.name}.md`);try{return await od(e,"utf8")}catch{}if(!t.schemaDocPath)return null;let r=NE(RE(import.meta.url)),i=ad(r,t.schemaDocPath);try{return await od(i,"utf8")}catch{return null}}function jE(){ai.clear()}var DE,LE,PE,ME,ai,mr=g(()=>{ht();DE=["name"],LE=new Set(["private","shared","public"]),PE=new Set(["singleton-live","multi-active","rolling-window","always"]),ME=new Set(["origin-only","shared-allowlist","open"]),ai=new Map});var cd,ld=g(()=>{cd="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as ud}from"node:crypto";function GE(t){!je||je.length<t?(je=Buffer.allocUnsafe(t*WE),ud.getRandomValues(je),hr=0):hr+t>je.length&&(ud.getRandomValues(je),hr=0),hr+=t}function Zt(t=21){GE(t|=0);let e="";for(let r=hr-t;r<hr;r++)e+=cd[je[r]&63];return e}var WE,je,hr,li=g(()=>{ld();WE=128});var Mt={};$(Mt,{archivePod:()=>YE,deletePod:()=>qE,findByEntityId:()=>Fo,findByExternalId:()=>yr,findById:()=>KE,findByUid:()=>gr,incrementCounters:()=>_r,insertPod:()=>Mo,listPods:()=>VE,patchAttrs:()=>wr,reassignEntity:()=>JE,setEndedAt:()=>ko,upsertPod:()=>We});async function Mo({podType:t,name:e,namespace:r,attrs:i={},entityId:n=null,connectionId:s=null,externalId:o=null,startedAt:a=null,endedAt:c=null}){let l=`pod-${Zt(16)}`,[u]=await _("pod").insert({uid:l,podType:t,name:e,namespace:r||E.defaults.namespace,attrs:JSON.stringify(i),entityId:n,connectionId:s,externalId:o,startedAt:a,endedAt:c}).returning("*");return u}async function We({podType:t,externalId:e,name:r,namespace:i,attrs:n={},entityId:s=null,connectionId:o=null,startedAt:a=null}){if(!e)throw new Error("upsertPod requires externalId; use insertPod for custom pods");let c=`pod-${Zt(16)}`,l=i||E.defaults.namespace,{rows:[u]}=await _.raw(`
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()?`
305
+
306
+ `:"")+c+`
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")}
308
+
309
+ **EXISTING FACT:** ${e}
310
+
311
+ **NEW FACT:** ${t}`,s=(await pe(i,{model:E.llm.decisionModel,caller:"audm"})).trim().toUpperCase();return s.includes("UPDATE")?"UPDATE":s.includes("CONTRADICT")?"CONTRADICT":"ADD"}async function fi({content:t,category:e,confidence:r,importance:i,namespace:n,sourceDocumentIds:s,sourceSection:o,embedding:a}){let c=`fact-${Zt(16)}`,[l]=await _("fact").insert({uid:c,content:t,category:e,confidence:r||"medium",importance:i||"supplementary",namespace:n,status:"active",sourceDocumentIds:s||[],sourceSection:o||null,embedding:st(a),validFrom:new Date}).returning("*");return await _.raw(`
312
+ UPDATE fact
313
+ SET search_vector = to_tsvector('english', content)
314
+ WHERE id = ?
315
+ `,[l.id]),l}async function Lx(t){let[e]=await _("fact").where({uid:t});return e||null}async function Px(t,{namespace:e,limit:r=50}={}){let i=_("fact").where({category:t,status:"active"}).orderBy("createdAt","desc").limit(r);return e&&i.where({namespace:e}),i}async function Mx(t){return _("fact").whereRaw("? = ANY(source_document_ids)",[t]).where({status:"active"}).orderBy("createdAt","desc")}async function Od(t,e){await _("fact").where({id:t}).update({status:"contradicted",contradictedById:e,validUntil:_.fn.now()})}async function Rd(t,e){await _("fact").where({id:t}).update({status:"superseded",supersededById:e,validUntil:_.fn.now()})}async function Nd(t,{namespace:e,threshold:r=$d,limit:i=5}){let n=st(t),s=`${jt("embedding")} <=> ${Wt()}`;return _.transaction(async o=>{await o.raw("SET LOCAL hnsw.ef_search = 40");let{rows:a}=await o.raw(`
316
+ SELECT id, uid, content, category, status,
317
+ 1 - (${s}) as similarity
318
+ FROM fact
319
+ WHERE namespace = ?
320
+ AND status = 'active'
321
+ AND embedding IS NOT NULL
322
+ AND 1 - (${s}) >= ?
323
+ ORDER BY ${s}
324
+ LIMIT ?
325
+ `,[n,e,n,r,n,i]);return a})}async function Id({targetType:t,targetId:e,event:r,oldContent:i,newContent:n,triggeredBy:s}){await _("history").insert({targetType:t,targetId:e,event:r,oldContent:i||null,newContent:n||null,triggeredBy:s||null})}async function ra(t){t.length&&await _.raw(`UPDATE fact_lifecycle
326
+ SET access_count = access_count + 1,
327
+ last_accessed_at = NOW(),
328
+ stage = CASE WHEN stage = 'stable' THEN 'editing' ELSE stage END,
329
+ stage_entered_at = CASE WHEN stage = 'stable' THEN NOW() ELSE stage_entered_at END
330
+ WHERE fact_id = ANY(?)`,[t])}async function Fx(t,{limit:e=10,since:r}={}){let i=_("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(e).select("f.*");return t&&i.where({"f.namespace":t}),r&&i.where("fl.last_accessed_at",">=",r),i}async function kx({namespace:t,limit:e=50,offset:r=0,category:i}={}){let n=_("fact").where({status:"active"}).select("id","uid","content","category","confidence","importance","createdAt","namespace").orderBy("createdAt","desc").limit(e).offset(r);return t&&n.where({namespace:t}),i&&n.where({category:i}),n}async function Hx(t){let e=_("fact").where({status:"active"});t&&e.where({namespace:t});let[{count:r}]=await e.count("id as count");return Number(r)}async function Bx(t){let r=typeof t=="string"&&t.length>8?{uid:t}:{id:Number(t)},i=await _("fact").where(r).first();return i?(await _("fact_entity").where({factId:i.id}).del(),await _("fact").where({id:i.id}).del(),i):null}async function Ux(){return(await _("fact").where({status:"active"}).select("namespace").count("id as factCount").groupBy("namespace").orderBy("namespace")).map(e=>({namespace:e.namespace,factCount:Number(e.factCount)}))}async function jx(t){await _.raw("DELETE FROM relation WHERE source_fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[t]),await _.raw("DELETE FROM fact_entity WHERE fact_id IN (SELECT id FROM fact WHERE namespace = ?)",[t]),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 = ?)",[t,t]);let e=await _("fact").where({namespace:t}).del(),r=await _("chunk").where({namespace:t}).del(),i=await _("document").where({namespace:t}).del(),n=await _("entity").where({namespace:t}).del();return{factsDeleted:e,chunksDeleted:r,docsDeleted:i,entitiesDeleted:n}}var Rx,Nx,$d,te=g(()=>{li();N();De();Vt();le();O();ht();Rx=Ox.join(mt,"audm-decision.md"),Nx=E.memory.skipThreshold,$d=E.memory.ambiguousThreshold});var vn={};$(vn,{deleteDocument:()=>Yx,findBySourcePath:()=>Wx,findByUid:()=>Gx,getStats:()=>Kx,listDocuments:()=>Vx,resetHash:()=>na,updateCounts:()=>Tn,updateSourceMetadata:()=>sa,upsert:()=>ia});async function Wx(t){let[e]=await _("document").where({sourcePath:t});return e||null}async function Gx(t){let[e]=await _("document").where({uid:t});return e||null}async function ia({sourcePath:t,sourceType:e,title:r=null,contentHash:i,namespace:n}){let s=`doc-${Zt(16)}`,{rows:[o]}=await _.raw(`
331
+ INSERT INTO document (uid, source_path, source_type, title, content_hash, namespace, last_ingested_at, created_at, updated_at)
332
+ VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), NOW())
333
+ ON CONFLICT (source_path, namespace) DO UPDATE SET
334
+ title = EXCLUDED.title,
335
+ content_hash = EXCLUDED.content_hash,
336
+ last_ingested_at = NOW(),
337
+ updated_at = NOW()
338
+ RETURNING *, (xmax = 0) AS "isNew", content_hash != ? AS "contentChanged"
339
+ `,[s,t,e,r,i,n,i]),c=o.isNew||o.contentChanged;return{doc:o,changed:c}}async function Tn(t,{chunkCount:e,factCount:r}){await _("document").where({id:t}).update({chunkCount:e,factCount:r})}async function Kx(t){let e=_("document");t&&e.where({namespace:t});let r=await e;return{documentCount:r.length,totalChunks:r.reduce((i,n)=>i+(n.chunkCount||0),0),totalFacts:r.reduce((i,n)=>i+(n.factCount||0),0)}}async function Vx({namespace:t,sourceType:e,limit:r=100}={}){let i=_("document").orderBy("createdAt","desc").limit(r);return t&&i.where({namespace:t}),e&&i.where({sourceType:e}),i}async function Yx(t){await _("chunk").where({documentId:t}).del(),await _("document").where({id:t}).del()}async function na(t){await _("document").where({id:t}).update({contentHash:null})}async function sa(t,e,r=null){if(!e&&!r)return;let i={};e&&Object.keys(e).length&&(i.sourceMetadata=JSON.stringify(e)),r&&(i.connectionId=r),Object.keys(i).length&&await _("document").where({id:t}).update(i)}var In=g(()=>{li();N()});var On={};$(On,{findById:()=>ee,findByName:()=>Ye,findByUid:()=>qx,findSimilar:()=>Jx,getCanonicalEntity:()=>Je,getEntityCount:()=>Qx,incrementMentionCount:()=>pi,insertEntity:()=>oa,listByType:()=>Xx,pushAlias:()=>$n,searchByName:()=>ca,updateDescription:()=>zx,updateEntityTypes:()=>qe,updateName:()=>aa});async function oa({name:t,entityType:e,description:r,namespace:i,externalId:n,embedding:s}){let o=`ent-${Zt(16)}`,[a]=await _("entity").insert({uid:o,name:t,entityType:e,description:r||null,namespace:i||E.defaults.namespace,externalId:n||null,mentionCount:1,embedding:st(s)}).returning("*");return a}async function Ye(t,e){let r=e||E.defaults.namespace,i=t.toLowerCase();return _("entity").where({namespace:r}).whereNull("mergedWith").where(function(){this.whereRaw("LOWER(name) = ?",[i]).orWhereRaw("aliases @> ARRAY[?]::text[]",[i])}).first()||null}async function $n(t,e){if(!e)return;let r=e.toLowerCase();await _.raw(`
340
+ UPDATE entity
341
+ SET aliases = (
342
+ SELECT ARRAY(SELECT DISTINCT unnest(aliases || ARRAY[?]::text[]))
343
+ )
344
+ WHERE id = ?
345
+ `,[r,t])}async function aa(t,e){await _("entity").where({id:t}).update({name:e})}async function qx(t){return _("entity").where({uid:t}).first()||null}async function ee(t){return _("entity").where({id:t}).first()||null}async function Jx(t,{entityType:e,namespace:r,threshold:i=.85,limit:n=3}){let s=st(t),o=`${jt("embedding")} <=> ${Wt()}`,{rows:a}=await _.raw(`
346
+ SELECT id, uid, name, entity_type AS "entityType", description,
347
+ mention_count AS "mentionCount",
348
+ 1 - (${o}) AS similarity
349
+ FROM entity
350
+ WHERE entity_type = ?
351
+ AND namespace = COALESCE(?, ?)
352
+ AND embedding IS NOT NULL
353
+ AND merged_with IS NULL
354
+ AND 1 - (${o}) >= ?
355
+ ORDER BY ${o}
356
+ LIMIT ?
357
+ `,[s,e,r,E.defaults.namespace,s,i,s,n]);return a}async function pi(t){await _("entity").where({id:t}).increment("mentionCount",1)}async function zx(t,e){await _("entity").where({id:t}).update({description:e})}async function Xx(t,{namespace:e,limit:r=50}={}){let i=_("entity").where({entityType:t}).whereNull("mergedWith").orderBy("mentionCount","desc").limit(r);return e&&i.where({namespace:e}),i}async function Qx(t){let[{count:e}]=await _("entity").where({entityType:t}).whereNull("mergedWith").count("id as count");return Number(e)}async function ca(t,{entityType:e,namespace:r,limit:i=10}={}){let n=_("entity").whereRaw("LOWER(name) LIKE ?",[`%${t.toLowerCase()}%`]).whereNull("mergedWith").orderBy("mentionCount","desc").limit(i);return e&&n.where({entityType:e}),r&&n.where({namespace:r}),n}async function qe(t,e){let r=await ee(t);if(!r)return;let i;try{i=r.entityTypes?JSON.parse(r.entityTypes):[r.entityType]}catch{i=[r.entityType]}i.includes(e)||(i.push(e),await _("entity").where({id:t}).update({entityTypes:JSON.stringify(i)}))}async function Je(t){let e=await ee(t);for(;e?.mergedWith;)e=await ee(e.mergedWith);return e}var ze=g(()=>{li();N();le();O()});var Dd={};$(Dd,{fromSourceMetadata:()=>la,upsertPersonPod:()=>Zx});async function Zx({entityId:t,name:e,namespace:r,attrs:i={}}){if(!t)throw new Error("upsertPersonPod requires entityId");let n=r||E.defaults.namespace,s=await Fo(t);if(s){let l=typeof s.attrs=="object"?s.attrs:tb(s.attrs),h={platforms:gd(l.platforms||{},i.platforms||{})};return i.role&&!l.role&&(h.role=i.role),i.relationship&&!l.relationship&&(h.relationship=i.relationship),i.notes&&!l.notes&&(h.notes=i.notes),await wr(s.id,h),{pod:s,isNew:!1}}let o=md(i),a=hd(o.platforms);return a?await We({podType:Ko,externalId:a,name:e,namespace:n,attrs:o,entityId:t}):{pod:await Mo({podType:Ko,name:e,namespace:n,attrs:o,entityId:t}),isNew:!0}}async function la(t,e){if(!t||typeof t!="object")return[];let r=[],i=e||E.defaults.namespace;if(t.slack?.team_id&&t.connection_id){let n=await yr({podType:"connector_workspace",externalId:`slack:${t.slack.team_id}`,namespace:i});n&&r.push({podId:n.id,role:"primary"})}if(t.github?.org&&t.connection_id){let n=await yr({podType:"connector_workspace",externalId:`github:${t.github.org}`,namespace:i});n&&r.push({podId:n.id,role:"primary"})}return r}function tb(t){if(!t)return{};try{return JSON.parse(t)}catch{return{}}}var ua=g(()=>{$t();Vo();O()});function Ld(t){let e=t.split(`
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(/&amp;/g,"&"),r=r.replace(/&lt;/g,"<"),r=r.replace(/&gt;/g,">"),r=r.replace(/&quot;/g,'"'),r=r.replace(/&#39;/g,"'"),r=r.replace(/&nbsp;/g," "),r=r.replace(/[ \t]+/g," "),r=r.replace(/\n{3,}/g,`
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&LT)){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(`
417
+ SELECT id, name, entity_type AS "entityType", entity_types AS "entityTypes",
418
+ 1 - (${o}) AS similarity
419
+ FROM entity
420
+ WHERE namespace = ?
421
+ AND embedding IS NOT NULL
422
+ AND LOWER(name) != LOWER(?)
423
+ AND merged_with IS NULL
424
+ AND 1 - (${o}) >= ?
425
+ ORDER BY ${o}
426
+ LIMIT ?
427
+ `,[s,r,t,s,i,s,n]);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 Ja(t,e,r,i){let n=(r.aliases||[]).filter(Boolean),s=n.length?`Existing aliases: ${n.join(", ")}`:"",o=r.similarity>0?`Name-embedding similarity: ${(r.similarity*100).toFixed(0)}%`:"Name-embedding similarity: not directly measured (LLM judging on episode text alone)",a=i?`
428
+ Source passage where the new mention appeared:
429
+ ---
430
+ ${i.slice(0,1500)}
431
+ ---
432
+ `:"",c=`You're deciding whether two entity mentions refer to the same real-world thing, and whether the source passage indicates a RENAME.
433
+
434
+ Mention A (new): "${t}" (type: ${e})
435
+ Mention B (existing): "${r.name}" (types: ${(r.types||[r.entityType]).join(", ")})
436
+ ${s}
437
+ ${o}
438
+ ${a}
439
+ Decision rules:
440
+ - "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.
441
+ - "rename" = true ONLY when "same" is true AND the source passage says one name has replaced the other ("X is now named Y", "X was renamed to Y", "we renamed X to Y", "X used to be called Y", etc.). A normal synonym match is NOT a rename.
442
+ - "current_name" = which of A or B is the new/canonical name per the source passage (the one we want as \`entity.name\` going forward). Only meaningful when "rename" is true. Use the literal string of mention A or B.
443
+ - If you cannot tell, "same" is false. Don't guess.
444
+
445
+ 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 pe(c,{model:E.llm.entityModel,caller:"entity-matcher"})}catch{return{same:!1,rename:!1,reason:"llm-error"}}let u=Hv(l);return u&&typeof u.same=="boolean"?{same:u.same===!0,rename:u.rename===!0&&u.same===!0,currentName:typeof u.current_name=="string"?u.current_name:null,reason:typeof u.reason=="string"?u.reason:""}:{same:/^\s*(yes|true)\b/i.test(l),rename:!1,currentName:null,reason:"fallback-text-match"}}function Hv(t){if(typeof t!="string")return null;try{return JSON.parse(t.trim())}catch{}let e=t.match(/\{[\s\S]*\}/);if(e)try{return JSON.parse(e[0])}catch{}return null}var kv,Og=g(()=>{N();Vt();le();O();kv=.85});var Rg={};$(Rg,{followMergeChain:()=>Wv,mergeEntities:()=>Bv});async function Bv(t,e){let[r,i]=await Promise.all([ee(t),ee(e)]);if(!r||!i)throw new Error(`Entity ${t} or ${e} not found`);if(t===e)return r;let n=(r.mentionCount||0)+(i.mentionCount||0);await _.transaction(async o=>{await o("relation").where({sourceId:e}).update({sourceId:t}),await o("relation").where({targetId:e}).update({targetId:t}),await o("relation").whereRaw("source_id = target_id").del(),await o.raw(`
447
+ INSERT INTO fact_entity (fact_id, entity_id, mention_type, mention_count, created_at, updated_at)
448
+ SELECT fact_id, ?, mention_type, mention_count, NOW(), NOW()
449
+ FROM fact_entity
450
+ WHERE entity_id = ?
451
+ ON CONFLICT (fact_id, entity_id, mention_type)
452
+ DO UPDATE SET mention_count = fact_entity.mention_count + EXCLUDED.mention_count
453
+ `,[t,e]),await o("fact_entity").where({entityId:e}).del(),await o("entity").where({id:t}).update({mentionCount:n}),await o("pod").where({entityId:t,status:"active"}).first()?await o("pod").where({entityId:e}).update({status:"archived",updatedAt:o.fn.now()}):await o("pod").where({entityId:e}).update({entityId:t,updatedAt:o.fn.now()}),await o("entity").where({id:e}).update({mergedWith:t})}),await jv(t);let s=Uv(i);for(let o of s)await qe(t,o);return console.log(`[entity-merge] Merged ${e} (${i.name}) into ${t} (${r.name})`),{...r,mentionCount:n}}function Uv(t){if(!t.entityTypes)return[t.entityType];try{return JSON.parse(t.entityTypes)}catch{return[t.entityType]}}async function jv(t){let e=await _("relation").where(function(){this.where({sourceId:t}).orWhere({targetId:t})}).whereNull("invalidAt"),r=Ga(e,i=>`${i.sourceId}-${i.targetId}-${i.relationType}`);for(let i of Object.values(r)){if(i.length<=1)continue;let[n,...s]=Ka(i,"id"),o=Va(i,"mentionCount");await _("relation").where({id:n.id}).update({mentionCount:o}),await _("relation").whereIn("id",s.map(a=>a.id)).del()}}async function Wv(t){let e=await ee(t),r=[e?.id];for(;e?.mergedWith;)e=await ee(e.mergedWith),e&&r.push(e.id);return{canonical:e,chain:r}}var Ng=g(()=>{os();N();ze()});import{readFile as Gv}from"node:fs/promises";async function Ti({name:t,entityType:e,description:r,namespace:i,externalId:n,embedding:s,episodeText:o,episodeEntityIds:a=[]}){let c=i||E.defaults.namespace,l=await Ye(t,c);if(l)return l=await Je(l.id),await pi(l.id),l.entityType!==e&&await qe(l.id,e),l;let u=s||await Ne(`${e}: ${t}`),h=await $g(t,u,{namespace:c,limit:3});for(let m of h){let y=await Ja(t,e,m,o);if(y.same)return Dg(m,{newName:t,entityType:e,isRename:y.rename,currentName:y.currentName})}let d=new Set(h.map(m=>m.id)),f=a.filter(m=>m!=null&&!d.has(m));for(let m of f){let y=await Je(m);if(!y||y.namespace!==c||y.name?.toLowerCase()===t.toLowerCase())continue;let w=await Ja(t,e,{...y,types:Kv(y),similarity:0},o);if(w.same)return Dg(y,{newName:t,entityType:e,isRename:w.rename,currentName:w.currentName})}try{return await oa({name:t,entityType:e,description:r,namespace:c,externalId:n,embedding:u})}catch(m){if(Lg(m)){let y=await Ye(t,c);if(y){let w=await Je(y.id);return await pi(w.id),await qe(w.id,e),w}}throw m}}function Lg(t){return t?!!(t.code==="23505"||typeof t.message=="string"&&t.message.includes("duplicate key value violates unique constraint")):!1}async function Dg(t,{newName:e,entityType:r,isRename:i,currentName:n}){let s=await Je(t.id);if(await pi(s.id),await qe(s.id,r),i&&s.name&&s.name.toLowerCase()!==e.toLowerCase()){let o=e.toLowerCase(),a=s.name.toLowerCase(),c=(n||"").toLowerCase(),l,u;if(c===o?(l=e,u=s.name):c===a?(l=s.name,u=e):(l=e,u=s.name),u&&u.toLowerCase()!==l.toLowerCase()&&(await $n(s.id,u),s.aliases=[...s.aliases||[],u.toLowerCase()]),l!==s.name)try{await aa(s.id,l),s.name=l}catch(h){if(Lg(h)){let d=await Ye(l,s.namespace);if(d&&d.id!==s.id){let{mergeEntities:f}=await Promise.resolve().then(()=>(Ng(),Rg));return await f(d.id,s.id),await $n(d.id,s.name),await Je(d.id)}}throw h}}return s}function Kv(t){if(t.entityTypes)try{return JSON.parse(t.entityTypes)}catch{}return[t.entityType]}async function za(t,{promptPath:e,namespace:r}){if(!t.length)return[];let i=t.map(d=>`- [${d.category}] ${d.content}`).join(`
454
+ `),s=`${await Gv(e,"utf8")}
455
+
456
+ ---
457
+
458
+ ${i}`,o=await pe(s,{model:E.llm.entityModel,caller:"entity-resolver"}),a=ta(o);if(!Array.isArray(a))return[];let c=a.filter(d=>d.name);if(!c.length)return[];let l=new Array(c.length),u=[],h=[];for(let d=0;d<c.length;d++){let f=await Vv(c[d].name,r);f?(l[d]=f,u.push(f.id)):h.push(d)}for(let d of h){let f=c[d],m=await Ti({name:f.name,entityType:"topic",description:f.description||null,namespace:r,episodeText:i,episodeEntityIds:u});l[d]=m,m?.id&&u.push(m.id)}return l.filter(Boolean)}async function Vv(t,e){let{findByName:r,getCanonicalEntity:i,incrementMentionCount:n}=await Promise.resolve().then(()=>(ze(),On)),s=await r(t,e);if(!s)return null;let o=await i(s.id);return await n(o.id),o}var Pg=g(()=>{De();Vt();O();ze();Og()});var Mg={};$(Mg,{createRelation:()=>vi,findRelation:()=>Yv,getRelationCount:()=>zv,getRelationsByFact:()=>Jv,invalidateRelation:()=>qv,listRelationsForEntity:()=>Xa});async function vi({sourceId:t,targetId:e,relationType:r,sourceFactId:i,validAt:n}){let{rows:[s]}=await _.raw(`
459
+ INSERT INTO relation (source_id, target_id, relation_type, source_fact_id, mention_count, valid_at, created_at, updated_at)
460
+ VALUES (?, ?, ?, ?, 1, ?, NOW(), NOW())
461
+ ON CONFLICT (source_id, target_id, relation_type) DO UPDATE SET
462
+ mention_count = relation.mention_count + 1,
463
+ source_fact_id = COALESCE(EXCLUDED.source_fact_id, relation.source_fact_id),
464
+ updated_at = NOW()
465
+ RETURNING *
466
+ `,[t,e,r,i||null,n||null]);return s}async function Yv(t,e,r){return _("relation").where({sourceId:t,targetId:e,relationType:r}).whereNull("invalidAt").first()||null}async function qv(t,{invalidAt:e}={}){await _("relation").where({id:t}).update({invalidAt:e||new Date})}async function Xa(t,{direction:e="both",relationType:r,limit:i=50}={}){let n=a=>{let c=a==="outgoing"?"source_id":"target_id",l=a==="outgoing"?"target_id":"source_id";return _.raw(`
467
+ SELECT r.id AS "relationId", r.relation_type AS "relationType",
468
+ r.mention_count AS "mentionCount", r.valid_at AS "validAt",
469
+ e.id AS "entityId", e.uid, e.name, e.entity_type AS "entityType",
470
+ e.description, '${a}' AS direction
471
+ FROM relation r
472
+ JOIN entity e ON e.id = r.${l}
473
+ WHERE r.${c} = ?
474
+ AND r.invalid_at IS NULL
475
+ AND e.merged_with IS NULL
476
+ ${r?"AND r.relation_type = ?":""}
477
+ ORDER BY r.mention_count DESC
478
+ LIMIT ?
479
+ `,r?[t,r,i]:[t,i])};if(e==="outgoing"){let{rows:a}=await n("outgoing");return a}if(e==="incoming"){let{rows:a}=await n("incoming");return a}let[s,o]=await Promise.all([n("outgoing"),n("incoming")]);return[...s.rows,...o.rows]}async function Jv(t){let{rows:e}=await _.raw(`
480
+ SELECT r.id, r.relation_type AS "relationType",
481
+ r.mention_count AS "mentionCount",
482
+ s.name AS "sourceName", s.entity_type AS "sourceType",
483
+ t.name AS "targetName", t.entity_type AS "targetType"
484
+ FROM relation r
485
+ JOIN entity s ON s.id = r.source_id
486
+ JOIN entity t ON t.id = r.target_id
487
+ WHERE r.source_fact_id = ?
488
+ AND r.invalid_at IS NULL
489
+ AND s.merged_with IS NULL
490
+ AND t.merged_with IS NULL
491
+ `,[t]);return e}async function zv(){let[{count:t}]=await _("relation").whereNull("invalidAt").count("id as count");return Number(t)}var cs=g(()=>{N()});async function ls(t,e){if(!e.length)return;let r=Ya(e,"id"),i=r.map(n=>({factId:t,entityId:n.id,mentionType:"content",mentionCount:1}));await _("fact_entity").insert(i).onConflict(_.raw("(fact_id, entity_id, mention_type)")).merge({mentionCount:_.raw("fact_entity.mention_count + 1")}),await Xv(t,r)}async function Xv(t,e){let r=e.map(n=>n.id).filter(Boolean);if(!r.length)return;let i=await _("pod").whereIn("entityId",r).where({status:"active"}).select("id");for(let{id:n}of i)await ui(n,t,"mention")}async function Fg(t,{limit:e=50}={}){return _("fact").join("fact_entity","fact.id","fact_entity.fact_id").where("fact_entity.entity_id",t).where("fact.status","active").select("fact.*","fact_entity.mention_count as entityMentionCount").orderBy("fact_entity.mention_count","desc").limit(e)}async function Ii(t){if(!t.length)return new Map;let e=await _("fact_entity").whereIn("factId",t).select("factId","entityId"),r=new Map;for(let i of e)r.has(i.factId)||r.set(i.factId,[]),r.get(i.factId).push(i.entityId);return r}var $i=g(()=>{os();N();br()});import Qv from"node:path";async function ec(t,e,r,i){let{title:n,sourceType:s,metadata:o={}}=t,a=e.filter(d=>d.action==="ADD"||d.action==="UPDATE"),c=a.map(d=>d.fact||d.existing).filter(Boolean),u=a.find(d=>d.fact)?.fact?.id||null,h=new Date().toISOString().split("T")[0];return i?.items?.length?Zv({entityDefs:i,factObjects:c,firstFactId:u,namespace:r,today:h}):tI({title:n,sourceType:s,metadata:o,factObjects:c,firstFactId:u,namespace:r,today:h})}async function Zv({entityDefs:t,factObjects:e,firstFactId:r,namespace:i,today:n}){let s={},o=0,a=e.map(d=>d.content).filter(Boolean).join(`
492
+ `),c=[];for(let d of t.items){let f=await Ti({name:d.name,entityType:d.type,description:d.description,namespace:i,episodeText:a,episodeEntityIds:c});s[d.name]=f,f?.id&&c.push(f.id)}for(let d of t.relations||[]){let f=s[d.source],m=s[d.target];if(!f||!m)continue;let y=Qa(e,d.source)||Qa(e,d.target);await vi({sourceId:f.id,targetId:m.id,relationType:d.type,sourceFactId:y?.id||r,validAt:n}),o++}let l=await tc(e,i),u=Za(Object.values(s),l),h=0;for(let d of e){let f=u.filter(m=>us(d.content,m));f.length&&(await ls(d.id,f),h+=f.length)}return{entityCount:u.length,relationCount:o,factEntityLinks:h,topics:u.filter(d=>d.entityType==="topic").map(d=>d.name)}}async function tI({title:t,sourceType:e,metadata:r,factObjects:i,firstFactId:n,namespace:s,today:o}){if(!t){let w=i.length?await za(i,{promptPath:kg,namespace:s}):[],x=await tc(i,s),b=Za(w,x),T=0;for(let S of i){let C=b.filter(P=>us(S.content,P));C.length&&(await ls(S.id,C),T+=C.length)}return{entityCount:b.length,relationCount:0,factEntityLinks:T,topics:w.map(S=>S.name)}}let a=i.map(w=>w.content).filter(Boolean).join(`
493
+ `).slice(0,2e3),c=await Ti({name:t,entityType:"document",description:`${e} document: ${t}`,namespace:s,episodeText:a}),l=null;r.author&&(l=await Ti({name:r.author,entityType:"person",namespace:s,episodeText:a,episodeEntityIds:c?.id?[c.id]:[]}));let u=i.length?await za(i,{promptPath:kg,namespace:s}):[],h=0;l&&(await vi({sourceId:c.id,targetId:l.id,relationType:"AUTHORED_BY",sourceFactId:n,validAt:o}),h++);for(let w of u){let x=Qa(i,w.name);await vi({sourceId:c.id,targetId:w.id,relationType:"COVERS",sourceFactId:x?.id||n,validAt:o}),h++}let d=[c,l,...u].filter(Boolean),f=await tc(i,s),m=Za(d,f),y=0;for(let w of i){let x=m.filter(b=>us(w.content,b));x.length&&(await ls(w.id,x),y+=x.length)}return{entityCount:m.length,relationCount:h,factEntityLinks:y,topics:u.map(w=>w.name)}}function Qa(t,e){if(!e)return null;let r=e.toLowerCase();return t.find(i=>i.content?.toLowerCase().includes(r))||null}function us(t,e){if(!t||!e?.name)return!1;let r=t.toLowerCase();return[e.name.toLowerCase(),...e.aliases||[]].some(n=>n?new RegExp(`\\b${eI(n)}\\b`).test(r):!1)}function eI(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Za(...t){let e=new Set,r=[];for(let i of t)for(let n of i)!n||e.has(n.id)||(e.add(n.id),r.push(n));return r}async function tc(t,e){if(!t?.length)return[];let r=await _("entity as e").join("pod as p","p.entity_id","e.id").where("p.status","active").where("e.namespace",e).whereNull("e.mergedWith").select("e.id","e.uid","e.name","e.entityType","e.aliases");return r.length?r.filter(i=>t.some(n=>us(n.content,i))):[]}var kg,Hg=g(()=>{Pg();cs();$i();ht();N();kg=Qv.join(mt,"entity-extraction.md")});var rc={};$(rc,{ingestDocument:()=>sI});import{createHash as rI}from"node:crypto";import{join as iI}from"node:path";async function sI({content:t,title:e,sourcePath:r,sourceType:i="raw",contentType:n,namespace:s,metadata:o={},promptPath:a,categories:c,entities:l,skipFacts:u=!1,skipEntities:h=!1,skipContextualization:d=!1,classify:f=!0,podUids:m=[],resolvePodsFrom:y=null}){let w=s||E.defaults.namespace,x=c||Object.keys(as),b=a||nI,T=e||r,S=null;if(f&&(process.stderr.write(`[0/6] Classifying input...
494
+ `),S=await vg(t,{title:T}),process.stderr.write(` Route: ${S.route} \u2014 ${S.reasoning}
495
+ `),S.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
496
+ `),{documentId:null,title:T,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
497
+ `);let C=rI("sha256").update(t).digest("hex"),P=r||`thought:${C}`,{doc:v,changed:L}=await ia({sourcePath:P,sourceType:i,title:T,contentHash:C,namespace:w});if(!L)return process.stderr.write(` Skipped \u2014 content unchanged.
498
+ `),{documentId:v.id,title:T,skipped:!0};o&&(Object.keys(o).length||o.connection_id)&&await sa(v.id,o,o.connection_id??null);let G=await cI({podUids:m,resolvePodsFrom:y,metadata:o,namespace:w});for(let{podId:R,role:Y}of G)await Yo(R,v.id,Y);process.stderr.write(`[2/6] Parsing content...
499
+ `);let j=Wd(t,{format:o.format,filePath:r,contentType:n});if(T=e||j.metadata?.title||r,S?.route==="thought"&&S.facts.length){process.stderr.write(`[thought] Storing ${S.facts.length} facts directly...
500
+ `);let R=await oI(S.facts,{documentId:v.id,namespace:w}),Y={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!h&&R.results.length&&(Y=await ec({title:T,sourceType:i,metadata:o},R.results,w,l)),await Tn(v.id,{chunkCount:0,factCount:R.counts.added}),await Bg(R.results,G),process.stderr.write(`Done. Route: thought, ${R.counts.total} facts (${R.counts.added} new)
501
+ `),{documentId:v.id,documentUid:v.uid,title:T,skipped:!1,route:"thought",chunkCount:0,facts:R.counts,entities:Y}}let H=[],F={counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]},J={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};try{process.stderr.write(`[3/6] Chunking and embedding...
502
+ `),H=Kd(j.sections),process.stderr.write(` ${H.length} chunks created
503
+ `),!d&&H.length&&(H=await Yd(H,j.text,{title:T}));let R=H.map(B=>{let ft=B.contextualPrefix;return ft?`${ft}
504
+ ${B.content}`:B.content}),Y=await zt(R),z=H.map((B,ft)=>({...B,embedding:Y[ft]}));await Jd(v.id,z,w),!u&&E.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
505
+ `),F=await aI(H,{documentId:v.id,namespace:w,promptPath:b,categories:x})):E.ingest.eagerExtract||process.stderr.write(`[4/6] Skipping fact extraction (SIGIL_EAGER_EXTRACT=false)
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
+ `),J=await ec({title:T,sourceType:i,metadata:o},F.results,w,l),process.stderr.write(` ${J.entityCount} entities, ${J.relationCount} relations
508
+ `))}catch(R){throw console.error(`[pipeline] Failed after document upsert: ${R.message}`),await na(v.id).catch(()=>{}),R}return process.stderr.write(`Done. ${H.length} chunks, ${F.counts.total} facts, ${J.entityCount} entities
509
+ `),{documentId:v.id,documentUid:v.uid,title:T,skipped:!1,chunkCount:H.length,facts:F.counts,entities:J}}async function Ug(t,{documentId:e,namespace:r,embeddings:i,defaultConfidence:n="medium",defaultImportance:s="supplementary"}){let o={total:t.length,added:0,skipped:0,updated:0,contradicted:0},a=[];for(let c=0;c<t.length;c++){let l=t[c],u=await ea({content:l.content,category:l.category,confidence:l.confidence||n,importance:l.importance||s,namespace:r,sourceDocumentIds:e?[e]:[],sourceSection:l.sourceSection||l.category,embedding:i[c]});a.push(u);let h=u.action.toLowerCase();h==="add"?o.added++:h==="skip"?o.skipped++:h==="update"?o.updated++:h==="contradict"&&o.contradicted++}return{counts:o,results:a}}async function oI(t,{documentId:e,namespace:r}){let i=await zt(t.map(n=>n.content));return Ug(t,{documentId:e,namespace:r,embeddings:i,defaultConfidence:"high",defaultImportance:"vital"})}async function aI(t,{documentId:e,namespace:r,promptPath:i,categories:n}){let s=await Sg(t,{promptPath:i,categories:n});if(process.stderr.write(` ${s.length} facts extracted from ${t.length} chunks
510
+ `),!s.length)return{counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]};let o=await zt(s.map(a=>a.content));return Ug(s,{documentId:e,namespace:r,embeddings:o})}async function cI({podUids:t,resolvePodsFrom:e,metadata:r,namespace:i}){let n=[];for(let o of t){let a=await gr(o);a&&n.push({podId:a.id,role:"primary"})}if(e==="metadata"){let o=await la(r,i);for(let a of o)n.push(a)}let s=new Map;for(let o of n){let a=s.get(o.podId);(!a||o.role==="primary"&&a.role!=="primary")&&s.set(o.podId,o)}return[...s.values()]}async function Bg(t,e){if(!(!e.length||!t.length))for(let r of t){let i=r?.fact?.id??r?.existing?.id;if(!i)continue;let n=r?.action==="SKIP"?"mention":"primary";for(let{podId:s}of e)await ui(s,i,n)}}var nI,ic=g(()=>{Gd();Vd();De();qd();In();zd();Ag();te();qa();Ig();Hg();$t();br();ua();O();ht();nI=iI(mt,"default-extraction.md")});var Gg={};$(Gg,{readSource:()=>Wg,readSources:()=>mI});import{readFile as lI,stat as uI}from"node:fs/promises";import{basename as dI,extname as fI,resolve as pI}from"node:path";import*as jg from"node:fs/promises";async function Wg(t){let e=pI(t),r=await lI(e,"utf8"),i=dI(e),n=fI(e).toLowerCase();return{content:r,title:i,sourcePath:e,sourceType:"file",contentType:hI(n),metadata:{filePath:e,fileName:i,extension:n}}}async function mI(t){let e=[];for await(let r of jg.glob(t))(await uI(r)).isFile()&&e.push(await Wg(r));return e}function hI(t){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"}[t]||"text/plain"}var Kg=g(()=>{});var Vg={};$(Vg,{fetchSource:()=>gI});async function gI(t){let e=await fetch(t);if(!e.ok)throw new Error(`Failed to fetch ${t}: ${e.status} ${e.statusText}`);let r=await e.text(),i=e.headers.get("content-type")||"text/plain",n=yI(t);return{content:r,title:n,sourcePath:t,sourceType:"url",contentType:i,metadata:{url:t,fetchedAt:new Date().toISOString()}}}function yI(t){try{let e=new URL(t),i=e.pathname.replace(/\/$/,"").split("/").pop()||e.hostname;return decodeURIComponent(i)}catch{return t}}var Yg=g(()=>{});var qg={};$(qg,{consolidateCoRetrievalEdges:()=>_I,getCoRetrievedFacts:()=>wI,strengthenEdges:()=>nc});async function nc(t){if(!t||t.length<2)return;let e=[...new Set(t.filter(s=>Number.isInteger(s)))].sort((s,o)=>s-o);if(e.length<2)return;let r=[];for(let s=0;s<e.length;s++)for(let o=s+1;o<e.length;o++)r.push([e[s],e[o]]);let i=r.map(()=>"(?, ?, 1, NOW(), NOW())").join(", "),n=r.flat();await _.raw(`
511
+ INSERT INTO hebbian_edge (fact_a_id, fact_b_id, strength, first_seen_at, last_seen_at)
512
+ VALUES ${i}
513
+ ON CONFLICT (fact_a_id, fact_b_id)
514
+ DO UPDATE SET
515
+ strength = hebbian_edge.strength + 1,
516
+ last_seen_at = NOW()
517
+ `,n)}async function wI(t,{limit:e=5,minStrength:r=2}={}){let{rows:i}=await _.raw(`
518
+ SELECT
519
+ CASE WHEN fact_a_id = ? THEN fact_b_id ELSE fact_a_id END AS partner_id,
520
+ strength,
521
+ last_seen_at AS "lastSeenAt"
522
+ FROM hebbian_edge
523
+ WHERE (fact_a_id = ? OR fact_b_id = ?)
524
+ AND strength >= ?
525
+ ORDER BY strength DESC, last_seen_at DESC
526
+ LIMIT ?
527
+ `,[t,t,t,r,e]);return i}async function _I({floor:t=1,decayDays:e=90}={}){let{rows:r}=await _.raw(`
528
+ DELETE FROM hebbian_edge
529
+ WHERE strength <= ?
530
+ AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
531
+ RETURNING fact_a_id
532
+ `,[t,e]);return r.length}var sc=g(()=>{N()});var fs={};$(fs,{consolidateEntityCoRetrievalEdges:()=>bI,getCoRetrievedEntities:()=>xI,getEdgeStrengthsForRanking:()=>ac,getEntityHebbianStats:()=>SI,strengthenEntityEdges:()=>oc});function ds(t){return EI/Math.max(t,1)}async function oc(t,e={}){if(!E.hebbian.entity.enabled||!t||t.length<2)return;let r=e.eta??E.hebbian.entity.eta,i=e.cap??E.hebbian.entity.cap,n=[...new Set(t.filter(c=>Number.isInteger(c)))].sort((c,l)=>c-l);if(n.length<2)return;let s=[];for(let c=0;c<n.length;c++)for(let l=c+1;l<n.length;l++)s.push([n[c],n[l]]);let o=s.map(()=>"(?, ?, ?, NOW(), NOW())").join(", "),a=s.flatMap(([c,l])=>[c,l,r]);await _.raw(`
533
+ INSERT INTO entity_hebbian_edge (entity_a_id, entity_b_id, strength, first_seen_at, last_seen_at)
534
+ VALUES ${o}
535
+ ON CONFLICT (entity_a_id, entity_b_id)
536
+ DO UPDATE SET
537
+ strength = LEAST(entity_hebbian_edge.strength + ?, ?),
538
+ last_seen_at = NOW()
539
+ `,[...a,r,i])}async function xI(t,e={}){if(!E.hebbian.entity.enabled)return[];let r=e.limit??10,i=e.minEffectiveStrength??E.hebbian.entity.minEffective,n=ds(e.halfLifeDays??E.hebbian.entity.halfLifeDays),{rows:s}=await _.raw(`
540
+ SELECT
541
+ CASE WHEN entity_a_id = ? THEN entity_b_id ELSE entity_a_id END AS "partnerId",
542
+ (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0))::float8 AS "effectiveStrength",
543
+ strength::float8 AS "rawStrength",
544
+ last_seen_at AS "lastSeenAt"
545
+ FROM entity_hebbian_edge
546
+ WHERE entity_a_id = ? OR entity_b_id = ?
547
+ ORDER BY "effectiveStrength" DESC
548
+ LIMIT ?
549
+ `,[t,n,t,t,r*3]);return s.filter(o=>o.effectiveStrength>=i).slice(0,r)}async function ac(t,e,r={}){if(!E.hebbian.entity.enabled)return new Map;if(!t.length||!e.length)return new Map;let i=ds(r.halfLifeDays??E.hebbian.entity.halfLifeDays),n=[...new Set(t)],s=[...new Set(e)].filter(c=>!n.includes(c));if(!s.length)return new Map;let{rows:o}=await _.raw(`
550
+ SELECT
551
+ CASE
552
+ WHEN entity_a_id = ANY(?::bigint[]) THEN entity_b_id
553
+ ELSE entity_a_id
554
+ END AS "candidateId",
555
+ SUM(strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0))::float8 AS "summedStrength"
556
+ FROM entity_hebbian_edge
557
+ WHERE
558
+ (entity_a_id = ANY(?::bigint[]) AND entity_b_id = ANY(?::bigint[]))
559
+ OR
560
+ (entity_b_id = ANY(?::bigint[]) AND entity_a_id = ANY(?::bigint[]))
561
+ GROUP BY "candidateId"
562
+ `,[n,i,n,s,n,s]),a=new Map;for(let c of o)a.set(Number(c.candidateId),c.summedStrength);return a}async function bI({floor:t=.5,decayDays:e=90}={}){let r=ds(E.hebbian.entity.halfLifeDays),{rows:i}=await _.raw(`
563
+ DELETE FROM entity_hebbian_edge
564
+ WHERE (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0)) <= ?
565
+ AND last_seen_at < NOW() - (INTERVAL '1 day' * ?)
566
+ RETURNING entity_a_id
567
+ `,[r,t,e]);return i.length}async function SI({topN:t=5}={}){let e=ds(E.hebbian.entity.halfLifeDays),r=await _.raw(`
568
+ SELECT
569
+ COUNT(*)::int AS "edgeCount",
570
+ COALESCE(AVG(strength)::float8, 0) AS "avgStrength",
571
+ COALESCE(MAX(strength)::float8, 0) AS "maxStrength"
572
+ FROM entity_hebbian_edge
573
+ `),i=await _.raw(`
574
+ SELECT
575
+ ea.name AS "aName",
576
+ eb.name AS "bName",
577
+ strength::float8 AS "strength",
578
+ (strength * EXP(-1.0 * ?::float8 * EXTRACT(EPOCH FROM (NOW() - last_seen_at)) / 86400.0))::float8 AS "decayed"
579
+ FROM entity_hebbian_edge
580
+ JOIN entity ea ON ea.id = entity_a_id
581
+ JOIN entity eb ON eb.id = entity_b_id
582
+ ORDER BY "decayed" DESC
583
+ LIMIT ?
584
+ `,[e,t]);return{edgeCount:r.rows[0]?.edgeCount??0,avgStrength:r.rows[0]?.avgStrength??0,maxStrength:r.rows[0]?.maxStrength??0,topPairs:i.rows??[]}}var EI,Oi=g(()=>{N();O();EI=Math.log(2)});function ps({minConfidence:t="medium",pointInTime:e,categories:r}){let i=AI[t]??1,n=[i],s="",o="";return e&&(s="AND valid_from <= ? AND (valid_until IS NULL OR valid_until > ?)",n.push(e,e)),r?.length&&(o="AND category = ANY(?)",n.push(r)),{minRank:i,temporalClause:s,categoryClause:o,filterParams:n}}var AI,Ri,ms=g(()=>{AI={low:0,medium:1,high:2},Ri=`CASE confidence
585
+ WHEN 'high' THEN 2
586
+ WHEN 'medium' THEN 1
587
+ ELSE 0
588
+ END`});async function Jg(t,{namespaces:e,limit:r=20}){let i=st(t),n=`${jt("embedding")} <=> ${Wt()}`,{rows:s}=await _.raw(`
589
+ SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
590
+ content, section_heading AS "sectionHeading", namespace,
591
+ 1 - (${n}) as similarity
592
+ FROM chunk
593
+ WHERE namespace = ANY(?)
594
+ AND embedding IS NOT NULL
595
+ ORDER BY ${n}
596
+ LIMIT ?
597
+ `,[i,e,i,r]);return s}var zg=g(()=>{N();le();O();ms()});async function Xg(t,{namespaces:e,limit:r=20}){let{rows:i}=await _.raw(`
598
+ SELECT id, document_id AS "documentId", chunk_index AS "chunkIndex",
599
+ content, section_heading AS "sectionHeading", namespace,
600
+ ts_rank(search_vector, plainto_tsquery('english', ?)) as rank
601
+ FROM chunk
602
+ WHERE namespace = ANY(?)
603
+ AND search_vector @@ plainto_tsquery('english', ?)
604
+ ORDER BY rank DESC
605
+ LIMIT ?
606
+ `,[t,e,t,r]);return i}var Qg=g(()=>{N();ms()});async function ty(t,e,{namespaces:r,limit:i=5,minConfidence:n="medium",pointInTime:s,categories:o,podIds:a=null}){let c=st(e),l=`${jt("embedding")} <=> ${Wt()}`,{temporalClause:u,categoryClause:h,filterParams:d}=ps({minConfidence:n,pointInTime:s,categories:o}),f=i*$I,m=Array.isArray(a)&&a.length>0,y=m?`AND id = ANY(
607
+ SELECT member_id FROM pod_membership
608
+ WHERE member_type = 'fact' AND pod_id = ANY(?::int[])
609
+ )`:"",w=m?[a]:[],[x,...b]=d,T=[c,c,r,x,...b,...w,c,f],S=[t,t,r,x,t,...b,...w,f],C=[f,f,i],P=`
610
+ WITH semantic AS (
611
+ SELECT id,
612
+ uid,
613
+ content, category, confidence, importance, namespace, status,
614
+ source_document_ids AS "sourceDocumentIds",
615
+ source_section AS "sourceSection",
616
+ created_at,
617
+ 1 - (${l}) AS similarity,
618
+ ROW_NUMBER() OVER (ORDER BY ${l}) AS rank_ix
619
+ FROM fact
620
+ WHERE namespace = ANY(?)
621
+ AND status = 'active'
622
+ AND embedding IS NOT NULL
623
+ AND ${Ri} >= ?
624
+ ${u}
625
+ ${h}
626
+ ${y}
627
+ ORDER BY ${l}
628
+ LIMIT ?
629
+ ),
630
+ keyword AS (
631
+ SELECT id,
632
+ uid,
633
+ content, category, confidence, importance, namespace, status,
634
+ source_document_ids AS "sourceDocumentIds",
635
+ source_section AS "sourceSection",
636
+ created_at,
637
+ ts_rank_cd(search_vector, plainto_tsquery('english', ?)) AS keyword_rank,
638
+ ROW_NUMBER() OVER (ORDER BY ts_rank_cd(search_vector, plainto_tsquery('english', ?)) DESC) AS rank_ix
639
+ FROM fact
640
+ WHERE namespace = ANY(?)
641
+ AND status = 'active'
642
+ AND ${Ri} >= ?
643
+ AND search_vector @@ plainto_tsquery('english', ?)
644
+ ${u}
645
+ ${h}
646
+ ${y}
647
+ ORDER BY keyword_rank DESC
648
+ LIMIT ?
649
+ ),
650
+ fused AS (
651
+ SELECT COALESCE(s.id, k.id) AS id,
652
+ COALESCE(s.uid, k.uid) AS uid,
653
+ COALESCE(s.content, k.content) AS content,
654
+ COALESCE(s.category, k.category) AS category,
655
+ COALESCE(s.confidence, k.confidence) AS confidence,
656
+ COALESCE(s.importance, k.importance) AS importance,
657
+ COALESCE(s.namespace, k.namespace) AS namespace,
658
+ COALESCE(s.status, k.status) AS status,
659
+ COALESCE(s."sourceDocumentIds", k."sourceDocumentIds") AS "sourceDocumentIds",
660
+ COALESCE(s."sourceSection", k."sourceSection") AS "sourceSection",
661
+ COALESCE(s.created_at, k.created_at) AS created_at,
662
+ COALESCE(s.similarity, 0) AS similarity,
663
+ (
664
+ ${vI} * (1.0 / (${Zg} + COALESCE(s.rank_ix, ?)))
665
+ + ${II} * (1.0 / (${Zg} + COALESCE(k.rank_ix, ?)))
666
+ ) AS rrf_raw
667
+ FROM semantic s
668
+ FULL OUTER JOIN keyword k ON s.id = k.id
669
+ ),
670
+ ranked AS (
671
+ SELECT f.*,
672
+ COALESCE(fl.access_count, 0) AS access_count,
673
+ fl.last_accessed_at,
674
+ -- ACT-R activation: ln(n+1) - 0.5*ln(t_days), softplus to keep >= 0.
675
+ -- t_days floor of 0.01 prevents log(0). Recently-accessed facts win ties.
676
+ ln(1.0 + exp(
677
+ ln(COALESCE(fl.access_count, 0) + 1.0)
678
+ - 0.5 * ln(
679
+ GREATEST(
680
+ EXTRACT(epoch FROM (now() - COALESCE(fl.last_accessed_at, f.created_at))) / 86400.0,
681
+ 0.01
682
+ )
683
+ )
684
+ )) AS activation,
685
+ CASE f.importance WHEN 'vital' THEN ${OI} ELSE 1.0 END AS importance_mult,
686
+ CASE f.confidence
687
+ WHEN 'high' THEN ${RI}
688
+ WHEN 'medium' THEN ${NI}
689
+ WHEN 'low' THEN ${DI}
690
+ ELSE 1.0
691
+ END AS confidence_mult
692
+ FROM fused f
693
+ LEFT JOIN fact_lifecycle fl ON fl.fact_id = f.id
694
+ )
695
+ SELECT id, uid, content, category, confidence, importance, namespace, status,
696
+ "sourceDocumentIds", "sourceSection", similarity,
697
+ rrf_raw,
698
+ access_count,
699
+ last_accessed_at AS "lastAccessedAt",
700
+ activation,
701
+ (rrf_raw * activation * importance_mult * confidence_mult) AS final_score
702
+ FROM ranked
703
+ ORDER BY final_score DESC,
704
+ CASE WHEN importance = 'vital' THEN 0 ELSE 1 END
705
+ LIMIT ?
706
+ `,v=[...T,...S,...C],{rows:L}=await _.raw(P,v);if(!L.length)return[];let G=L[0].final_score||L[0].rrf_raw||1;return L.map(j=>({...j,rrfScore:Math.round(Number(j.final_score||j.rrf_raw)/Number(G)*100)/100}))}var Zg,vI,II,$I,OI,RI,NI,DI,ey=g(()=>{N();le();O();ms();Zg=20,vI=1,II=.7,$I=3,OI=1.5,RI=1,NI=.85,DI=.7});async function ry(t){let e=t.map(n=>n.id),r=await Ii(e),i=new Set;for(let n of r.values())for(let s of n)i.add(s);return i.size?_("entity").whereIn("id",[...i]).whereNull("mergedWith").select("id","uid","name","entityType","description"):[]}async function iy(t,{limit:e=10}={}){if(!t.length)return[];let r=await _("relation").where(function(){this.whereIn("sourceId",t).orWhereIn("targetId",t)}).whereNull("invalidAt").select("*").limit(e*3),i=new Set(t),n=new Set,s=new Map;for(let h of r){let d=i.has(h.sourceId)?h.targetId:h.sourceId;n.add(d),s.has(d)||s.set(d,h)}if(!n.size)return[];let o=await _("entity").whereIn("id",[...n]).whereNull("mergedWith").select("id","name"),a=new Map(o.map(h=>[h.id,h.name])),c=await _("fact").join("fact_entity","fact.id","fact_entity.factId").whereIn("fact_entity.entityId",[...n]).where("fact.status","active").select("fact.*","fact_entity.entityId").orderBy("fact_entity.mentionCount","desc").limit(e*3),l=new Set,u=[];for(let h of c){if(l.has(h.id))continue;l.add(h.id);let d=s.get(h.entityId),f=a.get(h.entityId)||"unknown",m=d?.relationType||"related";if(u.push({...h,relationPath:`${f} (${m})`,graphDistance:1}),u.length>=e)break}return u}function ny(t,e,r,i){let n=new Set(r),s=t.map(a=>({...a,resultType:"direct"})),o=e.filter(a=>!t.some(c=>c.id===a.id)).map(a=>({...a,rrfScore:(a.rrfScore||.1)*.5,resultType:"related"}));return[...s,...o].slice(0,i)}var sy=g(()=>{N();$i()});var Kr,cc=g(()=>{Kr=class{#e=new Map;#n;#t;constructor({maxSize:e=100,ttlMs:r=300*1e3}={}){this.#n=e,this.#t=r}get(e){let r=this.#e.get(e);if(r){if(Date.now()-r.timestamp>this.#t){this.#e.delete(e);return}return r.value}}set(e,r){if(this.#e.size>=this.#n){let i=this.#e.keys().next().value;this.#e.delete(i)}this.#e.set(e,{value:r,timestamp:Date.now()})}}});async function ay(t){let e=oy.get(t);if(e)return e;let r=`You are a search query expander for a personal knowledge base.
707
+
708
+ 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
+
710
+ Think about:
711
+ - Synonyms and rephrased versions
712
+ - Inverse/negative framings (if someone asks "what should I use", also search for "what to avoid")
713
+ - Related concepts that would inform the answer
714
+ - Specific terms someone might have used when storing this knowledge
715
+
716
+ User query: "${t}"
717
+
718
+ Respond with ONLY a JSON array of strings. Do not include the original query.`;try{let i=await Kt(r,{model:E.llm.extractionModel,caller:"query-expander"});if(!Array.isArray(i))return[t];let n=i.filter(o=>typeof o=="string"&&o.trim()).slice(0,LI),s=n.length?[t,...n]:[t];return oy.set(t,s),s}catch(i){return console.error("[query-expander] Failed:",i.message),[t]}}var LI,oy,cy=g(()=>{Vt();cc();O();LI=5,oy=new Kr({maxSize:100,ttlMs:300*1e3})});import{readFile as PI}from"node:fs/promises";import{join as MI}from"node:path";async function dy(t){let e=t.trim().toLowerCase(),r=lc.get(e);if(r)return r;let n=`${await PI(FI,"utf8")}
719
+
720
+ ---
721
+
722
+ Query: ${t}
723
+
724
+ ---
725
+
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 s=await Kt(n,{model:E.llm.extractionModel,caller:"query-router"});if(!s||!kI.includes(s.intent)){let c=ly("factual",{});return lc.set(e,c),c}let o=uy[s.intent],a={intent:s.intent,categories:Array.isArray(s.categories)&&s.categories.length?s.categories:o.categories,entities:Array.isArray(s.entities)?s.entities:[],expand:typeof s.expand=="boolean"?s.expand:o.expand,useGraph:o.useGraph,limit:o.limit,pointInTime:s.pointInTime||null,reasoning:s.reasoning||""};return lc.set(e,a),a}catch(s){return console.error("[query-router] Failed:",s.message),ly("factual",{reasoning:`Fallback \u2014 ${s.message}`})}}function ly(t,e={}){let r=uy[t];return{intent:t,categories:r.categories,entities:[],expand:r.expand,useGraph:r.useGraph,limit:r.limit,pointInTime:null,reasoning:"",...e}}var FI,lc,kI,uy,fy=g(()=>{Vt();cc();O();ht();FI=MI(mt,"query-router.md"),lc=new Kr({maxSize:200,ttlMs:600*1e3}),kI=["preference","factual","entity_lookup","exploratory","temporal"],uy={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 dc={};$(dc,{isSearchableQuery:()=>py,search:()=>jI});async function jI(t,{namespaces:e,limit:r=5,minConfidence:i="medium",useGraph:n=!1,includeChunks:s=!1,pointInTime:o,expand:a=!1,route:c=!0,categories:l,synthesize:u=E.search.synthesize,podScope:h=null,ctx:d={}}={}){if(!py(t))return WI();u&&(s=!0);let f=null;c&&(f=await dy(t),n=n||f.useGraph,a=a||f.expand,r=f.limit||r,o=o||f.pointInTime,l=l||(f.categories.length?f.categories:void 0));let m=await YI(t,e),y=await VI(h,{...d,namespace:e?.[0]}),w;m?w=await qI(m,t,{namespaces:e,limit:r,minConfidence:i,includeChunks:s,pointInTime:o,categories:l,podIds:y}):w=await XI(t,{namespaces:e,limit:r,minConfidence:i,useGraph:n,includeChunks:s,pointInTime:o,expand:a,categories:l,podIds:y});let x=w.facts.map(b=>b.id).filter(Boolean);if(ra(x).catch(b=>console.error("[access-tracking]",b.message)),nc(x.slice(0,8)).catch(b=>console.error("[hebbian]",b.message)),E.hebbian.entity.enabled&&x.length>=2&&KI(x).catch(b=>console.error("[hebbian-entity]",b.message)),u)try{w.synthesized=await GI(t,w)}catch(b){console.error("[synthesizer] failed:",b.message),w.synthesized=null}return w}function py(t){let e=String(t||"").trim();return e?!/^[*%_?\s]+$/.test(e):!1}function WI(){return{facts:[],chunks:[],matchedEntity:null,relatedEntities:[]}}async function GI(t,{facts:e,chunks:r}){let i=[];if(e.slice(0,10).forEach((o,a)=>{i.push(`[F${a+1}] (${o.category}) ${o.content}`)}),r.length&&r.slice(0,15).forEach((o,a)=>{let c=(o.content||"").replace(/\s+/g," ").trim();c&&i.push(`[C${a+1}] ${c.slice(0,2e3)}`)}),!i.length)return"No retrieved evidence \u2014 nothing to synthesize.";let n=`You are answering a question from a personal-memory system.
727
+ Each retrieved item is labeled [F#] (a stored fact) or [C#] (a raw conversation chunk
728
+ that may include user/assistant turns and dates).
729
+
730
+ Question: ${t}
731
+
732
+ Retrieved memory items:
733
+ ${i.join(`
734
+ `)}
735
+
736
+ Instructions:
737
+ - Read the chunks carefully \u2014 the answer is often a specific phrase or date inside one of them, not always pre-summarized as a fact.
738
+ - Reason step-by-step internally for temporal questions ("first", "before", "after", "how many days") \u2014 compare the dates explicitly.
739
+ - Cite items in square brackets where they directly support the answer, e.g. [C2].
740
+ - 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(`
742
+ UPDATE fact_lifecycle fl
743
+ SET stage = 'stable',
744
+ stage_entered_at = NOW()
745
+ FROM fact f
746
+ WHERE fl.fact_id = f.id
747
+ AND fl.stage = 'fresh'
748
+ AND fl.stage_entered_at < NOW() - INTERVAL '${t$} hours'
749
+ AND (f.importance = 'vital' OR fl.access_count > 0)
750
+ RETURNING fl.fact_id
751
+ `);return t.length}async function i$(){let{rows:t}=await _.raw(`
752
+ UPDATE fact_lifecycle
753
+ SET stage = 'stable',
754
+ stage_entered_at = NOW()
755
+ WHERE stage = 'editing'
756
+ AND stage_entered_at < NOW() - INTERVAL '${e$} minutes'
757
+ RETURNING fact_id
758
+ `);return t.length}async function n$(){let t=await _("fact_lifecycle").select("stage").count({count:"*"}).groupBy("stage"),e={fresh:0,stable:0,editing:0};for(let r of t)e[r.stage]=Number(r.count);return e}var t$,e$,yy=g(()=>{N();t$=1,e$=30});import{resolve as Ey,dirname as wy,join as et}from"node:path";import{fileURLToPath as s$}from"node:url";import{homedir as ne}from"node:os";import{existsSync as se}from"node:fs";import{execSync as Ze,spawn as o$}from"node:child_process";import{randomBytes as a$}from"node:crypto";import{config as gc}from"dotenv";var c$=wy(wy(s$(import.meta.url))),mc=Ey(process.cwd(),".env"),pc=et(ne(),".sigil",".env");se(mc)&&gc({path:mc,quiet:!0});se(pc)&&pc!==mc&&gc({path:pc,quiet:!0});var[Ae,...l$]=process.argv.slice(2),xy=`sigil \u2014 Persistent memory for your Claude sessions
759
+
760
+ Usage:
761
+ sigil <command> [options]
762
+
763
+ Commands:
764
+ init [--dry-run] Set up Sigil (DB, env, hooks, Claude integration)
765
+ uninstall [--dry-run] Remove Sigil's entries from selected AI clients
766
+ doctor Diagnose Sigil setup (DB, LLM, embeddings, hooks)
767
+ remember "text" Save a fact or note to memory
768
+ ingest <file|url|glob> Ingest documents into the knowledge base
769
+ search "query" Search the knowledge base
770
+ facts List stored facts with IDs
771
+ forget <id> Delete a specific fact by ID
772
+ namespace <sub> Manage namespaces (list | delete <ns>)
773
+ session <sub> Inspect the active session pod (current | list | show)
774
+ pod <sub> List, show, create, or archive memory pods
775
+ export [--format=json] Export knowledge base as JSON or Markdown
776
+ context Refresh the hot-context snapshot in ~/.claude/CLAUDE.md
777
+ why Explain a search result \u2014 per-fact RRF / pod / kind breakdown
778
+ kind List or show pod kinds (claude_session, project, person, playbook, vital)
779
+ status Show knowledge base statistics
780
+ maintain Run periodic memory maintenance (stage promotion, edge consolidation)
781
+ migrate Run database migrations
782
+ reset Reset the database (drops all data)
783
+ register Register as a Claude Code MCP server (advanced)
784
+
785
+ Options:
786
+ --help Show this help message
787
+
788
+ Run sigil <command> --help for command-specific options.`;(!Ae||Ae==="--help"||Ae==="-h")&&(console.log(xy),process.exit(0));var u$={init:Sy,uninstall:d$,doctor:f$,remember:x$,ingest:C$,search:T$,context:v$,status:I$,facts:_$,forget:E$,namespace:m$,session:h$,pod:g$,export:p$,maintain:$$,migrate:O$,reset:R$,register:b$,why:L$,kind:P$},by=u$[Ae];by||(console.error(`Unknown command: ${Ae}
789
+ `),console.log(xy),process.exit(1));if(Ae!=="doctor"&&Ae!=="export"&&Ae!=="register")try{let{getUnackedErrorCount:t}=await Promise.resolve().then(()=>(Jr(),qr)),e=await t();e>0&&process.stderr.write(`\u26A0 Sigil: ${e} unacked hook error${e>1?"s":""} \u2014 run \`sigil doctor\` for details
790
+ `)}catch{}try{await by(l$)}catch(t){let e=t.message||String(t);((t.code||"")==="3D000"||/database .* does not exist/i.test(e))&&(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: "+e.split(`
791
+ `)[0]),process.exit(1)),/ECONNREFUSED|connection refused/i.test(e)&&(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: "+e.split(`
792
+ `)[0]),process.exit(1)),/password authentication failed/i.test(e)&&(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: "+e.split(`
793
+ `)[0]),process.exit(1)),console.error(`Error: ${e}`),process.exit(1)}async function Sy(t){(t.includes("--help")||t.includes("-h"))&&(console.log(`sigil init \u2014 Set up Sigil (DB, env, hooks, Claude integration)
794
+
795
+ Usage:
796
+ sigil init [--dry-run]
797
+
798
+ Options:
799
+ --dry-run Walk through every prompt and print the exact files that would
800
+ be created or modified, but write nothing to disk. Use this on
801
+ first install to preview the changes Sigil will make to your
802
+ ~/.sigil/ and ~/.claude/ directories.
803
+
804
+ Files Sigil touches (originals are backed up to <path>.sigil.bak before write):
805
+ ~/.sigil/.env Sigil config + API keys (incl. Postgres connection)
806
+ ~/.sigil/CLAUDE.md Sigil instructions for Claude
807
+ ~/.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).
813
+ Existing facts in your DB were embedded at the previous dimensions \u2014 they will become
814
+ unsearchable until re-ingested. To stay coherent without losing data, either:
815
+ \u2022 keep ${R} as your embedding provider, or
816
+ \u2022 run \`sigil reset\` to wipe + re-ingest from scratch.`,"Dimension change ahead");let M=await h({message:`Continue with ${F} (${B}d)? Existing facts will become unsearchable.`,initialValue:!1});(m(M)||!M)&&(f("Setup cancelled \u2014 re-run sigil init and keep the prior embedding provider, or run sigil reset to wipe first."),process.exit(0))}}else z=S.EMBEDDING_MODEL||J[F].model,B=Number(S.EMBEDDING_DIMENSIONS)||J[F].dimensions;if(F==="openrouter"&&!H){let I=await l({message:"OpenRouter API key (for embeddings) \u2014 get one at openrouter.ai/keys",placeholder:S.OPENROUTER_API_KEY?"(unchanged)":"sk-or-...",validate:M=>{if(!M&&!S.OPENROUTER_API_KEY)return"API key is required";if(M&&!M.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});m(I)&&(f("Setup cancelled."),process.exit(0)),I&&(H=I)}if(F==="ollama"){T||(d(`Ollama is not installed.
817
+ 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"),f("Install Ollama then re-run sigil init."),process.exit(0));let I=S.OLLAMA_HOST||"http://localhost:11434";if(e)b("check",`ollama server @ ${I}`,"start in background if not running"),b("pull","ollama:nomic-embed-text","~270MB embedding model (if not already present)");else{let M=await Ty(I),W=null;if(!M){let pt=u();pt.start("Starting ollama serve in the background..."),W=M$(),M=await F$(I,15e3),M?pt.stop(`Ollama server ready (pid ${W?.pid??"?"}, background)`):(pt.stop("Ollama server did not come up in time"),d("Sigil tried to start `ollama serve` in the background but it did not\nbecome reachable at "+I+" within 15s.\n\nOpen a new terminal, run `ollama serve`, then re-run `sigil init`.","Ollama server unreachable"),f("Start ollama serve manually then re-run sigil init."),process.exit(0))}if(!hc("ollama list 2>/dev/null | grep nomic-embed-text")){let pt=await h({message:"Pull nomic-embed-text embedding model now? (~270MB)"});if(m(pt)&&(f("Setup cancelled."),process.exit(0)),pt){let Rt=u();Rt.start("Pulling nomic-embed-text...");try{Ze("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")}}}W&&W.unref()}}let ft=await l({message:"Default namespace",placeholder:"default",initialValue:S.DEFAULT_NAMESPACE||"default",validate:I=>{if(!I.trim())return"Cannot be empty"}});m(ft)&&(f("Setup cancelled."),process.exit(0));let oe=await l({message:"Postgres host",placeholder:S.SIGIL_DB_HOST||"localhost",initialValue:S.SIGIL_DB_HOST||"localhost"});m(oe)&&(f("Setup cancelled."),process.exit(0));let Ni=await l({message:"Postgres port",placeholder:S.SIGIL_DB_PORT||"5432",initialValue:S.SIGIL_DB_PORT||"5432",validate:I=>{if(I&&!/^\d+$/.test(I))return"Port must be a number"}});m(Ni)&&(f("Setup cancelled."),process.exit(0));let Vr=Number(Ni),Ce=await l({message:"Sigil database name",placeholder:S.SIGIL_DB_NAME||"sigil",initialValue:S.SIGIL_DB_NAME||"sigil"});m(Ce)&&(f("Setup cancelled."),process.exit(0));let tr=await l({message:"Sigil database user",placeholder:S.SIGIL_DB_USER||"sigil_app",initialValue:S.SIGIL_DB_USER||"sigil_app"});m(tr)&&(f("Setup cancelled."),process.exit(0));let yc=await l({message:S.SIGIL_DB_PASSWORD?"Sigil database password (keep existing \u2014 press Enter)":"Sigil database password",placeholder:S.SIGIL_DB_PASSWORD?"(unchanged)":"sigil_dev or generate",validate:I=>{if(!I&&!S.SIGIL_DB_PASSWORD)return"Password required"}});m(yc)&&(f("Setup cancelled."),process.exit(0));let gs=yc||S.SIGIL_DB_PASSWORD;if(!e){let{probeSigilConnection:I,ensurePostgresDatabase:M,diagnoseConnectionError:W}=await Promise.resolve().then(()=>(Wl(),jl)),K=u();K.start("Probing Postgres connection...");let pt=await I({host:oe,port:Vr,database:Ce,user:tr,password:gs});if(pt.ok)K.stop(`Connected to ${tr}@${oe}:${Vr}/${Ce}`);else{let Rt=W({code:pt.code,message:pt.message});if(K.stop(`Connection failed (${Rt.kind})`),Rt.kind==="unreachable"&&(f(`Postgres unreachable at ${oe}:${Vr}.
819
+ ${Rt.hint}`),process.exit(1)),Rt.kind==="missing-db"||Rt.kind==="auth"){let bc=await h({message:Rt.kind==="missing-db"?`Database "${Ce}" does not exist. Create it now (requires admin credentials)?`:`Authentication failed for ${tr}@${Ce}. Create / reset the user now (requires admin credentials)?`,initialValue:!0});(m(bc)||!bc)&&(f("Setup cancelled \u2014 fix Postgres credentials and re-run sigil init."),process.exit(0));let Sc=await l({message:"Postgres admin user",placeholder:"postgres",initialValue:"postgres"});m(Sc)&&(f("Setup cancelled."),process.exit(0));let Ac=await l({message:"Postgres admin password (used once, not stored)",placeholder:"admin password",validate:Yr=>{if(!Yr)return"Required to create the database"}});m(Ac)&&(f("Setup cancelled."),process.exit(0));let ys=u();ys.start("Creating database, user, and pgvector extension...");try{let{actions:Yr}=await M({admin:{host:oe,port:Vr,user:Sc,password:Ac},sigil:{database:Ce,user:tr,password:gs}});ys.stop(`Bootstrapped: ${Yr.join(", ")}`)}catch(Yr){ys.stop("Bootstrap failed"),f(Yr.message),process.exit(1)}}else f(`Postgres setup failed: ${Rt.hint}`),process.exit(1)}}e||await i.mkdir(y,{recursive:!0});let vy=S.SIGIL_ENCRYPTION_KEY||k$(64),ot={...S};ot.LLM_PROVIDER=v,ot.OLLAMA_HOST=S.OLLAMA_HOST||"http://localhost:11434",Object.assign(ot,j),ot.EMBEDDING_PROVIDER=F,ot.EMBEDDING_MODEL=z,ot.EMBEDDING_DIMENSIONS=String(B),ot.DEFAULT_NAMESPACE=ft,ot.SIGIL_ENCRYPTION_KEY=vy,ot.SIGIL_DB_TYPE="postgres",ot.SIGIL_DB_HOST=oe,ot.SIGIL_DB_PORT=String(Vr),ot.SIGIL_DB_NAME=Ce,ot.SIGIL_DB_USER=tr,ot.SIGIL_DB_PASSWORD=gs;let Iy=[`# Sigil \u2014 generated ${new Date().toISOString().slice(0,10)}`,"# (re-running `sigil init` preserves unrecognised keys \u2014 edit manually as needed)","",...Object.entries(ot).map(([I,M])=>`${I}=${M}`)].join(`
820
+ `),wc=await n(w,Iy,{dryRun:e});if(b(wc.action,w,`${wc.bytes} bytes`),e)b("migrate","postgres",`${config.db.host}:${config.db.port}/${config.db.database}`),b("verify","embedder",`${F}/${z} \u2014 live ping (skipped in dry-run)`);else{gc({path:w,override:!0,quiet:!0});let I=u();I.start("Initialising memory database...");try{let{MIGRATIONS_DIR:W}=await Promise.resolve().then(()=>(ht(),vs)),K=(await Promise.resolve().then(()=>(N(),Z))).default,[,pt]=await K.migrate.latest({directory:W});await K.destroy(),I.stop(pt.length?`Memory database ready (${pt.length} tables created)`:"Memory database up to date")}catch(W){I.stop("Database setup failed"),f(`${W.message}
821
+
822
+ Sigil 0.10.0+ requires Postgres. Set SIGIL_DB_HOST/PORT/NAME/USER/PASSWORD in ~/.sigil/.env or re-run sigil init.`),process.exit(1)}let M=u();M.start(`Verifying ${F} embedder...`);try{let{embed:W}=await Promise.resolve().then(()=>(De(),bo)),K=await W("ping");if(!Array.isArray(K)||K.length===0)throw new Error(`embedder returned ${typeof K} (length ${K?.length}) \u2014 expected number[]`);if(K.length!==B)throw new Error(`embedder returned ${K.length}d vector but config says EMBEDDING_DIMENSIONS=${B}d.
823
+ This means ${F}/${z} doesn't produce ${B}d embeddings \u2014 one of them is wrong.`);M.stop(`Embedder healthy (${K.length}d via ${F}/${z})`)}catch(W){M.stop("Embedder check failed"),f(`${F}/${z} cannot embed: ${W.message}
824
+
825
+ Your config was written to `+w+` \u2014 fix the root cause then re-run sigil init:
826
+ `+(F==="ollama"?" \u2022 ensure `ollama serve` is running\n \u2022 run `ollama pull "+z+"` to fetch the model\n":` \u2022 verify OPENAI_API_KEY is valid and has embedding access
827
+ \u2022 check the model name matches an embedding model (text-embedding-3-large / -small)
828
+ `)+`
829
+ Sigil init aborted before any AI clients were touched \u2014 your existing setup is unchanged.`),process.exit(1)}}let{listClients:$y}=await Promise.resolve().then(()=>(bn(),xn)),Di=await $y(),_c=await Promise.all(Di.map(I=>I.detect())),Ec=Di.filter((I,M)=>_c[M]).map(I=>I.id),er=await c({message:"Install Sigil for which clients? (space to toggle, enter to confirm)",options:Di.map((I,M)=>({value:I.id,label:I.label,hint:_c[M]?`${I.hint} \u2014 detected`:I.hint})),initialValues:Ec.length?Ec:["claude-code"],required:!1});m(er)&&(f("Setup cancelled."),process.exit(0));let xc=u();xc.start(e?"Computing client integration plan...":"Configuring client integrations...");for(let I of er){let M=Di.find(K=>K.id===I),{actions:W}=await M.install({dryRun:e});for(let K of W)b(K.action,K.path,K.detail)}if(!e){let{updateContextSnapshot:I}=await Promise.resolve().then(()=>(Ar(),Sr));await I({namespace:ft.toString()}).catch(()=>{})}if(xc.stop(e?"Plan computed.":er.length?`Configured ${er.length} client${er.length>1?"s":""}: ${er.join(", ")}`:"No clients selected \u2014 skipping integration step"),e){let I=x.map(M=>` ${Ay(M.action,8)} ${M.path}${M.detail?` (${M.detail})`:""}`);d(["Dry run \u2014 no files were written. The following would happen:","",...I,"","Each existing file would be backed up to <path>.sigil.bak before its first","modification. Re-run without --dry-run to apply."].join(`
830
+ `),"Plan"),o("Dry run complete.");return}d(["Memory store ~/.sigil/db (embedded, no server needed)",`Config ${w}`,"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(`
831
+ `),"Setup complete"),o("Open a new Claude Code session to start using Sigil.")}function Ay(t,e){return String(t).padEnd(e)}async function d$(t){(t.includes("--help")||t.includes("-h"))&&(console.log(`sigil uninstall \u2014 Remove Sigil's entries from AI clients
832
+
833
+ Usage:
834
+ sigil uninstall [--dry-run]
835
+
836
+ Walks through every detected AI client (Claude Code, Cursor, Codex CLI, Kiro)
837
+ and lets you pick which ones to remove Sigil from. Each picked client gets:
838
+ - its MCP entry removed from the client's config (other entries preserved)
839
+ - its instructions / rules / steering file deleted
840
+ - hook entries stripped (Claude Code only)
841
+
842
+ Sigil's own data \u2014 ~/.sigil/, the database, stored facts \u2014 is NOT touched.
843
+ Use 'sigil reset' for a full wipe.
844
+
845
+ Options:
846
+ --dry-run Show what would be removed without writing anything.`),process.exit(0));let e=t.includes("--dry-run"),r=await Promise.resolve().then(()=>(rn(),en)),{intro:i,outro:n,multiselect:s,spinner:o,note:a,cancel:c,isCancel:l}=r;i(e?"Sigil uninstall \u2014 DRY RUN (no files will be written)":"Sigil uninstall");let{listClients:u}=await Promise.resolve().then(()=>(bn(),xn)),h=await u(),d=[];for(let x of h){if(!await x.detect())continue;let{installed:b}=await x.verify();b&&d.push(x)}if(d.length===0){a("No clients have Sigil installed \u2014 nothing to remove.","Nothing to do"),n("Done.");return}let f=await s({message:"Remove Sigil from which clients? (space to toggle, enter to confirm)",options:d.map(x=>({value:x.id,label:x.label,hint:x.hint})),initialValues:d.map(x=>x.id),required:!1});if(l(f)&&(c("Uninstall cancelled."),process.exit(0)),f.length===0){n("Nothing selected \u2014 nothing removed.");return}let m=[],y=o();y.start(e?"Computing uninstall plan...":"Removing Sigil entries...");for(let x of f){let b=d.find(S=>S.id===x),{actions:T}=await b.uninstall({dryRun:e});for(let S of T)m.push({client:b.label,...S})}y.stop(e?"Plan computed.":`Removed from ${f.length} client${f.length>1?"s":""}`);let w=m.map(x=>` ${Ay(x.action,8)} [${x.client}] ${x.path}${x.detail?` (${x.detail})`:""}`);a(w.join(`
847
+ `)||"(no changes)",e?"Plan":"Done"),n(e?"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 f$(t){t.includes("--help")&&(console.log(`sigil doctor \u2014 Diagnose Sigil setup
848
+
849
+ Usage:
850
+ sigil doctor
851
+
852
+ Checks: Postgres connection, LLM provider, embedding provider, hook registration, hook error budget.`),process.exit(0));let e=[],r=(a,c,l="")=>{let u=a==="ok"?"\u2713":a==="warn"?"\u26A0":"\u2717";e.push({status:a,label:c}),console.log(` ${u} ${c}${l?` \u2014 ${l}`:""}`)};console.log(`
853
+ Sigil diagnostic
854
+ `);let i=et(ne(),".sigil",".env");se(i)?r("ok","Config file",i):r("warn","Config file",`${i} not found \u2014 run 'sigil init'`);try{let{validateConfig:a}=await Promise.resolve().then(()=>(Os(),$s)),c=a();if(c.length===0)r("ok","Config validation","no provider/model mismatches");else for(let l of c)r(l.level==="fail"?"fail":"warn",`Config: ${l.code}`,l.message),console.log(` fix: ${l.fix}`)}catch(a){r("warn","Config validation",`unable to run: ${a.message}`)}try{let a=(await Promise.resolve().then(()=>(N(),Z))).default,c=(await Promise.resolve().then(()=>(O(),gt))).default;await a.raw("SELECT 1"),r("ok","Database",`Postgres @ ${c.db.host}:${c.db.port}/${c.db.database}`);let{getFactCount:l}=await Promise.resolve().then(()=>(te(),Ve)),{getStats:u}=await Promise.resolve().then(()=>(In(),vn)),[h,d]=await Promise.all([l(),u()]);r("ok","Stored data",`${d.documentCount} docs, ${d.totalChunks} chunks, ${h} facts`),await a.destroy()}catch(a){let c=a.message||String(a);/ECONNREFUSED|connection refused|password authentication failed/i.test(c)?(r("fail","Database",`Postgres unreachable \u2014 ${c.split(`
855
+ `)[0]}`),r("warn","Recovery","check that Postgres is running and SIGIL_DB_* env vars are set in ~/.sigil/.env")):r("fail","Database",c)}try{let{detectProvider:a,isOllamaReachable:c,isClaudeCliAvailable:l}=await Promise.resolve().then(()=>(or(),cn)),u=(await Promise.resolve().then(()=>(O(),gt))).default,h=await a();h==="anthropic"?r("ok","LLM provider","anthropic (API key set)"):h==="openai"?r("ok","LLM provider","openai (API key set)"):h==="openrouter"?r("ok","LLM provider",`openrouter (model=${u.llm.openrouterModel})`):h==="ollama"?r("ok","LLM provider",`ollama @ ${u.llm.ollamaHost}`):h==="claude-cli"?r("ok","LLM provider","claude-cli (Claude Code subscription)"):r("warn","LLM provider",h)}catch(a){r("fail","LLM provider",a.message.split(`
856
+ `)[0])}try{let{detectEmbeddingProvider:a}=await Promise.resolve().then(()=>(or(),cn)),c=(await Promise.resolve().then(()=>(O(),gt))).default,l=await a();r("ok","Embedding provider",`${l} / ${c.embedding.model}`)}catch(a){r("fail","Embedding provider",a.message.split(`
857
+ `)[0])}try{let{listClients:a}=await Promise.resolve().then(()=>(bn(),xn)),c=await a(),l=0;for(let u of c){if(!await u.detect())continue;l++;let h=await u.verify();h.installed?r("ok",`${u.label} integration`,"configured"):r("warn",`${u.label} integration`,`${h.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 n=et(ne(),".sigil","CLAUDE.md");se(n)?r("ok","Sigil CLAUDE.md",n):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(()=>(Jr(),qr)),u=await a(100),h=await c();if(u.length===0)r("ok","Hook errors",`none in ${l}`);else if(h>5){r("fail","Hook errors",`${h} unacked errors since last clean doctor (budget: \u22645) \u2014 see ${l}`);for(let d of u.slice(-5))console.log(` ${d.ts} [${d.hook}] ${(d.error||"").split(`
858
+ `)[0].slice(0,160)}`)}else if(h>0){r("warn","Hook errors",`${h} unacked / ${u.length} total \u2014 see ${l}`);for(let d of u.slice(-3))console.log(` ${d.ts} [${d.hook}] ${(d.error||"").split(`
859
+ `)[0].slice(0,160)}`)}else r("ok","Hook errors",`${u.length} historical errors, all acked`)}catch(a){r("warn","Hook errors",`unreadable: ${a.message}`)}console.log();let s=e.filter(a=>a.status==="fail").length,o=e.filter(a=>a.status==="warn").length;if(s)console.log(`${s} error${s>1?"s":""}, ${o} warning${o!==1?"s":""}`),process.exit(1);else if(o){console.log(`All critical checks passed. ${o} warning${o>1?"s":""}.`);try{let{markDoctorClean:a}=await Promise.resolve().then(()=>(Jr(),qr));await a()}catch{}}else{console.log("All checks passed.");try{let{markDoctorClean:a}=await Promise.resolve().then(()=>(Jr(),qr));await a()}catch{}}}async function p$(t){t.includes("--help")&&(console.log(`sigil export \u2014 Export knowledge base to stdout or a file
860
+
861
+ Usage:
862
+ sigil export [options] [> file]
863
+
864
+ Options:
865
+ --namespace=<ns> Filter by namespace
866
+ --format=<fmt> Output format: json (default) or markdown
867
+ --output=<path> Write to file instead of stdout`),process.exit(0));let e=await import("node:fs/promises"),{listFacts:r}=await Promise.resolve().then(()=>(te(),Ve)),i=(await Promise.resolve().then(()=>(O(),gt))).default,n=(await Promise.resolve().then(()=>(N(),Z))).default,s=t.find(d=>d.startsWith("--namespace="))?.split("=")[1]||i.defaults.namespace,o=t.find(d=>d.startsWith("--format="))?.split("=")[1]||"json",a=t.find(d=>d.startsWith("--output="))?.split("=")[1],c=await r({namespace:s,limit:1e4}),l=await n("entity").where({namespace:s}),u=await n("document").where({namespace:s}),h;if(o==="markdown"){let d=[`# Sigil export \u2014 namespace: ${s}`,`Generated: ${new Date().toISOString()}`,""];d.push(`## Facts (${c.length})`,"");for(let f of c){let m=f.importance==="vital"?" **[VITAL]**":"";d.push(`- **[${f.category}]**${m} ${f.content} *(${f.confidence})*`)}d.push("",`## Entities (${l.length})`,"");for(let f of l)d.push(`- **${f.name}** (${f.entityType})${f.description?` \u2014 ${f.description}`:""}`);d.push("",`## Documents (${u.length})`,"");for(let f of u)d.push(`- ${f.title} (${f.sourcePath})`);h=d.join(`
868
+ `)}else h=JSON.stringify({namespace:s,exportedAt:new Date().toISOString(),facts:c.map(d=>({uid:d.uid,content:d.content,category:d.category,confidence:d.confidence,importance:d.importance,createdAt:d.createdAt})),entities:l.map(d=>({uid:d.uid,name:d.name,type:d.entityType,description:d.description,mentionCount:d.mentionCount})),documents:u.map(d=>({sourcePath:d.sourcePath,title:d.title,sourceType:d.sourceType,chunkCount:d.chunkCount,factCount:d.factCount}))},null,2);a?(await e.writeFile(a,h,"utf8"),console.log(`Exported ${c.length} facts, ${l.length} entities, ${u.length} documents to ${a}`)):process.stdout.write(h+`
869
+ `),await n.destroy()}async function m$(t){let e=t[0];(!e||t.includes("--help"))&&(console.log(`sigil namespace \u2014 Manage namespaces
870
+
871
+ Usage:
872
+ sigil namespace list
873
+ sigil namespace delete <ns> [--confirm]
874
+
875
+ Namespaces isolate facts. A project, team, or context each gets its own.`),process.exit(e?0:1));let{listNamespaces:r,deleteNamespace:i}=await Promise.resolve().then(()=>(te(),Ve)),n=(await Promise.resolve().then(()=>(N(),Z))).default;if(e==="list"){let s=await r();if(!s.length)console.log("No namespaces with facts.");else{console.log("Namespaces:");for(let{namespace:o,factCount:a}of s)console.log(` ${o.padEnd(30)} ${a} fact${a===1?"":"s"}`)}}else if(e==="delete"){let s=t[1];(!s||s.startsWith("--"))&&(console.error("Provide a namespace: sigil namespace delete <ns> --confirm"),await n.destroy(),process.exit(1)),t.includes("--confirm")||(console.error(`This will delete ALL data in namespace "${s}". Run with --confirm to proceed.`),await n.destroy(),process.exit(1));let o=await i(s);console.log(`Deleted namespace "${s}":`),console.log(` ${o.factsDeleted} facts, ${o.chunksDeleted} chunks, ${o.docsDeleted} documents, ${o.entitiesDeleted} entities`)}else console.error(`Unknown subcommand: ${e}`),await n.destroy(),process.exit(1);await n.destroy()}async function h$(t){let e=t[0];(!e||t.includes("--help"))&&(console.log(`sigil session \u2014 Inspect the active Claude Code session pod
876
+
877
+ Usage:
878
+ sigil session current Show active session uid + summary
879
+ sigil session list [--limit=10] List recent session pods
880
+ sigil session show [<uid>] Detailed view (defaults to active)`),process.exit(e?0:1));let r=(await Promise.resolve().then(()=>(N(),Z))).default;try{if(e==="current"){let{getActiveCursor:i}=await Promise.resolve().then(()=>(Ge(),xr)),n=await i();if(!n){console.log("No active session.");return}let s=await(await Promise.resolve().then(()=>($t(),Mt))).findByUid(n.pod_uid);if(!s){console.log(`Cursor points to ${n.pod_uid} but pod row not found.`);return}let a=(await Promise.resolve().then(()=>(An(),Wo))).formatForDisplay(s);console.log(`Active session: ${s.uid}`),console.log(` session_id: ${a.sessionId}`),console.log(` started_at: ${s.startedAt}`),console.log(` turn_count: ${a.turnCount}`),console.log(` cwd: ${a.cwd||"\u2014"}`),console.log(` transcript: ${a.transcriptPath||"\u2014"}`),console.log(` facts in pod: ${s.memberFactCount}`),console.log(` docs in pod: ${s.memberDocCount}`)}else if(e==="list"){let i=Number(Et(t,"--limit")||10),n=await(await Promise.resolve().then(()=>($t(),Mt))).listPods({podType:"claude_session",limit:i});if(!n.length){console.log("No session pods.");return}for(let s of n){let o=s.endedAt?s.endedAt.toISOString().slice(0,16).replace("T"," "):"active";console.log(` ${s.uid} ${s.name.padEnd(40)} facts=${s.memberFactCount} ${o}`)}}else if(e==="show"){let i=t[1];if(!i){let{getActiveCursor:n}=await Promise.resolve().then(()=>(Ge(),xr));i=(await n())?.pod_uid,i||(console.log("No active session. Pass a uid: sigil session show <uid>"),process.exit(1))}await Cy(i)}else console.error(`Unknown subcommand: ${e}`),process.exit(1)}finally{await r.destroy()}}async function g$(t){let e=t[0];(!e||t.includes("--help"))&&(console.log(`sigil pod \u2014 Inspect and manage memory pods
881
+
882
+ Usage:
883
+ sigil pod list [--type=session|person] [--namespace=<ns>] [--limit=20]
884
+ sigil pod show <uid>
885
+ sigil pod create --type=person --name="<name>" [--slack=U123]
886
+ [--github=<username>] [--email=<addr>] [--role="..."]
887
+ [--relationship=manager|report|peer|external|...]
888
+ [--notes="..."] [--namespace=<ns>]
889
+ sigil pod archive <uid>
890
+ sigil pod delete <uid> --confirm
891
+
892
+ Pods are typed memory containers (session, person, ...). Person pods
893
+ back a canonical entity so dedup churn doesn't lose their metadata.`),process.exit(e?0:1));let r=(await Promise.resolve().then(()=>(N(),Z))).default;try{if(e==="list"){let i=Et(t,"--type"),n=Et(t,"--namespace"),s=Number(Et(t,"--limit")||20),o=await(await Promise.resolve().then(()=>($t(),Mt))).listPods({podType:i,namespace:n,limit:s});if(!o.length){console.log("No pods.");return}for(let a of o)console.log(` ${a.uid} type=${a.podType.padEnd(20)} ${a.name.padEnd(40)} facts=${a.memberFactCount}`)}else if(e==="show"){let i=t[1];(!i||i.startsWith("--"))&&(console.error("Provide a uid: sigil pod show <uid>"),process.exit(1)),await Cy(i)}else if(e==="create")await y$(t);else if(e==="archive"){let i=t[1];(!i||i.startsWith("--"))&&(console.error("Provide a uid: sigil pod archive <uid>"),process.exit(1));let n=await Promise.resolve().then(()=>($t(),Mt)),s=await n.findByUid(i);s||(console.error(`Not found: ${i}`),process.exit(1)),await n.archivePod(s.id),console.log(`Archived: ${i}`)}else if(e==="delete"){let i=t[1];(!i||i.startsWith("--"))&&(console.error("Provide a uid: sigil pod delete <uid> --confirm"),process.exit(1)),t.includes("--confirm")||(console.error("Pass --confirm to delete (cascades pod_membership)."),process.exit(1));let n=await Promise.resolve().then(()=>($t(),Mt)),s=await n.findByUid(i);s||(console.error(`Not found: ${i}`),process.exit(1)),await n.deletePod(s.id),console.log(`Deleted: ${i}`)}else console.error(`Unknown subcommand: ${e}`),process.exit(1)}finally{await r.destroy()}}async function Cy(t){let e=await Promise.resolve().then(()=>($t(),Mt)),r=await Promise.resolve().then(()=>(br(),Ke)),i=await e.findByUid(t);i||(console.error(`Not found: ${t}`),process.exit(1));let n=typeof i.attrs=="object"?i.attrs:w$(i.attrs);console.log(`${i.uid} type=${i.podType}`),console.log(` name: ${i.name}`),console.log(` namespace: ${i.namespace}`),console.log(` status: ${i.status}`),console.log(` started_at: ${i.startedAt||"\u2014"}`),console.log(` ended_at: ${i.endedAt||"\u2014"}`),i.entityId&&console.log(` entity_id: ${i.entityId}`),i.connectionId&&console.log(` connection_id: ${i.connectionId}`),i.externalId&&console.log(` external_id: ${i.externalId}`),console.log(` facts: ${i.memberFactCount}`),console.log(` documents: ${i.memberDocCount}`),console.log(" attrs:");for(let[o,a]of Object.entries(n)){let c=typeof a=="object"?JSON.stringify(a):a;console.log(` ${o}: ${c??"\u2014"}`)}let s=await r.listMembers(i.id,{memberType:"fact",limit:10});if(s.length){console.log(`
894
+ Latest member facts (${s.length}):`);for(let o of s){let a=(o.content||"").slice(0,100);console.log(` - ${a}${o.content&&o.content.length>100?"\u2026":""}`)}}}async function y$(t){Et(t,"--type")!=="person"&&(console.error("Only --type=person is supported in PR1. Session pods are auto-created by hooks."),process.exit(1));let r=Et(t,"--name");r||(console.error("--name is required"),process.exit(1));let i=Et(t,"--namespace"),n=Et(t,"--slack"),s=Et(t,"--github"),o=Et(t,"--email"),a=Et(t,"--role"),c=Et(t,"--relationship"),l=Et(t,"--notes"),u={};n&&(u.slack={user_id:n}),s&&(u.github={username:s}),o&&(u.email=o);let h=(await Promise.resolve().then(()=>(O(),gt))).default,d=i||h.defaults.namespace,f=await Promise.resolve().then(()=>(ze(),On)),m=await f.findByName(r,d);if(m&&m.entityType&&m.entityType!=="person"&&(console.error(`An entity named "${r}" already exists with entity_type="${m.entityType}". Use a different name or merge manually.`),process.exit(1)),m)console.log(`Linked to existing entity: ${m.uid} (${m.name})`);else{let{embed:b}=await Promise.resolve().then(()=>(De(),bo)),T=await b(r).catch(()=>null);m=await f.insertEntity({name:r,entityType:"person",description:a?`${a}`:null,namespace:d,externalId:n||null,embedding:T}),console.log(`Created entity: ${m.uid} (${m.name})`)}let{upsertPersonPod:y}=await Promise.resolve().then(()=>(ua(),Dd)),{pod:w,isNew:x}=await y({entityId:m.id,name:r,namespace:d,attrs:{platforms:u,role:a,relationship:c,notes:l}});console.log(`${x?"Created":"Updated"} person pod: ${w.uid}`),console.log(` entity_id: ${m.id}`),console.log(` platforms: ${JSON.stringify(u)}`),a&&console.log(` role: ${a}`),c&&console.log(` relationship: ${c}`)}function Et(t,e){let r=t.find(n=>n.startsWith(`${e}=`));if(r)return r.slice(e.length+1);let i=t.indexOf(e);return i!==-1&&i+1<t.length&&!t[i+1].startsWith("--")?t[i+1]:null}function w$(t){if(!t)return{};try{return JSON.parse(t)}catch{return{}}}async function _$(t){t.includes("--help")&&(console.log(`sigil facts \u2014 List stored facts
895
+
896
+ Usage:
897
+ sigil facts [options]
898
+
899
+ Options:
900
+ --namespace=<ns> Filter by namespace
901
+ --category=<c> Filter by category
902
+ --limit=<n> Max facts to show (default: 20)`),process.exit(0));let{listFacts:e}=await Promise.resolve().then(()=>(te(),Ve)),r=(await Promise.resolve().then(()=>(O(),gt))).default,i=(await Promise.resolve().then(()=>(N(),Z))).default,n=t.find(c=>c.startsWith("--namespace="))?.split("=")[1]||r.defaults.namespace,s=t.find(c=>c.startsWith("--category="))?.split("=")[1],o=Number(t.find(c=>c.startsWith("--limit="))?.split("=")[1]||20),a=await e({namespace:n,category:s,limit:o});if(!a.length)console.log("No facts found.");else{for(let c of a){let l=c.importance==="vital"?" [VITAL]":"";console.log(`${c.uid.slice(0,8)} [${c.category}]${l} ${c.content}`)}console.log(`
903
+ ${a.length} fact${a.length>1?"s":""} shown. Use 'sigil forget <id>' to delete.`)}await i.destroy()}async function E$(t){(t.includes("--help")||!t[0]||t[0].startsWith("--"))&&(console.log(`sigil forget \u2014 Delete a fact by ID
904
+
905
+ Usage:
906
+ sigil forget <id>
907
+
908
+ The <id> can be any of:
909
+ - A numeric row id (e.g. 165) \u2014 shown by 'sigil facts' and 'sigil search'
910
+ - A full UID (e.g. fact-eehjLrKb80s-TQHy)
911
+ - A short UID prefix (e.g. fact-eeh)`),process.exit(t[0]?0:1));let{deleteFact:e}=await Promise.resolve().then(()=>(te(),Ve)),r=(await Promise.resolve().then(()=>(N(),Z))).default,i=t[0],n;/^\d+$/.test(i)?[n]=await r("fact").where({id:Number(i)}).limit(1):i.startsWith("fact-")?[n]=await r("fact").where("uid","like",`${i}%`).limit(1):[n]=await r("fact").where("uid","like",`${i}%`).limit(1),n||(console.error(`No fact matches: ${i}`),await r.destroy(),process.exit(1));let s=await e(n.uid);s||(console.error(`No fact matches: ${i}`),await r.destroy(),process.exit(1)),console.log(`Forgotten: ${s.content}`),await r.destroy()}async function x$(t){let e=t.filter(f=>f.startsWith("--")),r=t.filter(f=>!f.startsWith("--"));e.includes("--help")&&(console.log(`sigil remember \u2014 Save facts to memory
912
+
913
+ Usage:
914
+ sigil remember "fact1" ["fact2" ...] Save one or more facts
915
+ echo "fact" | sigil remember Read fact from stdin
916
+ sigil remember --bg "fact1" "fact2" Save in background (returns immediately)
917
+
918
+ Examples:
919
+ sigil remember "I prefer tabs over spaces"
920
+ 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 i=e.includes("--bg")||e.includes("--background"),n=r.filter(Boolean);if(n.length===0&&!process.stdin.isTTY){let f=[];for await(let y of process.stdin)f.push(y);let m=Buffer.concat(f).toString("utf8").trim();m&&(n=m.split(`
922
+ `).map(y=>y.trim()).filter(Boolean))}if(n.length===0&&(console.error('Provide text to remember: sigil remember "your fact"'),process.exit(1)),i){let{spawn:f}=await import("node:child_process");f(process.execPath,[process.argv[1],"remember",...n],{detached:!0,stdio:"ignore",env:{...process.env}}).unref(),console.log(`Saving ${n.length} fact${n.length>1?"s":""} in background...`);return}let{ingestDocument:s}=await Promise.resolve().then(()=>(ic(),rc)),o=(await Promise.resolve().then(()=>(O(),gt))).default,a=(await Promise.resolve().then(()=>(N(),Z))).default,c=[];for(let f of n){let m=await s({content:f,namespace:o.defaults.namespace,classify:!0});c.push(m)}let l=0,u=0,h=0;for(let f of c)f.skipped||f.route==="noise"?h++:(l+=f.facts?.added??0,u+=f.facts?.updated??0,(f.facts?.added??0)+(f.facts?.updated??0)===0&&h++);if(l+u>0){let{updateContextSnapshot:f}=await Promise.resolve().then(()=>(Ar(),Sr));await f({namespace:o.defaults.namespace}).catch(()=>{})}await a.destroy();let d=[];l&&d.push(`${l} new`),u&&d.push(`${u} updated`),h&&d.push(`${h} already known`),console.log(d.length?`Remembered. (${d.join(", ")})`:"Already known.")}async function b$(t){t.includes("--help")&&(console.log(`sigil register \u2014 Register Sigil as a Claude Code MCP server
923
+
924
+ Usage:
925
+ sigil register [--print]
926
+
927
+ Options:
928
+ --print Print the config JSON without modifying files`),process.exit(0));let e=et(ne(),".sigil",".env"),r=se(e)?e:Ey(process.cwd(),".env");await S$(c$,r,t.includes("--print"))}async function S$(t,e,r=!1){let i=await import("node:fs/promises"),n=et(t,"src","server.js"),s={command:process.execPath,args:[n,"--mcp"],env:{DOTENV_CONFIG_PATH:e}},o=JSON.stringify({mcpServers:{sigil:s}},null,2);if(r){console.log(`
929
+ Add this to your Claude Code MCP config:
930
+ `),console.log(o);return}if(hc("claude --version"))try{try{Ze("claude mcp remove sigil",{stdio:"pipe"})}catch{}try{Ze("claude mcp remove cortex",{stdio:"pipe"})}catch{}Ze(`claude mcp add sigil -s user -- ${process.execPath} ${n} --mcp`,{stdio:"pipe",env:{...process.env,DOTENV_CONFIG_PATH:e}}),console.log("Registered sigil MCP server via `claude mcp add`."),console.log(` Server: ${n}`);return}catch{}let c=A$(),l=!1;for(let u of c)if(se(u))try{let h=await i.readFile(u,"utf8"),d=JSON.parse(h);d.mcpServers=d.mcpServers||{},d.mcpServers.sigil=s,await i.writeFile(u,JSON.stringify(d,null,2),"utf8"),console.log(`Registered sigil MCP server in ${u}`),l=!0;break}catch{}l||(console.log(`Could not auto-register. Add this to your Claude Code MCP configuration:
931
+ `),console.log(o),console.log(`
932
+ Or run: claude mcp add sigil -- node `+n+" --mcp"))}function A$(){let t=ne(),e=process.platform,r=[et(t,".config","claude","claude_code_config.json"),et(t,".claude","settings.json")];return e==="darwin"?r.push(et(t,"Library","Application Support","Claude","claude_desktop_config.json")):e==="linux"?r.push(et(t,".config","Claude","claude_desktop_config.json")):e==="win32"&&r.push(et(process.env.APPDATA||"","Claude","claude_desktop_config.json")),r}async function C$(t){let e=t.filter(m=>m.startsWith("--")),r=t.filter(m=>!m.startsWith("--"));(!r.length||e.includes("--help"))&&(console.log(`sigil ingest \u2014 Ingest documents into the knowledge base
933
+
934
+ Usage:
935
+ sigil ingest <file|url|glob> [options]
936
+
937
+ Options:
938
+ --namespace=<ns> Target namespace (default: from config)
939
+ --skip-facts Skip fact extraction
940
+ --skip-entities Skip entity linking
941
+
942
+ Examples:
943
+ sigil ingest ./docs/README.md
944
+ sigil ingest "docs/**/*.md"
945
+ sigil ingest https://example.com/page
946
+ sigil ingest file1.md file2.md --namespace=engineering`),process.exit(0));let{ingestDocument:i}=await Promise.resolve().then(()=>(ic(),rc)),{readSource:n,readSources:s}=await Promise.resolve().then(()=>(Kg(),Gg)),{fetchSource:o}=await Promise.resolve().then(()=>(Yg(),Vg)),a=(await Promise.resolve().then(()=>(N(),Z))).default,c=e.find(m=>m.startsWith("--namespace="))?.split("=")[1],l=e.includes("--skip-facts"),u=e.includes("--skip-entities"),h={success:[],failed:[],skipped:[]},d=Date.now();for(let m of r)try{let y;if(m.startsWith("http://")||m.startsWith("https://"))y=[await o(m)];else if(m.includes("*")){if(y=await s(m),!y.length){console.error(`Error: No files matched pattern: ${m}`),h.failed.push({input:m,error:"no files matched"});continue}}else y=[await n(m)];for(let w of y){console.log(`Ingesting: ${w.title}`);let x=await i({content:w.content,title:w.title,sourcePath:w.sourcePath,sourceType:w.sourceType,contentType:w.contentType,namespace:c,metadata:w.metadata,skipFacts:l,skipEntities:u});x.skipped?(h.skipped.push(w.title),console.log(" Skipped (unchanged)")):(h.success.push(w.title),console.log(` Done \u2014 ${x.chunkCount} chunks, ${x.facts.total} facts (${x.facts.added} new, ${x.facts.updated} updated)`))}}catch(y){console.error(` Failed: ${m} \u2014 ${y.message}`),h.failed.push({input:m,error:y.message})}let f=((Date.now()-d)/1e3).toFixed(1);if(console.log(`
947
+ Done in ${f}s \u2014 ${h.success.length} ingested, ${h.skipped.length} skipped, ${h.failed.length} failed`),h.success.length>0){let m=(await Promise.resolve().then(()=>(O(),gt))).default,{updateContextSnapshot:y}=await Promise.resolve().then(()=>(Ar(),Sr));await y({namespace:m.defaults.namespace}).catch(()=>{})}await a.destroy(),h.failed.length&&!h.success.length&&process.exit(1)}async function T$(t){let e=t.filter(w=>w.startsWith("--")),r=t.filter(w=>!w.startsWith("--")).join(" ");(!r||e.includes("--help"))&&(console.log(`sigil search \u2014 Search the knowledge base
948
+
949
+ Usage:
950
+ sigil search "query" [options]
951
+
952
+ Options:
953
+ --namespace=<ns> Filter by namespace (comma-separated for multiple)
954
+ --limit=<n> Max results (default: 10)
955
+ --graph Enable graph enhancement
956
+ --route Enable LLM query routing
957
+ --synthesize Enable LLM answer synthesis
958
+ --chunks Include raw chunk matches
959
+ --no-graph Disable graph enhancement
960
+
961
+ Examples:
962
+ sigil search "authentication flow"
963
+ sigil search "deploy process" --namespace=engineering
964
+ sigil search "API design" --limit=5`),process.exit(0));let{search:i}=await Promise.resolve().then(()=>(fc(),dc)),n=(await Promise.resolve().then(()=>(O(),gt))).default,s=(await Promise.resolve().then(()=>(N(),Z))).default,o=e.find(w=>w.startsWith("--namespace="))?.split("=")[1],a=o?o.split(","):[n.defaults.namespace],c=Number(e.find(w=>w.startsWith("--limit="))?.split("=")[1]||10),l=e.includes("--graph")&&!e.includes("--no-graph"),u=e.includes("--route"),h=e.includes("--synthesize"),d=e.includes("--chunks")||h,{facts:f,chunks:m,synthesized:y}=await i(r,{namespaces:a,limit:c,useGraph:l,route:u,synthesize:h,includeChunks:d});if(y&&console.log(y),f.length){console.log(`
965
+ Facts (${f.length}):`);for(let w of f)console.log(` ${w.content}${_y(w)}`)}if(m.length){console.log(`
966
+ Chunks (${m.length}):`);for(let w of m){let x=w.content?.slice(0,120).replace(/\n/g," ");console.log(` ${x}...${_y(w)}`)}}!f.length&&!m.length&&console.log("No results found."),await s.destroy()}function _y(t){let e=Number(t?.similarity);return Number.isFinite(e)&&e>0?` [sim ${e.toFixed(2)}]`:Number.isFinite(e)&&e===0?" [kw]":t?.rrfScore!=null?` [${t.rrfScore}]`:""}async function v$(t){t.includes("--help")&&(console.log(`sigil context \u2014 Refresh the hot-context snapshot in ~/.claude/CLAUDE.md
967
+
968
+ Usage:
969
+ sigil context [--namespace=<ns>] [--limit=<n>] [--explain]
970
+
971
+ Rebuilds the Active Context block injected into every new Claude session.
972
+ This runs automatically after sigil remember and sigil ingest.
973
+
974
+ Options:
975
+ --namespace=<ns> Namespace to pull facts from (default: from config)
976
+ --limit=<n> Max facts to include (default: 20)
977
+ --explain Don't write the snapshot \u2014 print which kind each
978
+ fact came from instead`),process.exit(0));let e=(await Promise.resolve().then(()=>(O(),gt))).default,r=(await Promise.resolve().then(()=>(N(),Z))).default,i=t.find(u=>u.startsWith("--namespace="))?.split("=")[1]||e.defaults.namespace,n=t.find(u=>u.startsWith("--limit="))?.split("=")[1],s=n?Number(n):20;if(t.includes("--explain")){await Promise.resolve().then(()=>(di(),Zo));let{activeKinds:u}=await Promise.resolve().then(()=>(mr(),Po)),{factsInPodsByRecency:h}=await Promise.resolve().then(()=>(Ar(),Sr)),d={namespace:i,cwd:process.cwd()},f=await u(d);console.log(`Hot-context blend for namespace=${i}:`),console.log("");for(let{kind:m,scope:y}of f){console.log(` ${m.name} (budget=${m.hotContextBudget}, ${m.visibility})`);let w;try{typeof m.fetchFacts=="function"?w=await m.fetchFacts(d,{slots:m.hotContextBudget,namespace:i}):w=await h(y,i,m.hotContextBudget)}catch(x){w=[],console.log(` (failed: ${x.message})`)}if(!w||w.length===0)console.log(" (no facts)");else for(let x of w.slice(0,m.hotContextBudget))console.log(` - ${(typeof x=="string"?x:x.content||"").slice(0,120)}`);console.log("")}await r.destroy();return}let{updateContextSnapshot:a}=await Promise.resolve().then(()=>(Ar(),Sr)),{writeSharedInstructions:c}=await Promise.resolve().then(()=>(ar(),Ql));await c();let l=await a({namespace:i,limit:s});await r.destroy(),console.log(l?`Context refreshed \u2014 ${l} facts written to ~/.sigil/CLAUDE.md`:"No facts found. Ingest some content first.")}async function I$(t){t.includes("--help")&&(console.log(`sigil status \u2014 Show knowledge base statistics
979
+
980
+ Usage:
981
+ sigil status [--namespace=<ns>]`),process.exit(0));let{getStats:e}=await Promise.resolve().then(()=>(In(),vn)),{getEntityCount:r}=await Promise.resolve().then(()=>(ze(),On)),{getRelationCount:i}=await Promise.resolve().then(()=>(cs(),Mg)),{getFactCount:n}=await Promise.resolve().then(()=>(te(),Ve)),{getEntityHebbianStats:s}=await Promise.resolve().then(()=>(Oi(),fs)),o=(await Promise.resolve().then(()=>(N(),Z))).default,a=t.find(b=>b.startsWith("--namespace="))?.split("=")[1],[c,l,u,h,d,f,m,y]=await Promise.all([e(a),n(a),r("document"),r("person"),r("topic"),i(),o("pod").where({status:"active"}).select("podType").then(b=>b),s({topN:3}).catch(()=>null)]),w=m.reduce((b,T)=>(b[T.podType]=(b[T.podType]||0)+1,b),{}),x=Object.entries(w).map(([b,T])=>`${T} ${b}`).join(", ")||"\u2014";if(console.log(`Sigil Knowledge Base${a?` (${a})`:""}`),console.log(` Documents: ${c.documentCount}`),console.log(` Chunks: ${c.totalChunks}`),console.log(` Facts: ${l} active`),console.log(` Entities: ${u} documents, ${h} people, ${d} topics`),console.log(` Relations: ${f}`),console.log(` Pods: ${x}`),y){let b=y.avgStrength?y.avgStrength.toFixed(2):"0",T=y.maxStrength?y.maxStrength.toFixed(2):"0";if(console.log(` Co-retrieval edges: ${y.edgeCount} (avg ${b}, max ${T})`),y.topPairs.length){console.log(" Top pairs by decayed strength:");for(let S of y.topPairs)console.log(` ${S.aName} \u2194 ${S.bName} (decayed ${Number(S.decayed).toFixed(2)})`)}}await o.destroy()}async function $$(t){t.includes("--help")&&(console.log(`sigil maintain \u2014 Run periodic memory maintenance
982
+
983
+ Usage:
984
+ sigil maintain
985
+
986
+ Promotes 'fresh' facts (older than 1h with importance=vital or any access) to 'stable',
987
+ 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 e=(await Promise.resolve().then(()=>(N(),Z))).default,{promoteFreshFacts:r,closeEditingWindows:i,getLifecycleStats:n}=await Promise.resolve().then(()=>(yy(),gy)),{consolidateCoRetrievalEdges:s}=await Promise.resolve().then(()=>(sc(),qg)).catch(()=>({})),{consolidateEntityCoRetrievalEdges:o}=await Promise.resolve().then(()=>(Oi(),fs)).catch(()=>({})),a=await n(),c=await r(),l=await i(),u=s?await s():0,h=o?await o():0,d=await n();console.log("Memory maintenance:"),console.log(` Stages \u2014 fresh: ${a.fresh}\u2192${d.fresh}, stable: ${a.stable}\u2192${d.stable}, editing: ${a.editing}\u2192${d.editing}`),console.log(` Promoted (fresh\u2192stable): ${c}`),console.log(` Closed editing windows (editing\u2192stable): ${l}`),u&&console.log(` Fact co-retrieval edges consolidated: ${u}`),h&&console.log(` Entity co-retrieval edges consolidated: ${h}`),await e.destroy()}async function O$(t){t.includes("--help")&&(console.log(`sigil migrate \u2014 Run database migrations
989
+
990
+ Usage:
991
+ sigil migrate [--rollback]`),process.exit(0));let e=(await Promise.resolve().then(()=>(N(),Z))).default,{MIGRATIONS_DIR:r}=await Promise.resolve().then(()=>(ht(),vs));if(t.includes("--rollback")){let[i,n]=await e.migrate.rollback({directory:r});console.log(`Rolled back batch ${i}: ${n.length} migrations`);for(let s of n)console.log(` ${s}`)}else{let[i,n]=await e.migrate.latest({directory:r});if(n.length){console.log(`Ran batch ${i}: ${n.length} migrations`);for(let s of n)console.log(` ${s}`)}else console.log("Already up to date.")}await e.destroy()}async function R$(t){t.includes("--help")&&(console.log(`sigil reset \u2014 Wipe Sigil's setup and re-run init
992
+
993
+ Usage:
994
+ sigil reset Show a confirmation prompt before wiping
995
+ sigil reset --yes Skip the prompt (for scripting); same as --confirm
996
+
997
+ Wipes:
998
+ ~/.sigil/ entire data directory (DB + config + CLAUDE.md)
999
+ ~/.claude/CLAUDE.md removes the @~/.sigil/CLAUDE.md import line
1000
+
1001
+ 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=t.includes("--confirm")||t.includes("--yes")||t.includes("-y"),r=ne(),i=et(r,".sigil"),n=et(r,".claude","CLAUDE.md");if(!e){let o=await Promise.resolve().then(()=>(rn(),en));o.intro("Sigil \u2014 reset"),o.note(["This will:",` - delete ${i} (DB, config, CLAUDE.md, all stored facts)`,` - remove the @~/.sigil/CLAUDE.md import line from ${n}`," - 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(`
1003
+ `),"About to reset");let a=await o.confirm({message:"Wipe everything and re-init?",initialValue:!1});(o.isCancel(a)||a!==!0)&&(o.cancel("Reset cancelled. Nothing changed."),process.exit(0))}try{Ze('pkill -f "sigil/dist/server.js --mcp"',{stdio:"pipe"})}catch{}try{Ze('pkill -f ".sigil/db" ',{stdio:"pipe"})}catch{}let s=await import("node:fs/promises");se(i)&&await s.rm(i,{recursive:!0,force:!0}),await N$(),console.log(""),console.log("Wipe complete. Starting init..."),console.log(""),await Sy([])}async function N$(){let t=await import("node:fs/promises"),e=et(ne(),".claude","CLAUDE.md");if(!se(e))return!1;let r=await t.readFile(e,"utf8"),i=ne(),n=[et(i,".sigil","CLAUDE.md"),et(i,".smara","CLAUDE.md"),et(i,".cortex","CLAUDE.md")],s=r;for(let o of n){let a=new RegExp(`^@${D$(o)}\\s*\\n?`,"gm");s=s.replace(a,"")}return s===r?!1:(await t.writeFile(e,s,"utf8"),!0)}function D$(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function L$(t){(t.length===0||t.includes("--help"))&&(console.log(`sigil why \u2014 Explain a search result
1004
+
1005
+ Usage:
1006
+ sigil why "<query>" [--namespace=<ns>] [--limit=5] [--pod-scope=auto|global|<name>,<name>]
1007
+
1008
+ Runs the same hybrid search the UserPromptSubmit hook uses and prints
1009
+ the per-fact breakdown \u2014 vector score, keyword score, importance,
1010
+ 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 e=(await Promise.resolve().then(()=>(O(),gt))).default,r=(await Promise.resolve().then(()=>(N(),Z))).default,i=t.findIndex(m=>m.startsWith("--")),s=(i===-1?t:t.slice(0,i)).join(" ").replace(/^["']|["']$/g,"");s||(console.error('Provide a query: sigil why "<query>"'),process.exit(1));let o=t.find(m=>m.startsWith("--namespace="))?.split("=")[1]||e.defaults.namespace,a=t.find(m=>m.startsWith("--limit="))?.split("=")[1],c=a?Number(a):5,l=t.find(m=>m.startsWith("--pod-scope="))?.split("=")[1],u=null;l&&(l==="auto"||l==="global"?u=l:u=l.split(",").map(m=>m.trim()).filter(Boolean));let{search:h}=await Promise.resolve().then(()=>(fc(),dc)),d=await h(s,{namespaces:[o],limit:c,route:!0,expand:!0,synthesize:!1,podScope:u??"auto"});if(console.log(`Query: ${s}`),console.log(`Namespace: ${o}`),console.log(`Pod scope: ${JSON.stringify(u??"auto")}`),console.log(""),d.matchedEntity&&(console.log(`Matched entity: ${d.matchedEntity.name} (${d.matchedEntity.type}, id:${d.matchedEntity.id})`),console.log("")),!d.facts.length){console.log("No facts returned."),await r.destroy();return}let f=await Promise.resolve().then(()=>(br(),Ke));console.log(`Facts (${d.facts.length}):`);for(let[m,y]of d.facts.entries()){let w=await f.listPodsForMember("fact",y.id).catch(()=>[]),x=w.length?w.map(S=>`${S.podType}:${S.name}`).join(", "):"\u2014",b=y.importance||`score=${y.importanceScore??"?"}`,T=y.coRetrievalBoost!=null?` hebbian=${y.coRetrievalBoost}`:"";console.log(` ${m+1}. [rrf=${y.rrfScore??"?"}${T}] [${y.category}] [${b}] [conf=${y.confidence}]`),console.log(` pods: ${x}`),console.log(` content: ${(y.content||"").slice(0,140)}`)}await r.destroy()}async function P$(t){let e=t[0];(!e||e==="--help")&&(console.log(`sigil kind \u2014 Inspect registered pod kinds
1012
+
1013
+ Usage:
1014
+ sigil kind list
1015
+ sigil kind show <name>
1016
+
1017
+ list Show every registered pod kind with budget / visibility / TTL.
1018
+ 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(()=>(di(),Zo));let{list:r,get:i,activeKinds:n,getSchemaDoc:s}=await Promise.resolve().then(()=>(mr(),Po));if(e==="list"){let o=r();console.log(`Registered kinds (${o.length}):`);for(let l of o){let u=l.ttlDays?`${l.ttlDays}d TTL`:"no decay";console.log(` ${l.name.padEnd(18)} budget=${l.hotContextBudget} ${l.visibility.padEnd(8)} ${u}`),console.log(` ${l.description}`)}let a=(await Promise.resolve().then(()=>(O(),gt))).default.defaults.namespace,c=await n({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(e==="show"){let o=t[1];o||(console.error("Provide a kind name: sigil kind show <name>"),process.exit(1));let a=i(o);a||(console.error(`Unknown kind: ${o}`),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 s(a);console.log(` schemaDoc chars: ${c?c.length:0}`);return}console.error(`Unknown subcommand: ${e}`),process.exit(1)}function hc(t){try{return Ze(t,{stdio:"pipe"}),!0}catch{return!1}}async function Ty(t){try{return(await fetch(`${t}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function M$(){return o$("ollama",["serve"],{detached:!0,stdio:"ignore"})}async function F$(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(await Ty(t))return!0;await new Promise(i=>setTimeout(i,250))}return!1}function k$(t){return a$(t).toString("hex")}