@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
@@ -0,0 +1,222 @@
1
+ #!/usr/bin/env node
2
+ var Wf=Object.defineProperty;var c=(t,e)=>()=>(t&&(e=t(t=0)),e);var b=(t,e)=>{for(var r in e)Wf(t,r,{get:e[r],enumerable:!0})};import{fileURLToPath as Kf}from"node:url";import{dirname as qo,join as P}from"node:path";import{existsSync as Jo}from"node:fs";import{homedir as Yf}from"node:os";function qf(){let t=qo(Kf(import.meta.url));for(let e=0;e<10;e++){if(Jo(P(t,"package.json"))&&Jo(P(t,"prompts")))return t;let r=qo(t);if(r===t)break;t=r}return process.cwd()}var Vo,q,Tx,zo,X,Ce,Sx,Ox,Xo,Zo,Qo,tn,Ix,vx,en,Cx,Px,J=c(()=>{Vo=qf(),q=P(Vo,"prompts"),Tx=P(Vo,"src","db","migrations"),zo=Yf(),X=P(zo,".sigil"),Ce=P(X,".env"),Sx=P(X,"db"),Ox=P(X,"CLAUDE.md"),Xo=P(X,"schemas"),Zo=P(X,".hook-errors.log"),Qo=P(X,".last-clean-doctor"),tn=P(X,".active-session.json"),Ix=P(X,".stop-cursor.json"),vx=P(X,".hook-dedup.json"),en=P(zo,".claude"),Cx=P(en,"settings.json"),Px=P(en,"CLAUDE.md")});var an,sn=c(()=>{an="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"});import{webcrypto as cn}from"node:crypto";function zf(t){!dt||dt.length<t?(dt=Buffer.allocUnsafe(t*Vf),cn.getRandomValues(dt),bt=0):bt+t>dt.length&&(cn.getRandomValues(dt),bt=0),bt+=t}function Z(t=21){zf(t|=0);let e="";for(let r=bt-t;r<bt;r++)e+=an[dt[r]&63];return e}var Vf,dt,bt,ne=c(()=>{sn();Vf=128});var fn={};b(fn,{default:()=>p});var N,un,Xf,p,_=c(()=>{N=(t,e)=>process.env[t]??e,un=N("SIGIL_DB_TYPE","postgres");if(un!=="postgres")throw new Error(`SIGIL_DB_TYPE=${un} 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.`);Xf={db:{type:"postgres",host:N("SIGIL_DB_HOST","localhost"),port:Number(N("SIGIL_DB_PORT",5432)),database:N("SIGIL_DB_NAME","sigil"),user:N("SIGIL_DB_USER","sigil_app"),password:N("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:N("SIGIL_SYNTHESIZE","true")!=="false",synthesizeModel:N("SIGIL_SYNTH_MODEL","")},ingest:{eagerExtract:N("SIGIL_EAGER_EXTRACT","true")!=="false"},hebbian:{entity:{enabled:N("SIGIL_HEBBIAN_ENTITY_ENABLED",null,"true")!=="false",eta:Number(N("SIGIL_HEBBIAN_ENTITY_ETA",null,1)),cap:Number(N("SIGIL_HEBBIAN_ENTITY_CAP",null,50)),halfLifeDays:Number(N("SIGIL_HEBBIAN_ENTITY_HALF_LIFE_DAYS",null,30)),minEffective:Number(N("SIGIL_HEBBIAN_ENTITY_MIN_EFFECTIVE",null,.5)),rrfWeight:Number(N("SIGIL_HEBBIAN_ENTITY_RRF_WEIGHT",null,.3)),maxWriteEntities:Number(N("SIGIL_HEBBIAN_ENTITY_MAX_WRITE",null,12)),expandPerSeed:Number(N("SIGIL_HEBBIAN_ENTITY_EXPAND_PER_SEED",null,3))}}},p=Xf});var Ir={};b(Ir,{default:()=>m});import Zf from"knex";function tl(t){return Array.isArray(t)?t.map(Or):t&&typeof t=="object"?Or(t):t}function el(t,e){return e(rl(t))}function Or(t){if(!t||typeof t!="object"||t instanceof Date)return t;if(Array.isArray(t))return t.map(Or);let e={};for(let[r,o]of Object.entries(t))e[r.replace(/_([a-z])/g,(n,a)=>a.toUpperCase())]=o;return e}function rl(t){return t.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`)}var Qf,m,I=c(()=>{_();Qf=Zf({client:"pg",connection:{host:p.db.host,port:p.db.port,database:p.db.database,user:p.db.user,password:p.db.password},pool:{min:2,max:10},postProcessResponse:tl,wrapIdentifier:el});m=Qf});var It={};b(It,{archivePod:()=>al,deletePod:()=>il,findByEntityId:()=>pn,findByExternalId:()=>St,findById:()=>ol,findByUid:()=>Tt,incrementCounters:()=>Ot,insertPod:()=>ln,listPods:()=>nl,patchAttrs:()=>ae,reassignEntity:()=>sl,setEndedAt:()=>vr,upsertPod:()=>At});async function ln({podType:t,name:e,namespace:r,attrs:o={},entityId:n=null,connectionId:a=null,externalId:i=null,startedAt:s=null,endedAt:u=null}){let f=`pod-${Z(16)}`,[l]=await m("pod").insert({uid:f,podType:t,name:e,namespace:r||p.defaults.namespace,attrs:JSON.stringify(o),entityId:n,connectionId:a,externalId:i,startedAt:s,endedAt:u}).returning("*");return l}async function At({podType:t,externalId:e,name:r,namespace:o,attrs:n={},entityId:a=null,connectionId:i=null,startedAt:s=null}){if(!e)throw new Error("upsertPod requires externalId; use insertPod for custom pods");let u=`pod-${Z(16)}`,f=o||p.defaults.namespace,{rows:[l]}=await m.raw(`
6
+ INSERT INTO pod (uid, pod_type, name, namespace, attrs, entity_id, connection_id, external_id, started_at, created_at, updated_at)
7
+ VALUES (?, ?, ?, ?, ?::jsonb, ?, ?, ?, ?, NOW(), NOW())
8
+ ON CONFLICT (pod_type, external_id, namespace) WHERE external_id IS NOT NULL DO UPDATE SET
9
+ attrs = pod.attrs || EXCLUDED.attrs,
10
+ updated_at = NOW()
11
+ RETURNING *, (xmax = 0) AS "isNew"
12
+ `,[u,t,r,f,JSON.stringify(n),a,i,e,s]);return{pod:l,isNew:l.isNew}}async function Tt(t){return m("pod").where({uid:t}).first()||null}async function ol(t){return m("pod").where({id:t}).first()||null}async function St({podType:t,externalId:e,namespace:r}){return m("pod").where({podType:t,externalId:e,namespace:r||p.defaults.namespace}).first()||null}async function pn(t){return m("pod").where({entityId:t}).first()||null}async function nl({podType:t,namespace:e,status:r="active",limit:o=20}={}){let n=m("pod").where({status:r}).orderBy("updatedAt","desc").limit(o);return t&&n.where({podType:t}),e&&n.where({namespace:e}),n}async function al(t){await m("pod").where({id:t}).update({status:"archived",updatedAt:m.fn.now()})}async function il(t){await m("pod").where({id:t}).del()}async function ae(t,e){await m.raw("UPDATE pod SET attrs = attrs || ?::jsonb, updated_at = NOW() WHERE id = ?",[JSON.stringify(e),t])}async function vr(t,e=new Date){await m("pod").where({id:t}).update({endedAt:e,updatedAt:m.fn.now()})}async function sl(t,e){await m("pod").where({entityId:t}).update({entityId:e,updatedAt:m.fn.now()})}async function Ot(t,{docs:e=0,facts:r=0}){!e&&!r||await m.raw(`UPDATE pod
13
+ SET member_doc_count = member_doc_count + ?,
14
+ member_fact_count = member_fact_count + ?,
15
+ updated_at = NOW()
16
+ WHERE id = ?`,[e,r,t])}var mt=c(()=>{ne();I();_()});function hn({sessionId:t,transcriptPath:e=null,cwd:r=null,turnCount:o=0,model:n=null,conclusion:a=null,summary:i=null}){return{session_id:t,transcript_path:e,cwd:r,turn_count:o,model:n,conclusion:a,summary:i}}function yn({sessionId:t,startedAt:e=new Date}={}){let o=(e instanceof Date?e:new Date(e)).toISOString().replace("T"," ").slice(0,16),n=t?t.slice(0,8):"unknown";return`claude-session ${o} (${n})`}var dn,mn,Cr=c(()=>{vt();dn="claude_session",mn={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 Pr();return t?[t]:[]}catch{return[]}}}});var Ne={};b(Ne,{CURSOR_PATH:()=>Ct,endActiveSession:()=>gl,ensureActiveSession:()=>Nr,getActiveCursor:()=>yl,getActiveSessionPodUid:()=>Pr});import{writeFile as ul,readFile as fl,unlink as ll}from"node:fs/promises";import{existsSync as pl,mkdirSync as dl}from"node:fs";import{dirname as gn}from"node:path";async function Pe(){try{let t=await fl(Ct,"utf8");return JSON.parse(t)}catch{return null}}async function wn(t){pl(gn(Ct))||dl(gn(Ct),{recursive:!0}),await ul(Ct,JSON.stringify(t,null,2),"utf8")}async function Nr({sessionId:t,transcriptPath:e=null,cwd:r=null,model:o=null,namespace:n=null}){if(!t)throw new Error("ensureActiveSession requires sessionId from hook stdin");let a=n||p.defaults.namespace,i=await Pe();if(i&&i.session_id===t&&i.namespace===a){let f=await Tt(i.pod_uid);if(f)return await ae(f.id,{turn_count:(wl(f.attrs)||0)+1}),await hl(i),f}let s=new Date,{pod:u}=await At({podType:dn,externalId:t,name:yn({sessionId:t,startedAt:s}),namespace:a,attrs:hn({sessionId:t,transcriptPath:e,cwd:r,turnCount:1,model:o}),startedAt:s});return await wn({session_id:t,pod_uid:u.uid,namespace:a,started_at:u.startedAt??s.toISOString(),last_seen_at:new Date().toISOString()}),u}async function hl(t){await wn({...t,last_seen_at:new Date().toISOString()})}async function Pr({allowStale:t=!1}={}){let e=await Pe();return!e||!e.pod_uid||!t&&e.started_at&&Date.now()-new Date(e.started_at).getTime()>ml?null:e.pod_uid}async function yl(){return Pe()}async function gl({conclusion:t=null,summary:e=null}={}){let r=await Pe();if(!r)return null;let o=await Tt(r.pod_uid);if(o){if(t||e){let n={};t&&(n.conclusion=t),e&&(n.summary=e),await ae(o.id,n)}await vr(o.id)}try{await ll(Ct)}catch{}return o}function wl(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 Ct,ml,vt=c(()=>{mt();Cr();_();J();Ct=tn,ml=360*60*1e3});var An={};b(An,{validateConfig:()=>bn,validateConfigDeep:()=>xl});function bn(){let t=[];return _l(t),El(t),bl(t),t}async function xl(){let t=bn();if(p.db.type==="postgres"&&!t.some(e=>e.code.startsWith("DB_")))try{await(await Promise.resolve().then(()=>(I(),Ir))).default.raw("SELECT 1")}catch(e){t.push({level:"fail",code:"DB_UNREACHABLE",message:`Postgres at ${p.db.host}:${p.db.port}/${p.db.database} unreachable: ${e.message.split(`
17
+ `)[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 _l(t){let{provider:e,model:r}=p.embedding;if(e&&r){let o=Object.keys(xn).find(n=>xn[n].some(a=>a.test(r)));o&&o!==e&&t.push({level:"fail",code:"EMBEDDING_PROVIDER_MODEL_MISMATCH",message:`EMBEDDING_PROVIDER=${e} but EMBEDDING_MODEL=${r} is a ${o} model.`,fix:Al(e,r,o)})}if(e&&En[e]){let o=En[e];p.embedding[o]||t.push({level:"fail",code:"EMBEDDING_PROVIDER_MISSING_KEY",message:`EMBEDDING_PROVIDER=${e} but no ${De(o)} found.`,fix:`Set ${De(o)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}}function El(t){let{provider:e}=p.llm;if(e&&_n[e]){let r=_n[e];p.llm[r]||t.push({level:"fail",code:"LLM_PROVIDER_MISSING_KEY",message:`LLM_PROVIDER=${e} but no ${De(r)} found.`,fix:`Set ${De(r)} in ~/.sigil/.env, or run 'sigil init' to reconfigure.`})}e==="openrouter"&&p.llm.openrouterModel&&(p.llm.openrouterModel.includes("/")||t.push({level:"warn",code:"OPENROUTER_MODEL_FORMAT",message:`LLM_OPENROUTER_MODEL=${p.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 bl(t){p.db.type==="postgres"&&(!p.db.host||!p.db.database||!p.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 De(t){return{openaiApiKey:"OPENAI_API_KEY",apiKey:"ANTHROPIC_API_KEY",openrouterApiKey:"OPENROUTER_API_KEY",voyageApiKey:"VOYAGE_API_KEY"}[t]||t}function Al(t,e,r){let o={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: ${o}`}var xn,_n,En,Tn=c(()=>{_();xn={voyage:[/^voyage-/],openai:[/^text-embedding-/],ollama:[/^nomic-embed/,/^mxbai-embed/,/^all-minilm/,/^bge-/,/^snowflake-/,/^granite-embedding/]},_n={openai:"openaiApiKey",anthropic:"apiKey",openrouter:"openrouterApiKey"},En={openai:"openaiApiKey",voyage:"voyageApiKey",openrouter:"openrouterApiKey"}});var Lr={};b(Lr,{HOOK_ERROR_LOG:()=>Le,LAST_CLEAN_DOCTOR_PATH:()=>Re,clearLastCleanDoctor:()=>Dl,failClosedOnBadConfig:()=>vl,getUnackedErrorCount:()=>Pl,markDoctorClean:()=>Nl,readRecentHookErrors:()=>Cl,recordHookError:()=>Sn});import{appendFile as Tl,readFile as Dr,writeFile as Sl,unlink as Ol}from"node:fs/promises";import{createHash as Il}from"node:crypto";async function Sn(t,e,r=null){try{let o={ts:new Date().toISOString(),hook:t,error:e?.message||String(e),input_hash:r?Ll(r):null};await Tl(Le,JSON.stringify(o)+`
18
+ `,"utf8")}catch{}}async function vl(t,e=null){try{let{validateConfig:r}=await Promise.resolve().then(()=>(Tn(),An)),o=r().filter(n=>n.level==="fail");if(o.length===0)return!1;for(let n of o){let a=new Error(`${n.code}: ${n.message} \u2014 fix: ${n.fix}`);await Sn(t,a,e)}return!0}catch{return!1}}async function Cl(t=10){let e;try{e=await Dr(Le,"utf8")}catch{return[]}let r=e.split(`
19
+ `).filter(Boolean),o=[];for(let n of r.slice(-t))try{o.push(JSON.parse(n))}catch{}return o}async function Pl(){let t=0;try{let o=await Dr(Re,"utf8");t=new Date(o.trim()).getTime()}catch{}let e;try{e=await Dr(Le,"utf8")}catch{return 0}let r=0;for(let o of e.split(`
20
+ `))if(o.trim())try{let n=JSON.parse(o);(n.ts?new Date(n.ts).getTime():0)>t&&(r+=1)}catch{}return r}async function Nl(){try{await Sl(Re,new Date().toISOString(),"utf8")}catch{}}async function Dl(){try{await Ol(Re)}catch{}}function Ll(t){try{let e=typeof t=="string"?t:JSON.stringify(t);return Il("sha256").update(e).digest("hex").slice(0,12)}catch{return null}}var Le,Re,Rr=c(()=>{J();Le=Zo,Re=Qo});var Pt={};b(Pt,{attach:()=>Me,attachDocument:()=>Mr,attachEntity:()=>Rl,attachFact:()=>ie,detach:()=>Ml,factIdsInPod:()=>Fl,listMembers:()=>kl,listPodsForMember:()=>Bl});async function Me(t,e,r,o="primary"){let{rowCount:n}=await m.raw(`INSERT INTO pod_membership (pod_id, member_type, member_id, role)
21
+ VALUES (?, ?, ?, ?)
22
+ ON CONFLICT (pod_id, member_type, member_id) DO NOTHING`,[t,e,r,o]);return n>0&&(e==="fact"?await Ot(t,{facts:1}):e==="document"&&await Ot(t,{docs:1})),{attached:n>0}}async function Ml(t,e,r){let o=await m("pod_membership").where({podId:t,memberType:e,memberId:r}).del();return o>0&&(e==="fact"?await Ot(t,{facts:-1}):e==="document"&&await Ot(t,{docs:-1})),{detached:o>0}}async function kl(t,{memberType:e,limit:r=20}={}){if(!e)throw new Error("listMembers requires a memberType filter");return m(`${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 Bl(t,e){return m("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 Fl(t){return await m("pod_membership").where({podId:t,memberType:"fact"}).pluck("memberId")}var ie,Mr,Rl,se=c(()=>{I();mt();ie=(t,e,r)=>Me(t,"fact",e,r),Mr=(t,e,r)=>Me(t,"document",e,r),Rl=(t,e,r)=>Me(t,"entity",e,r)});var On={};b(On,{chat:()=>$l,meta:()=>Ul,setup:()=>jl});async function $l(t,{model:e,jsonMode:r=!1}={}){let o=e||p.llm.openaiModel,n=[{role:"user",content:t}];r&&!t.toLowerCase().includes("json")&&n.unshift({role:"system",content:"Respond with valid JSON."});let a={model:o,messages:n};r&&(a.response_format={type:"json_object"});let i=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${p.llm.openaiApiKey}`},body:JSON.stringify(a)});if(!i.ok){let l=await i.text();throw new Error(`OpenAI error ${i.status}: ${l}`)}let s=await i.json(),u=s.choices[0].message.content.trim(),f=s.usage||{};return{text:u,inputTokens:f.prompt_tokens||0,outputTokens:f.completion_tokens||0,model:o}}async function jl({existing:t,clack:e}){let r=t.OPENAI_API_KEY||"",o=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(o)?null:{env:{OPENAI_API_KEY:o||r}}}var Ul,In=c(()=>{_();Ul={id:"openai",label:"OpenAI",hint:"gpt-4o-mini"}});function H(t){return Math.ceil((t||"").length/4)}function kr(t,e,r){let o=Hl[t];return o?(e*o.input+r*o.output)/1e6:0}function ce({provider:t,model:e,caller:r,input:o,response:n,inputTokens:a,outputTokens:i,cost:s,durationMs:u,status:f,error:l}){m("llm_log").insert({provider:t,model:e,caller:r,input:o?.slice(0,1e4),response:n?.slice(0,1e4),inputTokens:a,outputTokens:i,cost:s,durationMs:u,status:f,error:l?.slice(0,2e3)}).catch(h=>console.error("[llm-log] Write failed:",h.message))}async function Br(t,e=3){for(let r=1;r<=e;r++)try{return await t()}catch(o){if(r===e)throw o;let n=Math.min(1e3*2**(r-1),1e4);await new Promise(a=>setTimeout(a,n))}}var Hl,ue=c(()=>{I();Hl={"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 vn={};b(vn,{chat:()=>Wl,meta:()=>Kl,setup:()=>Yl});async function Gl(){if(!Fr){let{default:t}=await import("@anthropic-ai/sdk");Fr=new t({apiKey:p.llm.apiKey})}return Fr}async function Wl(t,{model:e,jsonMode:r=!1}={}){let o=e||"claude-haiku-4-5-20251001",n=await Gl(),a=[{role:"user",content:t}],i=r?"Respond with valid JSON only. No explanation or wrapping.":void 0,s=await n.messages.create({model:o,max_tokens:4096,messages:a,...i&&{system:i}});return{text:s.content[0].text.trim(),inputTokens:s.usage?.input_tokens||H(t),outputTokens:s.usage?.output_tokens||H(s.content[0].text),model:o}}async function Yl({existing:t,clack:e}){let r=t.ANTHROPIC_API_KEY||"",o=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(o)?null:{env:{ANTHROPIC_API_KEY:o||r}}}var Fr,Kl,Cn=c(()=>{_();ue();Fr=null;Kl={id:"anthropic",label:"Anthropic",hint:"Claude Haiku \u2014 requires API key"}});var Nn={};b(Nn,{chat:()=>Jl,meta:()=>Vl,setup:()=>zl});async function Jl(t,{model:e,jsonMode:r=!1}={}){let o=e||p.llm.openrouterModel;if(!p.llm.openrouterApiKey)throw new Error("OPENROUTER_API_KEY is not set");if(!o)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 a={model:o,messages:n};r&&(a.response_format={type:"json_object"});let i=(p.llm.openrouterBaseUrl||ql).replace(/\/+$/,""),s={"Content-Type":"application/json",Authorization:`Bearer ${p.llm.openrouterApiKey}`};p.llm.openrouterReferer&&(s["HTTP-Referer"]=p.llm.openrouterReferer),p.llm.openrouterTitle&&(s["X-Title"]=p.llm.openrouterTitle);let u=await fetch(`${i}/chat/completions`,{method:"POST",headers:s,body:JSON.stringify(a)});if(!u.ok){let y=await u.text();throw new Error(`OpenRouter error ${u.status}: ${y}`)}let f=await u.json(),h=(f.choices?.[0]?.message?.content||"").trim(),d=f.usage||{};return{text:h,inputTokens:d.prompt_tokens||0,outputTokens:d.completion_tokens||0,model:f.model||o}}async function zl({existing:t,clack:e}){let r={},o=t.OPENROUTER_API_KEY||"",n=await e.text({message:"OpenRouter API key (paste, then Enter)",placeholder:o?"(keep existing \u2014 press Enter)":"sk-or-v1-...",validate:u=>{if(!u&&!o)return"API key is required";if(u&&!u.startsWith("sk-or-"))return'OpenRouter keys start with "sk-or-" \u2014 check paste'}});if(e.isCancel(n))return null;r.OPENROUTER_API_KEY=n||o;let a=t.LLM_OPENROUTER_MODEL||"",i=await e.text({message:"OpenRouter model (vendor/model)",placeholder:a||Pn,validate:u=>{if(u&&!u.includes("/"))return'OpenRouter models are "vendor/model" \u2014 e.g. google/gemini-flash-latest'}});if(e.isCancel(i))return null;r.LLM_OPENROUTER_MODEL=i||a||Pn;let s=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(s))return null;if(s==="yes"){let u=await e.text({message:"Extraction model (high-volume; cheap matters)",placeholder:t.LLM_EXTRACTION_MODEL||Nt.extraction});if(e.isCancel(u))return null;r.LLM_EXTRACTION_MODEL=u||t.LLM_EXTRACTION_MODEL||Nt.extraction;let f=await e.text({message:"Decision model (AUDM; smart matters)",placeholder:t.LLM_DECISION_MODEL||Nt.decision});if(e.isCancel(f))return null;r.LLM_DECISION_MODEL=f||t.LLM_DECISION_MODEL||Nt.decision;let l=await e.text({message:"Synthesis model (read-time answer composition)",placeholder:t.SIGIL_SYNTH_MODEL||Nt.synthesis});if(e.isCancel(l))return null;r.SIGIL_SYNTH_MODEL=l||t.SIGIL_SYNTH_MODEL||Nt.synthesis}return e.note(`OpenRouter can drive both LLM calls and embeddings.
23
+ You will pick an embedding provider in the next step \u2014 "openrouter" is an option,
24
+ or you can use a direct provider (Ollama / OpenAI / Voyage) for embeddings.`,"OpenRouter scope"),{env:r}}var ql,Vl,Pn,Nt,Dn=c(()=>{_();ql="https://openrouter.ai/api/v1";Vl={id:"openrouter",label:"OpenRouter",hint:"one key, many models (Anthropic / OpenAI / Meta / ...)"},Pn="google/gemini-flash-latest",Nt={extraction:"openrouter:qwen/qwen3.5-flash",decision:"openrouter:anthropic/claude-sonnet-latest",synthesis:"openrouter:anthropic/claude-sonnet-latest"}});var Ln={};b(Ln,{chat:()=>ep,meta:()=>rp,setup:()=>op});import{spawn as Xl}from"node:child_process";function tp(t,e){let r=p.llm.cliTimeout||12e4;return new Promise((o,n)=>{let a=Xl("claude",t,{stdio:["pipe","pipe","pipe"]}),i=setTimeout(()=>{a.kill("SIGTERM"),n(new Error(`claude CLI timed out after ${r}ms`))},r),s="",u="";a.stdout.on("data",f=>{s+=f}),a.stderr.on("data",f=>{u+=f}),a.on("error",f=>{clearTimeout(i),n(new Error(`Failed to spawn claude CLI: ${f.message}`))}),a.on("close",f=>{clearTimeout(i),o({stdout:s,stderr:u,code:f})}),a.stdin.write(e),a.stdin.end()})}async function ep(t,{model:e,jsonMode:r=!1}={}){let o=e||p.llm.cliModel||"haiku",n=Zl[o]||o,a=["-p","--model",n,"--output-format","json"];r&&a.push("--json-schema",Ql);let{stdout:i,stderr:s,code:u}=await tp(a,t);if(u!==0)throw new Error(`claude CLI exited ${u}: ${(s||i).slice(0,500)}`);let f;try{f=JSON.parse(i)}catch{return{text:i.trim(),inputTokens:H(t),outputTokens:H(i),model:n}}if(f.is_error)throw new Error(`claude CLI error: ${f.result||"unknown error"}`);let l=r&&f.structured_output?JSON.stringify(f.structured_output):(f.result||"").trim(),h=f.usage||{};return{text:l,inputTokens:h.input_tokens||H(t),outputTokens:h.output_tokens||H(l),model:n,cost:f.total_cost_usd||0}}async function op(){return{env:{}}}var Zl,Ql,rp,Rn=c(()=>{_();ue();Zl={"claude-haiku-4-5-20251001":"haiku","claude-sonnet-4-6":"sonnet","claude-opus-4-6":"opus"},Ql=JSON.stringify({type:"object",additionalProperties:!0});rp={id:"claude-cli",label:"Claude Code",hint:"uses your existing subscription \u2014 no extra API key"}});var Mn={};b(Mn,{chat:()=>np,meta:()=>ap,setup:()=>ip});async function np(t,{model:e,jsonMode:r=!1}={}){let o=e||p.llm.ollamaModel,n=`${p.llm.ollamaHost}/api/chat`,a={model:o,messages:[{role:"user",content:t}],stream:!1};r&&(a.format="json");let i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!i.ok){let u=await i.text();throw new Error(`Ollama error ${i.status}: ${u}`)}let s=await i.json();return{text:s.message.content.trim(),inputTokens:s.prompt_eval_count||H(t),outputTokens:s.eval_count||H(s.message.content),model:o}}async function ip({existing:t,clack:e}){let r=t.OLLAMA_HOST||"http://localhost:11434",o=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(o)?null:{env:{OLLAMA_HOST:o||r}}}var ap,kn=c(()=>{_();ue();ap={id:"ollama",label:"Ollama",hint:"local models \u2014 no API cost"}});function ke(t,e){if(e<1)return[];let r=[];for(let o=0;o<t.length;o+=e)r.push(t.slice(o,o+e));return r}var $r=c(()=>{});var Bn={};b(Bn,{embedBatch:()=>cp});async function cp(t,{model:e,ollamaHost:r}){let o=ke(t,sp),n=[];for(let a of o){let i=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:e,input:a})});if(!i.ok)throw new Error(`Ollama embed failed: ${i.status} ${await i.text()}`);let s=await i.json();n.push(...s.embeddings)}return n}var sp,Fn=c(()=>{$r();sp=50});var $n={};b($n,{embedBatch:()=>up});async function up(t,{model:e,openaiApiKey:r,dimensions:o}={}){let n={model:e,input:t};o&&/^text-embedding-3/.test(e)&&(n.dimensions=o);let a=await fetch("https://api.openai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(n)});if(!a.ok)throw new Error(`OpenAI embed failed: ${a.status} ${await a.text()}`);return(await a.json()).data.map(s=>s.embedding)}var Un=c(()=>{});var jn={};b(jn,{embedBatch:()=>lp});async function lp(t,{model:e,voyageApiKey:r,inputType:o="document",dimensions:n}={}){if(!r)throw new Error("VOYAGE_API_KEY is not set. Get one at dashboard.voyageai.com.");let a=ke(t,fp),i=[];for(let s of a){let u={input:s,model:e||"voyage-3-large",input_type:o==="query"?"query":"document"};n&&(u.output_dimension=n);let f=await fetch("https://api.voyageai.com/v1/embeddings",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify(u)});if(!f.ok){let d=await f.text();throw new Error(`Voyage embed failed: ${f.status} ${d}`)}let h=[...(await f.json()).data].sort((d,y)=>d.index-y.index);i.push(...h.map(d=>d.embedding))}return i}var fp,Hn=c(()=>{$r();fp=50});var Gn={};b(Gn,{embedBatch:()=>dp});async function dp(t,{model:e,openrouterApiKey:r,openrouterBaseUrl:o,openrouterReferer:n,openrouterTitle:a,dimensions:i}={}){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 s={model:e,input:t};i&&/(^|\/)text-embedding-3/.test(e)&&(s.dimensions=i);let u=(o||pp).replace(/\/+$/,""),f={"Content-Type":"application/json",Authorization:`Bearer ${r}`};n&&(f["HTTP-Referer"]=n),a&&(f["X-Title"]=a);let l=await fetch(`${u}/embeddings`,{method:"POST",headers:f,body:JSON.stringify(s)});if(!l.ok)throw new Error(`OpenRouter embed failed: ${l.status} ${await l.text()}`);return[...(await l.json()).data].sort((y,g)=>y.index-g.index).map(y=>y.embedding)}var pp,Wn=c(()=>{pp="https://openrouter.ai/api/v1"});import{spawn as mp}from"node:child_process";async function Gr(t){if(!Ur[t]){let e=Hr[t];if(!e)throw new Error(`Unknown LLM provider: "${t}". Available: ${Object.keys(Hr).join(", ")}`);let r=await e();Ur[t]=r.chat}return Ur[t]}async function Yn(t){if(!jr[t]){let e=Kn[t];if(!e)throw new Error(`Unknown embedding provider: "${t}". Available: ${Object.keys(Kn).join(", ")}`);let r=await e();jr[t]=r.embedBatch}return jr[t]}function qn(t,e){if(!t)return{provider:e,model:null};let r=t.indexOf(":");return r>0&&Hr[t.slice(0,r)]?{provider:t.slice(0,r),model:t.slice(r+1)}:{provider:e,model:t}}async function Jn(){let t=p.llm.ollamaHost||p.embedding.ollamaHost||"http://localhost:11434";try{return(await fetch(`${t}/api/tags`,{signal:AbortSignal.timeout(2e3)})).ok}catch{return!1}}function hp(){return new Promise(t=>{let e=mp("claude",["--version"],{stdio:"pipe"});e.on("error",()=>t(!1)),e.on("close",r=>t(r===0)),setTimeout(()=>{e.kill(),t(!1)},3e3)})}async function Vn(){if(M)return M;if(p.llm.provider)return M=p.llm.provider,M;if(p.llm.openrouterApiKey)return M="openrouter",M;if(p.llm.apiKey)return M="anthropic",M;if(p.llm.openaiApiKey)return M="openai",M;if(await Jn())return M="ollama",M;if(await hp())return M="claude-cli",M;throw new Error(`No LLM provider available. Either:
25
+ - Set LLM_PROVIDER (openai, anthropic, openrouter, ollama, claude-cli)
26
+ - Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY
27
+ - Start Ollama locally
28
+ - Install the Claude CLI (claude)`)}async function zn(){if(F)return F;if(p.embedding.provider)return F=p.embedding.provider,F;if(p.embedding.voyageApiKey)return F="voyage",F;if(await Jn())return F="ollama",F;if(p.embedding.openaiApiKey)return F="openai",F;if(p.embedding.openrouterApiKey)return F="openrouter",F;throw new Error(`No embedding provider available. Either:
29
+ - Set EMBEDDING_PROVIDER (voyage, ollama, openai, openrouter)
30
+ - Set VOYAGE_API_KEY (recommended \u2014 best quality)
31
+ - Start Ollama locally
32
+ - Set OPENAI_API_KEY
33
+ - Set OPENROUTER_API_KEY (and EMBEDDING_MODEL like "openai/text-embedding-3-large")`)}var Hr,Kn,Ur,jr,M,F,Wr=c(()=>{_();Hr={openai:()=>Promise.resolve().then(()=>(In(),On)),anthropic:()=>Promise.resolve().then(()=>(Cn(),vn)),openrouter:()=>Promise.resolve().then(()=>(Dn(),Nn)),"claude-cli":()=>Promise.resolve().then(()=>(Rn(),Ln)),ollama:()=>Promise.resolve().then(()=>(kn(),Mn))},Kn={ollama:()=>Promise.resolve().then(()=>(Fn(),Bn)),openai:()=>Promise.resolve().then(()=>(Un(),$n)),voyage:()=>Promise.resolve().then(()=>(Hn(),jn)),openrouter:()=>Promise.resolve().then(()=>(Wn(),Gn))},Ur={},jr={};M=null,F=null});var Zn={};b(Zn,{parseJson:()=>Be,prompt:()=>ht,promptJson:()=>yt});async function Xn(t){let e=await Vn();return qn(t,e)}async function ht(t,{model:e,caller:r}={}){let{provider:o,model:n}=await Xn(e),a=await Gr(o),i=Date.now();try{let s=await Br(()=>a(t,{model:n,jsonMode:!1}),p.llm.maxRetries),u=s.cost||kr(s.model,s.inputTokens,s.outputTokens);return ce({provider:o,model:s.model,caller:r,input:t,response:s.text,inputTokens:s.inputTokens,outputTokens:s.outputTokens,cost:u,durationMs:Date.now()-i,status:"success"}),s.text}catch(s){throw ce({provider:o,model:n,caller:r,input:t,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-i,status:"error",error:s.message}),s}}async function yt(t,{model:e,caller:r}={}){let{provider:o,model:n}=await Xn(e),a=await Gr(o),i=Date.now();try{let s=await Br(()=>a(t,{model:n,jsonMode:!0}),p.llm.maxRetries),u=s.cost||kr(s.model,s.inputTokens,s.outputTokens);return ce({provider:o,model:s.model,caller:r,input:t,response:s.text,inputTokens:s.inputTokens,outputTokens:s.outputTokens,cost:u,durationMs:Date.now()-i,status:"success"}),Be(s.text)}catch(s){throw ce({provider:o,model:n,caller:r,input:t,response:null,inputTokens:0,outputTokens:0,cost:0,durationMs:Date.now()-i,status:"error",error:s.message}),s}}function Be(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 rt=c(()=>{_();Wr();ue()});var ea={};b(ea,{_reset:()=>vp,activeKinds:()=>Sp,get:()=>Ap,getSchemaDoc:()=>Ip,list:()=>Tp,register:()=>Kr,validateAttrs:()=>Op});import{readFile as Qn}from"node:fs/promises";import{fileURLToPath as yp}from"node:url";import{dirname as gp,join as ta}from"node:path";function Kr(t){for(let e of wp)if(!t[e])throw new Error(`Pod kind missing required field: ${e}`);if(t.visibility&&!xp.has(t.visibility))throw new Error(`Pod kind ${t.name}: invalid visibility ${t.visibility}`);if(t.activeMode&&!_p.has(t.activeMode))throw new Error(`Pod kind ${t.name}: invalid activeMode ${t.activeMode}`);if(t.writePolicy&&!Ep.has(t.writePolicy))throw new Error(`Pod kind ${t.name}: invalid writePolicy ${t.writePolicy}`);fe.set(t.name,bp(t))}function bp(t){return{visibility:"private",activeMode:"multi-active",hotContextBudget:0,retrievalWeights:{recency:1,relevance:1},importanceDefault:2,ttlDays:null,writePolicy:"origin-only",lifecycle:{},...t}}function Ap(t){return fe.get(t)||null}function Tp(){return Array.from(fe.values())}async function Sp(t={}){let e=[];for(let r of fe.values())if(typeof r.resolveActiveScope=="function")try{let o=await r.resolveActiveScope(t);Array.isArray(o)&&o.length>0&&e.push({kind:r,scope:o})}catch{}return e}function Op(t,e={}){if(!t||!t.attrsSchema)return{valid:!0};let r=[];for(let[o,n]of Object.entries(t.attrsSchema)){let a=e[o];if(a==null)continue;let i=Array.isArray(a)?"array":typeof a;n!==i&&r.push(`attr "${o}" expected ${n}, got ${i}`)}return r.length?{valid:!1,errors:r}:{valid:!0}}async function Ip(t){if(!t)return null;let e=ta(Xo,`${t.name}.md`);try{return await Qn(e,"utf8")}catch{}if(!t.schemaDocPath)return null;let r=gp(yp(import.meta.url)),o=ta(r,t.schemaDocPath);try{return await Qn(o,"utf8")}catch{return null}}function vp(){fe.clear()}var wp,xp,_p,Ep,fe,Yr=c(()=>{J();wp=["name"],xp=new Set(["private","shared","public"]),_p=new Set(["singleton-live","multi-active","rolling-window","always"]),Ep=new Set(["origin-only","shared-allowlist","open"]),fe=new Map});var Cp,ra,qr=c(()=>{I();_();Cp=1440*60*1e3,ra={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||p.defaults.namespace;try{let r=new Date(Date.now()-Cp);return(await m("pod as p").join("pod_membership as pm","pm.pod_id","p.id").join("fact_lifecycle as fl","fl.fact_id","pm.member_id").where("pm.memberType","fact").where("p.podType","person").where("p.namespace",e).where("p.status","active").where("fl.lastAccessedAt",">=",r).distinct("p.uid")).map(n=>n.uid)}catch{return[]}}}});var na={};b(na,{POD_TYPE:()=>Vr,deriveProjectRoot:()=>Zr,ensureProjectPod:()=>Xr,formatForDisplay:()=>Lp,membership:()=>Pt,projectKind:()=>zr});import{execFileSync as Np}from"node:child_process";import{basename as oa}from"node:path";async function Xr({cwd:t,namespace:e=null}){if(!t)return null;let r=Zr(t),o=e||p.defaults.namespace,a=(r!==t?!1:Jr(t)===t)?r:Jr(t),{pod:i}=await At({podType:Vr,externalId:r,name:oa(r)||r,namespace:o,attrs:{root_path:r,git_root:a||null,display_name:oa(r)||r,discovered_at:new Date().toISOString()},startedAt:new Date});return i}function Zr(t){return Jr(t)||t}function Jr(t){try{return Np("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}async function Dp(){try{let{getActiveCursor:t}=await Promise.resolve().then(()=>(vt(),Ne));return(await t())?.cwd||null}catch{return null}}function Lp(t){let e=Rp(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 Rp(t){if(!t)return{};if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{}}}var Vr,zr,Fe=c(()=>{mt();se();_();Vr="project",zr={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 Dp();if(!e)return[];try{let r=t.namespace||p.defaults.namespace,o=Zr(e),n=await St({podType:Vr,externalId:o,namespace:r});return n?[n.uid]:[]}catch{return[]}}}});async function kp(t){if(t.project)return t.project;if(!t.cwd)try{let{getActiveCursor:e}=await Promise.resolve().then(()=>(vt(),Ne)),r=await e();t={...t,cwd:r?.cwd}}catch{return null}if(!t.cwd)return null;try{let{deriveProjectRoot:e}=await Promise.resolve().then(()=>(Fe(),na)),r=e(t.cwd);return r?r.split("/").pop():null}catch{return null}}function Bp(t){if(!t)return{};if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{}}}var Mp,aa,ia=c(()=>{I();_();Mp="playbook",aa={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||p.defaults.namespace,r=await kp(t);try{let n=await m("pod").where({podType:Mp,namespace:e,status:"active"}).select("uid","attrs");return r?n.filter(i=>{let s=Bp(i.attrs);return!s.project||s.project===r}).map(i=>i.uid):n.map(i=>i.uid)}catch{return[]}}}});var Fp,sa,ca=c(()=>{I();_();Fp=["__virtual:vital__"],sa={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()=>Fp,fetchFacts:async(t={},{slots:e=8,namespace:r}={})=>{let o=r||t.namespace||p.defaults.namespace;return m("fact as f").leftJoin("fact_lifecycle as fl","fl.fact_id","f.id").where({"f.status":"active","f.namespace":o}).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 la={};b(la,{registerBuiltins:()=>fa});function fa(){if(!ua){for(let t of $p)Kr(t);ua=!0}}var $p,ua,pa=c(()=>{Yr();Cr();qr();Fe();ia();ca();$p=[mn,zr,ra,aa,sa],ua=!1;fa()});var da={};b(da,{ensureActivePodsForHook:()=>Up});async function Up({sessionId:t,cwd:e=null,transcriptPath:r=null,model:o=null,namespace:n=null}){let a=null;if(t)try{a=await Nr({sessionId:t,transcriptPath:r,cwd:e,model:o,namespace:n})}catch{a=null}let i=null;if(e)try{i=await Xr({cwd:e,namespace:n})}catch{i=null}let s=[a,i].filter(Boolean).map(u=>u.uid);return{sessionPod:a,projectPod:i,podUids:s}}var ma=c(()=>{vt();Fe()});function ha(t){let e=t.split(`
34
+ `),r=[],o=null,n=[];for(let s of e){let u=s.match(/^(#{1,6})\s+(.+)/);u?(n.length&&r.push({heading:o||"Introduction",text:n.join(`
35
+ `).trim()}),o=u[2].trim(),n=[]):n.push(s)}n.length&&r.push({heading:o||"Content",text:n.join(`
36
+ `).trim()});let a=r.map(s=>s.text).join(`
37
+
38
+ `),i=jp(e)||null;return{text:a,sections:r,metadata:{title:i}}}function jp(t){for(let e of t){let r=e.match(/^#\s+(.+)/);if(r)return r[1].trim()}return null}var ya=c(()=>{});function Qr(t){let e=t.split(/\n{2,}/).map(o=>o.trim()).filter(Boolean),r=e.length>1?e.map((o,n)=>({heading:`Section ${n+1}`,text:o})):[{heading:"Content",text:t.trim()}];return{text:t.trim(),sections:r,metadata:{}}}var ga=c(()=>{});function wa(t){let e=Hp(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,`
39
+ `),r=r.replace(/<br\s*\/?>/gi,`
40
+ `),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,`
41
+
42
+ `),r=r.trim(),{text:r,sections:[{heading:"Content",text:r}],metadata:{title:e}}}function Hp(t){let e=t.match(/<title[^>]*>([\s\S]*?)<\/title>/i);return e?e[1].trim():null}var xa=c(()=>{});function _a(t,{language:e}={}){let r=e||Yp(t),o=Gp(t,r);return{text:t.trim(),sections:o,metadata:{language:r}}}function Gp(t,e){let r=t.split(`
43
+ `),o=[],n="Header",a=[],i=!1,s=0;for(let u of r){let f=Wp(u,e);f&&s===0?(a.length&&o.push({heading:n,text:a.join(`
44
+ `).trim()}),n=f,a=[u],i=!0):a.push(u);for(let l of u)l==="{"&&s++,l==="}"&&(s=Math.max(0,s-1))}return a.length&&o.push({heading:n,text:a.join(`
45
+ `).trim()}),o.length<=1?Kp(t):o.filter(u=>u.text)}function Wp(t,e){let r=t.trim(),o=[/^(?: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+)/],a=[/^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/,/^type\s+(\w+)/],i=[...o,...n,...a];for(let s of i){let u=r.match(s);if(u)return u[1]||u[0].slice(0,40)}return null}function Kp(t){return t.split(/\n{2,}/).map((r,o)=>({heading:`Block ${o+1}`,text:r.trim()})).filter(r=>r.text)}function Yp(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 Ea=c(()=>{});function ba(t){let e;try{e=typeof t=="string"?JSON.parse(t):t}catch{return{text:t,sections:[{heading:"Content",text:t}],metadata:{}}}let r=to(e);return{text:r,sections:[{heading:"Content",text:r}],metadata:{}}}function to(t,e=0){if(t==null)return"";if(Array.isArray(t))return t.map((r,o)=>typeof r=="object"&&r!==null?`Item ${o+1}:
46
+ ${to(r,e+1)}`:`- ${r}`).join(`
47
+ `);if(typeof t=="object"){let r=" ".repeat(e);return Object.entries(t).filter(([,o])=>o!=null).map(([o,n])=>typeof n=="object"?`${r}${o}:
48
+ ${to(n,e+1)}`:`${r}${o}: ${n}`).join(`
49
+ `)}return String(t)}var Aa=c(()=>{});function Ta(t,{format:e,filePath:r,contentType:o}={}){let n=e||zp(o)||Xp(r)||Zp(t);return(Vp[n]||Qr)(t)}function zp(t){if(!t)return null;let e=t.split(";")[0].trim();return Jp[e]||null}function Xp(t){if(!t)return null;let e=t.match(/\.[^.]+$/)?.[0]?.toLowerCase();return e&&qp[e]||null}function Zp(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 qp,Jp,Vp,Sa=c(()=>{ya();ga();xa();Ea();Aa();qp={".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"},Jp={"text/markdown":"markdown","text/html":"html","text/plain":"text","application/json":"json","text/javascript":"code","application/javascript":"code","text/x-python":"code"},Vp={markdown:ha,text:Qr,html:wa,code:_a,json:ba}});function Qp(t,{maxTokens:e=512,overlapTokens:r=50}={}){if(!t?.trim())return[];let o=e*4,n=r*4;if(t.length<=o)return[{content:t.trim(),index:0}];let a=td(t),i=[],s="",u="";for(let f of a){if(f.length>o){s.trim()&&(i.push({content:s.trim(),index:i.length}),u=eo(s,n),s="");let l=ed(f,o,n);for(let h of l)i.push({content:h.trim(),index:i.length});u=eo(i[i.length-1].content,n);continue}(s+f).length>o?(i.push({content:s.trim(),index:i.length}),u=eo(s,n),s=u+f):s+=f}return s.trim()&&i.push({content:s.trim(),index:i.length}),i}function Oa(t,e={}){let r=[];for(let{heading:o,text:n}of t){if(!n?.trim())continue;let a=Qp(n,e);for(let i of a)r.push({content:i.content,index:r.length,sectionHeading:o})}return r}function td(t){return t.split(/(?<=[.!?])\s+|(?<=\n)\s*/).filter(r=>r.trim())}function ed(t,e,r){let o=[],n=0;for(;n<t.length;){let a=Math.min(n+e,t.length);if(o.push(t.slice(n,a)),n=a-r,n>=t.length)break}return o}function eo(t,e){if(t.length<=e)return t;let r=t.slice(-e),o=r.search(/[.!?]\s+/);return o!==-1?r.slice(o+1).trimStart():r}var Ia=c(()=>{});function $(t){return t?`[${t.join(",")}]`:null}function va(){let t=Number(p.embedding.dimensions)||768;if(!Number.isInteger(t)||t<=0)throw new Error(`Invalid EMBEDDING_DIMENSIONS: ${p.embedding.dimensions}`);return t}function Dt(t="embedding"){return`(${t}::halfvec(${va()}))`}function Lt(){return`?::halfvec(${va()})`}var Rt=c(()=>{_()});import{createHash as rd}from"node:crypto";function nd(t,e,r,o="document"){let n=rd("sha256");return n.update(t),n.update("\0"),n.update(e),n.update("\0"),n.update(o),n.update("\0"),n.update(r),n.digest("hex")}async function ad(t){if(!t.length)return new Map;let e=await m("embedding_cache").whereIn("key",t).select("key","embedding");return new Map(e.map(r=>[r.key,id(r.embedding)]))}function id(t){return Array.isArray(t)||typeof t!="string"?t:(t.startsWith("[")?t.slice(1,-1):t).split(",").map(Number)}async function sd(t){t.length&&await m("embedding_cache").whereIn("key",t).update({hits:m.raw("hits + 1"),lastUsedAt:m.fn.now()})}async function cd(t,e,r){if(t.length){for(let{key:o,embedding:n}of t)await m.raw(`
50
+ INSERT INTO embedding_cache (key, provider, model, embedding, hits, created_at, last_used_at)
51
+ VALUES (?, ?, ?, ?, 0, NOW(), NOW())
52
+ ON CONFLICT (key) DO UPDATE
53
+ SET last_used_at = NOW(),
54
+ hits = embedding_cache.hits + 1
55
+ `,[o,e,r,$(n)]);await fd()}}async function fd(){let t=Date.now();if(t-Pa<ud)return;Pa=t;let[{count:e}]=await m("embedding_cache").count("key as count"),r=Number(e);if(r<=Ca)return;let o=Math.min(r-Ca,od);await m.raw(`
56
+ DELETE FROM embedding_cache WHERE key IN (
57
+ SELECT key FROM embedding_cache ORDER BY last_used_at ASC LIMIT ?
58
+ )
59
+ `,[o])}async function Na(t,e,r,o,n,a={}){if(!t.length)return[];let i=a.inputType||n?.inputType||"document",s=t.map(y=>nd(e,r,y,i)),u=await ad(s),f=[],l=[],h=new Array(t.length);for(let y=0;y<t.length;y++){let g=u.get(s[y]);g?h[y]=g:(f.push(t[y]),l.push(y))}if(f.length){let y=await o(f,n),g=[];for(let w=0;w<f.length;w++){let x=l[w];h[x]=y[w],g.push({key:s[x],embedding:y[w]})}cd(g,e,r).catch(w=>{process.stderr.write(`[embedding-cache] store failed: ${w.message}
60
+ `)})}let d=s.filter(y=>u.has(y));return d.length&&sd(d).catch(()=>{}),h}var Ca,od,Pa,ud,Da=c(()=>{Rt();I();Ca=1e4,od=500;Pa=0,ud=6e4});async function $e(t,e={}){let[r]=await le([t],e);return r}async function le(t,{inputType:e="document"}={}){if(!t.length)return[];let r=await zn(),o=await Yn(r),n=p.embedding.model,a={...p.embedding,inputType:e};return Na(t,r,n,o,a,{inputType:e})}var mE,Ue=c(()=>{_();Wr();Da();({dimensions:mE}=p.embedding)});import{readFile as ld}from"node:fs/promises";import{join as pd}from"node:path";async function La(t,e,{title:r}){if(!t.length)return t;let o=await ld(dd,"utf8"),n=t.map((i,s)=>`Chunk ${s+1}: ${i.content.slice(0,200)}`),a=`${o}
61
+
62
+ ---
63
+
64
+ **Document title:** ${r}
65
+
66
+ **Full document:**
67
+ ${e.slice(0,8e3)}
68
+
69
+ **Chunks (${t.length}):**
70
+ ${n.join(`
71
+ `)}
72
+
73
+ ---
74
+
75
+ Respond with a JSON array of ${t.length} context prefix strings.`;try{let i=await yt(a,{model:p.llm.extractionModel,caller:"contextualizer"}),s=Array.isArray(i)?i:i&&typeof i=="object"?Object.values(i).find(f=>Array.isArray(f))??null:null;if(!s)return console.warn("[contextualizer] LLM did not return an array \u2014 skipping"),t;let u=s;return u.length!==t.length&&console.warn(`[contextualizer] Got ${u.length} prefixes for ${t.length} chunks \u2014 using partial`),t.map((f,l)=>({...f,contextualPrefix:typeof u[l]=="string"?u[l]:null}))}catch(i){return console.error("[contextualizer] Failed:",i.message),t}}var dd,Ra=c(()=>{rt();_();J();dd=pd(q,"chunk-context.md")});async function Ma({sourcePath:t,sourceType:e,title:r=null,contentHash:o,namespace:n}){let a=`doc-${Z(16)}`,{rows:[i]}=await m.raw(`
76
+ INSERT INTO document (uid, source_path, source_type, title, content_hash, namespace, last_ingested_at, created_at, updated_at)
77
+ VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), NOW())
78
+ ON CONFLICT (source_path, namespace) DO UPDATE SET
79
+ title = EXCLUDED.title,
80
+ content_hash = EXCLUDED.content_hash,
81
+ last_ingested_at = NOW(),
82
+ updated_at = NOW()
83
+ RETURNING *, (xmax = 0) AS "isNew", content_hash != ? AS "contentChanged"
84
+ `,[a,t,e,r,o,n,o]),u=i.isNew||i.contentChanged;return{doc:i,changed:u}}async function ro(t,{chunkCount:e,factCount:r}){await m("document").where({id:t}).update({chunkCount:e,factCount:r})}async function ka(t){await m("document").where({id:t}).update({contentHash:null})}async function Ba(t,e,r=null){if(!e&&!r)return;let o={};e&&Object.keys(e).length&&(o.sourceMetadata=JSON.stringify(e)),r&&(o.connectionId=r),Object.keys(o).length&&await m("document").where({id:t}).update(o)}var Fa=c(()=>{ne();I()});async function $a(t,e,r){if(await m("chunk").where({documentId:t}).del(),!e.length)return[];let o=e.map((a,i)=>({documentId:t,chunkIndex:i,content:a.content,contextualPrefix:a.contextualPrefix||null,sectionHeading:a.sectionHeading||null,namespace:r,embedding:$(a.embedding)})),n=await m("chunk").insert(o).returning("*");return await m.raw(`
85
+ UPDATE chunk
86
+ SET search_vector = to_tsvector('english', COALESCE(contextual_prefix, '') || ' ' || content)
87
+ WHERE document_id = ?
88
+ `,[t]),n}var Ua=c(()=>{I();Rt()});var yd,je,oo=c(()=>{yd=typeof global=="object"&&global&&global.Object===Object&&global,je=yd});var gd,wd,C,V=c(()=>{oo();gd=typeof self=="object"&&self&&self.Object===Object&&self,wd=je||gd||Function("return this")(),C=wd});var xd,L,Mt=c(()=>{V();xd=C.Symbol,L=xd});function bd(t){var e=_d.call(t,pe),r=t[pe];try{t[pe]=void 0;var o=!0}catch{}var n=Ed.call(t);return o&&(e?t[pe]=r:delete t[pe]),n}var ja,_d,Ed,pe,Ha,Ga=c(()=>{Mt();ja=Object.prototype,_d=ja.hasOwnProperty,Ed=ja.toString,pe=L?L.toStringTag:void 0;Ha=bd});function Sd(t){return Td.call(t)}var Ad,Td,Wa,Ka=c(()=>{Ad=Object.prototype,Td=Ad.toString;Wa=Sd});function vd(t){return t==null?t===void 0?Id:Od:Ya&&Ya in Object(t)?Ha(t):Wa(t)}var Od,Id,Ya,G,kt=c(()=>{Mt();Ga();Ka();Od="[object Null]",Id="[object Undefined]",Ya=L?L.toStringTag:void 0;G=vd});function Cd(t){return t!=null&&typeof t=="object"}var W,Bt=c(()=>{W=Cd});function Nd(t){return typeof t=="symbol"||W(t)&&G(t)==Pd}var Pd,K,Ft=c(()=>{kt();Bt();Pd="[object Symbol]";K=Nd});function Dd(t,e){for(var r=-1,o=t==null?0:t.length,n=Array(o);++r<o;)n[r]=e(t[r],r,t);return n}var $t,no=c(()=>{$t=Dd});var Ld,A,U=c(()=>{Ld=Array.isArray,A=Ld});function Va(t){if(typeof t=="string")return t;if(A(t))return $t(t,Va)+"";if(K(t))return Ja?Ja.call(t):"";var e=t+"";return e=="0"&&1/t==-Rd?"-0":e}var Rd,qa,Ja,za,Xa=c(()=>{Mt();no();U();Ft();Rd=1/0,qa=L?L.prototype:void 0,Ja=qa?qa.toString:void 0;za=Va});function kd(t){for(var e=t.length;e--&&Md.test(t.charAt(e)););return e}var Md,Za,Qa=c(()=>{Md=/\s/;Za=kd});function Fd(t){return t&&t.slice(0,Za(t)+1).replace(Bd,"")}var Bd,ti,ei=c(()=>{Qa();Bd=/^\s+/;ti=Fd});function $d(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Y,Ut=c(()=>{Y=$d});function Wd(t){if(typeof t=="number")return t;if(K(t))return ri;if(Y(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Y(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=ti(t);var r=jd.test(t);return r||Hd.test(t)?Gd(t.slice(2),r?2:8):Ud.test(t)?ri:+t}var ri,Ud,jd,Hd,Gd,oi,ni=c(()=>{ei();Ut();Ft();ri=NaN,Ud=/^[-+]0x[0-9a-f]+$/i,jd=/^0b[01]+$/i,Hd=/^0o[0-7]+$/i,Gd=parseInt;oi=Wd});function Yd(t){if(!t)return t===0?t:0;if(t=oi(t),t===ai||t===-ai){var e=t<0?-1:1;return e*Kd}return t===t?t:0}var ai,Kd,ii,si=c(()=>{ni();ai=1/0,Kd=17976931348623157e292;ii=Yd});function qd(t){var e=ii(t),r=e%1;return e===e?r?e-r:e:0}var ci,ui=c(()=>{si();ci=qd});function Jd(t){return t}var ot,de=c(()=>{ot=Jd});function Qd(t){if(!Y(t))return!1;var e=G(t);return e==zd||e==Xd||e==Vd||e==Zd}var Vd,zd,Xd,Zd,He,ao=c(()=>{kt();Ut();Vd="[object AsyncFunction]",zd="[object Function]",Xd="[object GeneratorFunction]",Zd="[object Proxy]";He=Qd});var tm,Ge,fi=c(()=>{V();tm=C["__core-js_shared__"],Ge=tm});function em(t){return!!li&&li in t}var li,pi,di=c(()=>{fi();li=(function(){var t=/[^.]+$/.exec(Ge&&Ge.keys&&Ge.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();pi=em});function nm(t){if(t!=null){try{return om.call(t)}catch{}try{return t+""}catch{}}return""}var rm,om,Q,io=c(()=>{rm=Function.prototype,om=rm.toString;Q=nm});function pm(t){if(!Y(t)||pi(t))return!1;var e=He(t)?lm:im;return e.test(Q(t))}var am,im,sm,cm,um,fm,lm,mi,hi=c(()=>{ao();di();Ut();io();am=/[\\^$.*+?()[\]{}|]/g,im=/^\[object .+?Constructor\]$/,sm=Function.prototype,cm=Object.prototype,um=sm.toString,fm=cm.hasOwnProperty,lm=RegExp("^"+um.call(fm).replace(am,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");mi=pm});function dm(t,e){return t?.[e]}var yi,gi=c(()=>{yi=dm});function mm(t,e){var r=yi(t,e);return mi(r)?r:void 0}var k,nt=c(()=>{hi();gi();k=mm});var hm,We,wi=c(()=>{nt();V();hm=k(C,"WeakMap"),We=hm});function ym(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 xi,_i=c(()=>{xi=ym});function gm(){}var Ei,bi=c(()=>{Ei=gm});function Em(t){var e=0,r=0;return function(){var o=_m(),n=xm-(o-r);if(r=o,n>0){if(++e>=wm)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var wm,xm,_m,Ai,Ti=c(()=>{wm=800,xm=16,_m=Date.now;Ai=Em});function bm(t){return function(){return t}}var Si,Oi=c(()=>{Si=bm});var Am,jt,so=c(()=>{nt();Am=(function(){try{var t=k(Object,"defineProperty");return t({},"",{}),t}catch{}})(),jt=Am});var Tm,Ii,vi=c(()=>{Oi();so();de();Tm=jt?function(t,e){return jt(t,"toString",{configurable:!0,enumerable:!1,value:Si(e),writable:!0})}:ot,Ii=Tm});var Sm,Ci,Pi=c(()=>{vi();Ti();Sm=Ai(Ii),Ci=Sm});function Om(t,e,r,o){for(var n=t.length,a=r+(o?1:-1);o?a--:++a<n;)if(e(t[a],a,t))return a;return-1}var Ni,Di=c(()=>{Ni=Om});function Im(t){return t!==t}var Li,Ri=c(()=>{Li=Im});function vm(t,e,r){for(var o=r-1,n=t.length;++o<n;)if(t[o]===e)return o;return-1}var Mi,ki=c(()=>{Mi=vm});function Cm(t,e,r){return e===e?Mi(t,e,r):Ni(t,Li,r)}var Bi,Fi=c(()=>{Di();Ri();ki();Bi=Cm});function Pm(t,e){var r=t==null?0:t.length;return!!r&&Bi(t,e,0)>-1}var $i,Ui=c(()=>{Fi();$i=Pm});function Lm(t,e){var r=typeof t;return e=e??Nm,!!e&&(r=="number"||r!="symbol"&&Dm.test(t))&&t>-1&&t%1==0&&t<e}var Nm,Dm,Ht,Ke=c(()=>{Nm=9007199254740991,Dm=/^(?:0|[1-9]\d*)$/;Ht=Lm});function Rm(t,e,r){e=="__proto__"&&jt?jt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var ji,Hi=c(()=>{so();ji=Rm});function Mm(t,e){return t===e||t!==t&&e!==e}var Gt,Ye=c(()=>{Gt=Mm});function km(t,e,r){return e=Gi(e===void 0?t.length-1:e,0),function(){for(var o=arguments,n=-1,a=Gi(o.length-e,0),i=Array(a);++n<a;)i[n]=o[e+n];n=-1;for(var s=Array(e+1);++n<e;)s[n]=o[n];return s[e]=r(i),xi(t,this,s)}}var Gi,Wi,Ki=c(()=>{_i();Gi=Math.max;Wi=km});function Bm(t,e){return Ci(Wi(t,e,ot),t+"")}var Yi,qi=c(()=>{de();Ki();Pi();Yi=Bm});function $m(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=Fm}var Fm,Wt,qe=c(()=>{Fm=9007199254740991;Wt=$m});function Um(t){return t!=null&&Wt(t.length)&&!He(t)}var at,me=c(()=>{ao();qe();at=Um});function jm(t,e,r){if(!Y(r))return!1;var o=typeof e;return(o=="number"?at(r)&&Ht(e,r.length):o=="string"&&e in r)?Gt(r[e],t):!1}var he,co=c(()=>{Ye();me();Ke();Ut();he=jm});function Gm(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||Hm;return t===r}var Hm,Ji,Vi=c(()=>{Hm=Object.prototype;Ji=Gm});function Wm(t,e){for(var r=-1,o=Array(t);++r<t;)o[r]=e(r);return o}var zi,Xi=c(()=>{zi=Wm});function Ym(t){return W(t)&&G(t)==Km}var Km,uo,Zi=c(()=>{kt();Bt();Km="[object Arguments]";uo=Ym});var Qi,qm,Jm,Vm,Kt,Je=c(()=>{Zi();Bt();Qi=Object.prototype,qm=Qi.hasOwnProperty,Jm=Qi.propertyIsEnumerable,Vm=uo((function(){return arguments})())?uo:function(t){return W(t)&&qm.call(t,"callee")&&!Jm.call(t,"callee")},Kt=Vm});function zm(){return!1}var ts,es=c(()=>{ts=zm});var ns,rs,Xm,os,Zm,Qm,ye,fo=c(()=>{V();es();ns=typeof exports=="object"&&exports&&!exports.nodeType&&exports,rs=ns&&typeof module=="object"&&module&&!module.nodeType&&module,Xm=rs&&rs.exports===ns,os=Xm?C.Buffer:void 0,Zm=os?os.isBuffer:void 0,Qm=Zm||ts,ye=Qm});function Th(t){return W(t)&&Wt(t.length)&&!!E[G(t)]}var th,eh,rh,oh,nh,ah,ih,sh,ch,uh,fh,lh,ph,dh,mh,hh,yh,gh,wh,xh,_h,Eh,bh,Ah,E,as,is=c(()=>{kt();qe();Bt();th="[object Arguments]",eh="[object Array]",rh="[object Boolean]",oh="[object Date]",nh="[object Error]",ah="[object Function]",ih="[object Map]",sh="[object Number]",ch="[object Object]",uh="[object RegExp]",fh="[object Set]",lh="[object String]",ph="[object WeakMap]",dh="[object ArrayBuffer]",mh="[object DataView]",hh="[object Float32Array]",yh="[object Float64Array]",gh="[object Int8Array]",wh="[object Int16Array]",xh="[object Int32Array]",_h="[object Uint8Array]",Eh="[object Uint8ClampedArray]",bh="[object Uint16Array]",Ah="[object Uint32Array]",E={};E[hh]=E[yh]=E[gh]=E[wh]=E[xh]=E[_h]=E[Eh]=E[bh]=E[Ah]=!0;E[th]=E[eh]=E[dh]=E[rh]=E[mh]=E[oh]=E[nh]=E[ah]=E[ih]=E[sh]=E[ch]=E[uh]=E[fh]=E[lh]=E[ph]=!1;as=Th});function Sh(t){return function(e){return t(e)}}var Ve,lo=c(()=>{Ve=Sh});var ss,ge,Oh,po,Ih,mo,cs=c(()=>{oo();ss=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ge=ss&&typeof module=="object"&&module&&!module.nodeType&&module,Oh=ge&&ge.exports===ss,po=Oh&&je.process,Ih=(function(){try{var t=ge&&ge.require&&ge.require("util").types;return t||po&&po.binding&&po.binding("util")}catch{}})(),mo=Ih});var us,vh,ze,ho=c(()=>{is();lo();cs();us=mo&&mo.isTypedArray,vh=us?Ve(us):as,ze=vh});function Nh(t,e){var r=A(t),o=!r&&Kt(t),n=!r&&!o&&ye(t),a=!r&&!o&&!n&&ze(t),i=r||o||n||a,s=i?zi(t.length,String):[],u=s.length;for(var f in t)(e||Ph.call(t,f))&&!(i&&(f=="length"||n&&(f=="offset"||f=="parent")||a&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||Ht(f,u)))&&s.push(f);return s}var Ch,Ph,fs,ls=c(()=>{Xi();Je();U();fo();Ke();ho();Ch=Object.prototype,Ph=Ch.hasOwnProperty;fs=Nh});function Dh(t,e){return function(r){return t(e(r))}}var ps,ds=c(()=>{ps=Dh});var Lh,ms,hs=c(()=>{ds();Lh=ps(Object.keys,Object),ms=Lh});function kh(t){if(!Ji(t))return ms(t);var e=[];for(var r in Object(t))Mh.call(t,r)&&r!="constructor"&&e.push(r);return e}var Rh,Mh,ys,gs=c(()=>{Vi();hs();Rh=Object.prototype,Mh=Rh.hasOwnProperty;ys=kh});function Bh(t){return at(t)?fs(t):ys(t)}var Yt,Xe=c(()=>{ls();gs();me();Yt=Bh});function Uh(t,e){if(A(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||K(t)?!0:$h.test(t)||!Fh.test(t)||e!=null&&t in Object(e)}var Fh,$h,qt,Ze=c(()=>{U();Ft();Fh=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$h=/^\w*$/;qt=Uh});var jh,tt,we=c(()=>{nt();jh=k(Object,"create"),tt=jh});function Hh(){this.__data__=tt?tt(null):{},this.size=0}var ws,xs=c(()=>{we();ws=Hh});function Gh(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var _s,Es=c(()=>{_s=Gh});function qh(t){var e=this.__data__;if(tt){var r=e[t];return r===Wh?void 0:r}return Yh.call(e,t)?e[t]:void 0}var Wh,Kh,Yh,bs,As=c(()=>{we();Wh="__lodash_hash_undefined__",Kh=Object.prototype,Yh=Kh.hasOwnProperty;bs=qh});function zh(t){var e=this.__data__;return tt?e[t]!==void 0:Vh.call(e,t)}var Jh,Vh,Ts,Ss=c(()=>{we();Jh=Object.prototype,Vh=Jh.hasOwnProperty;Ts=zh});function Zh(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=tt&&e===void 0?Xh:e,this}var Xh,Os,Is=c(()=>{we();Xh="__lodash_hash_undefined__";Os=Zh});function Jt(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var o=t[e];this.set(o[0],o[1])}}var yo,vs=c(()=>{xs();Es();As();Ss();Is();Jt.prototype.clear=ws;Jt.prototype.delete=_s;Jt.prototype.get=bs;Jt.prototype.has=Ts;Jt.prototype.set=Os;yo=Jt});function Qh(){this.__data__=[],this.size=0}var Cs,Ps=c(()=>{Cs=Qh});function ty(t,e){for(var r=t.length;r--;)if(Gt(t[r][0],e))return r;return-1}var it,xe=c(()=>{Ye();it=ty});function oy(t){var e=this.__data__,r=it(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():ry.call(e,r,1),--this.size,!0}var ey,ry,Ns,Ds=c(()=>{xe();ey=Array.prototype,ry=ey.splice;Ns=oy});function ny(t){var e=this.__data__,r=it(e,t);return r<0?void 0:e[r][1]}var Ls,Rs=c(()=>{xe();Ls=ny});function ay(t){return it(this.__data__,t)>-1}var Ms,ks=c(()=>{xe();Ms=ay});function iy(t,e){var r=this.__data__,o=it(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}var Bs,Fs=c(()=>{xe();Bs=iy});function Vt(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var o=t[e];this.set(o[0],o[1])}}var st,_e=c(()=>{Ps();Ds();Rs();ks();Fs();Vt.prototype.clear=Cs;Vt.prototype.delete=Ns;Vt.prototype.get=Ls;Vt.prototype.has=Ms;Vt.prototype.set=Bs;st=Vt});var sy,ct,Qe=c(()=>{nt();V();sy=k(C,"Map"),ct=sy});function cy(){this.size=0,this.__data__={hash:new yo,map:new(ct||st),string:new yo}}var $s,Us=c(()=>{vs();_e();Qe();$s=cy});function uy(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var js,Hs=c(()=>{js=uy});function fy(t,e){var r=t.__data__;return js(e)?r[typeof e=="string"?"string":"hash"]:r.map}var ut,Ee=c(()=>{Hs();ut=fy});function ly(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e}var Gs,Ws=c(()=>{Ee();Gs=ly});function py(t){return ut(this,t).get(t)}var Ks,Ys=c(()=>{Ee();Ks=py});function dy(t){return ut(this,t).has(t)}var qs,Js=c(()=>{Ee();qs=dy});function my(t,e){var r=ut(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}var Vs,zs=c(()=>{Ee();Vs=my});function zt(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var o=t[e];this.set(o[0],o[1])}}var gt,tr=c(()=>{Us();Ws();Ys();Js();zs();zt.prototype.clear=$s;zt.prototype.delete=Gs;zt.prototype.get=Ks;zt.prototype.has=qs;zt.prototype.set=Vs;gt=zt});function go(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(hy);var r=function(){var o=arguments,n=e?e.apply(this,o):o[0],a=r.cache;if(a.has(n))return a.get(n);var i=t.apply(this,o);return r.cache=a.set(n,i)||a,i};return r.cache=new(go.Cache||gt),r}var hy,Xs,Zs=c(()=>{tr();hy="Expected a function";go.Cache=gt;Xs=go});function gy(t){var e=Xs(t,function(o){return r.size===yy&&r.clear(),o}),r=e.cache;return e}var yy,Qs,tc=c(()=>{Zs();yy=500;Qs=gy});var wy,xy,_y,ec,rc=c(()=>{tc();wy=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xy=/\\(\\)?/g,_y=Qs(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(wy,function(r,o,n,a){e.push(n?a.replace(xy,"$1"):o||r)}),e}),ec=_y});function Ey(t){return t==null?"":za(t)}var oc,nc=c(()=>{Xa();oc=Ey});function by(t,e){return A(t)?t:qt(t,e)?[t]:ec(oc(t))}var er,wo=c(()=>{U();Ze();rc();nc();er=by});function Ty(t){if(typeof t=="string"||K(t))return t;var e=t+"";return e=="0"&&1/t==-Ay?"-0":e}var Ay,ft,be=c(()=>{Ft();Ay=1/0;ft=Ty});function Sy(t,e){e=er(e,t);for(var r=0,o=e.length;t!=null&&r<o;)t=t[ft(e[r++])];return r&&r==o?t:void 0}var Xt,rr=c(()=>{wo();be();Xt=Sy});function Oy(t,e,r){var o=t==null?void 0:Xt(t,e);return o===void 0?r:o}var ac,ic=c(()=>{rr();ac=Oy});function Iy(t,e){for(var r=-1,o=e.length,n=t.length;++r<o;)t[n+r]=e[r];return t}var or,xo=c(()=>{or=Iy});function vy(t){return A(t)||Kt(t)||!!(sc&&t&&t[sc])}var sc,cc,uc=c(()=>{Mt();Je();U();sc=L?L.isConcatSpreadable:void 0;cc=vy});function fc(t,e,r,o,n){var a=-1,i=t.length;for(r||(r=cc),n||(n=[]);++a<i;){var s=t[a];e>0&&r(s)?e>1?fc(s,e-1,r,o,n):or(n,s):o||(n[n.length]=s)}return n}var lc,pc=c(()=>{xo();uc();lc=fc});function Cy(t,e,r){var o=-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 a=Array(n);++o<n;)a[o]=t[o+e];return a}var dc,mc=c(()=>{dc=Cy});function Dy(t,e,r){(r?he(t,e,r):e===void 0)?e=1:e=Ny(ci(e),0);var o=t==null?0:t.length;if(!o||e<1)return[];for(var n=0,a=0,i=Array(Py(o/e));n<o;)i[a++]=dc(t,n,n+=e);return i}var Py,Ny,_o,hc=c(()=>{mc();co();ui();Py=Math.ceil,Ny=Math.max;_o=Dy});function Ly(){this.__data__=new st,this.size=0}var yc,gc=c(()=>{_e();yc=Ly});function Ry(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var wc,xc=c(()=>{wc=Ry});function My(t){return this.__data__.get(t)}var _c,Ec=c(()=>{_c=My});function ky(t){return this.__data__.has(t)}var bc,Ac=c(()=>{bc=ky});function Fy(t,e){var r=this.__data__;if(r instanceof st){var o=r.__data__;if(!ct||o.length<By-1)return o.push([t,e]),this.size=++r.size,this;r=this.__data__=new gt(o)}return r.set(t,e),this.size=r.size,this}var By,Tc,Sc=c(()=>{_e();Qe();tr();By=200;Tc=Fy});function Zt(t){var e=this.__data__=new st(t);this.size=e.size}var Qt,Eo=c(()=>{_e();gc();xc();Ec();Ac();Sc();Zt.prototype.clear=yc;Zt.prototype.delete=wc;Zt.prototype.get=_c;Zt.prototype.has=bc;Zt.prototype.set=Tc;Qt=Zt});function $y(t,e){for(var r=-1,o=t==null?0:t.length,n=0,a=[];++r<o;){var i=t[r];e(i,r,t)&&(a[n++]=i)}return a}var Oc,Ic=c(()=>{Oc=$y});function Uy(){return[]}var vc,Cc=c(()=>{vc=Uy});var jy,Hy,Pc,Gy,Nc,Dc=c(()=>{Ic();Cc();jy=Object.prototype,Hy=jy.propertyIsEnumerable,Pc=Object.getOwnPropertySymbols,Gy=Pc?function(t){return t==null?[]:(t=Object(t),Oc(Pc(t),function(e){return Hy.call(t,e)}))}:vc,Nc=Gy});function Wy(t,e,r){var o=e(t);return A(t)?o:or(o,r(t))}var Lc,Rc=c(()=>{xo();U();Lc=Wy});function Ky(t){return Lc(t,Yt,Nc)}var bo,Mc=c(()=>{Rc();Dc();Xe();bo=Ky});var Yy,nr,kc=c(()=>{nt();V();Yy=k(C,"DataView"),nr=Yy});var qy,ar,Bc=c(()=>{nt();V();qy=k(C,"Promise"),ar=qy});var Jy,lt,Ao=c(()=>{nt();V();Jy=k(C,"Set"),lt=Jy});var Fc,Vy,$c,Uc,jc,Hc,zy,Xy,Zy,Qy,tg,wt,To,Gc=c(()=>{kc();Qe();Bc();Ao();wi();kt();io();Fc="[object Map]",Vy="[object Object]",$c="[object Promise]",Uc="[object Set]",jc="[object WeakMap]",Hc="[object DataView]",zy=Q(nr),Xy=Q(ct),Zy=Q(ar),Qy=Q(lt),tg=Q(We),wt=G;(nr&&wt(new nr(new ArrayBuffer(1)))!=Hc||ct&&wt(new ct)!=Fc||ar&&wt(ar.resolve())!=$c||lt&&wt(new lt)!=Uc||We&&wt(new We)!=jc)&&(wt=function(t){var e=G(t),r=e==Vy?t.constructor:void 0,o=r?Q(r):"";if(o)switch(o){case zy:return Hc;case Xy:return Fc;case Zy:return $c;case Qy:return Uc;case tg:return jc}return e});To=wt});var eg,So,Wc=c(()=>{V();eg=C.Uint8Array,So=eg});function og(t){return this.__data__.set(t,rg),this}var rg,Kc,Yc=c(()=>{rg="__lodash_hash_undefined__";Kc=og});function ng(t){return this.__data__.has(t)}var qc,Jc=c(()=>{qc=ng});function ir(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new gt;++e<r;)this.add(t[e])}var sr,Oo=c(()=>{tr();Yc();Jc();ir.prototype.add=ir.prototype.push=Kc;ir.prototype.has=qc;sr=ir});function ag(t,e){for(var r=-1,o=t==null?0:t.length;++r<o;)if(e(t[r],r,t))return!0;return!1}var Vc,zc=c(()=>{Vc=ag});function ig(t,e){return t.has(e)}var cr,Io=c(()=>{cr=ig});function ug(t,e,r,o,n,a){var i=r&sg,s=t.length,u=e.length;if(s!=u&&!(i&&u>s))return!1;var f=a.get(t),l=a.get(e);if(f&&l)return f==e&&l==t;var h=-1,d=!0,y=r&cg?new sr:void 0;for(a.set(t,e),a.set(e,t);++h<s;){var g=t[h],w=e[h];if(o)var x=i?o(w,g,h,e,t,a):o(g,w,h,t,e,a);if(x!==void 0){if(x)continue;d=!1;break}if(y){if(!Vc(e,function(S,D){if(!cr(y,D)&&(g===S||n(g,S,r,o,a)))return y.push(D)})){d=!1;break}}else if(!(g===w||n(g,w,r,o,a))){d=!1;break}}return a.delete(t),a.delete(e),d}var sg,cg,ur,vo=c(()=>{Oo();zc();Io();sg=1,cg=2;ur=ug});function fg(t){var e=-1,r=Array(t.size);return t.forEach(function(o,n){r[++e]=[n,o]}),r}var Xc,Zc=c(()=>{Xc=fg});function lg(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}var te,fr=c(()=>{te=lg});function Sg(t,e,r,o,n,a,i){switch(r){case Tg:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case Ag:return!(t.byteLength!=e.byteLength||!a(new So(t),new So(e)));case mg:case hg:case wg:return Gt(+t,+e);case yg:return t.name==e.name&&t.message==e.message;case xg:case Eg:return t==e+"";case gg:var s=Xc;case _g:var u=o&pg;if(s||(s=te),t.size!=e.size&&!u)return!1;var f=i.get(t);if(f)return f==e;o|=dg,i.set(t,e);var l=ur(s(t),s(e),o,n,a,i);return i.delete(t),l;case bg:if(Co)return Co.call(t)==Co.call(e)}return!1}var pg,dg,mg,hg,yg,gg,wg,xg,_g,Eg,bg,Ag,Tg,Qc,Co,tu,eu=c(()=>{Mt();Wc();Ye();vo();Zc();fr();pg=1,dg=2,mg="[object Boolean]",hg="[object Date]",yg="[object Error]",gg="[object Map]",wg="[object Number]",xg="[object RegExp]",_g="[object Set]",Eg="[object String]",bg="[object Symbol]",Ag="[object ArrayBuffer]",Tg="[object DataView]",Qc=L?L.prototype:void 0,Co=Qc?Qc.valueOf:void 0;tu=Sg});function Cg(t,e,r,o,n,a){var i=r&Og,s=bo(t),u=s.length,f=bo(e),l=f.length;if(u!=l&&!i)return!1;for(var h=u;h--;){var d=s[h];if(!(i?d in e:vg.call(e,d)))return!1}var y=a.get(t),g=a.get(e);if(y&&g)return y==e&&g==t;var w=!0;a.set(t,e),a.set(e,t);for(var x=i;++h<u;){d=s[h];var S=t[d],D=e[d];if(o)var v=i?o(D,S,d,e,t,a):o(S,D,d,t,e,a);if(!(v===void 0?S===D||n(S,D,r,o,a):v)){w=!1;break}x||(x=d=="constructor")}if(w&&!x){var T=t.constructor,O=e.constructor;T!=O&&"constructor"in t&&"constructor"in e&&!(typeof T=="function"&&T instanceof T&&typeof O=="function"&&O instanceof O)&&(w=!1)}return a.delete(t),a.delete(e),w}var Og,Ig,vg,ru,ou=c(()=>{Mc();Og=1,Ig=Object.prototype,vg=Ig.hasOwnProperty;ru=Cg});function Dg(t,e,r,o,n,a){var i=A(t),s=A(e),u=i?au:To(t),f=s?au:To(e);u=u==nu?lr:u,f=f==nu?lr:f;var l=u==lr,h=f==lr,d=u==f;if(d&&ye(t)){if(!ye(e))return!1;i=!0,l=!1}if(d&&!l)return a||(a=new Qt),i||ze(t)?ur(t,e,r,o,n,a):tu(t,e,u,r,o,n,a);if(!(r&Pg)){var y=l&&iu.call(t,"__wrapped__"),g=h&&iu.call(e,"__wrapped__");if(y||g){var w=y?t.value():t,x=g?e.value():e;return a||(a=new Qt),n(w,x,r,o,a)}}return d?(a||(a=new Qt),ru(t,e,r,o,n,a)):!1}var Pg,nu,au,lr,Ng,iu,su,cu=c(()=>{Eo();vo();eu();ou();Gc();U();fo();ho();Pg=1,nu="[object Arguments]",au="[object Array]",lr="[object Object]",Ng=Object.prototype,iu=Ng.hasOwnProperty;su=Dg});function uu(t,e,r,o,n){return t===e?!0:t==null||e==null||!W(t)&&!W(e)?t!==t&&e!==e:su(t,e,r,o,uu,n)}var pr,Po=c(()=>{cu();Bt();pr=uu});function Mg(t,e,r,o){var n=r.length,a=n,i=!o;if(t==null)return!a;for(t=Object(t);n--;){var s=r[n];if(i&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++n<a;){s=r[n];var u=s[0],f=t[u],l=s[1];if(i&&s[2]){if(f===void 0&&!(u in t))return!1}else{var h=new Qt;if(o)var d=o(f,l,u,t,e,h);if(!(d===void 0?pr(l,f,Lg|Rg,o,h):d))return!1}}return!0}var Lg,Rg,fu,lu=c(()=>{Eo();Po();Lg=1,Rg=2;fu=Mg});function kg(t){return t===t&&!Y(t)}var dr,No=c(()=>{Ut();dr=kg});function Bg(t){for(var e=Yt(t),r=e.length;r--;){var o=e[r],n=t[o];e[r]=[o,n,dr(n)]}return e}var pu,du=c(()=>{No();Xe();pu=Bg});function Fg(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var mr,Do=c(()=>{mr=Fg});function $g(t){var e=pu(t);return e.length==1&&e[0][2]?mr(e[0][0],e[0][1]):function(r){return r===t||fu(r,t,e)}}var mu,hu=c(()=>{lu();du();Do();mu=$g});function Ug(t,e){return t!=null&&e in Object(t)}var yu,gu=c(()=>{yu=Ug});function jg(t,e,r){e=er(e,t);for(var o=-1,n=e.length,a=!1;++o<n;){var i=ft(e[o]);if(!(a=t!=null&&r(t,i)))break;t=t[i]}return a||++o!=n?a:(n=t==null?0:t.length,!!n&&Wt(n)&&Ht(i,n)&&(A(t)||Kt(t)))}var wu,xu=c(()=>{wo();Je();U();Ke();qe();be();wu=jg});function Hg(t,e){return t!=null&&wu(t,e,yu)}var _u,Eu=c(()=>{gu();xu();_u=Hg});function Kg(t,e){return qt(t)&&dr(e)?mr(ft(t),e):function(r){var o=ac(r,t);return o===void 0&&o===e?_u(r,t):pr(e,o,Gg|Wg)}}var Gg,Wg,bu,Au=c(()=>{Po();ic();Eu();Ze();No();Do();be();Gg=1,Wg=2;bu=Kg});function Yg(t){return function(e){return e?.[t]}}var Tu,Su=c(()=>{Tu=Yg});function qg(t){return function(e){return Xt(e,t)}}var Ou,Iu=c(()=>{rr();Ou=qg});function Jg(t){return qt(t)?Tu(ft(t)):Ou(t)}var vu,Cu=c(()=>{Su();Iu();Ze();be();vu=Jg});function Vg(t){return typeof t=="function"?t:t==null?ot:typeof t=="object"?A(t)?bu(t[0],t[1]):mu(t):vu(t)}var pt,Ae=c(()=>{hu();Au();de();U();Cu();pt=Vg});function zg(t,e,r,o){for(var n=-1,a=t==null?0:t.length;++n<a;){var i=t[n];e(o,i,r(i),t)}return o}var Pu,Nu=c(()=>{Pu=zg});function Xg(t){return function(e,r,o){for(var n=-1,a=Object(e),i=o(e),s=i.length;s--;){var u=i[t?s:++n];if(r(a[u],u,a)===!1)break}return e}}var Du,Lu=c(()=>{Du=Xg});var Zg,Ru,Mu=c(()=>{Lu();Zg=Du(),Ru=Zg});function Qg(t,e){return t&&Ru(t,e,Yt)}var ku,Bu=c(()=>{Mu();Xe();ku=Qg});function tw(t,e){return function(r,o){if(r==null)return r;if(!at(r))return t(r,o);for(var n=r.length,a=e?n:-1,i=Object(r);(e?a--:++a<n)&&o(i[a],a,i)!==!1;);return r}}var Fu,$u=c(()=>{me();Fu=tw});var ew,hr,Lo=c(()=>{Bu();$u();ew=Fu(ku),hr=ew});function rw(t,e,r,o){return hr(t,function(n,a,i){e(o,n,r(n),i)}),o}var Uu,ju=c(()=>{Lo();Uu=rw});function ow(t,e){return function(r,o){var n=A(r)?Pu:Uu,a=e?e():{};return n(r,t,pt(o,2),a)}}var Hu,Gu=c(()=>{Nu();ju();Ae();U();Hu=ow});function nw(t,e,r){for(var o=-1,n=t==null?0:t.length;++o<n;)if(r(e,t[o]))return!0;return!1}var Wu,Ku=c(()=>{Wu=nw});function aw(t,e){var r=-1,o=at(t)?Array(t.length):[];return hr(t,function(n,a,i){o[++r]=e(n,a,i)}),o}var Yu,qu=c(()=>{Lo();me();Yu=aw});var iw,sw,cw,Ro,Ju=c(()=>{Hi();Gu();iw=Object.prototype,sw=iw.hasOwnProperty,cw=Hu(function(t,e,r){sw.call(t,r)?t[r].push(e):ji(t,r,[e])}),Ro=cw});function uw(t,e){for(var r,o=-1,n=t.length;++o<n;){var a=e(t[o]);a!==void 0&&(r=r===void 0?a:r+a)}return r}var Vu,zu=c(()=>{Vu=uw});function fw(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var Xu,Zu=c(()=>{Xu=fw});function lw(t,e){if(t!==e){var r=t!==void 0,o=t===null,n=t===t,a=K(t),i=e!==void 0,s=e===null,u=e===e,f=K(e);if(!s&&!f&&!a&&t>e||a&&i&&u&&!s&&!f||o&&i&&u||!r&&u||!n)return 1;if(!o&&!a&&!f&&t<e||f&&r&&n&&!o&&!a||s&&r&&n||!i&&n||!u)return-1}return 0}var Qu,tf=c(()=>{Ft();Qu=lw});function pw(t,e,r){for(var o=-1,n=t.criteria,a=e.criteria,i=n.length,s=r.length;++o<i;){var u=Qu(n[o],a[o]);if(u){if(o>=s)return u;var f=r[o];return u*(f=="desc"?-1:1)}}return t.index-e.index}var ef,rf=c(()=>{tf();ef=pw});function dw(t,e,r){e.length?e=$t(e,function(a){return A(a)?function(i){return Xt(i,a.length===1?a[0]:a)}:a}):e=[ot];var o=-1;e=$t(e,Ve(pt));var n=Yu(t,function(a,i,s){var u=$t(e,function(f){return f(a)});return{criteria:u,index:++o,value:a}});return Xu(n,function(a,i){return ef(a,i,r)})}var of,nf=c(()=>{no();rr();Ae();qu();Zu();lo();rf();de();U();of=dw});var mw,Mo,af=c(()=>{pc();nf();qi();co();mw=Yi(function(t,e){if(t==null)return[];var r=e.length;return r>1&&he(t,e[0],e[1])?e=[]:r>2&&he(e[0],e[1],e[2])&&(e=[e[0]]),of(t,lc(e,1),[])}),Mo=mw});function hw(t,e){return t&&t.length?Vu(t,pt(e,2)):0}var ko,sf=c(()=>{Ae();zu();ko=hw});var yw,gw,cf,uf=c(()=>{Ao();bi();fr();yw=1/0,gw=lt&&1/te(new lt([,-0]))[1]==yw?function(t){return new lt(t)}:Ei,cf=gw});function xw(t,e,r){var o=-1,n=$i,a=t.length,i=!0,s=[],u=s;if(r)i=!1,n=Wu;else if(a>=ww){var f=e?null:cf(t);if(f)return te(f);i=!1,n=cr,u=new sr}else u=e?[]:s;t:for(;++o<a;){var l=t[o],h=e?e(l):l;if(l=r||l!==0?l:0,i&&h===h){for(var d=u.length;d--;)if(u[d]===h)continue t;e&&u.push(h),s.push(l)}else n(u,h,r)||(u!==s&&u.push(h),s.push(l))}return s}var ww,ff,lf=c(()=>{Oo();Ui();Ku();Io();uf();fr();ww=200;ff=xw});function _w(t,e){return t&&t.length?ff(t,pt(e,2)):[]}var Bo,pf=c(()=>{Ae();lf();Bo=_w});var yr=c(()=>{hc();Ju();af();sf();pf();});import{readFile as Ew}from"node:fs/promises";function Aw(t){let e=[];return t.sectionHeading&&e.push(`[Section: ${t.sectionHeading}]`),t.contextualPrefix&&e.push(t.contextualPrefix),e.push(t.content),e.join(`
89
+ `)}function Tw(t,e,r){return`${t}
90
+
91
+ ---
92
+
93
+ ${e}
94
+
95
+ ---
96
+
97
+ Respond with ONLY a JSON array of facts. Each fact object must have exactly these fields:
98
+ - "content" (string): the atomic fact statement
99
+ - "category" (string): one of ${r.join(", ")}
100
+ - "confidence" (string): one of high, medium, low
101
+ - "importance" (string): "vital" if essential to understanding the topic, "supplementary" if supporting detail
102
+
103
+ Output the JSON array directly, no explanation or wrapping.`}function Sw(t,e){let r=Array.isArray(t)?t:Array.isArray(t?.facts)?t.facts:null;return r?r.filter(o=>o.content&&e.includes(o.category)&&["high","medium","low"].includes(o.confidence)).map(o=>({...o,importance:["vital","supplementary"].includes(o.importance)?o.importance:"supplementary"})):[]}async function Ow(t,e,r){let o=Aw(t),n=Tw(e,o,r),a=await yt(n,{model:p.llm.extractionModel,caller:"extractor"});return Sw(a,r).map(s=>({...s,sourceSection:t.sectionHeading||null}))}async function df(t,{promptPath:e,categories:r}){if(!t.length)return[];let o=await Ew(e,"utf8"),n=_o(t,bw),a=[];for(let i of n){let s=await Promise.all(i.map(u=>Ow(u,o,r).catch(f=>(console.error(`[extractor] chunk failed: ${f.message}`),[]))));a.push(...s.flat())}return a}var bw,mf=c(()=>{yr();rt();_();bw=5});import{readFile as Iw}from"node:fs/promises";import vw from"node:path";async function gf({content:t,category:e,confidence:r,importance:o,namespace:n,sourceDocumentIds:a,sourceSection:i,embedding:s}){let u=s||await $e(t),f=await Rw(u,{namespace:n});if(!f.length)return{action:"ADD",fact:await gr({content:t,category:e,confidence:r,importance:o,namespace:n,sourceDocumentIds:a,sourceSection:i,embedding:u})};let l=f[0];if(l.similarity>=Pw)return{action:"SKIP",existing:l};if(l.similarity>=yf){let d=await Nw(t,l.content);if(d==="UPDATE"){let y=await gr({content:t,category:e,confidence:r,importance:o,namespace:n,sourceDocumentIds:a,sourceSection:i,embedding:u});return await Lw(l.id,y.id),await hf({targetType:"fact",targetId:l.id,event:"UPDATE",oldContent:l.content,newContent:t,triggeredBy:`audm:sim=${l.similarity.toFixed(3)}`}),{action:"UPDATE",fact:y,supersededId:l.id}}if(d==="CONTRADICT"){let y=await gr({content:t,category:e,confidence:r,importance:o,namespace:n,sourceDocumentIds:a,sourceSection:i,embedding:u});return await Dw(l.id,y.id),await hf({targetType:"fact",targetId:l.id,event:"CONTRADICT",oldContent:l.content,newContent:t,triggeredBy:`audm:sim=${l.similarity.toFixed(3)}`}),{action:"CONTRADICT",fact:y,contradictedId:l.id}}}return{action:"ADD",fact:await gr({content:t,category:e,confidence:r,importance:o,namespace:n,sourceDocumentIds:a,sourceSection:i,embedding:u})}}async function Nw(t,e){let o=`${await Iw(Cw,"utf8")}
104
+
105
+ **EXISTING FACT:** ${e}
106
+
107
+ **NEW FACT:** ${t}`,a=(await ht(o,{model:p.llm.decisionModel,caller:"audm"})).trim().toUpperCase();return a.includes("UPDATE")?"UPDATE":a.includes("CONTRADICT")?"CONTRADICT":"ADD"}async function gr({content:t,category:e,confidence:r,importance:o,namespace:n,sourceDocumentIds:a,sourceSection:i,embedding:s}){let u=`fact-${Z(16)}`,[f]=await m("fact").insert({uid:u,content:t,category:e,confidence:r||"medium",importance:o||"supplementary",namespace:n,status:"active",sourceDocumentIds:a||[],sourceSection:i||null,embedding:$(s),validFrom:new Date}).returning("*");return await m.raw(`
108
+ UPDATE fact
109
+ SET search_vector = to_tsvector('english', content)
110
+ WHERE id = ?
111
+ `,[f.id]),f}async function Dw(t,e){await m("fact").where({id:t}).update({status:"contradicted",contradictedById:e,validUntil:m.fn.now()})}async function Lw(t,e){await m("fact").where({id:t}).update({status:"superseded",supersededById:e,validUntil:m.fn.now()})}async function Rw(t,{namespace:e,threshold:r=yf,limit:o=5}){let n=$(t),a=`${Dt("embedding")} <=> ${Lt()}`;return m.transaction(async i=>{await i.raw("SET LOCAL hnsw.ef_search = 40");let{rows:s}=await i.raw(`
112
+ SELECT id, uid, content, category, status,
113
+ 1 - (${a}) as similarity
114
+ FROM fact
115
+ WHERE namespace = ?
116
+ AND status = 'active'
117
+ AND embedding IS NOT NULL
118
+ AND 1 - (${a}) >= ?
119
+ ORDER BY ${a}
120
+ LIMIT ?
121
+ `,[n,e,n,r,n,o]);return s})}async function hf({targetType:t,targetId:e,event:r,oldContent:o,newContent:n,triggeredBy:a}){await m("history").insert({targetType:t,targetId:e,event:r,oldContent:o||null,newContent:n||null,triggeredBy:a||null})}var Cw,Pw,yf,wf=c(()=>{ne();I();Ue();rt();Rt();_();J();Cw=vw.join(q,"audm-decision.md"),Pw=p.memory.skipThreshold,yf=p.memory.ambiguousThreshold});var wr,Mw,FC,xf,Fo=c(()=>{wr={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"},Mw=["preference","opinion","personal","experience"],FC=Object.keys(wr).filter(t=>!Mw.includes(t)),xf=wr});import{readFile as kw}from"node:fs/promises";import{join as Bw}from"node:path";async function Ef(t,{title:e}={}){if(!t?.trim()||t.trim().length<$w)return{route:"noise",facts:[],entities:[],reasoning:"Empty or too short"};if(t.length>Uw)return{route:"knowledge",facts:[],entities:[],reasoning:"Long content \u2014 auto-routed to full pipeline"};let o=`${await kw(Fw,"utf8")}
122
+
123
+ ---
124
+
125
+ Title: ${e||"(none)"}
126
+ Input: ${t}
127
+
128
+ ---
129
+
130
+ 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 yt(o,{model:p.llm.extractionModel,caller:"classifier"});if(!n||!jw.includes(n.route))return _f("Invalid classification result");let a=Object.keys(xf),i=n.route==="thought"&&Array.isArray(n.facts)?n.facts.filter(s=>s.content&&a.includes(s.category)).map(s=>({...s,confidence:["high","medium","low"].includes(s.confidence)?s.confidence:"high",importance:["vital","supplementary"].includes(s.importance)?s.importance:"vital"})):[];return{route:n.route,facts:i,entities:Array.isArray(n.entities)?n.entities:[],reasoning:n.reasoning||""}}catch(n){return console.error("[input-classifier] Failed:",n.message),_f(n.message)}}function _f(t){return{route:"knowledge",facts:[],entities:[],reasoning:`Fallback \u2014 ${t}`}}var Fw,$w,Uw,jw,bf=c(()=>{rt();_();Fo();J();Fw=Bw(q,"input-classifier.md"),$w=3,Uw=2e3,jw=["thought","knowledge","noise"]});var Af={};b(Af,{findById:()=>et,findByName:()=>Te,findByUid:()=>Hw,findSimilar:()=>Gw,getCanonicalEntity:()=>_t,getEntityCount:()=>Yw,incrementMentionCount:()=>Se,insertEntity:()=>$o,listByType:()=>Kw,pushAlias:()=>xr,searchByName:()=>qw,updateDescription:()=>Ww,updateEntityTypes:()=>xt,updateName:()=>Uo});async function $o({name:t,entityType:e,description:r,namespace:o,externalId:n,embedding:a}){let i=`ent-${Z(16)}`,[s]=await m("entity").insert({uid:i,name:t,entityType:e,description:r||null,namespace:o||p.defaults.namespace,externalId:n||null,mentionCount:1,embedding:$(a)}).returning("*");return s}async function Te(t,e){let r=e||p.defaults.namespace,o=t.toLowerCase();return m("entity").where({namespace:r}).whereNull("mergedWith").where(function(){this.whereRaw("LOWER(name) = ?",[o]).orWhereRaw("aliases @> ARRAY[?]::text[]",[o])}).first()||null}async function xr(t,e){if(!e)return;let r=e.toLowerCase();await m.raw(`
131
+ UPDATE entity
132
+ SET aliases = (
133
+ SELECT ARRAY(SELECT DISTINCT unnest(aliases || ARRAY[?]::text[]))
134
+ )
135
+ WHERE id = ?
136
+ `,[r,t])}async function Uo(t,e){await m("entity").where({id:t}).update({name:e})}async function Hw(t){return m("entity").where({uid:t}).first()||null}async function et(t){return m("entity").where({id:t}).first()||null}async function Gw(t,{entityType:e,namespace:r,threshold:o=.85,limit:n=3}){let a=$(t),i=`${Dt("embedding")} <=> ${Lt()}`,{rows:s}=await m.raw(`
137
+ SELECT id, uid, name, entity_type AS "entityType", description,
138
+ mention_count AS "mentionCount",
139
+ 1 - (${i}) AS similarity
140
+ FROM entity
141
+ WHERE entity_type = ?
142
+ AND namespace = COALESCE(?, ?)
143
+ AND embedding IS NOT NULL
144
+ AND merged_with IS NULL
145
+ AND 1 - (${i}) >= ?
146
+ ORDER BY ${i}
147
+ LIMIT ?
148
+ `,[a,e,r,p.defaults.namespace,a,o,a,n]);return s}async function Se(t){await m("entity").where({id:t}).increment("mentionCount",1)}async function Ww(t,e){await m("entity").where({id:t}).update({description:e})}async function Kw(t,{namespace:e,limit:r=50}={}){let o=m("entity").where({entityType:t}).whereNull("mergedWith").orderBy("mentionCount","desc").limit(r);return e&&o.where({namespace:e}),o}async function Yw(t){let[{count:e}]=await m("entity").where({entityType:t}).whereNull("mergedWith").count("id as count");return Number(e)}async function qw(t,{entityType:e,namespace:r,limit:o=10}={}){let n=m("entity").whereRaw("LOWER(name) LIKE ?",[`%${t.toLowerCase()}%`]).whereNull("mergedWith").orderBy("mentionCount","desc").limit(o);return e&&n.where({entityType:e}),r&&n.where({namespace:r}),n}async function xt(t,e){let r=await et(t);if(!r)return;let o;try{o=r.entityTypes?JSON.parse(r.entityTypes):[r.entityType]}catch{o=[r.entityType]}o.includes(e)||(o.push(e),await m("entity").where({id:t}).update({entityTypes:JSON.stringify(o)}))}async function _t(t){let e=await et(t);for(;e?.mergedWith;)e=await et(e.mergedWith);return e}var _r=c(()=>{ne();I();Rt();_()});async function Tf(t,e,{namespace:r,threshold:o=Jw,limit:n=5}){if(!e)return[];let a=$(e),i=`${Dt("embedding")} <=> ${Lt()}`,{rows:s}=await m.raw(`
149
+ SELECT id, name, entity_type AS "entityType", entity_types AS "entityTypes",
150
+ 1 - (${i}) AS similarity
151
+ FROM entity
152
+ WHERE namespace = ?
153
+ AND embedding IS NOT NULL
154
+ AND LOWER(name) != LOWER(?)
155
+ AND merged_with IS NULL
156
+ AND 1 - (${i}) >= ?
157
+ ORDER BY ${i}
158
+ LIMIT ?
159
+ `,[a,r,t,a,o,a,n]);return s.map(u=>{let f;try{f=u.entityTypes?JSON.parse(u.entityTypes):[u.entityType]}catch{f=[u.entityType]}return{...u,types:f}})}async function jo(t,e,r,o){let n=(r.aliases||[]).filter(Boolean),a=n.length?`Existing aliases: ${n.join(", ")}`:"",i=r.similarity>0?`Name-embedding similarity: ${(r.similarity*100).toFixed(0)}%`:"Name-embedding similarity: not directly measured (LLM judging on episode text alone)",s=o?`
160
+ Source passage where the new mention appeared:
161
+ ---
162
+ ${o.slice(0,1500)}
163
+ ---
164
+ `:"",u=`You're deciding whether two entity mentions refer to the same real-world thing, and whether the source passage indicates a RENAME.
165
+
166
+ Mention A (new): "${t}" (type: ${e})
167
+ Mention B (existing): "${r.name}" (types: ${(r.types||[r.entityType]).join(", ")})
168
+ ${a}
169
+ ${i}
170
+ ${s}
171
+ Decision rules:
172
+ - "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.
173
+ - "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.
174
+ - "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.
175
+ - If you cannot tell, "same" is false. Don't guess.
176
+
177
+ Respond as STRICT JSON, no markdown, no prose:
178
+ {"same": boolean, "rename": boolean, "current_name": "<one of A or B verbatim, or null>", "reason": "one short sentence"}`,f;try{f=await ht(u,{model:p.llm.entityModel,caller:"entity-matcher"})}catch{return{same:!1,rename:!1,reason:"llm-error"}}let l=Vw(f);return l&&typeof l.same=="boolean"?{same:l.same===!0,rename:l.rename===!0&&l.same===!0,currentName:typeof l.current_name=="string"?l.current_name:null,reason:typeof l.reason=="string"?l.reason:""}:{same:/^\s*(yes|true)\b/i.test(f),rename:!1,currentName:null,reason:"fallback-text-match"}}function Vw(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 Jw,Sf=c(()=>{I();rt();Rt();_();Jw=.85});var Of={};b(Of,{followMergeChain:()=>Qw,mergeEntities:()=>zw});async function zw(t,e){let[r,o]=await Promise.all([et(t),et(e)]);if(!r||!o)throw new Error(`Entity ${t} or ${e} not found`);if(t===e)return r;let n=(r.mentionCount||0)+(o.mentionCount||0);await m.transaction(async i=>{await i("relation").where({sourceId:e}).update({sourceId:t}),await i("relation").where({targetId:e}).update({targetId:t}),await i("relation").whereRaw("source_id = target_id").del(),await i.raw(`
179
+ INSERT INTO fact_entity (fact_id, entity_id, mention_type, mention_count, created_at, updated_at)
180
+ SELECT fact_id, ?, mention_type, mention_count, NOW(), NOW()
181
+ FROM fact_entity
182
+ WHERE entity_id = ?
183
+ ON CONFLICT (fact_id, entity_id, mention_type)
184
+ DO UPDATE SET mention_count = fact_entity.mention_count + EXCLUDED.mention_count
185
+ `,[t,e]),await i("fact_entity").where({entityId:e}).del(),await i("entity").where({id:t}).update({mentionCount:n}),await i("pod").where({entityId:t,status:"active"}).first()?await i("pod").where({entityId:e}).update({status:"archived",updatedAt:i.fn.now()}):await i("pod").where({entityId:e}).update({entityId:t,updatedAt:i.fn.now()}),await i("entity").where({id:e}).update({mergedWith:t})}),await Zw(t);let a=Xw(o);for(let i of a)await xt(t,i);return console.log(`[entity-merge] Merged ${e} (${o.name}) into ${t} (${r.name})`),{...r,mentionCount:n}}function Xw(t){if(!t.entityTypes)return[t.entityType];try{return JSON.parse(t.entityTypes)}catch{return[t.entityType]}}async function Zw(t){let e=await m("relation").where(function(){this.where({sourceId:t}).orWhere({targetId:t})}).whereNull("invalidAt"),r=Ro(e,o=>`${o.sourceId}-${o.targetId}-${o.relationType}`);for(let o of Object.values(r)){if(o.length<=1)continue;let[n,...a]=Mo(o,"id"),i=ko(o,"mentionCount");await m("relation").where({id:n.id}).update({mentionCount:i}),await m("relation").whereIn("id",a.map(s=>s.id)).del()}}async function Qw(t){let e=await et(t),r=[e?.id];for(;e?.mergedWith;)e=await et(e.mergedWith),e&&r.push(e.id);return{canonical:e,chain:r}}var If=c(()=>{yr();I();_r()});import{readFile as tx}from"node:fs/promises";async function Oe({name:t,entityType:e,description:r,namespace:o,externalId:n,embedding:a,episodeText:i,episodeEntityIds:s=[]}){let u=o||p.defaults.namespace,f=await Te(t,u);if(f)return f=await _t(f.id),await Se(f.id),f.entityType!==e&&await xt(f.id,e),f;let l=a||await $e(`${e}: ${t}`),h=await Tf(t,l,{namespace:u,limit:3});for(let g of h){let w=await jo(t,e,g,i);if(w.same)return vf(g,{newName:t,entityType:e,isRename:w.rename,currentName:w.currentName})}let d=new Set(h.map(g=>g.id)),y=s.filter(g=>g!=null&&!d.has(g));for(let g of y){let w=await _t(g);if(!w||w.namespace!==u||w.name?.toLowerCase()===t.toLowerCase())continue;let x=await jo(t,e,{...w,types:ex(w),similarity:0},i);if(x.same)return vf(w,{newName:t,entityType:e,isRename:x.rename,currentName:x.currentName})}try{return await $o({name:t,entityType:e,description:r,namespace:u,externalId:n,embedding:l})}catch(g){if(Cf(g)){let w=await Te(t,u);if(w){let x=await _t(w.id);return await Se(x.id),await xt(x.id,e),x}}throw g}}function Cf(t){return t?!!(t.code==="23505"||typeof t.message=="string"&&t.message.includes("duplicate key value violates unique constraint")):!1}async function vf(t,{newName:e,entityType:r,isRename:o,currentName:n}){let a=await _t(t.id);if(await Se(a.id),await xt(a.id,r),o&&a.name&&a.name.toLowerCase()!==e.toLowerCase()){let i=e.toLowerCase(),s=a.name.toLowerCase(),u=(n||"").toLowerCase(),f,l;if(u===i?(f=e,l=a.name):u===s?(f=a.name,l=e):(f=e,l=a.name),l&&l.toLowerCase()!==f.toLowerCase()&&(await xr(a.id,l),a.aliases=[...a.aliases||[],l.toLowerCase()]),f!==a.name)try{await Uo(a.id,f),a.name=f}catch(h){if(Cf(h)){let d=await Te(f,a.namespace);if(d&&d.id!==a.id){let{mergeEntities:y}=await Promise.resolve().then(()=>(If(),Of));return await y(d.id,a.id),await xr(d.id,a.name),await _t(d.id)}}throw h}}return a}function ex(t){if(t.entityTypes)try{return JSON.parse(t.entityTypes)}catch{}return[t.entityType]}async function Ho(t,{promptPath:e,namespace:r}){if(!t.length)return[];let o=t.map(d=>`- [${d.category}] ${d.content}`).join(`
186
+ `),a=`${await tx(e,"utf8")}
187
+
188
+ ---
189
+
190
+ ${o}`,i=await ht(a,{model:p.llm.entityModel,caller:"entity-resolver"}),s=Be(i);if(!Array.isArray(s))return[];let u=s.filter(d=>d.name);if(!u.length)return[];let f=new Array(u.length),l=[],h=[];for(let d=0;d<u.length;d++){let y=await rx(u[d].name,r);y?(f[d]=y,l.push(y.id)):h.push(d)}for(let d of h){let y=u[d],g=await Oe({name:y.name,entityType:"topic",description:y.description||null,namespace:r,episodeText:o,episodeEntityIds:l});f[d]=g,g?.id&&l.push(g.id)}return f.filter(Boolean)}async function rx(t,e){let{findByName:r,getCanonicalEntity:o,incrementMentionCount:n}=await Promise.resolve().then(()=>(_r(),Af)),a=await r(t,e);if(!a)return null;let i=await o(a.id);return await n(i.id),i}var Pf=c(()=>{Ue();rt();_();_r();Sf()});async function Er({sourceId:t,targetId:e,relationType:r,sourceFactId:o,validAt:n}){let{rows:[a]}=await m.raw(`
191
+ INSERT INTO relation (source_id, target_id, relation_type, source_fact_id, mention_count, valid_at, created_at, updated_at)
192
+ VALUES (?, ?, ?, ?, 1, ?, NOW(), NOW())
193
+ ON CONFLICT (source_id, target_id, relation_type) DO UPDATE SET
194
+ mention_count = relation.mention_count + 1,
195
+ source_fact_id = COALESCE(EXCLUDED.source_fact_id, relation.source_fact_id),
196
+ updated_at = NOW()
197
+ RETURNING *
198
+ `,[t,e,r,o||null,n||null]);return a}var Nf=c(()=>{I()});async function br(t,e){if(!e.length)return;let r=Bo(e,"id"),o=r.map(n=>({factId:t,entityId:n.id,mentionType:"content",mentionCount:1}));await m("fact_entity").insert(o).onConflict(m.raw("(fact_id, entity_id, mention_type)")).merge({mentionCount:m.raw("fact_entity.mention_count + 1")}),await ox(t,r)}async function ox(t,e){let r=e.map(n=>n.id).filter(Boolean);if(!r.length)return;let o=await m("pod").whereIn("entityId",r).where({status:"active"}).select("id");for(let{id:n}of o)await ie(n,t,"mention")}var Df=c(()=>{yr();I();se()});import nx from"node:path";async function Yo(t,e,r,o){let{title:n,sourceType:a,metadata:i={}}=t,s=e.filter(d=>d.action==="ADD"||d.action==="UPDATE"),u=s.map(d=>d.fact||d.existing).filter(Boolean),l=s.find(d=>d.fact)?.fact?.id||null,h=new Date().toISOString().split("T")[0];return o?.items?.length?ax({entityDefs:o,factObjects:u,firstFactId:l,namespace:r,today:h}):ix({title:n,sourceType:a,metadata:i,factObjects:u,firstFactId:l,namespace:r,today:h})}async function ax({entityDefs:t,factObjects:e,firstFactId:r,namespace:o,today:n}){let a={},i=0,s=e.map(d=>d.content).filter(Boolean).join(`
199
+ `),u=[];for(let d of t.items){let y=await Oe({name:d.name,entityType:d.type,description:d.description,namespace:o,episodeText:s,episodeEntityIds:u});a[d.name]=y,y?.id&&u.push(y.id)}for(let d of t.relations||[]){let y=a[d.source],g=a[d.target];if(!y||!g)continue;let w=Go(e,d.source)||Go(e,d.target);await Er({sourceId:y.id,targetId:g.id,relationType:d.type,sourceFactId:w?.id||r,validAt:n}),i++}let f=await Ko(e,o),l=Wo(Object.values(a),f),h=0;for(let d of e){let y=l.filter(g=>Ar(d.content,g));y.length&&(await br(d.id,y),h+=y.length)}return{entityCount:l.length,relationCount:i,factEntityLinks:h,topics:l.filter(d=>d.entityType==="topic").map(d=>d.name)}}async function ix({title:t,sourceType:e,metadata:r,factObjects:o,firstFactId:n,namespace:a,today:i}){if(!t){let x=o.length?await Ho(o,{promptPath:Lf,namespace:a}):[],S=await Ko(o,a),D=Wo(x,S),v=0;for(let T of o){let O=D.filter(ee=>Ar(T.content,ee));O.length&&(await br(T.id,O),v+=O.length)}return{entityCount:D.length,relationCount:0,factEntityLinks:v,topics:x.map(T=>T.name)}}let s=o.map(x=>x.content).filter(Boolean).join(`
200
+ `).slice(0,2e3),u=await Oe({name:t,entityType:"document",description:`${e} document: ${t}`,namespace:a,episodeText:s}),f=null;r.author&&(f=await Oe({name:r.author,entityType:"person",namespace:a,episodeText:s,episodeEntityIds:u?.id?[u.id]:[]}));let l=o.length?await Ho(o,{promptPath:Lf,namespace:a}):[],h=0;f&&(await Er({sourceId:u.id,targetId:f.id,relationType:"AUTHORED_BY",sourceFactId:n,validAt:i}),h++);for(let x of l){let S=Go(o,x.name);await Er({sourceId:u.id,targetId:x.id,relationType:"COVERS",sourceFactId:S?.id||n,validAt:i}),h++}let d=[u,f,...l].filter(Boolean),y=await Ko(o,a),g=Wo(d,y),w=0;for(let x of o){let S=g.filter(D=>Ar(x.content,D));S.length&&(await br(x.id,S),w+=S.length)}return{entityCount:g.length,relationCount:h,factEntityLinks:w,topics:l.map(x=>x.name)}}function Go(t,e){if(!e)return null;let r=e.toLowerCase();return t.find(o=>o.content?.toLowerCase().includes(r))||null}function Ar(t,e){if(!t||!e?.name)return!1;let r=t.toLowerCase();return[e.name.toLowerCase(),...e.aliases||[]].some(n=>n?new RegExp(`\\b${sx(n)}\\b`).test(r):!1)}function sx(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Wo(...t){let e=new Set,r=[];for(let o of t)for(let n of o)!n||e.has(n.id)||(e.add(n.id),r.push(n));return r}async function Ko(t,e){if(!t?.length)return[];let r=await m("entity as e").join("pod as p","p.entity_id","e.id").where("p.status","active").where("e.namespace",e).whereNull("e.mergedWith").select("e.id","e.uid","e.name","e.entityType","e.aliases");return r.length?r.filter(o=>t.some(n=>Ar(n.content,o))):[]}var Lf,Rf=c(()=>{Pf();Nf();Df();J();I();Lf=nx.join(q,"entity-extraction.md")});async function Mf(t,e){if(!t||typeof t!="object")return[];let r=[],o=e||p.defaults.namespace;if(t.slack?.team_id&&t.connection_id){let n=await St({podType:"connector_workspace",externalId:`slack:${t.slack.team_id}`,namespace:o});n&&r.push({podId:n.id,role:"primary"})}if(t.github?.org&&t.connection_id){let n=await St({podType:"connector_workspace",externalId:`github:${t.github.org}`,namespace:o});n&&r.push({podId:n.id,role:"primary"})}return r}var kf=c(()=>{mt();qr();_()});var $f={};b($f,{ingestDocument:()=>lx});import{createHash as cx}from"node:crypto";import{join as ux}from"node:path";async function lx({content:t,title:e,sourcePath:r,sourceType:o="raw",contentType:n,namespace:a,metadata:i={},promptPath:s,categories:u,entities:f,skipFacts:l=!1,skipEntities:h=!1,skipContextualization:d=!1,classify:y=!0,podUids:g=[],resolvePodsFrom:w=null}){let x=a||p.defaults.namespace,S=u||Object.keys(wr),D=s||fx,v=e||r,T=null;if(y&&(process.stderr.write(`[0/6] Classifying input...
201
+ `),T=await Ef(t,{title:v}),process.stderr.write(` Route: ${T.route} \u2014 ${T.reasoning}
202
+ `),T.route==="noise"))return process.stderr.write(` Skipped \u2014 classified as noise.
203
+ `),{documentId:null,title:v,skipped:!0,route:"noise"};process.stderr.write(`[1/6] Checking for changes...
204
+ `);let O=cx("sha256").update(t).digest("hex"),ee=r||`thought:${O}`,{doc:B,changed:Hf}=await Ma({sourcePath:ee,sourceType:o,title:v,contentHash:O,namespace:x});if(!Hf)return process.stderr.write(` Skipped \u2014 content unchanged.
205
+ `),{documentId:B.id,title:v,skipped:!0};i&&(Object.keys(i).length||i.connection_id)&&await Ba(B.id,i,i.connection_id??null);let Tr=await mx({podUids:g,resolvePodsFrom:w,metadata:i,namespace:x});for(let{podId:R,role:Et}of Tr)await Mr(R,B.id,Et);process.stderr.write(`[2/6] Parsing content...
206
+ `);let Sr=Ta(t,{format:i.format,filePath:r,contentType:n});if(v=e||Sr.metadata?.title||r,T?.route==="thought"&&T.facts.length){process.stderr.write(`[thought] Storing ${T.facts.length} facts directly...
207
+ `);let R=await px(T.facts,{documentId:B.id,namespace:x}),Et={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};return!h&&R.results.length&&(Et=await Yo({title:v,sourceType:o,metadata:i},R.results,x,f)),await ro(B.id,{chunkCount:0,factCount:R.counts.added}),await Bf(R.results,Tr),process.stderr.write(`Done. Route: thought, ${R.counts.total} facts (${R.counts.added} new)
208
+ `),{documentId:B.id,documentUid:B.uid,title:v,skipped:!1,route:"thought",chunkCount:0,facts:R.counts,entities:Et}}let j=[],z={counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]},re={entityCount:0,relationCount:0,factEntityLinks:0,topics:[]};try{process.stderr.write(`[3/6] Chunking and embedding...
209
+ `),j=Oa(Sr.sections),process.stderr.write(` ${j.length} chunks created
210
+ `),!d&&j.length&&(j=await La(j,Sr.text,{title:v}));let R=j.map(oe=>{let ve=oe.contextualPrefix;return ve?`${ve}
211
+ ${oe.content}`:oe.content}),Et=await le(R),Gf=j.map((oe,ve)=>({...oe,embedding:Et[ve]}));await $a(B.id,Gf,x),!l&&p.ingest.eagerExtract?(process.stderr.write(`[4/6] Extracting facts...
212
+ `),z=await dx(j,{documentId:B.id,namespace:x,promptPath:D,categories:S})):p.ingest.eagerExtract||process.stderr.write(`[4/6] Skipping fact extraction (SIGIL_EAGER_EXTRACT=false)
213
+ `),await ro(B.id,{chunkCount:j.length,factCount:z.counts.added+z.counts.updated+z.counts.contradicted}),await Bf(z.results,Tr),!h&&z.results.length&&(process.stderr.write(`[5/6] Linking entities...
214
+ `),re=await Yo({title:v,sourceType:o,metadata:i},z.results,x,f),process.stderr.write(` ${re.entityCount} entities, ${re.relationCount} relations
215
+ `))}catch(R){throw console.error(`[pipeline] Failed after document upsert: ${R.message}`),await ka(B.id).catch(()=>{}),R}return process.stderr.write(`Done. ${j.length} chunks, ${z.counts.total} facts, ${re.entityCount} entities
216
+ `),{documentId:B.id,documentUid:B.uid,title:v,skipped:!1,chunkCount:j.length,facts:z.counts,entities:re}}async function Ff(t,{documentId:e,namespace:r,embeddings:o,defaultConfidence:n="medium",defaultImportance:a="supplementary"}){let i={total:t.length,added:0,skipped:0,updated:0,contradicted:0},s=[];for(let u=0;u<t.length;u++){let f=t[u],l=await gf({content:f.content,category:f.category,confidence:f.confidence||n,importance:f.importance||a,namespace:r,sourceDocumentIds:e?[e]:[],sourceSection:f.sourceSection||f.category,embedding:o[u]});s.push(l);let h=l.action.toLowerCase();h==="add"?i.added++:h==="skip"?i.skipped++:h==="update"?i.updated++:h==="contradict"&&i.contradicted++}return{counts:i,results:s}}async function px(t,{documentId:e,namespace:r}){let o=await le(t.map(n=>n.content));return Ff(t,{documentId:e,namespace:r,embeddings:o,defaultConfidence:"high",defaultImportance:"vital"})}async function dx(t,{documentId:e,namespace:r,promptPath:o,categories:n}){let a=await df(t,{promptPath:o,categories:n});if(process.stderr.write(` ${a.length} facts extracted from ${t.length} chunks
217
+ `),!a.length)return{counts:{total:0,added:0,skipped:0,updated:0,contradicted:0},results:[]};let i=await le(a.map(s=>s.content));return Ff(a,{documentId:e,namespace:r,embeddings:i})}async function mx({podUids:t,resolvePodsFrom:e,metadata:r,namespace:o}){let n=[];for(let i of t){let s=await Tt(i);s&&n.push({podId:s.id,role:"primary"})}if(e==="metadata"){let i=await Mf(r,o);for(let s of i)n.push(s)}let a=new Map;for(let i of n){let s=a.get(i.podId);(!s||i.role==="primary"&&s.role!=="primary")&&a.set(i.podId,i)}return[...a.values()]}async function Bf(t,e){if(!(!e.length||!t.length))for(let r of t){let o=r?.fact?.id??r?.existing?.id;if(!o)continue;let n=r?.action==="SKIP"?"mention":"primary";for(let{podId:a}of e)await ie(a,o,n)}}var fx,Uf=c(()=>{Sa();Ia();Ue();Ra();Fa();Ua();mf();wf();Fo();bf();Rf();mt();se();kf();_();J();fx=ux(q,"default-extraction.md")});J();import{resolve as Jf}from"node:path";import{existsSync as rn}from"node:fs";import{config as on}from"dotenv";function nn(){let t=Jf(process.cwd(),".env");rn(t)&&on({path:t,quiet:!0}),rn(Ce)&&Ce!==t&&on({path:Ce,quiet:!0})}nn();var jf=3,hx=40;async function yx(){let t=await wx();if(!t)return Ie();let e;try{e=JSON.parse(t)}catch{return Ie()}try{if(!e.session_id)return Ie();let{endActiveSession:r,getActiveCursor:o}=await Promise.resolve().then(()=>(vt(),Ne)),n=await o();if(!n||n.session_id!==e.session_id)return Ie();try{let{failClosedOnBadConfig:a}=await Promise.resolve().then(()=>(Rr(),Lr));await a("session-end",t)||await gx({sessionPodUid:n.pod_uid,cwd:e.cwd||n.cwd||null,sessionId:e.session_id,transcriptPath:e.transcript_path||n.transcript_path||null})}catch(a){process.stderr.write(`[sigil:session-end] synthesis failed: ${a.message}
218
+ `)}await r({conclusion:e.summary||e.conclusion||null,summary:e.summary||null})}catch(r){process.stderr.write(`[sigil:session-end] ${r.message}
219
+ `);try{let{recordHookError:o}=await Promise.resolve().then(()=>(Rr(),Lr));await o("session-end",r,e)}catch{}}finally{try{await(await Promise.resolve().then(()=>(I(),Ir))).default.destroy()}catch{}}return Ie()}async function gx({sessionPodUid:t,cwd:e,sessionId:r,transcriptPath:o}){if(!t)return;let n=await Promise.resolve().then(()=>(mt(),It)),a=await Promise.resolve().then(()=>(se(),Pt)),i=await n.findByUid(t);if(!i)return;let s=await a.listMembers(i.id,{memberType:"fact",limit:hx});if(s.length<jf)return;let u=s.map(O=>O.content||O.fact_content||O.factContent).filter(Boolean);if(u.length<jf)return;let{promptJson:f}=await Promise.resolve().then(()=>(rt(),Zn)),{get:l,getSchemaDoc:h}=await Promise.resolve().then(()=>(Yr(),ea));await Promise.resolve().then(()=>(pa(),la));let d=l("claude_session"),g=["You are writing the durable end-of-session summary for a Claude Code session.","","Schema guide (how to write facts for the claude_session kind):",(await h(d)||"").slice(0,2e3),"","Session facts gathered during this session:",u.map((O,ee)=>` ${ee+1}. ${O}`).join(`
220
+ `),"","Write ONE summary fact (60-220 chars) that captures the single most useful thing a future session in the same project would want to know about this one. Past tense. Specific. No filler. Do not repeat individual facts verbatim \u2014 synthesize the essence.","",'Return JSON: { "summary": "<one-line summary fact>", "topics": ["...", "..."] }'].join(`
221
+ `),w;try{w=await f(g,{caller:"session-end-synth"})}catch{return}let x=typeof w?.summary=="string"?w.summary.trim():null;if(!x||x.length<30)return;let{ensureActivePodsForHook:S}=await Promise.resolve().then(()=>(ma(),da)),{podUids:D}=await S({sessionId:r,cwd:e,transcriptPath:o}),{ingestDocument:v}=await Promise.resolve().then(()=>(Uf(),$f)),T=(await Promise.resolve().then(()=>(_(),fn))).default;try{await v({content:x,namespace:T.defaults.namespace,classify:!1,podUids:D})}catch(O){process.stderr.write(`[sigil:session-end] save summary failed: ${O.message}
222
+ `)}}async function wx(){if(process.stdin.isTTY)return"";let t=[];for await(let e of process.stdin)t.push(e);return Buffer.concat(t).toString("utf8").trim()}function Ie(){process.stdout.write("{}")}yx();