@polycode-projects/the-mechanical-code-talker 6.0.20 → 6.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -15
- package/bin/tmct.mjs +8 -3
- package/package.json +1 -5
- package/src/adapters/memory/core.mjs +108 -96
- package/src/adapters/memory/corpus-bands.mjs +6 -0
- package/src/domain/agent-traits.mjs +1 -1
- package/src/domain/answer-variants.json +1 -1
- package/src/domain/cli-verbs.mjs +1 -0
- package/src/domain/memory/causal-stability.mjs +22 -5
- package/src/domain/memory/fact-order.mjs +3 -3
- package/src/domain/memory/provenance-time.mjs +35 -0
- package/src/domain/memory/retraction.mjs +3 -5
- package/src/domain/memory/trust.mjs +11 -11
- package/src/domain/news-feed.mjs +1 -1
- package/src/domain/seeded-random.mjs +6 -6
- package/src/services/adventure.mjs +10 -41
- package/src/services/chat-page-viz.mjs +12 -1111
- package/src/services/chat-session.mjs +20 -6
- package/src/services/chat.mjs +269 -197
- package/src/services/extract-facts.mjs +1 -1
- package/src/services/import-file.mjs +1 -1
- package/src/services/mud-viz.mjs +21 -1082
- package/src/services/mudiii-viz.mjs +0 -4
- package/src/services/news.mjs +44 -24
- package/src/services/pill-complete.mjs +5 -8
- package/src/services/predator-prey.mjs +3 -5
- package/src/surfaces/web/memory-ask-browser.bundle.js +107 -107
- package/src/surfaces/web/mud-browser-entry.mjs +8 -48
- package/test-benchmarks/agentbench/README.md +7 -10
- package/src/adapters/p2p/webrtc-transport.mjs +0 -169
- package/src/domain/p2p/facts.mjs +0 -102
- package/src/domain/p2p/peer-id.mjs +0 -47
- package/src/domain/p2p/provenance-relabel.mjs +0 -37
- package/src/domain/p2p/sync-filter.mjs +0 -43
- package/src/domain/p2p/wire.mjs +0 -126
- package/src/services/p2p-room.mjs +0 -848
- package/src/services/share-overlay-viz.mjs +0 -623
- package/src/surfaces/web/p2p-browser-entry.mjs +0 -39
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
(()=>{var f_=Object.defineProperty;var L=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Nt=(e,t)=>{for(var n in t)f_(e,n,{get:t[n],enumerable:!0})};var vt,F2,D2,B2,z2,U2,W2,G2,V2,K2,H2,q2,Y2,X2,J2,Q2,Z2,ne,Se,Xt,$d,Lg,eW,tW,nW,Qe=L(()=>{vt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},F2=vt("createRequire"),D2=vt("readFileSync"),B2=vt("access"),z2=vt("readFile"),U2=vt("writeFile"),W2=vt("appendFile"),G2=vt("mkdir"),V2=vt("mkdtemp"),K2=vt("rename"),H2=vt("unlink"),q2=vt("rm"),Y2=vt("stat"),X2=vt("copyFile"),J2=vt("readdir"),Q2=vt("createReadStream"),Z2=vt("createWriteStream"),ne=(...e)=>e.join("/"),Se=e=>String(e).replace(/\/[^/]*$/,""),Xt=(...e)=>e.join("/"),$d=e=>String(e).startsWith("/"),Lg="/",eW=vt("randomBytes"),tW=vt("spawnSync"),nW=vt("createInterface")});var Et,oW,rW,Sd,Ce,Cr,p_,os,Pg,rc,vd,Mg,h_,iW,m_,aW,cW,lW,uW,dW,zt=L(()=>{Et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},oW=Et("createRequire"),rW=Et("readFileSync"),Sd=Et("access"),Ce=Et("readFile"),Cr=Et("writeFile"),p_=Et("appendFile"),os=Et("mkdir"),Pg=Et("mkdtemp"),rc=Et("rename"),vd=Et("unlink"),Mg=Et("rm"),h_=Et("stat"),iW=Et("copyFile"),m_=Et("readdir"),aW=Et("createReadStream"),cW=Et("createWriteStream"),lW=Et("randomBytes"),uW=Et("spawnSync"),dW=Et("createInterface")});function Nr(e){let t=w_.exec(String(e||""));return t?t[1].toLowerCase():null}function y_(e){return/(?:[sxz]|ch|sh)$/i.test(e)?`${e}es`:/[^aeiou]y$/i.test(e)?`${e.slice(0,-1)}ies`:`${e}s`}function Ug(e){let t=String(e||""),n=Fo[t]||t.endsWith("Symbol")&&Fo[t.slice(0,-6)]||null;if(!n)return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase();let[s,...o]=n.bare.split(" ");return[y_(s),...o].join(" ")}function oo(e,t){return!e||!$_.has(t)?e:e.shape==="ask"?{...e,subject:e.object,object:e.subject}:e.shape==="reverse"?{...e,shape:"forward"}:e.shape==="forward"?{...e,shape:"reverse"}:e}function ic(e){return String(e||"").replace(S_,"$1")}function ro(e){return e.replace(v_,"").trim()}function En(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(x_,"").trim();if(s=s.replace(j_,"").trim(),s===t)break;t=s}return t}var Fg,Dg,g_,Fo,Do,Bg,zg,b_,w_,Wg,$_,vn,Ed,S_,Hn,xd,v_,E_,x_,k_,j_,he,Oi,ac,R_,Gg,nt,xn,io,cc,kd,jd,Rd,Vg,Ci,Bo,Kg,Hg,zo,In,As,ao,Ge,qg,Uo,Wo,rs,is,Yg,Ni,Lr,lc,Pr,Xg,as=L(()=>{Fg=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],Dg=["belongs to","belong to","is part of","are part of","is defined in","are defined in"],g_=["lives in","live in","sits in","sit in","sits inside","sit inside"],Fo={imports:{bare:"import",comment:"Module -> Module: subject's import graph references object (usesComplexType).",verbs:["couples to","couple to","depends on","imports","import","relies on","rely on","requires","require","references","reference","pulls in","pull in","built on","builds on","build on","uses code from","grabs","grab","pulls from","pull from","leans on","lean on","is wired to","are wired to","is hooked up to","are hooked up to","importing"]},uses:{bare:"use",comment:"query-side union: imports (Module->Module) + calls (Module->Module) + callsSymbol (fn->fn).",verbs:["uses","use","makes use of","make use of","talks to","talk to","using"]},calls:{bare:"call",comment:"Function/Method -> Function/Class (symbol-grain) or Module -> Module (coarse): subject invokes object.",verbs:["invokes","invoke","calls","call","runs","run","executes","execute","hits","hit","triggers","trigger","fires","fire","kicks off","kick off","calling"]},defines:{bare:"define",comment:"Module -> top-level Function/Class/Method/Attribute: subject declares object.",verbs:["defines","define","declares","declare","has","have","holds","hold","defining"]},contains:{bare:"contain",comment:"Class -> Method/Attribute: subject's membership includes object.",verbs:["contains","contain","containing",...Dg,...g_]},tests:{bare:"test",comment:"Module -> Module: subject is a test module importing/covering object.",verbs:["tests","test","covers","cover","verifies","verify","exercises","exercise","checks","check","makes sure of","make sure of","testing"]},inherits:{bare:"inherit from",comment:"Class -> Class: subject's declared base resolves to object (subclassOf).",verbs:["inherits from","inherit from","inherits","inherit","extends","extend","subclasses","subclass","derives from","derive from","is a subclass of","are a subclass of","is a kind of","are a kind of","is built off","are built off","is built on top of","are built on top of","extending","inheriting from","inheriting","subclassing","extends from",...Fg]},touches:{bare:"touch",comment:"Commit -> Module (coarse) or Commit -> symbol (fine, touchesSymbol): a commit's changed-line-range intersects object.",verbs:["touched","touches","changed","change","modified","modifies","was changed in","were changed in","was edited in","were edited in","was modified by","were modified by","was tweaked in","were tweaked in","got changed in","got edited in","touch","changed in","landed in","land in","was in","were in","went into","included in","updated","edited","touching"]},cochange:{bare:"co-change with",comment:"Module -> Module: subject and object are frequently committed together (changeCoupledWith).",verbs:["changed with","co-changes with","co-change with","changes alongside","change alongside","shares commits with","share commits with","tends to change together with","tend to change together with","moves together with","move together with","changed together with","change together with","changes together with","changes with","change with","tends to change with","tend to change with","usually changes with"]},reexports:{bare:"re-export",comment:"Module -> exported symbol: subject's public API surface (__all__/export list).",verbs:["exports","export","re-exports","re-export","passes through","pass through","exposes","expose","exporting"]},serves:{bare:"serve",comment:"subject provides or backs the object \u2014 a handler serving a route, a module serving a surface (mgx:serves).",verbs:["serves","serve","serving"]},denotes:{bare:"denote",comment:"subject names the object \u2014 a glossary/lexicon term denoting a code entity (mgx:denotes).",verbs:["denotes","denote","denoting"]}},Do=Object.freeze({placement:Object.freeze({predicate:"mgx:currently-in",comment:"individual -> place: where the subject is right now.",nouns:Object.freeze(["location","locations","position","positions","place","places","whereabouts","room","rooms"]),reads:"is in",matchesLocativePredicates:!0}),mood:Object.freeze({predicate:"mgx:feels",comment:"individual -> mood word: how the subject feels right now.",nouns:Object.freeze(["mood","moods","feeling","feelings","emotion","emotions"]),reads:"feels"}),mass:Object.freeze({predicate:"mgx:hasMass",comment:"individual -> number: the subject's current mass.",nouns:Object.freeze(["mass","masses","weight","weights"]),reads:"has mass"})}),Bg=Object.freeze(Object.fromEntries(Object.entries(Do).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),zg=Object.freeze(Object.values(Do).map(e=>e.predicate)),b_=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),w_=new RegExp(`^mgx:[a-z]+-(${b_.join("|")})$`,"i");Wg=Object.freeze([...Fg,"is the superclass of","are the superclass of","is the parent class of"]),$_=Object.freeze(new Set([...Wg,...Dg]));vn=Object.freeze(["defined","declared","located","implemented"]),Ed=Object.freeze(["now","currently","right now","at the moment","these days","today"]),S_=new RegExp(`\\s+(?:${[...Ed].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");Hn=Object.freeze(["mentioned","referenced"]),xd=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),v_=new RegExp(`\\s+(?:${xd.join("|")})\\s*[?.!]*$`,"i");E_=Object.freeze(["then","though","too"]),x_=new RegExp(`\\s+(?:${E_.join("|")})\\s*[?.!]*$`,"i"),k_=Object.freeze(["please explain","explain"]),j_=new RegExp(`,\\s*(?:${k_.join("|")})\\s*[?.!]*$`,"i");he=Object.freeze(Object.fromEntries(Object.entries(Fo).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Oi=Object.freeze(new Set(["has","have","holds","hold"])),ac=Object.freeze(new Set(["search","describe","signature","impact","members","subclasses","exports","callers","callees","calls","tests","untested","history","cochanges","architecture","arch","related","sprite"])),R_=e=>!Wg.includes(e),Gg=Object.freeze([...new Set(Object.keys(he).filter(R_).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),nt=Object.freeze({function:"Function",functions:"Function",method:"Method",methods:"Method",class:"Class",classes:"Class",module:"Module",modules:"Module",mod:"Module",mods:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),xn=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),io=Object.freeze({imported:"imports",called:"calls",used:"uses",tested:"tests",covered:"tests",verified:"tests",exercised:"tests",checked:"tests",defined:"defines",declared:"defines",inherited:"inherits",extended:"inherits",subclassed:"inherits",contained:"contains",exported:"reexports","re-exported":"reexports",exposed:"reexports",touched:"touches",changed:"touches",modified:"touches",edited:"touches",updated:"touches"}),cc=Object.freeze({"inherited from":{kind:"inherits",role:"object"},"extended from":{kind:"inherits",role:"object"},"subclassed from":{kind:"inherits",role:"object"},"defined in":{kind:"defines",role:"agent"},"declared in":{kind:"defines",role:"agent"},"contained in":{kind:"contains",role:"agent"},"imported by":{kind:"imports",role:"agent"},"called by":{kind:"calls",role:"agent"},"used by":{kind:"uses",role:"agent"},"tested by":{kind:"tests",role:"agent"},"covered by":{kind:"tests",role:"agent"},"touched by":{kind:"touches",role:"agent"},"changed by":{kind:"touches",role:"agent"},"exported by":{kind:"reexports",role:"agent"}}),kd=Object.freeze({"ain't":"is not",aint:"is not","isn't":"is not",isnt:"is not","aren't":"are not",arent:"are not","doesn't":"does not",doesnt:"does not","don't":"do not",dont:"do not","didn't":"did not",didnt:"did not","there's":"there is",theres:"there is","what's":"what is",whats:"what is","who's":"who is",whos:"who is",gonna:"going to",wanna:"want to",gotta:"got to",yer:"your",ur:"your",gimme:"give me"}),jd=Object.freeze({funtion:"function",funtions:"functions",fucntion:"function",fucntions:"functions",functoin:"function",functoins:"functions",calss:"class",calsses:"classes",classs:"class",clases:"classes",modul:"module",moduls:"modules",moduel:"module",moduels:"modules",moudle:"module",moudles:"modules",methdo:"method",methdos:"methods",mehtod:"method",mehtods:"methods",comit:"commit",comits:"commits",commmit:"commit",commmits:"commits",varaible:"variable",varaibles:"variables",varibale:"variable",varibales:"variables",atribute:"attribute",atributes:"attributes",improt:"import",improts:"imports",imoprt:"import",imoprts:"imports",inherts:"inherits",inheirts:"inherits",extands:"extends",extneds:"extends",depnds:"depends",touchs:"touches",tuoches:"touches",touhced:"touched",touchd:"touched",defned:"defined",chagned:"changed",chnaged:"changed",chagnes:"changes",chnages:"changes",calles:"calls",exprot:"export",exprots:"exports",tets:"tests",whcih:"which",wich:"which",whihc:"which",wehre:"where",whre:"where",waht:"what",wat:"what",dat:"that",dose:"does",doess:"does",teh:"the",manyn:"many",mnay:"many",amny:"many",mnany:"many",hwo:"how",coutn:"count",conut:"count",cuont:"count",ocunt:"count",numer:"number",nubmer:"number",numbr:"number",nmuber:"number",lst:"list",lsit:"list",ilst:"list",shwo:"show",hsow:"show",dispaly:"display",dsiplay:"display",funtcions:"functions",funciton:"function",funcitons:"functions"}),Rd=Object.freeze({folder:"module",folders:"modules",directory:"module",directories:"modules",func:"function",funcs:"functions",changeset:"commit",changesets:"commits",revision:"commit",revisions:"commits",property:"attribute",properties:"attributes"}),Vg=/\b([a-z]{3,})in'/gi,Ci=Object.freeze(["um","uh","erm","so","like","yo","hey","bru","bro","fam","mate","please","could you","can you","would you","tell me","i wonder","just wondering","quickly","real quick","kinda","sorta","btw","by the way","you","quick q"]),Bo=Object.freeze(["this","it","that","here","this one","that one"]),Kg=Object.freeze([{re:/\bthere\s+is\s+not\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bthere\s+is\s+no\s+\S+\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bis\s+not\s+there\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\b(?:nobody|nothing|no one)\s+(\S.*?)(?:,?\s+does\s+it\??|,?\s+do\s+they\??)?$/i,to:e=>`what ${e[1]}`}]),Hg=Object.freeze([{re:/^what\s+(?:is|was|were|are)\s+in\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+(?:went|got)\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+made\s+it\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`}]),zo=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),In=Object.freeze(["that","which","who"]),As=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),ao=Object.freeze({"but do not":"difference","but does not":"difference","and do not":"difference","and does not":"difference","but not":"difference","and not":"difference",except:"difference",without:"difference",and:"intersection",plus:"intersection",but:"intersection",or:"union"}),Ge=Object.freeze({public:{via:"visibility",value:"public"},private:{via:"visibility",value:"private"},protected:{via:"visibility",value:"protected"},static:{via:"attr",attr:"isStatic"},abstract:{via:"attr",attr:"isAbstract"},constant:{via:"attr",attr:"isConstant"},exported:{via:"exported"},"re-exported":{via:"exported"},tested:{via:"tested",value:!0},covered:{via:"tested",value:!0},untested:{via:"tested",value:!1},uncovered:{via:"tested",value:!1}}),qg=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Uo=Object.freeze(["how many","how much","how many of","number of","total number of","quantity of","tally of","sum of","total of","amount of","count","count up","count of","tot up"]),Wo=Object.freeze(["list","show","show me","show us","display","print","print out","dump","enumerate","name","give me","get me","spit out","rattle off","run down","run through","ls","what are","which are"]),rs=Object.freeze({most:"most",greatest:"most",highest:"most",biggest:"most",largest:"most","most-connected":"most","most connected":"most",fewest:"fewest",least:"fewest",smallest:"fewest",lowest:"fewest"}),is=Object.freeze({imports:{kind:"imports",dir:"out"},dependencies:{kind:"imports",dir:"out"},importers:{kind:"imports",dir:"in"},dependents:{kind:"imports",dir:"in"},callers:{kind:"calls",dir:"in",sibling:"callsSymbol"},callees:{kind:"calls",dir:"out",sibling:"callsSymbol"},calls:{kind:"calls",dir:"out",sibling:"callsSymbol"},methods:{kind:"contains",dir:"out",filter:"Method"},members:{kind:"contains",dir:"out"},tests:{kind:"tests",dir:"in"},test:{kind:"tests",dir:"in"},subclasses:{kind:"inherits",dir:"in"},connections:{kind:"*",dir:"both"},edges:{kind:"*",dir:"both"},connected:{kind:"*",dir:"both"},imported:{kind:"imports",dir:"in"},"depended-on":{kind:"imports",dir:"in"},depended:{kind:"imports",dir:"in"},used:{kind:"imports",dir:"in",sibling:"callsSymbol"},called:{kind:"calls",dir:"in",sibling:"callsSymbol"}}),Yg=Object.freeze({tests:"Module",test:"Module"}),Ni=Object.freeze(["those","them","these"]),Lr=Object.freeze(["contains","defines"]),lc=Object.freeze(["the","a","an","some","other","about","please","pls","plz","kindly","just","simply","maybe","perhaps","thanks","thank","ta","cheers","too","also","well","either","sorry","oops","actually","mean","meant","rather","hi","hello","hey","yo","hiya","howdy","ok","okay","matey","mate","buddy","pal","dude","man","bro","bru","fam","friend","sir","maam","folks","guys","everyone","dear","tmct","show","tell","give","list","find","me","us","lemme"]),Pr=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),Xg=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var st,co,uc=L(()=>{st="#000000",co=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${st}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${st}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var __,On,Jg,Qg,_d,Zg,bW,wW,eb=L(()=>{as();uc();__=()=>Object.keys(co).sort(),On=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Jg=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Qg=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),_d=Object.freeze([{name:"tmct_context",tier:"hot",summary:"A sized edit bundle for one symbol \u2014 exemplar source, sibling signatures, registration anchor and the insertion region, in one call.",agentDescription:"START HERE to add/modify code: ONE call returns a sized edit bundle (exemplar source, sibling signatures, registration, insertion region) \u2014 then write directly, don't Read.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"Module path (e.g. path/to/module) or a sibling function/class name defined in it."},depth:{type:"string",enum:["min","auto","full"],default:"auto",description:"auto (sized to the task) | min (leanest) | full (every section)."}}},example:{symbol:"django/utils/text.py"}},{name:"tmct_snippet",tier:"hot",summary:"The exact source of one function, class or Class.method \u2014 its line span only, plus a one-line in-repo call hint.",agentDescription:"EXACT source of one function/class/Class.method by name (its line span only) + a one-line in-repo call hint. Prefer over Read for a single symbol.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"function/class name, Class.method, or fn:<path>#name."}}},example:{symbol:"Truncator.chars"}},{name:"tmct_ask",tier:"hot",summary:"A structural question in plain English, answered from the graph in one call \u2014 no model, and a clean miss instead of a guess.",agentDescription:'Ask a structural question in plain English: "which functions call X", "what uses X", "where is X defined", "when did X change". One call, no model. A clean miss beats a guess.',inputSchema:{type:"object",required:["query"],properties:{query:{type:"string",description:'A free-text question, e.g. "which functions explicitly couple to logging".'}}},example:{query:"which modules import src/core/model.mjs"},chat:{exampleRepo:"examples/mini-webapp",grammar:[{form:"which <things> <relation-verb> <entity>",example:"which modules import src/core/model.mjs",answers:"the imports edge, read forwards"},{form:"what is <relation-verb-passive> <entity>",example:"what is imported by src/core/store.mjs",answers:"the same edge, read backwards \u2014 a passive is the opposite direction, not a synonym"},{form:"what <relation-verb> <entity>",example:"what uses src/lib/http.mjs",answers:"the uses union: imports plus calls"},{form:"where is <entity> <where-marker>",example:"where is saveStore defined",answers:"the definition's file and line span"},{form:"when did <entity> change",example:"when did src/core/store.mjs change",answers:"the commits that touched it, newest first"}],whereMarkers:vn}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:On("A module path, symbol name, or Class.method."),example:{symbol:"django/utils/text.py"}},{name:"tmct_signature",tier:"cold",summary:"One symbol's API surface (params, returns, raises/catches, flags, decorators, doc) without the body.",inputSchema:On("A function, method, or Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_impact",tier:"cold",summary:"Transitive reverse closure over imports/calls \u2014 what breaks if a module or symbol changes, by depth, with tests.",inputSchema:Jg("The module (or a symbol it defines) whose dependents you want."),example:{module:"django/utils/text.py"}},{name:"tmct_search",tier:"cold",summary:"Free-text/ranked lookup over the code-map to find the right module or symbol.",inputSchema:{type:"object",required:[],properties:{query:{type:"string",description:"Free text to rank against the code-map. Required unless kind narrows the search on its own."},kind:{type:"string",description:"Restrict to an entity class, e.g. function, class, module."},decorator:{type:"string",description:"Restrict to definitions carrying this decorator."},name:{type:"string",description:"Restrict to definitions whose name matches."}}},example:{query:"template filters",kind:"function"}},{name:"tmct_members",tier:"cold",summary:"A class's methods + attributes (file:line, decorators) in one slice.",inputSchema:Qg("The class whose members you want."),example:{class:"Truncator"}},{name:"tmct_subclasses",tier:"cold",summary:"A class's base classes plus the transitive set of classes that extend it.",inputSchema:Qg("The class to walk the inheritance edges of."),example:{class:"Field"}},{name:"tmct_related",tier:"cold",summary:"A term's synonyms (skos:altLabel) and related concepts (skos:related), from the memory graph's relation facts.",inputSchema:{type:"object",required:["term"],properties:{term:{type:"string",description:"The term whose synonyms / related concepts you want."}}},example:{term:"sofa"}},{name:"tmct_sprite",tier:"cold",summary:"The sprite markup for a class, resolved up the taught rdfs:subClassOf chain \u2014 with the expression and size asked for, and the ancestor chain the resolver walked to find it.",inputSchema:{type:"object",required:["class"],properties:{class:{type:"string",description:"The class to draw, e.g. spider. Resolved through the memory graph's own rdfs:subClassOf taxonomy."},expression:{type:"string",enum:__(),description:"The face the sprite wears, as an mgx:feels value. A class whose template takes no expression parameter misses rather than dropping it."},size:{type:"string",description:"A taught size property word (mgx:hasProperty), resolved to a numeric render SCALE \u2014 the size of the thing drawn, not a choice of template tier."}}},example:{class:"spider",expression:"happy",size:"large"}},{name:"tmct_architecture",tier:"cold",summary:"Package/module map + the most-imported hub modules (optionally scoped to a package).",inputSchema:{type:"object",required:[],properties:{package:{type:"string",description:"Scope the map to one package. Omit for the whole repository."}}},example:{package:"django/template"}},{name:"tmct_exports",tier:"cold",summary:"A module's public __all__ surface, each name resolved to the module that defines it.",inputSchema:Jg("The module whose public API surface you want."),example:{module:"django/db/models/__init__.py"}},{name:"tmct_tests_for",tier:"cold",summary:"The test modules covering a symbol or module, from the typed test edges.",inputSchema:On("The symbol or module to find covering tests for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_untested",tier:"cold",summary:"Source modules with no covering test module \u2014 a coverage-gap view (no arguments).",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_history",tier:"cold",summary:"Recent commits that touched a symbol's module (newest first).",inputSchema:On("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_file_history",tier:"cold",summary:"Commits that touched a symbol's module, each with author / date / subject.",inputSchema:On("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_method_history",tier:"cold",summary:"Commits that touched a specific method symbol (fine-grained), with author / date / subject.",inputSchema:On("A Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_class_history",tier:"cold",summary:"Commits that touched a specific class symbol (fine-grained), with author / date / subject.",inputSchema:On("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:On("The symbol whose callers you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_callees",tier:"cold",summary:"Modules a symbol's module calls into (one hop).",inputSchema:On("The symbol whose callees you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_calls",tier:"cold",summary:"The in-repo symbols a function calls (fn\u2192fn), each with file:line.",inputSchema:On("The function whose in-repo call sites you want."),example:{symbol:"slugify"}},{name:"tmct_cochanges",tier:"cold",summary:"Modules that historically change in the same commit as a symbol's module (git co-change).",inputSchema:On("The symbol whose module's change-coupling you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_context_more",tier:"cold",summary:"The bundle sections a lean tmct_context omitted (siblings / tests / cochange / class members / re-exports).",inputSchema:On("The symbol a lean tmct_context bundle was built for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_export",tier:"cold",summary:"Every stored memory fact as JSONL (subject/predicate/object/provenance) \u2014 the shape `tmct extract` emits, for backup or audit.",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_ingest",tier:"cold",summary:"Ground plain text into memory facts with the same deterministic recognizer the chat teach lane uses \u2014 the strict tier, plus an optional lower-trust fuzzy tier \u2014 and report the canonical triples.",inputSchema:{type:"object",required:["text"],properties:{text:{type:"string",description:"The plain text to ground into facts."},optimistic:{type:"boolean",description:"Also run the lower-trust fuzzy tier over sentences the strict recognizer skips."}}},example:{text:"A kettle is a container. An otter is a mammal.",optimistic:!0}}]),Zg=_d.filter(e=>e.tier==="hot"),bW=_d.filter(e=>e.tier==="cold"),wW=Object.freeze(_d.map(e=>e.name))});var tb,Le,sn=L(()=>{Qe();tb=ne(".tmct","graph.json"),Le=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function T_(e){let t=new Set;for(let n of Array.isArray(e?.individuals)?e.individuals:[])n&&n.id&&t.add(n.id);return t}function nb(e){let t=(Array.isArray(e)?e:[]).map((c,l)=>({file:c?.file,payload:c?.payload||{},name:c?.name!=null&&String(c.name).length?String(c.name):String(l)})),n=t.map(({payload:c})=>T_(c)),s=new Map;for(let c of n)for(let l of c)s.set(l,(s.get(l)||0)+1);let o=new Set([...s.entries()].filter(([,c])=>c>1).map(([c])=>c)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:c,name:l}of t){a=a&&!!c.bootstrap,typeof c.generated_at=="string"&&c.generated_at>i&&(i=c.generated_at);let u=p=>o.has(p)?`${l}/${p}`:p;Array.isArray(c.classes)&&r.classes.push(...c.classes),Array.isArray(c.vocabulary)&&r.vocabulary.push(...c.vocabulary);for(let p of Array.isArray(c.individuals)?c.individuals:[]){if(!p)continue;let f={...p};f.id&&(f.id=u(f.id)),Array.isArray(f.derived_from)&&(f.derived_from=f.derived_from.map(h=>u(h))),Array.isArray(f.mentions)&&(f.mentions=f.mentions.map(h=>h&&h.id?{...h,id:u(h.id)}:h)),r.individuals.push(f)}for(let p of Array.isArray(c.objectProperties)?c.objectProperties:[]){if(!p)continue;let f={...p};Array.isArray(f.examples)&&(f.examples=f.examples.map(h=>{if(!h)return h;let m={...h};return m.subject&&(m.subject=u(m.subject)),m.object&&(m.object=u(m.object)),m})),r.objectProperties.push(f)}let d=c.proseIndex&&typeof c.proseIndex=="object"?c.proseIndex:{};for(let[p,f]of Object.entries(d)){let h=r.proseIndex[p]||(r.proseIndex[p]=[]);for(let m of Array.isArray(f)?f:[]){let b=u(m);h.includes(b)||h.push(b)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var sb=L(()=>{});var Fr={};Nt(Fr,{clearCache:()=>A_,emptyEntities:()=>fc,fetchEntities:()=>N_,registerProvider:()=>I_});function A_(){Mr=null,Li=null}function I_(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=dc;return dc=e??null,Mr=null,t}function fc(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function O_(e){let t;try{t=await Ce(e,"utf8")}catch(n){if(n?.code==="ENOENT")return fc();throw new Le(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Le(`graph artifact ${e} is not valid JSON`)}}async function C_(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(Li&&Li.key===n)return Li.payload;let s=[];for(let r=0;r<t.length;r++){let i=await O_(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=nb(s);return Li={key:n,payload:o},o}async function N_(e){let t=e||{};if(dc){let o;try{o=await dc(t)}catch(r){throw r instanceof Le?r:new Le(`graph provider failed (${r?.message||r})`)}if(!o||typeof o!="object")throw new Le("graph provider returned no entities payload");return o}if(Array.isArray(t.graphFiles)&&t.graphFiles.length>1)return C_(t);if(!t.graphFile)return fc();if(Mr&&Mr.file===t.graphFile)return Mr.payload;let n;try{n=await Ce(t.graphFile,"utf8")}catch(o){if(o?.code==="ENOENT")return fc();throw new Le(`cannot read graph artifact at ${t.graphFile} (${o?.code||o?.message||o})`)}let s;try{s=JSON.parse(n)}catch{throw new Le(`graph artifact ${t.graphFile} is not valid JSON`)}return Mr={file:t.graphFile,payload:s},s}var Mr,Li,dc,Pi=L(()=>{zt();sn();sb();Mr=null,Li=null,dc=null});function qn(e){if(!e)return[];let t=String(e).replace(/\.[A-Za-z0-9]+$/,"");return t=t.replace(/[/\\]/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/([A-Za-z])([0-9])/g,"$1 $2").replace(/([0-9])([A-Za-z])/g,"$1 $2").replace(/[_\-.]+/g," "),t.split(/\s+/).map(n=>n.toLowerCase()).filter(n=>n.length>1&&n.length<=rb)}function Td(e){if(!e)return[];let t=[],n=new Set;for(let s of String(e).toLowerCase().split(/[^a-z0-9]+/))if(!(s.length<2||s.length>rb||ob.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=L_))break;return t}function pc({name:e,doc:t}={}){return[...new Set([...qn(e),...Td(t)])].sort()}function Ad(e){let t=Object.create(null);for(let n of e){let s=(n.attributes||[]).find(o=>o.key==="prose_tokens");if(s?.value)for(let o of s.value.split(" "))t[o]||(t[o]=[]),t[o].push(n.id)}for(let n of Object.keys(t))t[n].sort();return t}function Go(e,t,{limit:n=10}={}){let s=[...new Set([...qn(t),...Td(t)])];if(!s.length)return[];let o=new Map;for(let r of s)for(let i of e?.[r]||[])o.set(i,(o.get(i)||0)+1);return[...o.entries()].sort((r,i)=>i[1]-r[1]||String(r[0]).localeCompare(i[0])).slice(0,n).map(([r,i])=>({id:r,score:i}))}function ab(e,t){let n=e&&(e["tmct:layers"]?e:e.proseIndex),s=n&&n["tmct:layers"],o=String(t||"").toLowerCase(),r={ids:[],via:null};if(!o||!s||typeof s!="object")return r;let i=new Set,a=new Set;for(let c of Object.keys(s)){let l=s[c];if(!l||typeof l!="object")continue;let u=l[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let p of d)i.add(p);a.add(c)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var ob,rb,L_,ib,Yn=L(()=>{ob=new Set("a an and or but the of to in on at for with from by as is are was were be been being it its this that these those i you he she they we me my your our do does did not no yes if then else than so such can will would should could may might about into over under out up down off again more most some any all what which who whom whose when where why how".split(/\s+/)),rb=40,L_=120;ib=e=>/^[a-z0-9]+$/.test(e)&&!ob.has(e)});function cb(e){let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(":"),r=o>=0?n.slice(o+1):"";return{createdAt:s,...r?{sessionId:r}:{}}}function P_(e){if(!e.startsWith(ub))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(lb);if(o<0)return null;let r=n.slice(o+lb.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(ub.length,o),createdAt:s}:null}function D_(e){if(e.startsWith("news:"))return Id(e);let{pack:t}=Cd(e.slice(9));return`research:${t}`}function Cd(e){let t=e.lastIndexOf("@");if(t>=0)return{kind:"referenceLive",pack:"research",article:e.slice(0,t).trim()||"unknown"};let n=e.indexOf(":");return n<0?{kind:"referenceLive",pack:"research",article:e.trim()||"unknown"}:{kind:"referenceLive",pack:e.slice(0,n)||"research",article:e.slice(n+1).trim()}}function db(e){if(!e.sessionId?.startsWith(Od))return null;let t=e.sessionId.slice(Od.length);if(t.startsWith("teach:")||t.startsWith("ace:"))return null;let n=Cn(t);return n?{...n,...e.createdAt?{createdAt:e.createdAt}:{}}:null}function Cn(e){let t=String(e||"").trim();if(!t)return null;if(t.startsWith("reference:")){let s=t.slice(10),o=s.indexOf(":");if(o<0)return{kind:"reference",pack:s||"unknown",article:""};let r=s.slice(0,o)||"unknown";return{kind:F_(r),pack:r,article:s.slice(o+1)}}if(t.startsWith("research:"))return Cd(t.slice(9));let n=t.split(/\s+/)[0];if(n.startsWith("corpus-weak:"))return{kind:"corpusWeak",name:n.slice(12)||"unknown"};if(n.startsWith("corpus:"))return{kind:"corpus",name:n.slice(7)||"unknown"};if(n.startsWith("child:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("world:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("mud:"))return{kind:"corpus",name:`mud:${n.slice(4).split(":")[0]||"unknown"}`};if(n.startsWith("ace:")){let s=cb(n.slice(4));return db(s)||{kind:"operator",...s}}if(n.startsWith("teach:")){let s=n.slice(6),o=P_(s);if(o)return o;let r=cb(s);return db(r)||{kind:"teach",...r}}if(n.startsWith("web:"))return{kind:"web",url:n.slice(4)};if(n.startsWith("url:"))return{kind:"web",url:n.slice(4)};if(n.startsWith("news-fixture:"))return{kind:"corpus",name:n.slice(13).split("@")[0]||"unknown"};if(n.startsWith("extracted:news:"))return{kind:"web",url:Id(n.slice(10))};if(n.startsWith("news:"))return{kind:"web",url:Id(n)};if(n.startsWith("extracted:research:"))return Cd(n.slice(19));if(n.startsWith("optimistic-extract:")){let s=n.slice(19);return{kind:"optimisticExtract",name:(s.startsWith("news:")||s.startsWith("research:")?D_(s):s)||"unknown"}}return n.startsWith("extracted:")?{kind:"extracted",name:n.slice(10)||"unknown"}:n.startsWith("entailed:")?{kind:"entailed",rule:n.slice(9)}:n.startsWith("chat:")||n.startsWith("session:")||n.startsWith("operator")?{kind:"operator"}:null}function gb(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return pb;let n=Number(t);return Number.isFinite(n)?Math.max(Nd,Math.min(mb,n)):pb}function bb(e,t=Date.now(),n=B_){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return fb+(1-fb)*Math.pow(.5,o/n)}function wb(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let f of o){if(r.has(f))continue;r.add(f);let h=t[f],m=z_(h);if(!m)continue;i.push(m);let b=(Os[m]??0)*gb(h);a.push(Math.max(0,Math.min(1,b)))}let c=0,l=1;for(let f of a)l*=1-f;if(a.length&&(c=Math.min(1,1-l)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let f=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;c=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*f))}let u=bb(e?.createdAt,s,n.halfLifeMs),d=Dr(Math.min(1,c*u)),p={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Dr(u)};return{score:d,inputs:p}}function mc(e,t){let n=(Os[e]??0)*gb(t);return Dr(Math.max(0,Math.min(1,n)))}function U_(e){if(e==="operator")return 1;let t=Os[e];return t===void 0?1:(t+1)/2}function gc(e,t={}){let n=typeof t.now=="number"?t.now:Date.now(),s=Array.isArray(e)?e:[],o=new Map,r=[];for(let a of s){let c=bb(a?.assertedAt,n,t.halfLifeMs),l=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,l*c)),p=o.get(u)||{complement:1,strongest:0};p.complement*=1-d,p.strongest=Math.max(p.strongest,d),o.set(u,p),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:l,recency:Dr(c)})}let i=1;for(let[a,c]of o){let l=Math.max(U_(a),c.strongest);i*=1-Math.min(1-c.complement,l)}return{score:s.length?Dr(Math.min(1,1-i)):0,inputs:r}}function yb(e){return gc(e,{halfLifeMs:W_})}function $b({factsAsserted:e=0,factsContradicted:t=0}={}){let n=Math.max(0,Number(e)||0),s=Math.max(0,Number(t)||0),o=Math.max(-1,Math.min(1,(n-2*s)/Math.max(1,n))),r=n/(n+G_),i=(o*r+1)/2;return Dr(Nd+(mb-Nd)*i)}var Br,hc,dt,Is,lb,ub,M_,F_,Id,Od,Os,Ld,hb,B_,fb,Nd,mb,pb,Dr,z_,W_,G_,Nn=L(()=>{Br="mgx:trustScore",hc="mgx:trustInputs",dt="mgx:createdAt",Is="mgx:updatedAt";lb="#node:",ub="peer:";M_="wikipedia-live",F_=e=>e===M_?"referenceLive":"reference",Id=e=>String(e||"").split("@")[0];Od="ingest#";Os=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Ld=Object.freeze({operator:{subClass:"tmct:AgentSource",prov:"prov:Agent"},teach:{subClass:"tmct:AgentSource",prov:"prov:Agent"},provider:{subClass:"tmct:AgentSource",prov:"prov:Agent"},corpus:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},corpusWeak:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},reference:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},referenceLive:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},web:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},extracted:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},optimisticExtract:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},entailed:{subClass:"tmct:ActivitySource",prov:"prov:Activity"}}),hb=new Set(Object.entries(Ld).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),B_=720*60*60*1e3,fb=.9,Nd=.5,mb=1.5,pb=1,Dr=(e,t=6)=>Number(e.toFixed(t)),z_=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";W_=1/0;G_=19});var Vo,Pd=L(()=>{Vo=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Md(e,t){return Math.log(1+e/(1+t))}var Mi=L(()=>{});var wc={};Nt(wc,{bfsLevels:()=>bc,findActionPath:()=>Fi,findReachableSet:()=>Fd});function Sb(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function vb(e,t){let n=[];for(let{action:s,nextState:o}of t(e)||[])n.push({state:o,actions:[s],states:[e,o]});return n}function Fi(e,t,n,{maxDepth:s=50,stateKey:o=Sb}={}){if(t(e))return{actions:[],states:[e]};let r=vb(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let l of r)if(t(l.state))return{actions:l.actions,states:l.states};if(a===s)break;let c=[];for(let l of r){let u=o(l.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:p}of n(l.state)||[]){let f=o(p);i.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}}r=c}return null}function Fd(e,t,{maxDepth:n=50,stateKey:s=Sb}={}){let o=vb(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let c=[];for(let l of o){let u=s(l.state);if(!r.has(u)&&(r.add(u),i.push({node:l.state,path:{actions:l.actions,states:l.states}}),a!==n))for(let{action:d,nextState:p}of t(l.state)||[]){let f=s(p);r.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}o=c}return i}function*bc(e,t,{maxDepth:n=8,keyOf:s=o=>o}={}){let o=new Set([e]),r=[e];for(let i=1;i<=n&&r.length;i+=1){let a=[],c=[];for(let l of r)for(let u of t(l)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),c.push(d))}r=c,yield a}}var Cs=L(()=>{});function $c(e){let t=Array.isArray(e?.individuals)?e.individuals:[],n=new Map;for(let r of t)r&&r.id&&n.set(r.id,r);let s=(Array.isArray(e?.objectProperties)?e.objectProperties:[]).filter(r=>r&&(r.predicate||r.prop)).map(r=>{let i=(Array.isArray(r.examples)?r.examples:[]).filter(a=>a&&a.subject&&a.object);return{predicate:String(r.predicate||""),prop:r.prop||null,count:Number(r.count)||i.length,edges:i}}),o=s.filter(r=>r.count>r.edges.length).map(r=>({predicate:r.predicate,count:r.count,shown:r.edges.length}));return{individuals:t,byId:n,relations:s,truncated:o,generatedAt:e?.generated_at||null,proseIndex:e?.proseIndex||{}}}function Di(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Ps(e){let t=String(e?.prop||"").toLowerCase();if(Eb[t])return Eb[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":/denot/.test(n)?"denotes":/\bserve/.test(n)?"serves":null}function on(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Dd(e){let t=on(e).split("/");return t[t.length-1]}function V_(e){return(e?.derived_from||[]).filter(Pb).length}function xb(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+V_(e)}function kn(e,t){let n=on(t);if(!n)return{match:null,candidates:[]};let s=Dd(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=on(i.label),c=String(i.id||"").toLowerCase(),l=0;a===n||c===n?l=100:a.endsWith(`/${n}`)||o&&(Dd(a)===s||Dd(a).replace(/\.[a-z]+$/,"")===s)?l=80:a.includes(n)&&(l=Math.max(10,50-(a.length-n.length))),l>0&&r.push({ind:i,score:l})}return r.sort((i,a)=>a.score-i.score||xb(a.ind)-xb(i.ind)||String(i.ind.label).length-String(a.ind.label).length),{match:r[0]?.ind||null,candidates:r.slice(1,5).map(i=>i.ind)}}function Jt(e){let t=(e?.attributes||[]).find(s=>s.key==="site");if(!t)return null;let n=String(t.value).match(/^(.*):(\d+)(?:-(\d+))?$/);return n?{path:n[1],start:Number(n[2]),end:n[3]?Number(n[3]):Number(n[2])}:null}function K_(e,t){let n=[],s=[];for(let o of e.relations){let r=o.edges.filter(a=>a.subject===t),i=o.edges.filter(a=>a.object===t);r.length&&n.push({group:o,edges:r}),i.length&&s.push({group:o,edges:i})}return{out:n,incoming:s}}function kb(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Ls(e){let t=e||"Entity",n=qn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function xt(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Vd(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Ls(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(Pb);o.length&&s.push(`attestation: ${o.length} provenance ref(s)`);for(let c of t.attributes||[])s.push(`attribute: ${c.key} = ${c.value}${c.prop?` [${c.prop}]`:""}`);let{out:r,incoming:i}=K_(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:c,edges:l}of r)s.push(` ${kb(c)} (${l.length}) \u2192 ${xt(l.map(u=>u.objectLabel||u.object),jb)}`);for(let{group:c,edges:l}of i)s.push(` \u2190 ${kb(c)} (${l.length}) by ${xt(l.map(u=>u.subjectLabel||u.subject),jb)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${xt(a,H_)}`),n.length&&s.push(`other matches: ${n.map(c=>`${c.label} (${Ls(c.class)})`).join(", ")}`),e.truncated.length&&s.push(q_(e)),s.join(`
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function Fb(e){let t=new Map;for(let n of e.relations)if(Ps(n)==="defines")for(let s of n.edges)t.has(s.subject)||t.set(s.subject,[]),t.get(s.subject).push(s.objectLabel||s.object);return t}function _b(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Wb(e,t,n=null){let s=n||(i=>Ns(e,i)),o=new Map,r=(i,a)=>{!i||!a||i===a||(o.has(i)||o.set(i,new Set),o.has(a)||o.set(a,new Set),o.get(i).add(a),o.get(a).add(i))};for(let i of t)for(let a of Ae(e,i))r(s(a.subject),s(a.object));return o}function OT(e,t,n){if(t.length<2)return;let s=new Map(t.map(l=>[l.ind.id,l])),o=new Map(t.map(l=>[l.ind.id,l.score])),r=l=>{if(!l.size)return[[],[]];let u=0;for(let h of l.values())u=Math.max(u,h);let d=[...l.entries()].sort((h,m)=>m[1]-h[1]),p=[],f=[];for(let[h,m]of d)m>=u*vT&&p.length<n?p.push([h,m]):f.length<Rb&&f.push([h,m]);return[p,f]},[i,a]=r(new Map(t.map(l=>[l.ind.id,l.score]))),c=new Set(i.map(([l])=>l));for(let l=0;l<kT&&i.length;l++){let u=new Map,d=[];for(let p of jT){let f=Wb(e,p),h=new Map;for(let[g,w]of i)for(let y of f.get(g)||[])o.has(y)&&h.set(y,Math.max(h.get(y)||0,w));let[m,b]=r(h);for(let[g,w]of m)u.set(g,Math.max(u.get(g)||0,w));d.push(...b)}a.push(...d);for(let[p,f]of u){if(c.has(p))continue;let h=s.get(p);h&&(h.score+=Math.min(f*ET,h.score*xT),c.add(p))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,Rb).filter(([p])=>!c.has(p)))}}function CT(e,t=[],{depth:n=Bb,q:s=Ub,nodeLimit:o=zb,kinds:r=RT,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:c=null,hubDegree:l=1/0}={}){let u=new Map(t.map(k=>[k.ind.id,k])),d=0;for(let k of t)d=Math.max(d,k.score);let p=t.length>0&&d>0,f=new Set(c??u.keys());if(!f.size)return[];let h=Wb(e,r,a),m=k=>h.get(k)?.size||0,b=[],g=(k,R)=>k.hop!==R.hop?k.hop<R.hop:k.deg!==R.deg?k.deg<R.deg:k.id<R.id,w=(k,R)=>{let $=b[k];b[k]=b[R],b[R]=$},y=k=>{b.push(k);let R=b.length-1;for(;R>0;){let $=R-1>>1;if(g(b[R],b[$]))w(R,$),R=$;else break}},S=()=>{let k=b[0],R=b.pop();if(b.length){b[0]=R;let $=0;for(;;){let _=2*$+1,O=2*$+2,x=$;if(_<b.length&&g(b[_],b[x])&&(x=_),O<b.length&&g(b[O],b[x])&&(x=O),x===$)break;w($,x),$=x}}return k},T=new Set(f);for(let k of f)y({id:k,hop:0,deg:m(k)});let v=null,E=0,I=[];for(;b.length&&E<o;){let k=S();if(I.push({id:k.id,hop:k.hop}),!f.has(k.id)){if(p){let _=d*_T*Math.pow(TT,k.hop-1),O=u.get(k.id);if(O)O.score+=Math.min(_*AT,O.score*IT);else{let x=e.byId?.get?.(k.id);if(x&&i(x)){v||(v=Fb(e));let j=v.get(x.id)||[],M={ind:x,score:_,defineCount:j.length,matching:[],density:0};t.push(M),u.set(k.id,M)}}}E++}if(k.hop>=n||k.hop>0&&m(k.id)>l)continue;let R=[];for(let _ of h.get(k.id)||[]){if(T.has(_))continue;let O=e.byId?.get?.(_);!O||!i(O)||R.push({id:_,deg:m(_)})}if(!R.length)continue;R.sort((_,O)=>_.deg-O.deg||(_.id<O.id?-1:_.id>O.id?1:0));let $=Math.max(1,Math.floor(s*R.length));for(let _=0;_<$;_++){let O=R[_];T.add(O.id),y({id:O.id,hop:k.hop+1,deg:O.deg})}}return I}function Gb(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:c=!1,proseLayers:l=!1,literalMention:u=!1,rawQuery:d=""}=n,p=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,f=Fb(e),h=[];for(let S of e.individuals){if((S.class||"")!=="Module")continue;let T=String(S.label),v=T.toLowerCase(),E=f.get(S.id)||[],I=new Set(E.map($=>$.toLowerCase())),k=new Set;for(let $ of E)for(let _ of _b($))k.add(_);let R=u?String((S.attributes||[]).find($=>$.key==="dotted")?.value||"").toLowerCase():"";h.push({ind:S,label:T,labelLc:v,defines:E,symSet:I,symComps:k,dotted:R})}let m=h.length||1,b=new Map,g=S=>{let T=0;for(let v of h)(v.labelLc.includes(S)||v.symComps.has(S)||v.symSet.has(S))&&T++;return T},w=S=>(b.has(S)||b.set(S,Md(m,g(S))),b.get(S));for(let S of t)w(S);let y=[];for(let S of h){let T=0,v=0,E=0,I=[];for(let O of t){let x=b.get(O)||0;x&&(S.symSet.has(O)?(T+=x*Db,E++):S.symComps.has(O)&&(I.push(x),E++),S.labelLc.includes(O)&&(v+=x*Q_))}I.sort((O,x)=>x-O);let k=0;for(let O=0;O<Math.min(I.length,eT);O++)k+=I[O]*Z_;let R=T+v+k;if(!R)continue;s&&(Vo(S.labelLc)||oT(S.labelLc))?R*=sT:Vo(S.labelLc)&&(R*=.4);let $=S.defines.filter(O=>{let x=O.toLowerCase(),j=_b(O);return t.some(M=>x===M||j.has(M))}),_=S.defines.length?E/S.defines.length:0;y.push({ind:S.ind,score:R,defineCount:S.defines.length,matching:$,density:_})}if(u&&d&&y.length){let S=String(d).toLowerCase(),T=k=>k!=null&&/[a-z0-9_./]/.test(k),v=k=>{for(let R=S.indexOf(k);R!==-1;R=S.indexOf(k,R+1))if(!T(S[R-1])&&!T(S[R+k.length]))return!0;return!1},E=new Map(h.map(k=>[k.ind.id,k])),I=0;for(let k of y)I=Math.max(I,k.score);for(let k of y){let R=E.get(k.ind.id);if(!R)continue;let $=0;for(let _ of new Set([R.dotted,R.labelLc])){if(!_||_.split(/[./]+/).filter(Boolean).length<wT||!v(_))continue;let O=[...new Set(_.split(/[^a-z0-9_]+/).filter(Boolean))].map(w).sort((j,M)=>M-j),x=0;for(let j=0;j<Math.min(O.length,yT);j++)x+=O[j]*bT;$=Math.max($,x)}$&&(k.score+=Math.min($*$T,I*ST))}}if(y.length>1){let S=new Map(y.map(v=>[v.ind.id,v.score])),T=new Map;for(let v of Ae(e,"imports"))!S.has(v.subject)&&!S.has(v.object)||(T.has(v.subject)||T.set(v.subject,new Set),T.has(v.object)||T.set(v.object,new Set),T.get(v.subject).add(v.object),T.get(v.object).add(v.subject));for(let v of y){let E=0;for(let I of T.get(v.ind.id)||[])E=Math.max(E,S.get(I)||0);v.score+=Math.min(E*tT,v.score*nT)}}if(o&&y.length>1){let S=new Map(y.map(v=>[v.ind.id,v.score])),T=new Map;for(let v of["calls","callsSymbol"])for(let E of Ae(e,v)){let I=Ns(e,E.subject),k=Ns(e,E.object);!I||!k||I===k||!S.has(I)&&!S.has(k)||(T.has(I)||T.set(I,new Set),T.has(k)||T.set(k,new Set),T.get(I).add(k),T.get(k).add(I))}for(let v of y){let E=0;for(let I of T.get(v.ind.id)||[])E=Math.max(E,S.get(I)||0);v.score+=Math.min(E*rT,v.score*iT)}}if(r&&y.length>1){let S=new Map(y.map(v=>[v.ind.id,v.score])),T=new Map;for(let v of e.individuals)(v.class||"")==="Class"&&v.label&&T.set(String(v.label),v);for(let v of y){if(!lT(v.ind.label))continue;let E=0;for(let I of Ae(e,"inherits")){if(Ns(e,I.subject)!==v.ind.id||!uT(I.objectLabel))continue;let R=Ns(e,I.object);if(!R){let $=T.get(String(I.objectLabel||""));$&&(R=cs(e,$))}R&&(E=Math.max(E,S.get(R)||0))}v.score+=Math.min(E*aT,v.score*cT)}}if(c&&y.length&&e.proseIndex){let S=Go(e.proseIndex,t.join(" "),{limit:pT});if(S.length){let T=new Map;for(let{id:v,score:E}of S){let I=Ns(e,v);I&&T.set(I,(T.get(I)||0)+E)}for(let v of y){let E=T.get(v.ind.id)||0;E&&(v.score+=Math.min(E*dT,v.score*fT))}}}if(l&&y.length&&e.proseIndex){let S=new Map(y.map(E=>[E.ind.id,E])),T=new Map(h.map(E=>[E.ind.id,E])),v=new Map;for(let E of new Set(t)){let I=b.get(E)||0;if(!I)continue;let{ids:k}=ab(e.proseIndex,E);if(!k.length)continue;let R=new Set;for(let $ of k){let _=Ns(e,$);if(!_||R.has(_)||(R.add(_),!S.has(_)))continue;let O=T.get(_);O&&(O.symSet.has(E)||O.symComps.has(E)||O.labelLc.includes(E))||v.set(_,(v.get(_)||0)+I*gT)}}for(let E of y){let I=v.get(E.ind.id)||0;I&&(E.score+=Math.min(I*hT,E.score*mT))}}return i&&y.length>1&&OT(e,y,p),a&&y.length&&CT(e,y,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:Bb,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:Ub,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:zb}),y.sort((S,T)=>T.score-S.score||T.density-S.density||S.defineCount-T.defineCount||String(S.ind.label).length-String(T.ind.label).length),y}function Vb(e,t,n={}){let s=String(t||""),o=s.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);if(!o.length)return[];let r=n.literalMention?{...n,rawQuery:s}:n;return Gb(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function LT(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let c=0;c<e.length;c++){let l=e[c];if(l==="\\"){let u=e[c+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),c+=1,r="",i=!1;continue}if(o){l==="]"&&(o=!1,r="]",i=!1);continue}if(l==="["){o=!0,r="[",i=!1;continue}if(l==="?"&&(r==="("||i)){r="?",i=!1;continue}if(l==="*"||l==="+"||l==="?"){a(),r=l;continue}if(l==="{"){let u=e.indexOf("}",c),d=u===-1?"":e.slice(c+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),c=u,r="}";continue}r="{",i=!1;continue}r=l,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function Kd(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Tb)return{error:`name pattern is ${n.length} characters; the limit is ${Tb}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=LT(n);if(o)return{error:`name pattern "${n}" quantifies a group, which can backtrack for minutes on one label. Quantify a character or a class instead.`};if(r)return{error:`name pattern "${n}" uses a back-reference, which can backtrack for minutes on one label.`};if(s>Ab)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${Ab}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(c){if(a===null)a=t()+Ib;else if(t()>a)throw new yc(`name pattern "${n}" exceeded its ${Ib}ms matching budget.`);return i.test(String(c).slice(0,NT))}}}function Kb(e,t,{limit:n=Sc,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),c=String(s||"").trim().toLowerCase(),l=String(o||"").trim().toLowerCase(),u=null;if(r){let h=Kd(r);if(h.error)return h.error;u=h}if(c&&c!=="module")try{return BT(e,a,{limit:n,kind:c,decFilter:l,nameRe:u,toolNamePrefix:i})}catch(h){if(h instanceof yc)return h.message;throw h}if(!a.length&&!u&&!l)return"empty query";let d=Gb(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let p=d.slice(0,n),f=[`${d.length} module(s) match "${t}" (top ${p.length}):`];for(let{ind:h,defineCount:m,matching:b}of p){let g=b.length?` \u2014 matching: ${xt([...new Set(b)],J_)}`:"";f.push(`- ${h.label} (defines ${m} symbol(s))${g}`)}return f.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),f.join(`
|
|
4
|
-
`)}function Ae(e,t){let n=
|
|
5
|
-
`);let r=[],i=[];for(let a of o){let c=e.byId.get(a.object),l=
|
|
6
|
-
`)}function
|
|
7
|
-
`)}function
|
|
8
|
-
`)}function vc(e){let t=new Map;for(let n of e){let s=n.label.includes("/")?n.label.slice(0,n.label.lastIndexOf("/")):"(root)";t.set(s,(t.get(s)||0)+1)}return t}function Ec(e,t=""){let n=on(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||on(s.label).startsWith(n)))}function
|
|
9
|
-
`)}function
|
|
10
|
-
${xt(o,
|
|
1
|
+
(()=>{var u_=Object.defineProperty;var L=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Nt=(e,t)=>{for(var n in t)u_(e,n,{get:t[n],enumerable:!0})};var vt,R2,_2,T2,A2,I2,O2,C2,N2,L2,P2,M2,F2,D2,B2,z2,U2,ne,ve,Xt,yd,Cg,W2,G2,V2,Qe=L(()=>{vt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},R2=vt("createRequire"),_2=vt("readFileSync"),T2=vt("access"),A2=vt("readFile"),I2=vt("writeFile"),O2=vt("appendFile"),C2=vt("mkdir"),N2=vt("mkdtemp"),L2=vt("rename"),P2=vt("unlink"),M2=vt("rm"),F2=vt("stat"),D2=vt("copyFile"),B2=vt("readdir"),z2=vt("createReadStream"),U2=vt("createWriteStream"),ne=(...e)=>e.join("/"),ve=e=>String(e).replace(/\/[^/]*$/,""),Xt=(...e)=>e.join("/"),yd=e=>String(e).startsWith("/"),Cg="/",W2=vt("randomBytes"),G2=vt("spawnSync"),V2=vt("createInterface")});var Et,H2,q2,$d,Ne,Or,d_,_s,Ng,rc,Sd,Lg,f_,Y2,p_,X2,J2,Q2,Z2,eW,zt=L(()=>{Et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},H2=Et("createRequire"),q2=Et("readFileSync"),$d=Et("access"),Ne=Et("readFile"),Or=Et("writeFile"),d_=Et("appendFile"),_s=Et("mkdir"),Ng=Et("mkdtemp"),rc=Et("rename"),Sd=Et("unlink"),Lg=Et("rm"),f_=Et("stat"),Y2=Et("copyFile"),p_=Et("readdir"),X2=Et("createReadStream"),J2=Et("createWriteStream"),Q2=Et("randomBytes"),Z2=Et("spawnSync"),eW=Et("createInterface")});function Cr(e){let t=g_.exec(String(e||""));return t?t[1].toLowerCase():null}function b_(e){return/(?:[sxz]|ch|sh)$/i.test(e)?`${e}es`:/[^aeiou]y$/i.test(e)?`${e.slice(0,-1)}ies`:`${e}s`}function Bg(e){let t=String(e||""),n=Fo[t]||t.endsWith("Symbol")&&Fo[t.slice(0,-6)]||null;if(!n)return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase();let[s,...o]=n.bare.split(" ");return[b_(s),...o].join(" ")}function so(e,t){return!e||!w_.has(t)?e:e.shape==="ask"?{...e,subject:e.object,object:e.subject}:e.shape==="reverse"?{...e,shape:"forward"}:e.shape==="forward"?{...e,shape:"reverse"}:e}function ic(e){return String(e||"").replace(y_,"$1")}function oo(e){return e.replace($_,"").trim()}function En(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(v_,"").trim();if(s=s.replace(x_,"").trim(),s===t)break;t=s}return t}var Pg,Mg,h_,Fo,Do,Fg,Dg,m_,g_,zg,w_,vn,vd,y_,Gn,Ed,$_,S_,v_,E_,x_,he,Ai,ac,k_,Ug,nt,xn,ro,cc,xd,kd,jd,Wg,Ii,Bo,Gg,Vg,zo,In,Ts,io,Ge,Kg,Uo,Wo,ss,os,Hg,Oi,Nr,lc,Lr,qg,rs=L(()=>{Pg=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],Mg=["belongs to","belong to","is part of","are part of","is defined in","are defined in"],h_=["lives in","live in","sits in","sit in","sits inside","sit inside"],Fo={imports:{bare:"import",comment:"Module -> Module: subject's import graph references object (usesComplexType).",verbs:["couples to","couple to","depends on","imports","import","relies on","rely on","requires","require","references","reference","pulls in","pull in","built on","builds on","build on","uses code from","grabs","grab","pulls from","pull from","leans on","lean on","is wired to","are wired to","is hooked up to","are hooked up to","importing"]},uses:{bare:"use",comment:"query-side union: imports (Module->Module) + calls (Module->Module) + callsSymbol (fn->fn).",verbs:["uses","use","makes use of","make use of","talks to","talk to","using"]},calls:{bare:"call",comment:"Function/Method -> Function/Class (symbol-grain) or Module -> Module (coarse): subject invokes object.",verbs:["invokes","invoke","calls","call","runs","run","executes","execute","hits","hit","triggers","trigger","fires","fire","kicks off","kick off","calling"]},defines:{bare:"define",comment:"Module -> top-level Function/Class/Method/Attribute: subject declares object.",verbs:["defines","define","declares","declare","has","have","holds","hold","defining"]},contains:{bare:"contain",comment:"Class -> Method/Attribute: subject's membership includes object.",verbs:["contains","contain","containing",...Mg,...h_]},tests:{bare:"test",comment:"Module -> Module: subject is a test module importing/covering object.",verbs:["tests","test","covers","cover","verifies","verify","exercises","exercise","checks","check","makes sure of","make sure of","testing"]},inherits:{bare:"inherit from",comment:"Class -> Class: subject's declared base resolves to object (subclassOf).",verbs:["inherits from","inherit from","inherits","inherit","extends","extend","subclasses","subclass","derives from","derive from","is a subclass of","are a subclass of","is a kind of","are a kind of","is built off","are built off","is built on top of","are built on top of","extending","inheriting from","inheriting","subclassing","extends from",...Pg]},touches:{bare:"touch",comment:"Commit -> Module (coarse) or Commit -> symbol (fine, touchesSymbol): a commit's changed-line-range intersects object.",verbs:["touched","touches","changed","change","modified","modifies","was changed in","were changed in","was edited in","were edited in","was modified by","were modified by","was tweaked in","were tweaked in","got changed in","got edited in","touch","changed in","landed in","land in","was in","were in","went into","included in","updated","edited","touching"]},cochange:{bare:"co-change with",comment:"Module -> Module: subject and object are frequently committed together (changeCoupledWith).",verbs:["changed with","co-changes with","co-change with","changes alongside","change alongside","shares commits with","share commits with","tends to change together with","tend to change together with","moves together with","move together with","changed together with","change together with","changes together with","changes with","change with","tends to change with","tend to change with","usually changes with"]},reexports:{bare:"re-export",comment:"Module -> exported symbol: subject's public API surface (__all__/export list).",verbs:["exports","export","re-exports","re-export","passes through","pass through","exposes","expose","exporting"]},serves:{bare:"serve",comment:"subject provides or backs the object \u2014 a handler serving a route, a module serving a surface (mgx:serves).",verbs:["serves","serve","serving"]},denotes:{bare:"denote",comment:"subject names the object \u2014 a glossary/lexicon term denoting a code entity (mgx:denotes).",verbs:["denotes","denote","denoting"]}},Do=Object.freeze({placement:Object.freeze({predicate:"mgx:currently-in",comment:"individual -> place: where the subject is right now.",nouns:Object.freeze(["location","locations","position","positions","place","places","whereabouts","room","rooms"]),reads:"is in",matchesLocativePredicates:!0}),mood:Object.freeze({predicate:"mgx:feels",comment:"individual -> mood word: how the subject feels right now.",nouns:Object.freeze(["mood","moods","feeling","feelings","emotion","emotions"]),reads:"feels"}),mass:Object.freeze({predicate:"mgx:hasMass",comment:"individual -> number: the subject's current mass.",nouns:Object.freeze(["mass","masses","weight","weights"]),reads:"has mass"})}),Fg=Object.freeze(Object.fromEntries(Object.entries(Do).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),Dg=Object.freeze(Object.values(Do).map(e=>e.predicate)),m_=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),g_=new RegExp(`^mgx:[a-z]+-(${m_.join("|")})$`,"i");zg=Object.freeze([...Pg,"is the superclass of","are the superclass of","is the parent class of"]),w_=Object.freeze(new Set([...zg,...Mg]));vn=Object.freeze(["defined","declared","located","implemented"]),vd=Object.freeze(["now","currently","right now","at the moment","these days","today"]),y_=new RegExp(`\\s+(?:${[...vd].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");Gn=Object.freeze(["mentioned","referenced"]),Ed=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),$_=new RegExp(`\\s+(?:${Ed.join("|")})\\s*[?.!]*$`,"i");S_=Object.freeze(["then","though","too"]),v_=new RegExp(`\\s+(?:${S_.join("|")})\\s*[?.!]*$`,"i"),E_=Object.freeze(["please explain","explain"]),x_=new RegExp(`,\\s*(?:${E_.join("|")})\\s*[?.!]*$`,"i");he=Object.freeze(Object.fromEntries(Object.entries(Fo).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Ai=Object.freeze(new Set(["has","have","holds","hold"])),ac=Object.freeze(new Set(["search","describe","signature","impact","members","subclasses","exports","callers","callees","calls","tests","untested","history","cochanges","architecture","arch","related","sprite"])),k_=e=>!zg.includes(e),Ug=Object.freeze([...new Set(Object.keys(he).filter(k_).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),nt=Object.freeze({function:"Function",functions:"Function",method:"Method",methods:"Method",class:"Class",classes:"Class",module:"Module",modules:"Module",mod:"Module",mods:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),xn=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),ro=Object.freeze({imported:"imports",called:"calls",used:"uses",tested:"tests",covered:"tests",verified:"tests",exercised:"tests",checked:"tests",defined:"defines",declared:"defines",inherited:"inherits",extended:"inherits",subclassed:"inherits",contained:"contains",exported:"reexports","re-exported":"reexports",exposed:"reexports",touched:"touches",changed:"touches",modified:"touches",edited:"touches",updated:"touches"}),cc=Object.freeze({"inherited from":{kind:"inherits",role:"object"},"extended from":{kind:"inherits",role:"object"},"subclassed from":{kind:"inherits",role:"object"},"defined in":{kind:"defines",role:"agent"},"declared in":{kind:"defines",role:"agent"},"contained in":{kind:"contains",role:"agent"},"imported by":{kind:"imports",role:"agent"},"called by":{kind:"calls",role:"agent"},"used by":{kind:"uses",role:"agent"},"tested by":{kind:"tests",role:"agent"},"covered by":{kind:"tests",role:"agent"},"touched by":{kind:"touches",role:"agent"},"changed by":{kind:"touches",role:"agent"},"exported by":{kind:"reexports",role:"agent"}}),xd=Object.freeze({"ain't":"is not",aint:"is not","isn't":"is not",isnt:"is not","aren't":"are not",arent:"are not","doesn't":"does not",doesnt:"does not","don't":"do not",dont:"do not","didn't":"did not",didnt:"did not","there's":"there is",theres:"there is","what's":"what is",whats:"what is","who's":"who is",whos:"who is",gonna:"going to",wanna:"want to",gotta:"got to",yer:"your",ur:"your",gimme:"give me"}),kd=Object.freeze({funtion:"function",funtions:"functions",fucntion:"function",fucntions:"functions",functoin:"function",functoins:"functions",calss:"class",calsses:"classes",classs:"class",clases:"classes",modul:"module",moduls:"modules",moduel:"module",moduels:"modules",moudle:"module",moudles:"modules",methdo:"method",methdos:"methods",mehtod:"method",mehtods:"methods",comit:"commit",comits:"commits",commmit:"commit",commmits:"commits",varaible:"variable",varaibles:"variables",varibale:"variable",varibales:"variables",atribute:"attribute",atributes:"attributes",improt:"import",improts:"imports",imoprt:"import",imoprts:"imports",inherts:"inherits",inheirts:"inherits",extands:"extends",extneds:"extends",depnds:"depends",touchs:"touches",tuoches:"touches",touhced:"touched",touchd:"touched",defned:"defined",chagned:"changed",chnaged:"changed",chagnes:"changes",chnages:"changes",calles:"calls",exprot:"export",exprots:"exports",tets:"tests",whcih:"which",wich:"which",whihc:"which",wehre:"where",whre:"where",waht:"what",wat:"what",dat:"that",dose:"does",doess:"does",teh:"the",manyn:"many",mnay:"many",amny:"many",mnany:"many",hwo:"how",coutn:"count",conut:"count",cuont:"count",ocunt:"count",numer:"number",nubmer:"number",numbr:"number",nmuber:"number",lst:"list",lsit:"list",ilst:"list",shwo:"show",hsow:"show",dispaly:"display",dsiplay:"display",funtcions:"functions",funciton:"function",funcitons:"functions"}),jd=Object.freeze({folder:"module",folders:"modules",directory:"module",directories:"modules",func:"function",funcs:"functions",changeset:"commit",changesets:"commits",revision:"commit",revisions:"commits",property:"attribute",properties:"attributes"}),Wg=/\b([a-z]{3,})in'/gi,Ii=Object.freeze(["um","uh","erm","so","like","yo","hey","bru","bro","fam","mate","please","could you","can you","would you","tell me","i wonder","just wondering","quickly","real quick","kinda","sorta","btw","by the way","you","quick q"]),Bo=Object.freeze(["this","it","that","here","this one","that one"]),Gg=Object.freeze([{re:/\bthere\s+is\s+not\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bthere\s+is\s+no\s+\S+\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bis\s+not\s+there\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\b(?:nobody|nothing|no one)\s+(\S.*?)(?:,?\s+does\s+it\??|,?\s+do\s+they\??)?$/i,to:e=>`what ${e[1]}`}]),Vg=Object.freeze([{re:/^what\s+(?:is|was|were|are)\s+in\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+(?:went|got)\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+made\s+it\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`}]),zo=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),In=Object.freeze(["that","which","who"]),Ts=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),io=Object.freeze({"but do not":"difference","but does not":"difference","and do not":"difference","and does not":"difference","but not":"difference","and not":"difference",except:"difference",without:"difference",and:"intersection",plus:"intersection",but:"intersection",or:"union"}),Ge=Object.freeze({public:{via:"visibility",value:"public"},private:{via:"visibility",value:"private"},protected:{via:"visibility",value:"protected"},static:{via:"attr",attr:"isStatic"},abstract:{via:"attr",attr:"isAbstract"},constant:{via:"attr",attr:"isConstant"},exported:{via:"exported"},"re-exported":{via:"exported"},tested:{via:"tested",value:!0},covered:{via:"tested",value:!0},untested:{via:"tested",value:!1},uncovered:{via:"tested",value:!1}}),Kg=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Uo=Object.freeze(["how many","how much","how many of","number of","total number of","quantity of","tally of","sum of","total of","amount of","count","count up","count of","tot up"]),Wo=Object.freeze(["list","show","show me","show us","display","print","print out","dump","enumerate","name","give me","get me","spit out","rattle off","run down","run through","ls","what are","which are"]),ss=Object.freeze({most:"most",greatest:"most",highest:"most",biggest:"most",largest:"most","most-connected":"most","most connected":"most",fewest:"fewest",least:"fewest",smallest:"fewest",lowest:"fewest"}),os=Object.freeze({imports:{kind:"imports",dir:"out"},dependencies:{kind:"imports",dir:"out"},importers:{kind:"imports",dir:"in"},dependents:{kind:"imports",dir:"in"},callers:{kind:"calls",dir:"in",sibling:"callsSymbol"},callees:{kind:"calls",dir:"out",sibling:"callsSymbol"},calls:{kind:"calls",dir:"out",sibling:"callsSymbol"},methods:{kind:"contains",dir:"out",filter:"Method"},members:{kind:"contains",dir:"out"},tests:{kind:"tests",dir:"in"},test:{kind:"tests",dir:"in"},subclasses:{kind:"inherits",dir:"in"},connections:{kind:"*",dir:"both"},edges:{kind:"*",dir:"both"},connected:{kind:"*",dir:"both"},imported:{kind:"imports",dir:"in"},"depended-on":{kind:"imports",dir:"in"},depended:{kind:"imports",dir:"in"},used:{kind:"imports",dir:"in",sibling:"callsSymbol"},called:{kind:"calls",dir:"in",sibling:"callsSymbol"}}),Hg=Object.freeze({tests:"Module",test:"Module"}),Oi=Object.freeze(["those","them","these"]),Nr=Object.freeze(["contains","defines"]),lc=Object.freeze(["the","a","an","some","other","about","please","pls","plz","kindly","just","simply","maybe","perhaps","thanks","thank","ta","cheers","too","also","well","either","sorry","oops","actually","mean","meant","rather","hi","hello","hey","yo","hiya","howdy","ok","okay","matey","mate","buddy","pal","dude","man","bro","bru","fam","friend","sir","maam","folks","guys","everyone","dear","tmct","show","tell","give","list","find","me","us","lemme"]),Lr=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),qg=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var st,ao,uc=L(()=>{st="#000000",ao=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${st}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${st}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var j_,On,Yg,Xg,Rd,Jg,iW,aW,Qg=L(()=>{rs();uc();j_=()=>Object.keys(ao).sort(),On=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Yg=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Xg=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),Rd=Object.freeze([{name:"tmct_context",tier:"hot",summary:"A sized edit bundle for one symbol \u2014 exemplar source, sibling signatures, registration anchor and the insertion region, in one call.",agentDescription:"START HERE to add/modify code: ONE call returns a sized edit bundle (exemplar source, sibling signatures, registration, insertion region) \u2014 then write directly, don't Read.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"Module path (e.g. path/to/module) or a sibling function/class name defined in it."},depth:{type:"string",enum:["min","auto","full"],default:"auto",description:"auto (sized to the task) | min (leanest) | full (every section)."}}},example:{symbol:"django/utils/text.py"}},{name:"tmct_snippet",tier:"hot",summary:"The exact source of one function, class or Class.method \u2014 its line span only, plus a one-line in-repo call hint.",agentDescription:"EXACT source of one function/class/Class.method by name (its line span only) + a one-line in-repo call hint. Prefer over Read for a single symbol.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"function/class name, Class.method, or fn:<path>#name."}}},example:{symbol:"Truncator.chars"}},{name:"tmct_ask",tier:"hot",summary:"A structural question in plain English, answered from the graph in one call \u2014 no model, and a clean miss instead of a guess.",agentDescription:'Ask a structural question in plain English: "which functions call X", "what uses X", "where is X defined", "when did X change". One call, no model. A clean miss beats a guess.',inputSchema:{type:"object",required:["query"],properties:{query:{type:"string",description:'A free-text question, e.g. "which functions explicitly couple to logging".'}}},example:{query:"which modules import src/core/model.mjs"},chat:{exampleRepo:"examples/mini-webapp",grammar:[{form:"which <things> <relation-verb> <entity>",example:"which modules import src/core/model.mjs",answers:"the imports edge, read forwards"},{form:"what is <relation-verb-passive> <entity>",example:"what is imported by src/core/store.mjs",answers:"the same edge, read backwards \u2014 a passive is the opposite direction, not a synonym"},{form:"what <relation-verb> <entity>",example:"what uses src/lib/http.mjs",answers:"the uses union: imports plus calls"},{form:"where is <entity> <where-marker>",example:"where is saveStore defined",answers:"the definition's file and line span"},{form:"when did <entity> change",example:"when did src/core/store.mjs change",answers:"the commits that touched it, newest first"}],whereMarkers:vn}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:On("A module path, symbol name, or Class.method."),example:{symbol:"django/utils/text.py"}},{name:"tmct_signature",tier:"cold",summary:"One symbol's API surface (params, returns, raises/catches, flags, decorators, doc) without the body.",inputSchema:On("A function, method, or Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_impact",tier:"cold",summary:"Transitive reverse closure over imports/calls \u2014 what breaks if a module or symbol changes, by depth, with tests.",inputSchema:Yg("The module (or a symbol it defines) whose dependents you want."),example:{module:"django/utils/text.py"}},{name:"tmct_search",tier:"cold",summary:"Free-text/ranked lookup over the code-map to find the right module or symbol.",inputSchema:{type:"object",required:[],properties:{query:{type:"string",description:"Free text to rank against the code-map. Required unless kind narrows the search on its own."},kind:{type:"string",description:"Restrict to an entity class, e.g. function, class, module."},decorator:{type:"string",description:"Restrict to definitions carrying this decorator."},name:{type:"string",description:"Restrict to definitions whose name matches."}}},example:{query:"template filters",kind:"function"}},{name:"tmct_members",tier:"cold",summary:"A class's methods + attributes (file:line, decorators) in one slice.",inputSchema:Xg("The class whose members you want."),example:{class:"Truncator"}},{name:"tmct_subclasses",tier:"cold",summary:"A class's base classes plus the transitive set of classes that extend it.",inputSchema:Xg("The class to walk the inheritance edges of."),example:{class:"Field"}},{name:"tmct_related",tier:"cold",summary:"A term's synonyms (skos:altLabel) and related concepts (skos:related), from the memory graph's relation facts.",inputSchema:{type:"object",required:["term"],properties:{term:{type:"string",description:"The term whose synonyms / related concepts you want."}}},example:{term:"sofa"}},{name:"tmct_sprite",tier:"cold",summary:"The sprite markup for a class, resolved up the taught rdfs:subClassOf chain \u2014 with the expression and size asked for, and the ancestor chain the resolver walked to find it.",inputSchema:{type:"object",required:["class"],properties:{class:{type:"string",description:"The class to draw, e.g. spider. Resolved through the memory graph's own rdfs:subClassOf taxonomy."},expression:{type:"string",enum:j_(),description:"The face the sprite wears, as an mgx:feels value. A class whose template takes no expression parameter misses rather than dropping it."},size:{type:"string",description:"A taught size property word (mgx:hasProperty), resolved to a numeric render SCALE \u2014 the size of the thing drawn, not a choice of template tier."}}},example:{class:"spider",expression:"happy",size:"large"}},{name:"tmct_architecture",tier:"cold",summary:"Package/module map + the most-imported hub modules (optionally scoped to a package).",inputSchema:{type:"object",required:[],properties:{package:{type:"string",description:"Scope the map to one package. Omit for the whole repository."}}},example:{package:"django/template"}},{name:"tmct_exports",tier:"cold",summary:"A module's public __all__ surface, each name resolved to the module that defines it.",inputSchema:Yg("The module whose public API surface you want."),example:{module:"django/db/models/__init__.py"}},{name:"tmct_tests_for",tier:"cold",summary:"The test modules covering a symbol or module, from the typed test edges.",inputSchema:On("The symbol or module to find covering tests for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_untested",tier:"cold",summary:"Source modules with no covering test module \u2014 a coverage-gap view (no arguments).",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_history",tier:"cold",summary:"Recent commits that touched a symbol's module (newest first).",inputSchema:On("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_file_history",tier:"cold",summary:"Commits that touched a symbol's module, each with author / date / subject.",inputSchema:On("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_method_history",tier:"cold",summary:"Commits that touched a specific method symbol (fine-grained), with author / date / subject.",inputSchema:On("A Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_class_history",tier:"cold",summary:"Commits that touched a specific class symbol (fine-grained), with author / date / subject.",inputSchema:On("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:On("The symbol whose callers you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_callees",tier:"cold",summary:"Modules a symbol's module calls into (one hop).",inputSchema:On("The symbol whose callees you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_calls",tier:"cold",summary:"The in-repo symbols a function calls (fn\u2192fn), each with file:line.",inputSchema:On("The function whose in-repo call sites you want."),example:{symbol:"slugify"}},{name:"tmct_cochanges",tier:"cold",summary:"Modules that historically change in the same commit as a symbol's module (git co-change).",inputSchema:On("The symbol whose module's change-coupling you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_context_more",tier:"cold",summary:"The bundle sections a lean tmct_context omitted (siblings / tests / cochange / class members / re-exports).",inputSchema:On("The symbol a lean tmct_context bundle was built for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_export",tier:"cold",summary:"Every stored memory fact as JSONL (subject/predicate/object/provenance) \u2014 the shape `tmct extract` emits, for backup or audit.",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_ingest",tier:"cold",summary:"Ground plain text into memory facts with the same deterministic recognizer the chat teach lane uses \u2014 the strict tier, plus an optional lower-trust fuzzy tier \u2014 and report the canonical triples.",inputSchema:{type:"object",required:["text"],properties:{text:{type:"string",description:"The plain text to ground into facts."},optimistic:{type:"boolean",description:"Also run the lower-trust fuzzy tier over sentences the strict recognizer skips."}}},example:{text:"A kettle is a container. An otter is a mammal.",optimistic:!0}}]),Jg=Rd.filter(e=>e.tier==="hot"),iW=Rd.filter(e=>e.tier==="cold"),aW=Object.freeze(Rd.map(e=>e.name))});var Zg,Le,sn=L(()=>{Qe();Zg=ne(".tmct","graph.json"),Le=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function R_(e){let t=new Set;for(let n of Array.isArray(e?.individuals)?e.individuals:[])n&&n.id&&t.add(n.id);return t}function eb(e){let t=(Array.isArray(e)?e:[]).map((c,l)=>({file:c?.file,payload:c?.payload||{},name:c?.name!=null&&String(c.name).length?String(c.name):String(l)})),n=t.map(({payload:c})=>R_(c)),s=new Map;for(let c of n)for(let l of c)s.set(l,(s.get(l)||0)+1);let o=new Set([...s.entries()].filter(([,c])=>c>1).map(([c])=>c)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:c,name:l}of t){a=a&&!!c.bootstrap,typeof c.generated_at=="string"&&c.generated_at>i&&(i=c.generated_at);let u=p=>o.has(p)?`${l}/${p}`:p;Array.isArray(c.classes)&&r.classes.push(...c.classes),Array.isArray(c.vocabulary)&&r.vocabulary.push(...c.vocabulary);for(let p of Array.isArray(c.individuals)?c.individuals:[]){if(!p)continue;let f={...p};f.id&&(f.id=u(f.id)),Array.isArray(f.derived_from)&&(f.derived_from=f.derived_from.map(h=>u(h))),Array.isArray(f.mentions)&&(f.mentions=f.mentions.map(h=>h&&h.id?{...h,id:u(h.id)}:h)),r.individuals.push(f)}for(let p of Array.isArray(c.objectProperties)?c.objectProperties:[]){if(!p)continue;let f={...p};Array.isArray(f.examples)&&(f.examples=f.examples.map(h=>{if(!h)return h;let m={...h};return m.subject&&(m.subject=u(m.subject)),m.object&&(m.object=u(m.object)),m})),r.objectProperties.push(f)}let d=c.proseIndex&&typeof c.proseIndex=="object"?c.proseIndex:{};for(let[p,f]of Object.entries(d)){let h=r.proseIndex[p]||(r.proseIndex[p]=[]);for(let m of Array.isArray(f)?f:[]){let b=u(m);h.includes(b)||h.push(b)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var tb=L(()=>{});var Mr={};Nt(Mr,{clearCache:()=>__,emptyEntities:()=>fc,fetchEntities:()=>O_,registerProvider:()=>T_});function __(){Pr=null,Ci=null}function T_(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=dc;return dc=e??null,Pr=null,t}function fc(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function A_(e){let t;try{t=await Ne(e,"utf8")}catch(n){if(n?.code==="ENOENT")return fc();throw new Le(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Le(`graph artifact ${e} is not valid JSON`)}}async function I_(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(Ci&&Ci.key===n)return Ci.payload;let s=[];for(let r=0;r<t.length;r++){let i=await A_(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=eb(s);return Ci={key:n,payload:o},o}async function O_(e){let t=e||{};if(dc){let o;try{o=await dc(t)}catch(r){throw r instanceof Le?r:new Le(`graph provider failed (${r?.message||r})`)}if(!o||typeof o!="object")throw new Le("graph provider returned no entities payload");return o}if(Array.isArray(t.graphFiles)&&t.graphFiles.length>1)return I_(t);if(!t.graphFile)return fc();if(Pr&&Pr.file===t.graphFile)return Pr.payload;let n;try{n=await Ne(t.graphFile,"utf8")}catch(o){if(o?.code==="ENOENT")return fc();throw new Le(`cannot read graph artifact at ${t.graphFile} (${o?.code||o?.message||o})`)}let s;try{s=JSON.parse(n)}catch{throw new Le(`graph artifact ${t.graphFile} is not valid JSON`)}return Pr={file:t.graphFile,payload:s},s}var Pr,Ci,dc,Ni=L(()=>{zt();sn();tb();Pr=null,Ci=null,dc=null});function Vn(e){if(!e)return[];let t=String(e).replace(/\.[A-Za-z0-9]+$/,"");return t=t.replace(/[/\\]/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/([A-Za-z])([0-9])/g,"$1 $2").replace(/([0-9])([A-Za-z])/g,"$1 $2").replace(/[_\-.]+/g," "),t.split(/\s+/).map(n=>n.toLowerCase()).filter(n=>n.length>1&&n.length<=sb)}function _d(e){if(!e)return[];let t=[],n=new Set;for(let s of String(e).toLowerCase().split(/[^a-z0-9]+/))if(!(s.length<2||s.length>sb||nb.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=C_))break;return t}function pc({name:e,doc:t}={}){return[...new Set([...Vn(e),..._d(t)])].sort()}function Td(e){let t=Object.create(null);for(let n of e){let s=(n.attributes||[]).find(o=>o.key==="prose_tokens");if(s?.value)for(let o of s.value.split(" "))t[o]||(t[o]=[]),t[o].push(n.id)}for(let n of Object.keys(t))t[n].sort();return t}function Go(e,t,{limit:n=10}={}){let s=[...new Set([...Vn(t),..._d(t)])];if(!s.length)return[];let o=new Map;for(let r of s)for(let i of e?.[r]||[])o.set(i,(o.get(i)||0)+1);return[...o.entries()].sort((r,i)=>i[1]-r[1]||String(r[0]).localeCompare(i[0])).slice(0,n).map(([r,i])=>({id:r,score:i}))}function rb(e,t){let n=e&&(e["tmct:layers"]?e:e.proseIndex),s=n&&n["tmct:layers"],o=String(t||"").toLowerCase(),r={ids:[],via:null};if(!o||!s||typeof s!="object")return r;let i=new Set,a=new Set;for(let c of Object.keys(s)){let l=s[c];if(!l||typeof l!="object")continue;let u=l[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let p of d)i.add(p);a.add(c)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var nb,sb,C_,ob,Kn=L(()=>{nb=new Set("a an and or but the of to in on at for with from by as is are was were be been being it its this that these those i you he she they we me my your our do does did not no yes if then else than so such can will would should could may might about into over under out up down off again more most some any all what which who whom whose when where why how".split(/\s+/)),sb=40,C_=120;ob=e=>/^[a-z0-9]+$/.test(e)&&!nb.has(e)});function ib(e){let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(":"),r=o>=0?n.slice(o+1):"";return{createdAt:s,...r?{sessionId:r}:{}}}function N_(e){if(!e.startsWith(cb))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(ab);if(o<0)return null;let r=n.slice(o+ab.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(cb.length,o),createdAt:s}:null}function M_(e){if(e.startsWith("news:"))return Ad(e);let{pack:t}=Od(e.slice(9));return`research:${t}`}function Od(e){let t=e.lastIndexOf("@");if(t>=0)return{kind:"referenceLive",pack:"research",article:e.slice(0,t).trim()||"unknown"};let n=e.indexOf(":");return n<0?{kind:"referenceLive",pack:"research",article:e.trim()||"unknown"}:{kind:"referenceLive",pack:e.slice(0,n)||"research",article:e.slice(n+1).trim()}}function lb(e){if(!e.sessionId?.startsWith(Id))return null;let t=e.sessionId.slice(Id.length);if(t.startsWith("teach:")||t.startsWith("ace:"))return null;let n=Hn(t);return n?{...n,...e.createdAt?{createdAt:e.createdAt}:{}}:null}function Hn(e){let t=String(e||"").trim();if(!t)return null;if(t.startsWith("reference:")){let s=t.slice(10),o=s.indexOf(":");if(o<0)return{kind:"reference",pack:s||"unknown",article:""};let r=s.slice(0,o)||"unknown";return{kind:P_(r),pack:r,article:s.slice(o+1)}}if(t.startsWith("research:"))return Od(t.slice(9));let n=t.split(/\s+/)[0];if(n.startsWith("corpus-weak:"))return{kind:"corpusWeak",name:n.slice(12)||"unknown"};if(n.startsWith("corpus:"))return{kind:"corpus",name:n.slice(7)||"unknown"};if(n.startsWith("child:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("world:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("mud:"))return{kind:"corpus",name:`mud:${n.slice(4).split(":")[0]||"unknown"}`};if(n.startsWith("ace:")){let s=ib(n.slice(4));return lb(s)||{kind:"operator",...s}}if(n.startsWith("teach:")){let s=n.slice(6),o=N_(s);if(o)return o;let r=ib(s);return lb(r)||{kind:"teach",...r}}if(n.startsWith("web:"))return{kind:"web",url:n.slice(4)};if(n.startsWith("url:"))return{kind:"web",url:n.slice(4)};if(n.startsWith("news-fixture:"))return{kind:"corpus",name:n.slice(13).split("@")[0]||"unknown"};if(n.startsWith("extracted:news:"))return{kind:"web",url:Ad(n.slice(10))};if(n.startsWith("news:"))return{kind:"web",url:Ad(n)};if(n.startsWith("extracted:research:"))return Od(n.slice(19));if(n.startsWith("optimistic-extract:")){let s=n.slice(19);return{kind:"optimisticExtract",name:(s.startsWith("news:")||s.startsWith("research:")?M_(s):s)||"unknown"}}return n.startsWith("extracted:")?{kind:"extracted",name:n.slice(10)||"unknown"}:n.startsWith("entailed:")?{kind:"entailed",rule:n.slice(9)}:n.startsWith("chat:")||n.startsWith("session:")||n.startsWith("operator")?{kind:"operator"}:null}function hb(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return db;let n=Number(t);return Number.isFinite(n)?Math.max(Cd,Math.min(pb,n)):db}function mb(e,t=Date.now(),n=F_){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return ub+(1-ub)*Math.pow(.5,o/n)}function gb(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let f of o){if(r.has(f))continue;r.add(f);let h=t[f],m=D_(h);if(!m)continue;i.push(m);let b=(Is[m]??0)*hb(h);a.push(Math.max(0,Math.min(1,b)))}let c=0,l=1;for(let f of a)l*=1-f;if(a.length&&(c=Math.min(1,1-l)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let f=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;c=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*f))}let u=mb(e?.createdAt,s,n.halfLifeMs),d=Fr(Math.min(1,c*u)),p={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Fr(u)};return{score:d,inputs:p}}function mc(e,t){let n=(Is[e]??0)*hb(t);return Fr(Math.max(0,Math.min(1,n)))}function B_(e){if(e==="operator")return 1;let t=Is[e];return t===void 0?1:(t+1)/2}function gc(e,t={}){let n=typeof t.now=="number"?t.now:Date.now(),s=Array.isArray(e)?e:[],o=new Map,r=[];for(let a of s){let c=mb(a?.assertedAt,n,t.halfLifeMs),l=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,l*c)),p=o.get(u)||{complement:1,strongest:0};p.complement*=1-d,p.strongest=Math.max(p.strongest,d),o.set(u,p),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:l,recency:Fr(c)})}let i=1;for(let[a,c]of o){let l=Math.max(B_(a),c.strongest);i*=1-Math.min(1-c.complement,l)}return{score:s.length?Fr(Math.min(1,1-i)):0,inputs:r}}function bb(e){return gc(e,{halfLifeMs:z_})}function wb({factsAsserted:e=0,factsContradicted:t=0}={}){let n=Math.max(0,Number(e)||0),s=Math.max(0,Number(t)||0),o=Math.max(-1,Math.min(1,(n-2*s)/Math.max(1,n))),r=n/(n+U_),i=(o*r+1)/2;return Fr(Cd+(pb-Cd)*i)}var Dr,hc,dt,As,ab,cb,L_,P_,Ad,Id,Is,Nd,fb,F_,ub,Cd,pb,db,Fr,D_,z_,U_,qn=L(()=>{Dr="mgx:trustScore",hc="mgx:trustInputs",dt="mgx:createdAt",As="mgx:updatedAt";ab="#node:",cb="peer:";L_="wikipedia-live",P_=e=>e===L_?"referenceLive":"reference",Ad=e=>String(e||"").split("@")[0];Id="ingest#";Is=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Nd=Object.freeze({operator:{subClass:"tmct:AgentSource",prov:"prov:Agent"},teach:{subClass:"tmct:AgentSource",prov:"prov:Agent"},provider:{subClass:"tmct:AgentSource",prov:"prov:Agent"},corpus:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},corpusWeak:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},reference:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},referenceLive:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},web:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},extracted:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},optimisticExtract:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},entailed:{subClass:"tmct:ActivitySource",prov:"prov:Activity"}}),fb=new Set(Object.entries(Nd).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),F_=720*60*60*1e3,ub=.9,Cd=.5,pb=1.5,db=1,Fr=(e,t=6)=>Number(e.toFixed(t)),D_=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";z_=1/0;U_=19});var Vo,Ld=L(()=>{Vo=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Pd(e,t){return Math.log(1+e/(1+t))}var Li=L(()=>{});var wc={};Nt(wc,{bfsLevels:()=>bc,findActionPath:()=>Pi,findReachableSet:()=>Md});function yb(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function $b(e,t){let n=[];for(let{action:s,nextState:o}of t(e)||[])n.push({state:o,actions:[s],states:[e,o]});return n}function Pi(e,t,n,{maxDepth:s=50,stateKey:o=yb}={}){if(t(e))return{actions:[],states:[e]};let r=$b(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let l of r)if(t(l.state))return{actions:l.actions,states:l.states};if(a===s)break;let c=[];for(let l of r){let u=o(l.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:p}of n(l.state)||[]){let f=o(p);i.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}}r=c}return null}function Md(e,t,{maxDepth:n=50,stateKey:s=yb}={}){let o=$b(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let c=[];for(let l of o){let u=s(l.state);if(!r.has(u)&&(r.add(u),i.push({node:l.state,path:{actions:l.actions,states:l.states}}),a!==n))for(let{action:d,nextState:p}of t(l.state)||[]){let f=s(p);r.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}o=c}return i}function*bc(e,t,{maxDepth:n=8,keyOf:s=o=>o}={}){let o=new Set([e]),r=[e];for(let i=1;i<=n&&r.length;i+=1){let a=[],c=[];for(let l of r)for(let u of t(l)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),c.push(d))}r=c,yield a}}var Os=L(()=>{});function $c(e){let t=Array.isArray(e?.individuals)?e.individuals:[],n=new Map;for(let r of t)r&&r.id&&n.set(r.id,r);let s=(Array.isArray(e?.objectProperties)?e.objectProperties:[]).filter(r=>r&&(r.predicate||r.prop)).map(r=>{let i=(Array.isArray(r.examples)?r.examples:[]).filter(a=>a&&a.subject&&a.object);return{predicate:String(r.predicate||""),prop:r.prop||null,count:Number(r.count)||i.length,edges:i}}),o=s.filter(r=>r.count>r.edges.length).map(r=>({predicate:r.predicate,count:r.count,shown:r.edges.length}));return{individuals:t,byId:n,relations:s,truncated:o,generatedAt:e?.generated_at||null,proseIndex:e?.proseIndex||{}}}function Mi(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Ls(e){let t=String(e?.prop||"").toLowerCase();if(Sb[t])return Sb[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":/denot/.test(n)?"denotes":/\bserve/.test(n)?"serves":null}function on(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Fd(e){let t=on(e).split("/");return t[t.length-1]}function W_(e){return(e?.derived_from||[]).filter(Nb).length}function vb(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+W_(e)}function kn(e,t){let n=on(t);if(!n)return{match:null,candidates:[]};let s=Fd(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=on(i.label),c=String(i.id||"").toLowerCase(),l=0;a===n||c===n?l=100:a.endsWith(`/${n}`)||o&&(Fd(a)===s||Fd(a).replace(/\.[a-z]+$/,"")===s)?l=80:a.includes(n)&&(l=Math.max(10,50-(a.length-n.length))),l>0&&r.push({ind:i,score:l})}return r.sort((i,a)=>a.score-i.score||vb(a.ind)-vb(i.ind)||String(i.ind.label).length-String(a.ind.label).length),{match:r[0]?.ind||null,candidates:r.slice(1,5).map(i=>i.ind)}}function Jt(e){let t=(e?.attributes||[]).find(s=>s.key==="site");if(!t)return null;let n=String(t.value).match(/^(.*):(\d+)(?:-(\d+))?$/);return n?{path:n[1],start:Number(n[2]),end:n[3]?Number(n[3]):Number(n[2])}:null}function G_(e,t){let n=[],s=[];for(let o of e.relations){let r=o.edges.filter(a=>a.subject===t),i=o.edges.filter(a=>a.object===t);r.length&&n.push({group:o,edges:r}),i.length&&s.push({group:o,edges:i})}return{out:n,incoming:s}}function Eb(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Ns(e){let t=e||"Entity",n=Vn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function xt(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Gd(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Ns(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(Nb);o.length&&s.push(`attestation: ${o.length} provenance ref(s)`);for(let c of t.attributes||[])s.push(`attribute: ${c.key} = ${c.value}${c.prop?` [${c.prop}]`:""}`);let{out:r,incoming:i}=G_(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:c,edges:l}of r)s.push(` ${Eb(c)} (${l.length}) \u2192 ${xt(l.map(u=>u.objectLabel||u.object),xb)}`);for(let{group:c,edges:l}of i)s.push(` \u2190 ${Eb(c)} (${l.length}) by ${xt(l.map(u=>u.subjectLabel||u.subject),xb)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${xt(a,V_)}`),n.length&&s.push(`other matches: ${n.map(c=>`${c.label} (${Ns(c.class)})`).join(", ")}`),e.truncated.length&&s.push(K_(e)),s.join(`
|
|
2
|
+
`)}function K_(e){return`note: partial edge lists for: ${e.truncated.map(n=>`${n.predicate} (${n.shown}/${n.count})`).join(", ")}. Counts are complete; the lists are not.`}function zr(e,t,{maxDepth:n=8,includeCycleReturn:s=!1}={}){let o=new Map,r=new Map,i=(c,l,u,d)=>{!c||!l||c===l||(o.has(c)||o.set(c,[]),o.get(c).push({id:l,label:u,via:d}))};for(let c of e.relations){let l=Ls(c);if(l==="imports"||l==="calls")for(let u of c.edges)i(u.object,u.subject,u.subjectLabel||u.subject,c.predicate);else if(l==="callsSymbol")for(let u of c.edges){let d=Cs(e,u.subject),p=Cs(e,u.object);if(!d||!p)continue;let f=e.byId.get(d)?.label||d;i(p,d,f,c.predicate),d!==p&&i(u.object,d,f,c.predicate)}else if(l==="tests")for(let u of c.edges)r.has(u.object)||r.set(u.object,[]),r.get(u.object).push(u.subjectLabel||u.subject);else if(l==="serves")for(let u of c.edges)i(u.subject,u.object,u.objectLabel||u.object,c.predicate)}let a=[];for(let c of bc(t.id,l=>o.get(l)||[],{maxDepth:n,keyOf:l=>l.id})){if(!c.length)continue;let l=c.map(u=>({...u,tests:r.get(u.id)||[]})).sort((u,d)=>String(u.label).localeCompare(String(d.label)));a.push(l)}for(let c=0;s&&c<a.length;c+=1){let l=a[c].flatMap(d=>(o.get(d.id)||[]).filter(p=>p.id===t.id)).sort((d,p)=>String(d.via).localeCompare(String(p.via)));if(!l.length)continue;let u={...l[0],tests:r.get(t.id)||[]};a[c+1]||(a[c+1]=[]),a[c+1]=[...a[c+1],u].sort((d,p)=>String(d.label).localeCompare(String(p.label)));break}return a}function Lb(e,t,{maxDepth:n=8}={}){let s=zr(e,t,{maxDepth:n}),o=[`Impact of changing ${t.label} (reverse closure over imports/calls edges, module- and function-level):`];s.length||o.push("no dependents found in the current artifact \u2014 nothing imports or calls it (or its edges are not in the extracted graph yet).");let r=s.reduce((a,c)=>a+c.length,0);s.length&&o.push(`total: ${r} dependent(s) across ${s.length} depth level(s) (lists capped for brevity).`),s.forEach((a,c)=>{if(c>=H_){o.push(`depth ${c+1}: ${a.length} more dependent(s) (not listed)`);return}o.push(c===0?`depth 1 (${a.length} direct dependents):`:`depth ${c+1} (${a.length}):`);for(let l of a.slice(0,Dd)){let u=l.tests.length?`tests: ${xt(l.tests,q_)}`:"tests: none recorded",d=c===0?`${l.via} it`:"reaches it through an intermediary";o.push(` - ${l.label} (${d}) \u2014 ${u}`)}a.length>Dd&&o.push(` \u2026+${a.length-Dd} more at depth ${c+1}`)});let i=e.truncated.filter(a=>{let c=Ls({predicate:a.predicate});return c==="imports"||c==="calls"||c==="callsSymbol"||c==="tests"||c==="serves"});return i.length&&o.push("warning: partial edge lists ("+i.map(a=>`${a.predicate}: ${a.shown}/${a.count}`).join(", ")+") \u2014 this closure may be missing edges. Cross-check critical results with a lexical search (/find <term>)."),o.join(`
|
|
3
|
+
`)}function Pb(e){let t=new Map;for(let n of e.relations)if(Ls(n)==="defines")for(let s of n.edges)t.has(s.subject)||t.set(s.subject,[]),t.get(s.subject).push(s.objectLabel||s.object);return t}function jb(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function zb(e,t,n=null){let s=n||(i=>Cs(e,i)),o=new Map,r=(i,a)=>{!i||!a||i===a||(o.has(i)||o.set(i,new Set),o.has(a)||o.set(a,new Set),o.get(i).add(a),o.get(a).add(i))};for(let i of t)for(let a of Ae(e,i))r(s(a.subject),s(a.object));return o}function AT(e,t,n){if(t.length<2)return;let s=new Map(t.map(l=>[l.ind.id,l])),o=new Map(t.map(l=>[l.ind.id,l.score])),r=l=>{if(!l.size)return[[],[]];let u=0;for(let h of l.values())u=Math.max(u,h);let d=[...l.entries()].sort((h,m)=>m[1]-h[1]),p=[],f=[];for(let[h,m]of d)m>=u*$T&&p.length<n?p.push([h,m]):f.length<kb&&f.push([h,m]);return[p,f]},[i,a]=r(new Map(t.map(l=>[l.ind.id,l.score]))),c=new Set(i.map(([l])=>l));for(let l=0;l<ET&&i.length;l++){let u=new Map,d=[];for(let p of xT){let f=zb(e,p),h=new Map;for(let[g,w]of i)for(let y of f.get(g)||[])o.has(y)&&h.set(y,Math.max(h.get(y)||0,w));let[m,b]=r(h);for(let[g,w]of m)u.set(g,Math.max(u.get(g)||0,w));d.push(...b)}a.push(...d);for(let[p,f]of u){if(c.has(p))continue;let h=s.get(p);h&&(h.score+=Math.min(f*ST,h.score*vT),c.add(p))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,kb).filter(([p])=>!c.has(p)))}}function IT(e,t=[],{depth:n=Fb,q:s=Bb,nodeLimit:o=Db,kinds:r=kT,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:c=null,hubDegree:l=1/0}={}){let u=new Map(t.map(k=>[k.ind.id,k])),d=0;for(let k of t)d=Math.max(d,k.score);let p=t.length>0&&d>0,f=new Set(c??u.keys());if(!f.size)return[];let h=zb(e,r,a),m=k=>h.get(k)?.size||0,b=[],g=(k,R)=>k.hop!==R.hop?k.hop<R.hop:k.deg!==R.deg?k.deg<R.deg:k.id<R.id,w=(k,R)=>{let $=b[k];b[k]=b[R],b[R]=$},y=k=>{b.push(k);let R=b.length-1;for(;R>0;){let $=R-1>>1;if(g(b[R],b[$]))w(R,$),R=$;else break}},S=()=>{let k=b[0],R=b.pop();if(b.length){b[0]=R;let $=0;for(;;){let _=2*$+1,O=2*$+2,x=$;if(_<b.length&&g(b[_],b[x])&&(x=_),O<b.length&&g(b[O],b[x])&&(x=O),x===$)break;w($,x),$=x}}return k},T=new Set(f);for(let k of f)y({id:k,hop:0,deg:m(k)});let v=null,E=0,I=[];for(;b.length&&E<o;){let k=S();if(I.push({id:k.id,hop:k.hop}),!f.has(k.id)){if(p){let _=d*jT*Math.pow(RT,k.hop-1),O=u.get(k.id);if(O)O.score+=Math.min(_*_T,O.score*TT);else{let x=e.byId?.get?.(k.id);if(x&&i(x)){v||(v=Pb(e));let j=v.get(x.id)||[],M={ind:x,score:_,defineCount:j.length,matching:[],density:0};t.push(M),u.set(k.id,M)}}}E++}if(k.hop>=n||k.hop>0&&m(k.id)>l)continue;let R=[];for(let _ of h.get(k.id)||[]){if(T.has(_))continue;let O=e.byId?.get?.(_);!O||!i(O)||R.push({id:_,deg:m(_)})}if(!R.length)continue;R.sort((_,O)=>_.deg-O.deg||(_.id<O.id?-1:_.id>O.id?1:0));let $=Math.max(1,Math.floor(s*R.length));for(let _=0;_<$;_++){let O=R[_];T.add(O.id),y({id:O.id,hop:k.hop+1,deg:O.deg})}}return I}function Ub(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:c=!1,proseLayers:l=!1,literalMention:u=!1,rawQuery:d=""}=n,p=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,f=Pb(e),h=[];for(let S of e.individuals){if((S.class||"")!=="Module")continue;let T=String(S.label),v=T.toLowerCase(),E=f.get(S.id)||[],I=new Set(E.map($=>$.toLowerCase())),k=new Set;for(let $ of E)for(let _ of jb($))k.add(_);let R=u?String((S.attributes||[]).find($=>$.key==="dotted")?.value||"").toLowerCase():"";h.push({ind:S,label:T,labelLc:v,defines:E,symSet:I,symComps:k,dotted:R})}let m=h.length||1,b=new Map,g=S=>{let T=0;for(let v of h)(v.labelLc.includes(S)||v.symComps.has(S)||v.symSet.has(S))&&T++;return T},w=S=>(b.has(S)||b.set(S,Pd(m,g(S))),b.get(S));for(let S of t)w(S);let y=[];for(let S of h){let T=0,v=0,E=0,I=[];for(let O of t){let x=b.get(O)||0;x&&(S.symSet.has(O)?(T+=x*Mb,E++):S.symComps.has(O)&&(I.push(x),E++),S.labelLc.includes(O)&&(v+=x*X_))}I.sort((O,x)=>x-O);let k=0;for(let O=0;O<Math.min(I.length,Q_);O++)k+=I[O]*J_;let R=T+v+k;if(!R)continue;s&&(Vo(S.labelLc)||nT(S.labelLc))?R*=tT:Vo(S.labelLc)&&(R*=.4);let $=S.defines.filter(O=>{let x=O.toLowerCase(),j=jb(O);return t.some(M=>x===M||j.has(M))}),_=S.defines.length?E/S.defines.length:0;y.push({ind:S.ind,score:R,defineCount:S.defines.length,matching:$,density:_})}if(u&&d&&y.length){let S=String(d).toLowerCase(),T=k=>k!=null&&/[a-z0-9_./]/.test(k),v=k=>{for(let R=S.indexOf(k);R!==-1;R=S.indexOf(k,R+1))if(!T(S[R-1])&&!T(S[R+k.length]))return!0;return!1},E=new Map(h.map(k=>[k.ind.id,k])),I=0;for(let k of y)I=Math.max(I,k.score);for(let k of y){let R=E.get(k.ind.id);if(!R)continue;let $=0;for(let _ of new Set([R.dotted,R.labelLc])){if(!_||_.split(/[./]+/).filter(Boolean).length<gT||!v(_))continue;let O=[...new Set(_.split(/[^a-z0-9_]+/).filter(Boolean))].map(w).sort((j,M)=>M-j),x=0;for(let j=0;j<Math.min(O.length,bT);j++)x+=O[j]*mT;$=Math.max($,x)}$&&(k.score+=Math.min($*wT,I*yT))}}if(y.length>1){let S=new Map(y.map(v=>[v.ind.id,v.score])),T=new Map;for(let v of Ae(e,"imports"))!S.has(v.subject)&&!S.has(v.object)||(T.has(v.subject)||T.set(v.subject,new Set),T.has(v.object)||T.set(v.object,new Set),T.get(v.subject).add(v.object),T.get(v.object).add(v.subject));for(let v of y){let E=0;for(let I of T.get(v.ind.id)||[])E=Math.max(E,S.get(I)||0);v.score+=Math.min(E*Z_,v.score*eT)}}if(o&&y.length>1){let S=new Map(y.map(v=>[v.ind.id,v.score])),T=new Map;for(let v of["calls","callsSymbol"])for(let E of Ae(e,v)){let I=Cs(e,E.subject),k=Cs(e,E.object);!I||!k||I===k||!S.has(I)&&!S.has(k)||(T.has(I)||T.set(I,new Set),T.has(k)||T.set(k,new Set),T.get(I).add(k),T.get(k).add(I))}for(let v of y){let E=0;for(let I of T.get(v.ind.id)||[])E=Math.max(E,S.get(I)||0);v.score+=Math.min(E*sT,v.score*oT)}}if(r&&y.length>1){let S=new Map(y.map(v=>[v.ind.id,v.score])),T=new Map;for(let v of e.individuals)(v.class||"")==="Class"&&v.label&&T.set(String(v.label),v);for(let v of y){if(!aT(v.ind.label))continue;let E=0;for(let I of Ae(e,"inherits")){if(Cs(e,I.subject)!==v.ind.id||!cT(I.objectLabel))continue;let R=Cs(e,I.object);if(!R){let $=T.get(String(I.objectLabel||""));$&&(R=is(e,$))}R&&(E=Math.max(E,S.get(R)||0))}v.score+=Math.min(E*rT,v.score*iT)}}if(c&&y.length&&e.proseIndex){let S=Go(e.proseIndex,t.join(" "),{limit:dT});if(S.length){let T=new Map;for(let{id:v,score:E}of S){let I=Cs(e,v);I&&T.set(I,(T.get(I)||0)+E)}for(let v of y){let E=T.get(v.ind.id)||0;E&&(v.score+=Math.min(E*lT,v.score*uT))}}}if(l&&y.length&&e.proseIndex){let S=new Map(y.map(E=>[E.ind.id,E])),T=new Map(h.map(E=>[E.ind.id,E])),v=new Map;for(let E of new Set(t)){let I=b.get(E)||0;if(!I)continue;let{ids:k}=rb(e.proseIndex,E);if(!k.length)continue;let R=new Set;for(let $ of k){let _=Cs(e,$);if(!_||R.has(_)||(R.add(_),!S.has(_)))continue;let O=T.get(_);O&&(O.symSet.has(E)||O.symComps.has(E)||O.labelLc.includes(E))||v.set(_,(v.get(_)||0)+I*hT)}}for(let E of y){let I=v.get(E.ind.id)||0;I&&(E.score+=Math.min(I*fT,E.score*pT))}}return i&&y.length>1&&AT(e,y,p),a&&y.length&&IT(e,y,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:Fb,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:Bb,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:Db}),y.sort((S,T)=>T.score-S.score||T.density-S.density||S.defineCount-T.defineCount||String(S.ind.label).length-String(T.ind.label).length),y}function Wb(e,t,n={}){let s=String(t||""),o=s.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);if(!o.length)return[];let r=n.literalMention?{...n,rawQuery:s}:n;return Ub(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function CT(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let c=0;c<e.length;c++){let l=e[c];if(l==="\\"){let u=e[c+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),c+=1,r="",i=!1;continue}if(o){l==="]"&&(o=!1,r="]",i=!1);continue}if(l==="["){o=!0,r="[",i=!1;continue}if(l==="?"&&(r==="("||i)){r="?",i=!1;continue}if(l==="*"||l==="+"||l==="?"){a(),r=l;continue}if(l==="{"){let u=e.indexOf("}",c),d=u===-1?"":e.slice(c+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),c=u,r="}";continue}r="{",i=!1;continue}r=l,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function Vd(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Rb)return{error:`name pattern is ${n.length} characters; the limit is ${Rb}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=CT(n);if(o)return{error:`name pattern "${n}" quantifies a group, which can backtrack for minutes on one label. Quantify a character or a class instead.`};if(r)return{error:`name pattern "${n}" uses a back-reference, which can backtrack for minutes on one label.`};if(s>_b)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${_b}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(c){if(a===null)a=t()+Tb;else if(t()>a)throw new yc(`name pattern "${n}" exceeded its ${Tb}ms matching budget.`);return i.test(String(c).slice(0,OT))}}}function Gb(e,t,{limit:n=Sc,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),c=String(s||"").trim().toLowerCase(),l=String(o||"").trim().toLowerCase(),u=null;if(r){let h=Vd(r);if(h.error)return h.error;u=h}if(c&&c!=="module")try{return FT(e,a,{limit:n,kind:c,decFilter:l,nameRe:u,toolNamePrefix:i})}catch(h){if(h instanceof yc)return h.message;throw h}if(!a.length&&!u&&!l)return"empty query";let d=Ub(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let p=d.slice(0,n),f=[`${d.length} module(s) match "${t}" (top ${p.length}):`];for(let{ind:h,defineCount:m,matching:b}of p){let g=b.length?` \u2014 matching: ${xt([...new Set(b)],Y_)}`:"";f.push(`- ${h.label} (defines ${m} symbol(s))${g}`)}return f.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),f.join(`
|
|
4
|
+
`)}function Ae(e,t){let n=Ab.get(e);n||(n=new Map,Ab.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Ls(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Cs(e,t){let n=e.byId?.get?.(t);if(n)return is(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function is(e,t){if((t?.class||"")==="Module")return t.id;let n=Jt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Kd(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function Br(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function Vb(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Ns(t.class)} (id: ${t.id})`],o=Ae(e,"contains").filter(a=>a.subject===t.id);if(!o.length)return s.push(`members: none recorded (empty class, or members not in the extracted graph). Use ${n}describe for its edges.`),s.join(`
|
|
5
|
+
`);let r=[],i=[];for(let a of o){let c=e.byId.get(a.object),l=Kd(c?Jt(c):null),u=c?Br(c):"",d=`${a.objectLabel||a.object}${l}${u?` @${u}`:""}`;((c?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${xt(r,Ib)}`),i.length&&s.push(`attributes (${i.length}): ${xt(i,Ib)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
|
|
6
|
+
`)}function Kb(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Jt(t),o=[`${t.label} \u2014 ${Ns(t.class)}${Kd(s)}`],r=Xe(t,"params"),i=Xe(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Xe(t,"isStatic")&&a.push("static"),Xe(t,"isAbstract")&&a.push("abstract"),Xe(t,"isConstant")&&a.push("constant");let c=Xe(t,"visibility");c&&a.push(c),a.length&&o.push(`flags: ${a.join(", ")}`);let l=Br(t);l&&o.push(`decorators: @${l.split(", ").join(", @")}`);let u=Xe(t,"raises");u&&o.push(`raises: ${u}`);let d=Xe(t,"catches");d&&o.push(`catches: ${d}`);let p=Xe(t,"self_fields");p&&o.push(`self fields: ${p}`);let f=Xe(t,"value");f&&o.push(`value: ${f}`);let h=Xe(t,"doc");return h&&o.push(`doc: ${h}`),o.length===1&&o.push(`(no signature detail recorded for this symbol \u2014 likely a module or attribute; use ${n}snippet for its source.)`),o.push(`Use ${n}snippet for the exact body.`),o.join(`
|
|
7
|
+
`)}function Hb(e,t){let n=Ae(e,"inherits"),s=n.filter(c=>c.subject===t.id).map(c=>c.objectLabel||c.object),o=new Map;for(let c of n)o.has(c.object)||o.set(c.object,[]),o.get(c.object).push({id:c.subject,label:c.subjectLabel||c.subject});let r=[`${t.label} \u2014 ${Ns(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${xt(s,Ob)}`:"extends: (no internal/recorded base classes)");let i=[];for(let c of bc(t.id,l=>o.get(l)||[],{maxDepth:8,keyOf:l=>l.id}))c.length&&i.push(c.map(l=>l.label).sort((l,u)=>String(l).localeCompare(String(u))));let a=i.reduce((c,l)=>c+l.length,0);return a?(r.push(`subclasses: ${a} total across ${i.length} level(s).`),i.forEach((c,l)=>r.push(` depth ${l+1} (${c.length}): ${xt(c,Ob)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
|
|
8
|
+
`)}function vc(e){let t=new Map;for(let n of e){let s=n.label.includes("/")?n.label.slice(0,n.label.lastIndexOf("/")):"(root)";t.set(s,(t.get(s)||0)+1)}return t}function Ec(e,t=""){let n=on(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||on(s.label).startsWith(n)))}function qb(e,{pkg:t=""}={}){let n=on(t),s=Ec(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=vc(s),r=new Map;for(let u of Ae(e,"imports"))r.set(u.object,(r.get(u.object)||0)+1);let i=new Set(s.map(u=>u.id)),a=[...r.entries()].filter(([u])=>i.has(u)).sort((u,d)=>d[1]-u[1]).slice(0,LT).map(([u,d])=>`${e.byId.get(u)?.label||u} (${d} importers)`),c=[...o.entries()].sort((u,d)=>d[1]-u[1]),l=[`Architecture${n?` of ${t}`:""}: ${s.length} module(s) in ${c.length} package(s).`];return l.push(`packages (by module count): ${xt(c.map(([u,d])=>`${u} (${d})`),NT)}`),l.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),l.join(`
|
|
9
|
+
`)}function Xb(e,t){let n=is(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||Jt(t)?.path||n,o=[...new Set(Ae(e,"tests").filter(a=>a.object===n).map(a=>a.subjectLabel||a.subject))],r=o.length>0,i=r?`covered by ${o.length} test module(s):
|
|
10
|
+
${xt(o,Yb,`
|
|
11
11
|
`)}`:"no covering tests recorded (no test module imports it).";return n===t.id?`${s}: ${i}`:`${t.label} is defined in ${s}, which ${r?"is":"has"} ${i}
|
|
12
|
-
${
|
|
13
|
-
${xt(i,
|
|
14
|
-
`)}`:"every source module has at least one covering test module."}function
|
|
15
|
-
${xt(i,
|
|
16
|
-
`)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}let s=
|
|
17
|
-
${xt(r,
|
|
18
|
-
`)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function
|
|
19
|
-
${xt(r,
|
|
20
|
-
`)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=
|
|
21
|
-
${xt(o,
|
|
22
|
-
`)}`:`${s}: no recorded callees.`}function
|
|
23
|
-
${xt(s,
|
|
24
|
-
`)}`}function
|
|
12
|
+
${PT}`}function Jb(e,{codeDomainActive:t=null}={}){let n=t??Mi(e)>0,s=new Set,o=new Set;for(let a of Ae(e,"tests"))s.add(a.object),o.add(a.subject);let r=e.individuals.filter(a=>(a.class||"")==="Module"&&!o.has(a.id)&&!Vo(String(a.label).toLowerCase()));if(!r.length)return n?Mi(e)===0?`no modules to check for test coverage in this index. ${Wd}`:"no source modules to check for test coverage in this index \u2014 only test modules are recorded.":"this session holds no graph to check test coverage against.";let i=r.filter(a=>!s.has(a.id)).map(a=>a.label).sort();return i.length?`${i.length} source module(s) with no covering test module:
|
|
13
|
+
${xt(i,Yb,`
|
|
14
|
+
`)}`:"every source module has at least one covering test module."}function Qb(e,t){let n=is(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ae(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${xt(o,dn)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function ew(e,t,{toolNamePrefix:n="tmct_"}={}){if(Zb.has(t.class)){let i=[...new Set(Ae(e,"callsSymbol").filter(a=>a.object===t.id).map(a=>a.subjectLabel||a.subject))];return i.length?`${t.label} \u2014 called by ${i.length} symbol(s):
|
|
15
|
+
${xt(i,Fi,`
|
|
16
|
+
`)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}let s=is(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Ae(e,"calls").filter(i=>i.object===s).map(i=>i.subjectLabel||i.subject))];return r.length?`${o} \u2014 called by ${r.length} module(s):
|
|
17
|
+
${xt(r,Fi,`
|
|
18
|
+
`)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function tw(e,t){if(Zb.has(t.class)){let r=[...new Set(Ae(e,"callsSymbol").filter(i=>i.subject===t.id).map(i=>i.objectLabel||i.object))];return r.length?`${t.label} \u2014 calls into ${r.length} symbol(s):
|
|
19
|
+
${xt(r,Fi,`
|
|
20
|
+
`)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=is(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Ae(e,"calls").filter(r=>r.subject===n).map(r=>r.objectLabel||r.object))];return o.length?`${s} \u2014 calls into ${o.length} module(s):
|
|
21
|
+
${xt(o,Fi,`
|
|
22
|
+
`)}`:`${s}: no recorded callees.`}function nw(e,t){let n=e.byId.get(t.object),s=n?Jt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function Hd(e,t){if(!t?.id)return"";let n=Ae(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${xt(n.map(s=>nw(e,s)),MT)}`:""}function sw(e,t){let n=Ae(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Ns(t.class)}: no in-repo calls recorded (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`;let s=n.map(o=>nw(e,o));return`${t.label} \u2014 ${Ns(t.class)} calls ${n.length} in-repo symbol(s):
|
|
23
|
+
${xt(s,Fi,`
|
|
24
|
+
`)}`}function ow(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Xe(s,"commitDate")||Xe(s,"date"),i=Xe(s,"commitAuthor")||Xe(s,"author"),a=Xe(s,"commitMessage")||Xe(s,"message"),c=[o,r,i].filter(Boolean).join(" ");return a?`${c} \u2014 ${a}`:c}function rw(e,t){let n=is(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ae(e,"touches").filter(a=>a.object===n);if(!o.length)return`${s}: no commit history recorded (outside the git-log window or unmodified).`;let r=o.slice(0,dn).map(a=>` ${ow(e,a.subject,a.subjectLabel)}`),i=o.length>dn?`
|
|
25
25
|
\u2026+${o.length-dn} more`:"";return`${s}: touched by ${o.length} recent commit(s):
|
|
26
26
|
${r.join(`
|
|
27
|
-
`)}${i}`}function
|
|
28
|
-
\u2026+${n.length-dn} more`:"";return`${t.label} \u2014 ${
|
|
27
|
+
`)}${i}`}function iw(e,t){let n=Ae(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Ns(t.class)}: no symbol-level commit history recorded (outside the git-log window, or fine-grained history is not in the extracted graph).`;let s=n.slice(0,dn).map(r=>` ${ow(e,r.subject,r.subjectLabel)}`),o=n.length>dn?`
|
|
28
|
+
\u2026+${n.length-dn} more`:"";return`${t.label} \u2014 ${Ns(t.class)}: touched by ${n.length} commit(s):
|
|
29
29
|
${s.join(`
|
|
30
|
-
`)}${o}`}function
|
|
31
|
-
`)}function
|
|
30
|
+
`)}${o}`}function aw(e,t){return iw(e,t)}function cw(e,t){return iw(e,t)}function qd(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=lw[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!Br(a).toLowerCase().includes(s))continue;let c=String(a.label).toLowerCase(),l=t.length?0:1;for(let u of t)c.includes(u)&&(l+=5);t.length&&!l||i.push({ind:a,score:l})}return i.sort((a,c)=>c.score-a.score||String(a.ind.label).length-String(c.ind.label).length),i}function FT(e,t,{limit:n=Sc,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!lw[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let c=qd(e,t,{kind:s,decFilter:o,nameRe:r});if(!c.length)return`no ${s} matches the given filters.`;let l=c.slice(0,n),u=[`${c.length} ${s}(s) match (top ${l.length}):`];for(let{ind:d}of l)u.push(`- ${d.label}${Kd(Jt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
|
|
31
|
+
`)}function qT(e){return{paramCount:xc(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function YT(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>xc(i.params)),n=e.filter(i=>!!i.returns).length,s=e.filter(i=>!!i.raises).length,o=new Map;for(let i of e)for(let a of i.callees||[])o.set(a,(o.get(a)||0)+1);let r=new Set([...o.entries()].filter(([,i])=>i>=2).map(([i])=>i));return{paramCount:HT(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function XT(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(xc(e.params)-t.paramCount));!!e.returns===t.hasReturns&&(n+=2),!!e.raises===t.hasRaises&&(n+=2);let s=[...e.callees||[]].filter(o=>t.callees.has(o)).length;return n+Math.min(s,4)*2}function JT(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let p of e)for(let f of Bd(p.decorators))r.set(f,(r.get(f)||0)+1);let i="",a=1;for(let[p,f]of r)f>a&&(a=f,i=p);let c=new Set(Bd(t)),l=c.size?c:new Set(i?[i]:[]),u=new Set(Cb(n)),d=s?.start??null;for(let p of e){let f=Bd(p.decorators).some(g=>l.has(g))?1:0,h=Cb(p.label).filter(g=>u.has(g)).length,m=XT(p,o),b=d!=null&&p.site?1/(1+Math.abs(p.site.start-d)):0;p._score=f*1e3+h*50+m+b}return[...e].sort((p,f)=>f._score-p._score||(p.site?.start||0)-(f.site?.start||0))}function Ur(e,t){let n=is(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Ae(e,"defines").filter($=>$.subject===n),r=new Map;for(let $ of Ae(e,"callsSymbol"))r.has($.subject)||r.set($.subject,new Set),r.get($.subject).add($.object);let i=[],a=[],c=0;for(let $ of o){let _=e.byId.get($.object);if(!_)continue;let O=_.class||"",x=Jt(_);O==="GlobalVariable"?(a.push({label:_.label,value:(_.attributes||[]).find(j=>j.key==="value")?.value||"",site:x}),x&&(c=Math.max(c,x.end))):(O==="Function"||O==="Class")&&(i.push({id:_.id,label:_.label,class:O,site:x,decorators:Br(_),raises:Xe(_,"raises"),doc:Xe(_,"doc"),params:Xe(_,"params"),returns:Xe(_,"returns"),callees:r.get(_.id)||new Set}),x&&(c=Math.max(c,x.end)))}let l=Jt(t),u=l&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:l,decorators:Br(t),raises:Xe(t,"raises"),params:Xe(t,"params"),returns:Xe(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,p=u?qT(u):YT(i);i=JT(i,u||{label:t.label},p);let f=u?null:i.find($=>$.site&&$.label!==t.label)||null,h=[...new Set(Ae(e,"tests").filter($=>$.object===n).map($=>$.subjectLabel||$.subject))].slice(0,UT),m=pw(e,n).slice(0,zT),b=Ae(e,"reexports").filter($=>$.subject===n).map($=>$.objectLabel||$.object).slice(0,20),g=Xe(e.byId.get(n),"all"),w=Ae(e,"contains"),y=null;(t.class||"")==="Class"?y=t.id:(t.class||"")==="Method"&&(y=w.find($=>$.object===t.id)?.subject||null);let S=null;if(y){let $=e.byId.get(y),_=w.filter(O=>O.subject===y).map(O=>{let x=e.byId.get(O.object);return{label:O.objectLabel||x?.label||O.object,class:x?.class||"",site:x?Jt(x):null,decorators:x?Br(x):"",params:x?Xe(x,"params"):"",returns:x?Xe(x,"returns"):"",raises:x?Xe(x,"raises"):""}}).slice(0,BT);S={className:$?.label||String(y).replace(/^fn:.*#/,""),members:_,total:w.filter(O=>O.subject===y).length}}let T=null;for(let $ of[...i,...a])$.site&&(!T||$.site.start>T.start)&&(T=$.site);let v=T?{start:T.start,end:T.end}:null,E=u||f,I=E?.id?e.byId.get(E.id):null,k=I?Hd(e,I):"",R=[];if(E?.callees)for(let $ of E.callees){let _=e.byId.get($),O=_?Jt(_):null;if(O&&R.push({label:_.label,site:O}),R.length>=KT)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:f,globals:a,tests:h,cochange:m,exports:b,allExports:g,classMembers:S,insertion:c,insertionRegion:v,calleeBodies:R,callHint:k,siblingCap:DT}}function Ko(e){let t={anchor:!0,exemplar:!0,registration:!0,insertionRegion:!0,allExports:!0,classMembers:!0,siblings:!0,reexports:!0,tests:!0,cochange:!0,inlinedCallees:!1};return e==="TINY"?{...t,classMembers:!1,siblings:!1,reexports:!1,tests:!1,cochange:!1}:e==="LARGE"||e==="FULL"?{...t,inlinedCallees:!0}:t}function uw(e){return{...e,anchor:!1,exemplar:!1,inlinedCallees:!1,classMembers:!1,reexports:!1,tests:!1,cochange:!1,registration:!0,siblings:!0,insertionRegion:!0,allExports:!0}}function kc(e,t,{untuned:n=!1}={}){let s=e.anchor||e.exemplar,o="TINY";if(e.anchor&&e.anchor.site||e.exemplar&&e.exemplar.site||(o="MID"),e.classMembers&&e.classMembers.members&&e.classMembers.members.length&&(o="MID"),s){let i=s.site?s.site.end-s.site.start+1:1/0,a=xc(s.params);(i>WT||a>GT||s.raises)&&(o="MID");let c=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),p=d?Jt(d):null;if(p&&p.path!==e.moduleLabel){c=!0;break}}let l=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=VT;(c||l)&&(o="LARGE")}else o="MID";return{tier:o,mask:Ko(o),topup:o!=="TINY"}}function dw(e){let t=[`Additional context for ${e.moduleLabel} (sections omitted from the lean bundle):`];if(e.classMembers&&e.classMembers.members.length){t.push(`
|
|
32
32
|
## members of ${e.classMembers.className}:`);for(let n of e.classMembers.members){let s=String(n.label).split(".").pop(),o=n.params!=null&&n.params!==""?`(${n.params})${n.returns?` -> ${n.returns}`:""}`:"",r=n.decorators?`@${n.decorators} `:"",i=n.raises?` raises=${n.raises}`:"";t.push(` ${n.class} ${s}${n.site?` :${n.site.start}`:""} ${r}${s}${o}${i}`)}}if(e.siblings.length){t.push(`
|
|
33
33
|
## sibling symbols (most relevant first; ${e.siblings.length} total):`);for(let n of e.siblings.slice(0,e.siblingCap)){let s=n.decorators?`@${n.decorators} `:"",o=n.raises?` raises=${n.raises}`:"";t.push(` ${n.class} ${n.label}${n.site?` :${n.site.start}`:""} ${s}${o}`)}e.siblings.length>e.siblingCap&&t.push(` \u2026+${e.siblings.length-e.siblingCap} more`)}return e.allExports&&t.push(`
|
|
34
34
|
## module __all__: ${e.allExports}`),e.exports&&e.exports.length&&t.push(`
|
|
35
35
|
## re-exported symbols: ${e.exports.join(", ")}`),e.tests.length&&t.push(`
|
|
36
36
|
## covering tests: ${e.tests.join(", ")}`),e.cochange&&e.cochange.length&&t.push(`
|
|
37
37
|
## usually changed together: ${e.cochange.map(n=>`${n.label} (\xD7${n.weight})`).join(", ")}`),t.length===1&&t.push("(no omitted sections \u2014 the lean bundle already contained everything for this symbol.)"),t.join(`
|
|
38
|
-
`)}function
|
|
38
|
+
`)}function fw(e,t){let n=[`Edit context for ${e.moduleLabel} (graph-only bundle \u2014 siblings/registration/tests are real graph truth; no source body without a source-capable provider).`];if(t.registration&&e.globals.length){n.push(`
|
|
39
39
|
## registration / module globals (replicate this pattern):`);for(let s of e.globals)n.push(` ${s.label} = ${s.value}${s.site?` [:${s.site.start}]`:""}`)}if(t.classMembers&&e.classMembers&&e.classMembers.members.length){n.push(`
|
|
40
40
|
## members of ${e.classMembers.className}:`);for(let s of e.classMembers.members){let o=String(s.label).split(".").pop(),r=s.params!=null&&s.params!==""?`(${s.params})${s.returns?` -> ${s.returns}`:""}`:"",i=s.decorators?`@${s.decorators} `:"",a=s.raises?` raises=${s.raises}`:"";n.push(` ${s.class} ${o}${s.site?` :${s.site.start}`:""} ${i}${o}${r}${a}`)}}if(t.siblings&&e.siblings.length){n.push(`
|
|
41
41
|
## sibling symbols to copy the style of (most relevant first; ${e.siblings.length} total):`);for(let s of e.siblings.slice(0,e.siblingCap)){let o=s.decorators?`@${s.decorators} `:"",r=s.raises?` raises=${s.raises}`:"";n.push(` ${s.class} ${s.label}${s.site?` :${s.site.start}`:""} ${o}${r}`)}e.siblings.length>e.siblingCap&&n.push(` \u2026+${e.siblings.length-e.siblingCap} more`)}return t.allExports&&e.allExports&&n.push(`
|
|
@@ -45,31 +45,31 @@ ${s.join(`
|
|
|
45
45
|
## insert the new sibling after line ~${e.insertion} (end of the last top-level definition).`)),t.tests&&e.tests.length&&n.push(`
|
|
46
46
|
## covering tests: ${e.tests.join(", ")}`),t.cochange&&e.cochange&&e.cochange.length&&n.push(`
|
|
47
47
|
## usually changed together (consider editing these too): ${e.cochange.map(s=>`${s.label} (\xD7${s.weight})`).join(", ")}`),n.join(`
|
|
48
|
-
`)}function
|
|
48
|
+
`)}function pw(e,t){let n=[];for(let s of Ae(e,"cochange"))s.subject===t?n.push({label:s.objectLabel||s.object,weight:s.weight||0}):s.object===t&&n.push({label:s.subjectLabel||s.subject,weight:s.weight||0});return n.sort((s,o)=>o.weight-s.weight)}function hw(e,t){let n=is(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=pw(e,n);if(!o.length)return`${s}: no change-coupling recorded (rarely co-committed, or outside the git-log window).`;let r=o.slice(0,zd).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
|
|
49
49
|
${r.join(`
|
|
50
|
-
`)}`+(o.length>
|
|
51
|
-
\u2026+${o.length-
|
|
50
|
+
`)}`+(o.length>zd?`
|
|
51
|
+
\u2026+${o.length-zd} more`:"")}function mw(e,t){let n=is(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ae(e,"reexports").filter(i=>i.subject===n);if(!o.length)return`${s}: no public exports recorded (no export list / __all__ found, or none resolved).`;let r=o.slice(0,Ud).map(i=>{let a=e.byId.get(i.object),c=a?Jt(a):null,l=c?` \u2190 ${c.path}`:"";return`${i.objectLabel||i.object}${l}`});return`${s} \u2014 public API (${o.length} export(s)):
|
|
52
52
|
${r.join(`
|
|
53
|
-
`)}`+(o.length>
|
|
54
|
-
\u2026+${o.length-Wd} more`:"")}var Gd,Eb,Pb,jb,H_,Y_,Bd,X_,Sc,J_,Q_,Z_,Db,eT,tT,nT,sT,oT,rT,iT,aT,cT,lT,uT,dT,fT,pT,hT,mT,gT,bT,wT,yT,$T,ST,vT,ET,xT,Rb,kT,jT,Bb,zb,Ub,RT,_T,TT,AT,IT,Tb,Ab,NT,Ib,yc,Ob,Cb,Nb,Bi,Xe,PT,MT,Jb,FT,dn,tw,DT,dw,zT,UT,WT,GT,VT,KT,HT,qT,zd,Lb,xc,YT,Ud,Wd,Fe=L(()=>{Yn();Nn();Pd();Mi();Cs();Gd="This store holds no code index, so it records no modules or commits to look through.",Eb={"mgx:importsnamespace":"imports","mgx:callscoarse":"calls","seon:declaresmethod":"defines","mgx:testscoverage":"tests","mgx:touchedbycommit":"touches","seon:containscodeentity":"contains","seon:hassupertype":"inherits","mgx:changecoupledwith":"cochange","mgx:reexports":"reexports","mgx:serves":"serves","mgx:denotes":"denotes","mgx:touchessymbol":"touchesSymbol","mgx:callssymbol":"callsSymbol","seon:usescomplextype":"imports","seon:invokesmethod":"calls","seon:history":"touches","mgx:subclassof":"inherits","mg:imports":"imports","mg:calls":"calls","mg:defines":"defines","mg:tests":"tests","mg:touches":"touches","mgx:saidinsession":"saidInSession","mgx:inreplyto":"inReplyTo","mgx:statedby":"statedBy","mgx:canonicalisedfrom":"canonicalisedFrom"};Pb=e=>/^(git|turn):/.test(String(e||""));jb=30,H_=8;Y_=2,Bd=25,X_=3;Sc=10,J_=8,Q_=3,Z_=2,Db=5,eT=4,tT=.2,nT=.35,sT=.15,oT=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),rT=.2,iT=.35,aT=.2,cT=.35,lT=e=>/\.cs$/i.test(e),uT=e=>/^I[A-Z]/.test(String(e||"")),dT=.2,fT=.35,pT=50,hT=.2,mT=.35,gT=.5,bT=Db,wT=3,yT=4,$T=1,ST=.9,vT=.5,ET=.2,xT=.35,Rb=4,kT=2,jT=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],Bb=3,zb=12,Ub=.9,RT=["imports","calls","callsSymbol","inherits"],_T=.5,TT=.6,AT=.2,IT=.35;Tb=128,Ab=4,NT=64,Ib=250,yc=class extends Error{};Ob=new WeakMap;Cb=40,Nb=40,Bi=30;Xe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";PT=25,MT=15;Jb=40,FT="tests edges are recorded module to module, so this is module-grain coverage.";dn=15;tw=new Set(["Function","Method"]);DT=8;dw={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};zT=8,UT=16,WT=4,GT=6,VT=12,KT=2,HT=8,qT=3,zd=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),Lb=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),xc=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},YT=e=>{let t=new Map,n=e[0]??0,s=0;for(let o of e){let r=(t.get(o)||0)+1;t.set(o,r),r>s&&(s=r,n=o)}return n};Ud=20;Wd=40});function at(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function xw(e){let t=String(e||"");return ww&&(t=t.replace(ww," ")),t.replace(/\s+/g," ").trim()}function kw(e){let t=String(e||"");t=t.replace(wA," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(pA);if(o&&(t=o[1].trim()),o=t.match(hA),o&&(t=o[1].trim()),o=t.match(yw),o&&(t=o[1].trim()),o=t.match($w),o&&(t=o[1].trim()),o=t.match(Sw),o&&(t=o[1].trim()),o=t.match(bA),o&&(t=o[1].trim()),o=t.match(vw),o&&(t=o[1].trim()),o=t.match(yA),o&&(t=o[1].trim()),o=t.match($A),o&&lo.test(o[1].trim())&&(t=o[1].trim()),o=t.match(SA),o&&lo.test(o[1].trim())&&(t=o[1].trim()),o=t.match(vA),o&&lo.test(o[1].trim())&&(t=o[1].trim()),o=t.match(EA),o&&lo.test(o[1].trim())&&(t=o[1].trim()),o=t.match(xA),o&&lo.test(o[1].trim())&&(t=o[1].trim()),o=t.match(kA),o&&lo.test(o[1].trim())&&(t=o[1].trim()),o=t.match(jA),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(RA),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(_A),o&&(t=`what do you ${o[1].toLowerCase()} about ${o[2].trim()}`),o=t.match(TA),o){let r=o[1].trim();fA(r)||(t=!AA.test(r)&&(lA.test(r)||lo.test(r))?r:`describe ${r}`)}if(o=t.match(IA),o){let r=o[1].trim();(lo.test(r)||OA.test(r)||vw.test(r)||yw.test(r)||Sw.test(r)||$w.test(r)||CA.test(r))&&(t=r)}if(t===s)break}return t}function GA(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(UA);if(o&&(t=o[1].trim()),o=t.match(WA),o&&(t=o[1].trim()),t===s)break}return t}function KA(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(VA);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function Ui(e){let t=String(e||"").trim(),n=t.match(YA)||t.match(XA);return n?n[1].trim():null}function Qd(e){let t=String(e||""),n=t.match(qA);if(n){let o=Rw[n[1].toLowerCase()],r=jw[n[2].toLowerCase()],i=n[5]||n[6],a=n[4]?n[4].toLowerCase():Xd[i.toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${a}`}let s=Ui(t);return s?`which modules transitively import ${s}`:t}function Wi(e){return String(e||"").replace(tA,t=>kd[t.toLowerCase()])}function Ho(e){let t=Wi(e);return t=t.replace(nA,n=>jd[n.toLowerCase()]),t=t.replace(sA,n=>Rd[n.toLowerCase()]),t=t.replace(oA,"with"),t=t.replace(rA,(n,s)=>`${s} for`),t=t.replace(iA,(n,s)=>`for ${s}`),t=t.replace(aA,(n,s)=>s),t=t.replace(JA,"$1$2"),t=t.replace(Vg,"$1ing"),t=kw(t),t=KA(t),t=GA(t),t=Qd(t),t=xw(t),t=En(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Gi(e){for(let t of[...Hg,...Kg]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Zd(e){for(let t of QA){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Aw(e){let t=String(e||"").match(ZA);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var eA,tA,Ew,nA,sA,oA,rA,iA,aA,cA,ww,lA,lo,uA,dA,fA,zi,pA,hA,mA,gA,yw,$w,Sw,bA,wA,yA,$A,SA,vA,EA,xA,kA,jA,RA,_A,TA,AA,IA,OA,CA,vw,jc,NA,LA,PA,MA,FA,DA,BA,DW,Jd,zA,BW,zW,UW,UA,WA,VA,jw,Rw,HA,Xd,qA,_w,Tw,YA,XA,JA,QA,ZA,pt,fn,be,Ln=L(()=>{as();eA=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b","gi"),tA=eA(kd),Ew=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b(?!\\.[a-z0-9])","gi"),nA=Ew(jd),sA=Ew(Rd),oA=/(?<=^|\s)w\/(?=\s|$)/gi,rA=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,iA=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,aA=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,cA=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),ww=Ci.length?new RegExp("\\b("+[...Ci].sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b\\s*,?","gi"):null;lA=new RegExp("\\b(?:"+Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b","i"),lo=/^(?:which|what|who|whose|where|when|why|how)\b/i,uA=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),dA=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,fA=e=>{if(dA.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return uA.has((t[t.length-1]||"").toLowerCase())},zi="[,.;:!]|\u2014|\u2013|-",pA=/^(?:hi|hiya|hello|hey|yo|howdy|g'?day|yeah\s+nah|good\s+(?:morning|afternoon|evening|day)|greetings|salutations)(?:\s+(?:there|pardner|folks|friend|mate))?\s*[,.—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,hA=/^(?:thanks|thank\s+you|many\s+thanks|thx|ty|cheers)(?:\s+(?:so\s+much|a\s+lot|very\s+much|a\s+bunch))?\s*[,—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,mA="ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|another\\s+one",gA="(?:just\\s+)?(?:one|another)\\s+more",yw=new RegExp(`^(?:(?:${mA})[\\s,]+|(?:${gA})\\s*(?:${zi})\\s*)+(.+)$`,"i"),$w=/^(?:just\s+(?:poking\s+around|looking\s+around|browsing|exploring|checking\s+(?:this|it)\s+out)|first\s+time\s+(?:trying\s+this\s+out|using\s+this|here)|i'?m\s+new\s+(?:here|around\s+here|to\s+(?:this|all\s+this)(?:\s+(?:repo|codebase|project|app|tool|thing))?))\s*[,.—–-]\s*(.+)$/i,Sw=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,bA=/^(?:please[\s,]+)+(.+)$/i,wA=/,?\s*if\s+(?:it'?s|it\s+is|that'?s|that\s+is)\s+not\s+too\s+much\s+(?:trouble|bother|hassle)\s*,?\s*/i,yA=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,$A=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,SA=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,vA=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,EA=/^do\s+you\s+know\s+(.+?)\??$/i,xA=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,kA=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,jA=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,RA=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,_A=/^what\s+you\s+(know|remember)\s+about\s+(.+?)\??$/i,TA=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,AA=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,IA=/^(?:and|also|so|then|now|but)\s+(.+)$/i,OA=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,CA=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,vw=/^(?:(?:actually|no\s+wait|wait|hold\s+on|never\s+mind|scratch\s+that|on\s+second\s+thought|i\s+mean(?:t)?)[\s,.]+)+(.+)$/i;jc=e=>[...e].sort((t,n)=>n.length-t.length).map(at).join("|"),NA=Object.freeze(["oh","ah","aha","ooh","ohh","wow","huh","hm","hmm","mm","mmm","heh","ha","yay","ugh","oof","phew","whoa","oops","yikes","oi"]),LA=Object.freeze(["nice","cool","great","neat","lovely","interesting","good","ok","okay","fair enough","makes sense","i see","got it","fine"]),PA=Object.freeze(["um","umm","uhm","uh","uhh","er","err","erm","ehm","eh","well","anyway","anyhow","anyways","regardless","moving on"]),MA=Object.freeze(["quick question","quick q","one quick question","just a quick question","random question","random thing","one more random thing","another random thing","one more thing","one last thing","last thing","one more question","side note","side question","sidebar","off topic","unrelated","on a different note","different topic","changing the subject","new topic","just curious","out of curiosity","curious","genuinely curious","while i'm here","while i have you","before i forget"]),FA=`(?:${jc(NA)})(?:\\s+(?:${jc(LA)}))?\\s*(?:${zi})\\s*`,DA=`(?:${jc(PA)})\\s*(?:(?:${zi})\\s*|\\s+)`,BA=`(?:${jc(MA)})\\s*(?:${zi})\\s*`,DW=new RegExp(`^(?:sorry\\s*(?:${zi})?\\s*)?(?:${FA}|${DA}|${BA})+`,"i"),Jd="what|who|which|where|when|why|how",zA="is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must",BW=new RegExp(`\\b(?:an?|the)?\\s*(?:${Jd})\\s*\\?\\s*$`,"i"),zW=new RegExp(`^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:${Jd})\\b`,"i"),UW=new RegExp(`\\b(?:${Jd})\\s+(?:i|you|he|she|it|we|they)?\\s*(?:${zA})\\b`,"i"),UA=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,WA=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;VA=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;jw=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),Rw=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),HA="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",Xd=Object.freeze({tests:"tested","a test":"tested","any tests":"tested",coverage:"covered","test coverage":"covered"}),qA=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(Rw).join("|")+")\\s+("+Object.keys(jw).join("|")+")\\s+(.+?),\\s*(?:(?:is|are)\\s+(?:it|that|they|this)\\s+("+HA+")|(?:has|have)\\s+(?:it|that|they|this)\\s+got\\s+("+Object.keys(Xd).join("|")+")|(?:does|do)\\s+(?:it|that|they|this)\\s+have\\s+("+Object.keys(Xd).join("|")+"))\\??$","i"),_w="(?:were|was)\\s+(?:deleted|removed)",Tw="what\\s+(?:would|might|could)\\s+(?:break|fail|be\\s+affected)",YA=new RegExp("^if\\s+(.+?)\\s+"+_w+",?\\s*"+Tw+"\\??$","i"),XA=new RegExp("^"+Tw+"\\s+if\\s+(.+?)\\s+"+_w+"\\??$","i");JA=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Ed.map(at).join("|")})(\\s*[?.!]*)$`,"i");QA=Object.freeze([{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:are|is)\s+(?:in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:does|do)\s+(.+?)\s+have\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+are\s+(?:the\s+)?(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:of|in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^(?:the\s+)?(?:members?|methods?|attributes?|contents)\s+of\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+else\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:defined|declared)\s+(?:the\s+)?(?:function\s+|method\s+|class\s+|module\s+|variable\s+|constant\s+)?(.+?)\??$/i,to:e=>`where is ${e[1]} defined`},{re:/^where'?s\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^were\s+is\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^what\s+is\s+the\s+purpose\s+of\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\??$/i,to:e=>`what is a ${e[1]}`},{re:new RegExp(`^what\\s+does\\s+(?:the\\s+)?(?!(?:an?|it|this|that|these|those)\\s)(.+?)\\s+do\\s+(?:${xd.map(at).join("|")})\\??$`,"i"),to:e=>`what is a ${e[1]}`},{re:/^(?:which|what)\s+(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:are|is)\s+(public|private|protected|static|abstract|constant|exported|re-?exported|tested|covered|untested|uncovered)\??$/i,to:e=>`${e[2].toLowerCase()} ${e[1].toLowerCase()}`},{re:/^what\s+(?:is|are)\s+(not\s+)?(tested|untested|covered|uncovered)\??$/i,to:e=>{let t=e[2].toLowerCase();return`${e[1]?t==="tested"?"untested":t==="covered"?"uncovered":t:t} modules`}},{re:/^what\s+does\s+(.+?)\s+changes?\s+together\s+with\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^what\s+changes?\s+together\s+with\s+(.+?)\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^how\s+many\s+commits\s+(?:are|were)\s+(?:recorded|logged)\s+(?:for|against)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`how many commits touched ${e[1]}`},{re:/^who\s+(?:wrote|authored)\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^who\s+is\s+the\s+authors?\s+of\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^(?:does|do)\s+(?!.*\bnot\b)(.+?)\s+have\s+(?:any\s+)?(?:tests?|test\s+coverage|coverage)\??$/i,to:e=>`what tests ${e[1]}`},{re:/^(?:is|are)\s+(?!.*\bnot\b)(.+?)\s+tested\??$/i,to:e=>`what tests ${e[1]}`},{re:/^what\s+needs\s+(?:to\s+be\s+)?(?:a\s+)?(?:tested|tests?|testing|coverage|covering)\??$/i,to:()=>"untested modules"},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:(?:that|which)\s+)?(?:have|has|having|with)\s+no\s+tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+without\s+(?:any\s+)?tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:new RegExp(`^(?:do|does)\\s+(.+?)\\s+(${cA})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);ZA=new RegExp("^(?:which|what|who|list|show(?:\\s+me)?|find|give\\s+me)?\\s*(?:the\\s+|all\\s+)?([a-z][a-z-]*)\\s+(?:(?:that|which|who)\\s+)?(?:(?:do|does|did|are|is|was|were|have|has|can|could|will|would|should)\\s+not|cannot|can't|won't|couldn't|shouldn't|wouldn't|not)\\s+(.+)$","i");pt=new Set(["what","who","which","where","when","why","how","does","do","did","is","are","was","were","the","a","an","of","to","from","at","in","on","there","something","anything","nothing","one","any","anywhere","last","usually","typically","generally","normally","often","commonly","mostly","should","would","could","can","will","shall","might","must"]),fn=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),be=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var Ow,Iw=L(()=>{Ow={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chappe","chapped","chappes","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seiding","seifing","seiing","seined","seiths","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Ms(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let c=1;c<=t.length;c+=1){let l=e[r-1]===t[c-1]?0:1,u=Math.min(o[c]+1,i[c-1]+1,o[c-1]+l);r>1&&c>1&&e[r-1]===t[c-2]&&e[r-2]===t[c-1]&&(u=Math.min(u,s[c-2]+l)),i[c]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function tf(e){return/^[a-z]+$/.test(e)&&!pt.has(e)&&!ef.has(e)}function Lw(e){return sI(e)?null:Rc(e,Nw,Fs(e))}function Rc(e,t,n=Fs(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Ms(e,i,Math.min(s,n));a<s?(s=a,o=i,r=!1):a===s&&a<=n&&i!==o&&(r=!0)}return s<=n&&!r?o:null}var tI,Fs,ef,Cw,Nw,nI,sI,Gr=L(()=>{as();Iw();Ln();tI=["used"];Fs=e=>e.length<=5?1:2,ef=new Set([...Object.keys(he),...Object.keys(nt),...Object.keys(xn),...tI].flatMap(e=>e.split(" "))),Cw=4,Nw=[...new Set([...Object.keys(he),...Object.keys(xn)].flatMap(e=>e.split(" ")).filter(e=>e.length>=Cw))],nI=new Set(Ow.words),sI=e=>nI.has(e)});function Vr(e){for(let t of aI){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var _c,oI,rI,iI,nf,aI,Pw,Tc=L(()=>{as();Ln();_c=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),oI=Object.keys(nt).sort((e,t)=>t.length-e.length).map(at).join("|"),rI=Object.keys(xn).sort((e,t)=>t.length-e.length).map(at).join("|"),iI=zo.slice().sort((e,t)=>t.length-e.length).map(at).join("|"),nf=(e,t)=>e==="defines"&&Oi.has(t),aI=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${_c})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return nf(n,t)?null:oo({shape:"ask",entityType:null,modifier:"direct",kind:n,subject:e[1].trim(),object:e[3].trim()},t)}},{name:"reverse",re:new RegExp(`^which\\s+(${oI})\\s+(?:(${rI})\\s+)?(${_c})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=he[t];return nf(n,t)?null:oo({shape:"reverse",entityType:nt[e[1].toLowerCase()],modifier:e[2]?xn[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()},t)}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${_c})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return nf(n,t)?null:oo({shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()},t)}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${iI})\\??$`,"i"),build:e=>({shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:e[1].trim()})},{name:"meta-whatis",re:new RegExp("^what\\s+(?:is|are)\\s+(?:(an?|the)\\s+)?(.+?)\\??$","i"),build:e=>{let t=e[1]?e[1].toLowerCase():null,n=En(e[2].trim()),s=!/\s/.test(n);if(t==="the"&&!s||!t&&!nt[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&Gg.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:ro(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${Hn.map(at).join("|")})\\??$`,"i"),build:e=>({shape:"mentions",entityType:null,modifier:"direct",kind:"mentions",object:e[1].trim()})},{name:"where",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)(?:\\s+(?:${vn.map(at).join("|")}))?\\??$`,"i"),build:e=>({shape:"where",entityType:null,modifier:"direct",kind:"where",object:e[1].trim()})},{name:"when",re:new RegExp(`^when\\s+(?:did|does|do|was|were|is)\\s+(.+?)\\s+(?:last\\s+)?(${_c})\\??$`,"i"),build:e=>he[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];Pw={id:"grammar",class:"graph-query",run(e){let t=Vr(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function Mw(e){let t=e.trim().split(/\s+/);return t.length>1&&ac.has(t[0].toLowerCase())}function dI(e){return he[e.trim().toLowerCase()]==="calls"}function Ut(e,t,n=null){let s=Object.keys(t).sort((o,r)=>r.split(" ").length-o.split(" ").length);for(let o of s){let r=o.split(" ");for(let i=0;i<=e.length-r.length;i+=1)if(!(n&&r.some((a,c)=>n.has(i+c)))&&r.every((a,c)=>e[i+c]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Ki(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(k=>k.toLowerCase());if(s.includes("where")&&!Ut(s,he)){let k=s.some(_=>Hn.includes(_)),R=new Set([...vn,...Hn]),$=n.filter((_,O)=>!pt.has(s[O])&&!R.has(s[O])).join(" ").trim();if($){let _=k?"mentions":"where";return{shape:_,entityType:null,modifier:"direct",kind:_,object:$}}}if(new Set(["has","have","had"]).has(s[0])){let k=s.length;for(;k>1&&(s[k-1]==="ever"||s[k-1]==="been");)k-=1;if((k>1?he[s[k-1]]:null)==="touches"){let $=n.slice(1,k-1).filter((_,O)=>!pt.has(s[1+O])).join(" ").trim();if($)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:$}}}let r=s,i=Ut(s,he);if(!i&&t){let k=s.map(R=>{if(!tf(R))return R;let $=t.lemma(R);return ef.has($)?$:R});i=Ut(k,he),i&&(r=k)}let a=null;if(!i){let k=s.map(R=>R.length>=4&&tf(R)&&Lw(R)||R);if(i=Ut(k,he),i){r=k;let R=s.slice(i.start,i.end).findIndex((_,O)=>_!==k[i.start+O]),$=i.start+Math.max(R,0);a={from:s[$],to:k[$]}}}let c=!1;if(!i)for(let k=0;k<s.length;k+=1){let R=io[s[k]];if(!(R&&s[k]==="used"&&s[k+1]==="for")&&R&&s.slice(0,k).some($=>Vi.has($))){i={kind:R,start:k,end:k+1},c=!0;break}}if(!i)return null;!c&&i.end-i.start===1&&io[s[i.start]]&&s.slice(0,i.start).some(k=>Vi.has(k))&&(c=!0);let l=k=>a?{...k,fuzzyVerb:a}:k;if(t&&i.end-i.start===1){let k=i.start,R=s[k-1];if((R==="the"||R==="these"||R==="those")&&s[k+1]==="of"&&t.posTags(n)[k]==="NOUN"){let _=n.slice(k+2).filter((O,x)=>!pt.has(s[k+2+x])).join(" ").trim();if(_)return l({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:_})}}let u=new Set,d=k=>{if(k)for(let R=k.start;R<k.end;R+=1)u.add(R)};d(i);for(let[k,R]of Object.entries(he)){if(R!==i.kind)continue;let $=k.split(" "),_=i.end;if($.every((O,x)=>r[_+x]===O)){d({start:_,end:_+$.length});break}}let p=Ut(r,nt,u);d(p);let f=Ut(r,xn,u);d(f);let h=(k,R)=>n.slice(k,R).filter(($,_)=>!u.has(k+_)&&!pt.has(s[k+_])).join(" ").trim(),m=h(0,i.start),b=h(i.end,n.length);c&&!s.includes("by")&&uI.has(b.toLowerCase())&&(b="");let g=i.kind,w=p?nt[r.slice(p.start,p.end).join(" ")]:null,y=f?xn[r.slice(f.start,f.end).join(" ")]:"direct",S=r.slice(i.start,i.end).join(" ");if(g==="touches"&&s.includes("when")){let k=m||b;if(k)return l({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:k})}if(g==="touches"&&s.includes("who")&&s.includes("last")){let k=m||b;if(k)return l({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:k})}let T=s.indexOf("by"),v=s.slice(0,i.start).findIndex(k=>Vi.has(k)),E=v>=0,I=E&&v>T;if(T>=0&&!u.has(T)&&E){let k=(_,O)=>n.slice(_,O).filter((x,j)=>{let M=_+j,D=s[M];return!u.has(M)&&!pt.has(D)&&D!=="by"&&!Vi.has(D)&&!cI.has(D)&&!lI.has(D)}).join(" ").trim(),[R,$]=I?[k(v+1,n.length),k(T+1,v)]:[k(0,T),k(T+1,n.length)];if(R&&$)return g==="defines"&&Oi.has(r.slice(i.start,i.end).join(" "))?null:l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:$,object:R});if($)return l({shape:"forward",entityType:w,modifier:y,kind:g,object:$});if(R)return l({shape:"reverse",entityType:w,modifier:y,kind:g,object:R})}if(c&&T<0&&b&&s[i.start]==="called")return null;if(m&&b){if(g==="defines"&&Oi.has(S)||g==="calls"&&(Mw(b)||dI(m)))return null;let k=c&&T<0?cc[`${s[i.start]} ${s[i.end]}`]:null;return k&&k.role==="agent"&&k.kind===g?l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:b,object:m}):l(oo({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:m,object:b},S))}if(b){if(g==="calls"&&Mw(b))return null;let k=p&&p.start>=i.end?null:w;return l(oo({shape:"reverse",entityType:k,modifier:y,kind:g,object:b},S))}if(g==="inherits"&&!m&&p&&p.start===i.end){let k=r.slice(p.start,p.end).join(" ");if(k)return l({shape:"reverse",entityType:null,modifier:y,kind:g,object:k})}if(m&&!b&&E&&i.end-i.start===1&&io[s[i.start]]){if(m.split(/\s+/).length>1)return null;if(g==="touches")return l({shape:"when",entityType:null,modifier:"direct",kind:g,object:m});let k=Vi.has(s[0]);return l({shape:"reverse",entityType:w,modifier:y,kind:g,object:m,...k?{polar:!0}:{}})}return m?l(oo({shape:"forward",entityType:w,modifier:"direct",kind:g,object:m},S)):null}var Vi,cI,lI,uI,Fw,Ac=L(()=>{as();Ln();Gr();Vi=new Set(["is","are","was","were","be","been","being","get","gets","got"]),cI=new Set(["which","what","who","whom","whose"]),lI=new Set(As.map(e=>e.toLowerCase())),uI=new Set(["recently","lately","yet","already","ever","again"]);Fw={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Ki(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function pI(e,t,n){if(!n||typeof n.posTags!="function"||!t.length)return[];let s=new Set(t.map(i=>i.toLowerCase())),o;try{o=n.posTags(e)}catch{return[]}let r=[];for(let i=0;i<e.length;i+=1){let a=e[i],c=a.toLowerCase();!/^[a-z]+$/.test(a)||Dw.has(c)||!s.has(c)||o[i]==="VERB"&&r.push(c)}return r}function hI(e,t=null){let n=fn(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!Dw.has(a)&&(fI.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=pI(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var Dw,fI,Bw,zw=L(()=>{as();Ln();Tc();Ac();Dw=new Set([...pt,...be(Bo),...be(Object.keys(he)),...be(Object.keys(nt)),...be(Object.keys(xn)),...be(Object.keys(Ge)),...be(Uo),...be(Wo),...be(Object.keys(rs)),...be(Object.keys(is)),...be(Object.keys(ao)),...be(As),...be(Ni),...be(zo),...be(vn),...be(Hn),...be(In),...be(Object.keys(Pr))]),fI=new Set([...be(Ci),...be(lc)]);Bw={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Vr(e))return null;let{text:n,dropped:s,maybeNoise:o}=hI(e,t.nlp||null);if(!s.length||!n)return null;let r=Vr(n)||Ki(n,t.nlp||null);if(!r)return null;if(o.length&&(r.shape==="where"||r.shape==="mentions")&&r.object){let i=r.object.split(/\s+/).filter(a=>!o.includes(a.toLowerCase())).join(" ").trim();i&&i!==r.object&&(r.altObject=i)}return{strategyId:"noise-strip",class:"noise-stripped",candidates:[{parsed:r,confidence:.75,note:`noise-stripped to "${n}"`}]}}}});var Uw=L(()=>{});var Ic,Oc=L(()=>{Ic=()=>{}});function Gw(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Kr(e.subject)===Kr(t.subject)&&Kr(e.object)===Kr(t.object):Kr(e.object)===Kr(t.object)}function sf(e){let t=(e||[]).filter(l=>l&&Array.isArray(l.candidates)&&l.candidates.length);if(!t.length)return null;let n=[];for(let l of t)for(let u of l.candidates)!u||!u.parsed||n.push({parsed:u.parsed,confidence:typeof u.confidence=="number"?u.confidence:.5,note:u.note||null,via:u.via||null,strategyId:l.strategyId,class:l.class});if(n.some(l=>!Vw(l))&&(n=n.filter(l=>!Vw(l))),!n.length)return null;let s=new Map;for(let l of n)s.has(l.class)||s.set(l.class,[]),s.get(l.class).push(l);let o=[];for(let[l,u]of s){let d=[];for(let p of u){let f=d.find(h=>Gw(h.parsed,p.parsed)&&h.via===p.via);if(f){f.agreed+=1,f.confidence=Math.max(f.confidence,p.confidence),Ww(p.parsed)<Ww(f.parsed)&&(f.parsed=p.parsed);continue}d.push({...p,agreed:1})}d.length&&o.push({class:l,candidates:d})}if(!o.length)return null;let r=l=>Math.max(...l.candidates.map(u=>u.confidence)),i=o[0];for(let l of o)r(l)>r(i)&&(i=l);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(l=>l.parsed)},c=o.filter(l=>l!==i).map(l=>l.candidates[0]).filter(l=>!i.candidates.some(u=>Gw(u.parsed,l.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:c}}function bI(e){if(!e)return"something else";if(e.ambiguousParse)return"one of several readings";let t=e.object??e.subject??"?";return`${e.kind} "${t}"`}function Kw(e,{describe:t=bI,answerFor:n=null}={}){return(e||[]).map(s=>{let o=s.note||t(s.parsed),r=n&&n(s)||"ask it that way";return`if you mean ${o} then ${r}`})}var Kr,mI,Ww,gI,Vw,of=L(()=>{Kr=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),mI=/^\s*(?:the|a|an)\s+/i,Ww=e=>[e?.subject,e?.object].filter(t=>mI.test(String(t||""))).length;gI=new Set(["fuzzy","lemma","spell"]),Vw=e=>gI.has(e.via)});function Cc(e){rf=e}function Nc(){return typeof rf=="function"?rf():null}var rf,Hr=L(()=>{rf=null});function Yw(e,t={},n=yI){let s=[];for(let o of n)try{let r=o.run(e,t);r&&typeof r.then!="function"&&s.push(r)}catch{}return s}var wI,yI,Xw=L(()=>{Ln();Tc();Ac();zw();Uw();Oc();of();Hr();wI=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],yI=[Pw,Fw,Bw,...wI]});function Ds(e){return $I.test(String(e||"").trim())?"an":"a"}function Lc(e){let t=String(e||"").trim();return t&&(/(?:s|x|z|ch|sh)$/.test(t)?`${t}es`:/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:`${t}s`)}function qr(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Hi(e){let t=(e||[]).map(n=>String(n||"").trim()).filter(Boolean);return t.length===0?"":t.length===1?t[0]:t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t[t.length-1]}`}var $I,qi=L(()=>{$I=/^[aeiou]/i});var Yi,af=L(()=>{Yi=(e,t,n)=>n});var e$={};Nt(e$,{DYNAMIC_TAIL_OK_RE:()=>Vf,applyNegationFrames:()=>Gi,ask:()=>bo,classDisplayName:()=>Bs,degreeMetric:()=>zy,metaFallbackEntityAnswer:()=>Oy,normalizeQuery:()=>Ho,parseQuery:()=>Jo,parseQueryFull:()=>kf,render:()=>Xn,rephraseHint:()=>Df,resolveObject:()=>_n,traverse:()=>pn,worldRelationGraphPayload:()=>AC});function tt(e,t){let n=Jw.get(e);n||(n=new Map,Jw.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Ps(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function fe(e,t){let[n,s]=ff[e]||["result","results"];return t===1?n:s}function ta(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${fe(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function Bs(e){let t=String(e||"");if(typeof qn=="function"){let n=qn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function qo(e){return vI[e]||e}function RI(e){if(!e?.ambiguousParse||!Array.isArray(e.candidates)||e.candidates.length!==2)return e;let t=e.candidates.find(r=>r?.shape==="meta"),n=e.candidates.find(r=>r!==t);if(!t||!n)return e;let s=String(t.object||"").trim().toLowerCase();if(!s||jI.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return be(zo).includes(o)?t:e}function TI(e,t){if(!e||e.shape!=="where"||e.altObject||!_I.test(t))return e;let n=ic(t),s=ic(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=fn(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||pt.has(i)||he[i]||i.endsWith("ing"))return o;let a=fn(n).map(l=>l.toLowerCase());for(;a.length&&gy.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let c=r.slice(0,-1).join(" ");return{...e,object:c,altObject:s,verb:i}}function Jo(e,{nlp:t=void 0}={}){return kf(e,{nlp:t}).parsed}function kf(e,{nlp:t=void 0}={}){let n=t===void 0?Nc():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Zd(Gi(Ho(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=II(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=sf(Yw(o,{nlp:n,raw:s}));return i?{parsed:TI(RI(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function Bc(e,t){return t.length&&jf.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function Zr(e,t){return Vr(e)||Ki(e,t)}function II(e,t){let n=fn(e),s=n.map(o=>o.toLowerCase());return nO(n,s)||oO(n,s)||LI(n,s,t)||yy(e,t,0)||rO(n,s,t)||MI(n,s,t)||KI(n,s,t,0)||JI(n,s,t,0)||Ey(n,s)||eO(n,s,t)||iO(n,s,t)||lO(n,s,t)||dO(n,s,t,0)||cO(n,s,t,0)||Sy(n,s,t,0)||_f(n,s,t,0)||vy(n,s,t,0)||zI(n,s,t)||CI(n,s)||_y(n,s,t,0)}function CI(e,t){let n=0;OI.has(t[n])&&(n+=1);let s=ft(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=h=>h+1<t.length?cc[`${t[h]} ${t[h+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,c=-1,l;for(let h=a;h+1<t.length;h+=1){let m=r(h);if(m){c=h,l=m;break}}if(c<0)return null;let u=e.slice(a,c).join(" ").trim(),d=e.slice(c+2).join(" ").trim();if(!u||!d)return null;let p=(h,m)=>h.role==="object"?{shape:"reverse",kind:h.kind,entityType:o,modifier:"direct",object:m}:{shape:"forward",kind:h.kind,modifier:"direct",object:m},f=p(i,u);return f.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:f}},{op:"intersection",kind:"set",ast:{node:"clause",clause:p(l,d)}}]}}function Mc(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function LI(e,t,n){if(!["do","does","did"].includes(t[0])||!NI.has(t[1]))return null;let s=ft(t[2]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;if(o==="Change")return{node:"miss",reason:`"${t[2]}" isn't an enumerable kind \u2014 a universal check needs a concrete kind (functions, classes, modules, \u2026)`};let r=t[2],i=e.slice(3),a=t.slice(3);if(!i.length)return null;let c=Ut(a,he);if(!c)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((p,f)=>(f<c.start||f>=c.end)&&!pt.has(a[f])&&a[f]!=="from").join(" ").trim();if(!u)return null;let d=Us(`which ${r} ${i.join(" ")}`,n,1);return!d||d.node==="miss"?{node:"miss",reason:d&&d.reason||"the universal clause didn't parse"}:{node:"universal",entityType:o,kind:c.kind,object:u,complement:Mc(o,{op:"difference",kind:"set",ast:d})}}function yy(e,t,n=0){let s=Aw(e);if(!s)return null;let o=ft(s.entWord);if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;if(r==="Change")return{node:"miss",reason:`"${s.entWord}" isn't an enumerable kind \u2014 a set complement needs a concrete kind (functions, classes, modules, \u2026)`};let i=fn(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ge[d]))return Mc(r,{op:"difference",kind:"qual",filters:a});let c=Ut(a,he);if(!c)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,p)=>(p<c.start||p>=c.end)&&!pt.has(a[p])&&a[p]!=="from").length)return Mc(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:c.kind}});let u=Us(`which ${s.entWord} ${s.predicate}`,t,n+1);return!u||u.node==="miss"?{node:"miss",reason:u&&u.reason||"the negated clause didn't parse"}:Mc(r,{op:"difference",kind:"set",ast:u})}function MI(e,t,n){let s=0;for(;s<t.length&&PI.has(t[s]);)s+=1;if(!["do","does","did"].includes(t[s]))return null;s+=1;let o=e.slice(s),r=t.slice(s),i=r.indexOf("not");if(i<0)return null;let a=Ut(r,he);if(!a)return null;let l=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!pt.has(r[d])).join(" ").trim();return l?{node:"forwardComplement",kind:a.kind,subjectTerm:l}:null}function Rf(e,t){let n=new Set;for(let s of t)for(let o of tt(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function $y(e,t){let n=Lt(t),s=n.filter(r=>!my.has(r)),o=Rf(e,s.length?s:n);return o.size===1?[...o][0]:null}function Us(e,t,n){if(n>by)return{node:"miss",reason:"too deep to resolve"};let s=yy(e,t,n);if(s)return s;let o=fn(e),r=o.map(p=>p.toLowerCase()),i=Ey(o,r);if(i)return i;let a=Sy(o,r,t,n);if(a)return a;let c=_f(o,r,t,n);if(c)return c;let l=vy(o,r,t,n);if(l)return l;let u=_y(o,r,t,n);if(u)return u;let d=Zr(e,t);return d?{node:"clause",clause:d}:null}function FI(e){let t=e.map(r=>r.toLowerCase()),n=Object.keys(ao).sort((r,i)=>i.split(" ").length-r.split(" ").length),s=[],o=e.length;for(;;){let r=null;for(let c=o-1;c>=1&&!r;c-=1)for(let l of n){let u=l.split(" ");if(c+u.length<=o&&t.slice(c,c+u.length).join(" ")===l){r={at:c,len:u.length,op:ao[l]};break}}if(!r)break;let i=e.slice(r.at+r.len,o),{blc:a}=Bc(i,i.map(c=>c.toLowerCase()));if(!a.length||!a.every(c=>Ge[c]))break;s.unshift({op:r.op,kind:"qual",filters:a}),o=r.at}return!s.length||!o?null:{rest:e.slice(0,o),lifted:s}}function _f(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=In.includes(t[o]),i=!r&&wy(t[o]);if(!r&&!i||r&&o+1>=t.length||!ft(t[o-1]))continue;let c=e.slice(0,o-1);if(!c.length||c.every(m=>Ge[m.toLowerCase()]))continue;let l=Zr([...c,pf].join(" "),n);if(!l||l.shape!=="reverse"&&l.shape!=="forward"||l.modifier&&l.modifier!=="direct")continue;let u=e.slice(r?o+1:o),d=FI(u),p=`which ${t[o-1]} ${(d?d.rest:u).join(" ")}`,f=Us(p,n,s+1);if(!f||f.node==="miss")return f?{node:"miss",reason:f.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"};let h={node:l.shape==="reverse"?"reverseSet":"forwardSet",kind:l.kind,entityType:l.entityType,inner:f};return d?{node:"boolean",entityType:l.entityType,atoms:[{op:"seed",kind:"set",ast:h},...d.lifted]}:h}return null}function Sy(e,t,n,s){let o=0;(ho.has(t[o])||Tf.has(t[o]))&&(o+=1);let r=ft(t[o]);if(!r||r.placeholder||!r.entityType||(o+=1,jf.has(t[o])&&(o+=1),!DI.has(t[o])||t[o+1]!=="in"))return null;let i=e.slice(o+2);return i.length?Af(r.entityType,i,n,s):null}function vy(e,t,n,s){let o=0;if(!ho.has(t[0]))return null;o+=1;let r=ft(t[o]);if(!r)return null;o+=1;let i=e.slice(o),a=t.slice(o);if(i.length<2)return null;let c=null;for(let m=i.length-1;m>0;m-=1){let b=a.slice(m),g=Ut(b,he);if(g&&g.start===0&&g.end===b.length){c={kind:g.kind,at:m};break}}if(!c)return null;let l=i.slice(0,c.at),u=a.slice(0,c.at);if(!u.some(m=>In.includes(m)))return null;let d=l,p=u;for(;p.length&&Tf.has(p[0]);)d=d.slice(1),p=p.slice(1);if(!p.length||!ft(p[0]))return null;let f=ho.has(p[0])?d.join(" "):`which ${d.join(" ")}`,h=Us(f,n,s+1);return!h||h.node==="miss"?{node:"miss",reason:h&&h.reason||"the embedded subject clause didn't parse"}:{node:"forwardSet",kind:c.kind,entityType:r.entityType,inner:h}}function zI(e,t,n){for(let s=0;s<t.length;s+=1){if(!BI.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!he[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),pf,...e.slice(s+1)],a=Zr(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===pf&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function KI(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!UI.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(WI.has(t[d])){r=d;break}if(r<0)return null;let i=e.slice(o,r),a=t.slice(o,r);for(;a.length&&GI.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&VI.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>In.includes(d)))return null;let c=ho.has(a[0])?i.join(" "):`which ${i.join(" ")}`,l=Us(c,n,s+1);if(!l||l.node==="miss")return l?{node:"miss",reason:l.reason||"the inner set of the temporal query didn't parse"}:{node:"miss",reason:"the inner set of the temporal query didn't parse"};let u=ft(a[0]);return{node:"temporal",inner:l,entityType:u&&u.entityType||null}}function Ey(e,t){if(!qI.has(t[0]))return null;let n=1,s=null;if(t[n]!=="changed"){let i=ft(t[n]);if(!i||i.placeholder)return null;s=i.entityType,n+=1}if(t[n]!=="changed"||(n+=1,t[n]==="ever"&&(n+=1),!HI.has(t[n])))return null;let o=t[n],r=e.slice(n+1).join(" ").trim();return r?{node:"commitFilter",op:o,pivotRaw:r,entityType:s}:{node:"miss",reason:`"changed ${o}" needs a date or commit afterward`}}function Af(e,t,n,s){let o=t.map(r=>r.toLowerCase());if(o.some(r=>In.includes(r))){let r=t,i=o;for(;i.length&&Tf.has(i[0]);)r=r.slice(1),i=i.slice(1);if(i.length&&ft(i[0])){let a=ho.has(i[0])?r.join(" "):`which ${r.join(" ")}`,c=Us(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the owner clause of this membership query didn't parse"}:{node:"membershipSet",entityType:e,inner:c}}}return{node:"membership",entityType:e,term:t.join(" ")}}function JI(e,t,n,s=0){if(t[0]!=="where"||!YI.has(t[1])||!gy.has(t[t.length-1]))return null;let o=e.slice(2,t.length-1),r=t.slice(2,t.length-1);for(;r.length&&XI.has(r[0]);)o=o.slice(1),r=r.slice(1);if(!o.length||!r.some(l=>In.includes(l)))return null;let i=ft(r[0]);if(!i)return null;let a=ho.has(r[0])?o.join(" "):`which ${o.join(" ")}`,c=Us(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the inner set of the location query didn't parse"}:{node:"whereSet",inner:c,entityType:i.entityType||null}}function ZI(e){let t=new Set,n=[];for(let s of e){if(!s||!QI.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function eO(e,t,n){if(t.length===2&&t[0]==="which"&&(t[1]==="ones"||t[1]==="one"))return{node:"anaphora",mode:"list",filter:{type:"all"}};let s=-1,o=!1;for(let d=1;d<t.length;d+=1){if(!Ni.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let p=t.slice(0,d).join(" ");if(d===t.length-1&&(Uo.includes(p)||Wo.includes(p))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Uo.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=tO(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let c=o?s-1:s,l=ZI(e.slice(0,c)),u={node:"anaphora",mode:i,filter:a};return l.length>=2&&(u.candidateTerms=l),u}function tO(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&AI.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ge[a]))return{type:"qual",filters:r};if(o.length===1){let a=ft(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=Zr(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function nO(e,t){let n;if(t[0]==="is"&&t[1]==="there")n=2;else if(t[0]==="are"&&t[1]==="there")n=2;else return null;let s=t[n];if(s==="a"||s==="an"||s==="any")n+=1;else return null;let o=n<t.length?ft(t[n]):null;if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;n+=1;let i=t.slice(n),a=e.slice(n);if(i.length&&i[i.length-1]==="anywhere"?(i=i.slice(0,-1),a=a.slice(0,-1)):i.length>=2&&i[i.length-2]==="at"&&i[i.length-1]==="all"&&(i=i.slice(0,-2),a=a.slice(0,-2)),!i.length)return{node:"exists",entityType:r,term:null,scopeModule:null};if(i[0]==="called"||i[0]==="named"){if(i.length<2)return{node:"miss",reason:`"${i[0]}" needs a name afterward`};let c=i.indexOf("in",1);if(c>0){let u=a.slice(1,c).join(" ").trim(),d=a.slice(c+1).join(" ").trim();return!u||!d?{node:"miss",reason:'a named existence check needs both a name and a module after "in"'}:{node:"exists",entityType:r,term:u,scopeModule:d}}let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:l,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:null,scopeModule:c}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function sO(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=ro(n).slice(e.length).trim(),o=fn(s),r=o.findIndex(a=>a.toLowerCase()==="in");if(r<0)return null;let i=o.slice(r+1).join(" ").trim();return i?{scope:i}:{node:"miss",reason:'"in" needs a scope afterward'}}function oO(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let l=1;l<t.length;l+=1)if(Ge[t[l]]){n=l,s=t[l-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&io[t[n]]){let l=o+1;for(;l<t.length&&(t[l]==="the"||t[l]==="a"||t[l]==="an");)l+=1;let u=t[l];if(u&&!qg.has(u))return null}let r=sO(t[n],e.slice(n+1));if(r?.node==="miss")return r;let i=1;t[i]==="the"&&(i+=1);let a=s?n-1:n;a>i&&(t[a-1]==="a"||t[a-1]==="an")&&(a-=1);let c=a>i?e.slice(i,a).join(" ").trim():"";return c?{node:"qualCheck",term:c,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function rO(e,t,n){if(!["do","does","did","is","are","was","were"].includes(t[0]))return null;let s=t.indexOf("not",1);if(s<0)return null;let o=Zr(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function iO(e,t,n){let s=Uo.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&Ge[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?ft(t[o]):null;if(!i)return{node:"miss",reason:"count needs a known entity kind (functions, classes, modules, \u2026)"};let a=t[o];o+=1;let c=e.slice(o),l=t.slice(o).some(d=>!pt.has(d)&&!xy.has(d)),u;if(l){let d=Us(`which ${a} ${c.join(" ")}`,n,1);if(!d||d.node==="miss")return{node:"miss",reason:"the count restrictor didn't parse"};u=d}else u={node:"allOfClass",entityType:i.entityType};return r.length&&(u={node:"qualifier",filters:r,inner:u}),{node:"count",entityType:i.entityType,base:u}}function cO(e,t,n,s){let o=0,r=!1,i=null;for(let w of ky){let y=w.split(" ");if(t.slice(0,y.length).join(" ")===w){i=w,o=y.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&If.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ge[t[o]];)a.push(t[o]),o+=1;let c=o<t.length?ft(t[o]):null;if(!c||c.placeholder||c.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!As.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${jy}`}:null;let l=c.entityType,u=t[o];o+=1;let d=e.slice(o),p=t.slice(o).some(w=>!pt.has(w)&&!xy.has(w)),f=t.slice(o),h=d;(f[0]==="is"||f[0]==="are")&&(f=f.slice(1),h=h.slice(1));let m=r&&aO.has(f[0]);if(r&&(p&&!m||d.length===0))return null;let b,g=!1;if(p){let w=m?h:d,y=Us(`which ${[...a,u,...w].join(" ")}`,n,(s||0)+1);if(!y||y.node==="miss")return{node:"miss",reason:y&&y.reason||"the list filter didn't parse"};b=y,g=!0}else b={node:"allOfClass",entityType:l},a.length&&(b={node:"qualifier",filters:a,inner:b});return{node:"list",entityType:l,base:b,scoped:g}}function lO(e,t,n){let s=null,o=-1;for(let h=0;h<t.length;h+=1){let m=t.slice(h,h+2).join(" ");if(rs[m]){s=rs[m],o=h;break}if(rs[t[h]]){s=rs[t[h]],o=h;break}}if(!s)return null;let r=null,i=null;for(let h=o;h<t.length;h+=1)if(is[t[h]]){r=is[t[h]],i=t[h];break}if(!r){for(let h=o-1;h>=0;h-=1)if(is[t[h]]){r=is[t[h]],i=t[h];break}}let a=t.includes("connected")||t.slice(o,o+2).join(" ")==="most connected"||["largest","biggest","smallest"].includes(t[o]),c=["important","significant","central","key","core","essential","critical","principal"],l=t.some(h=>c.includes(h));!r&&(a||l)&&(r=is.connections,i="connections");let u,d=null;for(let h of t){let m=ft(h);if(m&&!m.placeholder){u=m.entityType,d=h;break}}if(!d&&(u=i?Yg[i]:void 0,!u))return{node:"miss",reason:"a superlative needs an entity kind (module, class, function, \u2026)"};if(!r)return{node:"miss",reason:"name what to rank by (imports, callers, methods, tests, or connections)"};let p=["needs","need","needing","lacks","lack","lacking","misses","missing"],f=t.some(h=>p.includes(h))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:f}}function dO(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&If.has(t[o]);)o+=1;if(o>=t.length)return null;let r=ft(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&uO.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=ft(t[t.length-1]);if(i&&!i.placeholder&&i.entityType!=="Change"){let a=e.slice(o,t.length-1).join(" ").trim();if(a)return{node:"find",entityType:i.entityType,term:a}}return t.some(a=>In.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!As.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${jy}`}:null}function fO(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&If.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(In.includes(t[i])){s=i;break}if(s<0)return null;let o=ft(t[s-1]);if(!o||o.placeholder||o.entityType==="Change")return null;let r=e.slice(n,s-1).join(" ").trim();return r?{entityType:o.entityType,term:r,relIdx:s}:null}function Ry(e,t,n,s){if(!n.length||n[0]!=="named"&&!(n[0]==="called"&&s)||n[1]==="by")return null;let o=t.slice(1).join(" ").trim();return o?{node:"named",entityType:e||null,term:o}:null}function pO(e,t,n,s,o,r){let{branches:i,ops:a}=Fc(n,s),c=null,l=[];for(let u=0;u<i.length;u+=1){let d=i[u],p=d.map(y=>y.toLowerCase()),f=u===0?"intersection":a[u-1],h=Bc(d,p);if(h.blc.length&&h.blc.every(y=>Ge[y])){l.push({op:f,kind:"qual",filters:h.blc});continue}let m=Ry(e,h.bw,h.blc,h.blc.length!==p.length);if(m){l.push({op:f,kind:"set",ast:m});continue}if(p[0]==="of"||p[0]==="in"){let y=Af(e,d.slice(1),o,r);if(y.node==="miss")return{miss:y.reason};l.push({op:f,kind:"set",ast:y});continue}let b=d,g=Ut(p,he);g?c=d.slice(g.start,g.end):c&&(b=[...c,...d]);let w=Ty(`${t} ${b.join(" ")}`,o,r);if(!w||w.node==="miss")return{miss:w&&w.reason||"a clause in the combination didn't parse"};l.push({op:f,kind:"set",ast:w})}return{atoms:l}}function _y(e,t,n,s){let o=fO(e,t);if(o){let{entityType:R,term:$,relIdx:_}=o,O=t.slice(_+1),x=e.slice(_+1);if(!O.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[_]}"`};let j=pO(R,`which ${t[_-1]}`,O,x,n,s+1);if(j.miss)return{node:"miss",reason:j.miss};let M=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:$}},...j.atoms];return M.length===1?M[0].ast:{node:"boolean",entityType:R,atoms:M}}let r=0;for(;r<t.length&&ho.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ge[t[r]];)a.push(t[r]),r+=1;let c=r<t.length?ft(t[r]):null;if(!c){let R=r+1<t.length?ft(t[r+1]):null;if(Qw.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(jf.has(t[r])){let $=r+1;$<t.length&&(t[$]==="the"||t[$]==="a"||t[$]==="an")&&($+=1);let _=$+1<t.length?ft(t[$+1]):null;if(Qw.has(t[$])&&_&&_.entityType==="Commit"&&$+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!he[t[r]]&&!pt.has(t[r])&&!Wf.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let l=c.entityType,u=t[r];r+=1;let d=t.slice(r),p=e.slice(r),f=!1;d.length&&In.includes(d[0])&&(f=!0,d=d.slice(1),p=p.slice(1));let h=d[0]==="of"||d[0]==="in",m=d.length>0&&wy(d[0]),b=p.length>0&&Fc(d,p).branches.some(R=>{let{blc:$}=Bc(R,R.map(_=>_.toLowerCase()));return $.length&&$.every(_=>Ge[_])}),g=p.length>0?Fc(d,p).branches:[],w=!1;if(g.length>1){let R=g[0].map(_=>_.toLowerCase()),$=Ut(R,he);$&&$.start===0&&(w=g.slice(1).every(_=>{let O=_.map(j=>j.toLowerCase()),x=Ut(O,he);return x&&x.start===0?x.kind===$.kind:!x}))}let y=!1;if(g.length>1){let R=g[0].map(_=>_.toLowerCase()),$=Ut(R,he);$&&$.start===0&&(y=g.slice(1).every(_=>{let O=_.map(j=>j.toLowerCase()),x=Ut(O,he);return!!x&&x.start===0&&x.end-x.start===1}))}if(!(a.length||f||h||m||b||w||y))return null;if(!p.length){let R={node:"allOfClass",entityType:l};return a.length?{node:"qualifier",filters:a,inner:R,entityType:l}:{node:"miss",reason:"nothing to filter or traverse"}}let S=c.placeholder?"what":`which ${u}`,{branches:T,ops:v}=Fc(d,p),E=null,I=[];for(let R=0;R<T.length;R+=1){let $=T[R],_=$.map(Y=>Y.toLowerCase()),O=R===0?"seed":v[R-1],x=Bc($,_);if(x.blc.length&&x.blc.every(Y=>Ge[Y])){I.push({op:O,kind:"qual",filters:x.blc});continue}let j=Ry(l,x.bw,x.blc,x.blc.length!==_.length);if(j){I.push({op:O,kind:"set",ast:j});continue}if(_[0]==="of"||_[0]==="in"){let Y=Af(l,$.slice(1),n,s+1);if(Y.node==="miss")return Y;I.push({op:O,kind:"set",ast:Y});continue}let M=$,D=Ut(_,he);D?E=$.slice(D.start,D.end):E&&(M=[...E,...$]);let H=Ty(`${S} ${M.join(" ")}`,n,s+1);if(!H||H.node==="miss")return{node:"miss",reason:H&&H.reason||"a clause in the combination didn't parse"};I.push({op:O,kind:"set",ast:H})}if(I[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let k;return I.length===1?k=I[0].ast:k={node:"boolean",entityType:l,atoms:I},a.length&&(k={node:"qualifier",filters:a,inner:k,entityType:l}),k}function Ty(e,t,n){if(n>by)return{node:"miss",reason:"too deep to resolve"};let s=fn(e),o=s.map(a=>a.toLowerCase()),r=_f(s,o,t,n);if(r)return r;let i=Zr(e,t);return i?{node:"clause",clause:i}:null}function Fc(e,t){let n=Object.keys(ao).sort((a,c)=>c.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let c of n){let l=c.split(" ");if(e.slice(i,i+l.length).join(" ")===c){a={c,len:l.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(ao[a.c]),i+=a.len,r=i):a?(i+=a.len,r=i):i+=1}return s.push(t.slice(r)),{branches:s,ops:o}}function Of(e){let t=Zw.get(e);if(t)return t;t=new Map;for(let n of e.individuals||[])n.class==="Module"&&t.set(on(n.label),n);return Zw.set(e,t),t}function Ay(e,t){let n=Of(e),s=[];for(let o of t){let r=e.byId.get(o);if(!r||r.class==="Module")continue;let i=go(r),a=i?n.get(on(i)):null;a&&s.push(a)}return Rn(s)}function mO(e){let t=ey.get(e);if(t)return t;t=new Map;let n=Of(e);for(let s of e.individuals||[]){if(s.class==="Module")continue;let o=go(s),r=o?n.get(on(o)):null;r&&(t.has(r.id)||t.set(r.id,[]),t.get(r.id).push(s))}return ey.set(e,t),t}function Cf(e,t,n,s){let o=Yr[t];if(o&&fo.has(n)){let d=tt(e,o).filter(p=>s.has(p.object));return Rn(d.map(p=>e.byId.get(p.subject)).filter(p=>p&&p.class===n))}let a=(!!o&&[...s].some(d=>fo.has(e.byId.get(d)?.class))?[...Lt(t),o]:Lt(t)).flatMap(d=>tt(e,d)),c=a.filter(d=>s.has(d.object));t==="cochange"&&(c=c.concat(a.filter(d=>s.has(d.subject)).map(d=>({...d,subject:d.object,object:d.subject}))));let l=Rn(c.map(d=>e.byId.get(d.subject)).filter(Boolean));if(!n||n==="Change")return l;let u=l.filter(d=>d.class===n);if(Iy(t,n)){let d=new Set(c.map(f=>f.object)),p=new Set([...s].filter(f=>!d.has(f)));return Rn([...u,...Ay(e,p)])}return u.length?u:n!=="Module"&&l.some(d=>d.class==="Module")?Bf(e,new Set(l.filter(d=>d.class==="Module").map(d=>d.id)),n):[]}function bO(e){let t=new Set;for(let n of["touches","touchesSymbol"])for(let s of tt(e,n)){let o=e.byId.get(s.subject);o?.class==="Commit"&&t.add(String(o.label||"").toLowerCase())}return e.individuals.filter(n=>n.class==="Commit").map(n=>String(n.label||"").toLowerCase()).filter(n=>n&&!t.has(n)).sort()}function wO(e,t){let n=new Set(Cf(e,"touches","Commit",t).map(o=>String(o.label||"").toLowerCase())),s=bO(e);for(let o of t)for(let r of e.byId.get(o)?.derived_from||[]){let i=gO.exec(String(r||""));if(!i)continue;let a=i[1].toLowerCase(),c=s.find(l=>l.startsWith(a)||a.startsWith(l));c&&n.add(c)}return n.size}function Qi(e,t,n){let s=Lt(t).flatMap(o=>tt(e,o)).filter(o=>n.has(o.subject));return Rn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Rn(e){let t=new Set,n=[];for(let s of e)s&&!t.has(s.id)&&(t.add(s.id),n.push(s));return n}function yO(e,t){let n=on(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&on(o.label).startsWith(s))}function hf(e){let t=ty.get(e);if(t)return t;let n=new Set;for(let i of tt(e,"reexports")){n.add(String(i.object).toLowerCase());let a=e.byId.get(i.object);a&&n.add(String(a.label).toLowerCase())}let s=new Set,o=new Set;for(let i of tt(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of tt(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},ty.set(e,t),t}function Qo(e,t){return t?t.class==="Module"?t.id:hf(e).moduleOfSymbol.get(t.id)||null:null}function $O(e,t){let n=Qo(e,t);if(n)return n;let s=go(t);return s&&Of(e).get(on(s))?.id||null}function Oy(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>SO.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Qo(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=fe(o.class,1),c=a==="attribute"?"an":"a",l=i?`, ${Yi("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${c} ${a} in this codebase${l} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function zc(e,t,n){let s=Rn(Lr.flatMap(i=>Qi(e,i,new Set([t])))),o=n?s.filter(i=>i.class===n):s;if(o.length)return o;let r=mO(e).get(t)||[];return n?r.filter(i=>i.class===n):r}function Nf(e,t,n=null){let s=zs(e,t,n);if(!(s.match&&s.tier===1)){let o=yO(e,t);if(o.length)return{kind:"dir",mods:o}}return s.match?{kind:"single",id:s.match.id,entityClass:s.match.class,label:s.match.label}:{kind:"miss"}}function Lf(e,t,n,s,o){let r=o||(()=>!0),i=zc(e,t,s).filter(r);if(i.length||!Ny(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Cy(e,t)){let c=e.byId.get(a);if(!c)continue;let l=zc(e,a,s).filter(r);if(l.length)return{own:i,inherited:l,viaId:a,viaLabel:c.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function po(e,t,n){if(!n)return!1;switch(n.via){case"visibility":return String((t.attributes||[]).find(o=>o.key==="visibility")?.value||"public").toLowerCase()===n.value;case"attr":return!!(t.attributes||[]).find(s=>s.key===n.attr)?.value;case"exported":{let s=hf(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=$O(e,t),o=hf(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Vo(String(r.label).toLowerCase()))||!s?!1:o.testedModules.has(s)===n.value}default:return!1}}function Pf(e){return tt(e,"inherits")}function mf(e,t){return Pf(e).filter(n=>n.object===t).map(n=>n.subject)}function ny(e,t){return Pf(e).filter(n=>n.subject===t).map(n=>n.object)}function vO(e,t){let n=new Set,s=[...mf(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of mf(e,o))n.has(r)||s.push(r)}}return n}function Cy(e,t){let n=new Set,s=[...ny(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of ny(e,o))n.has(r)||s.push(r)}}return n}function Ny(e,t){let n=sy.get(e);if(n||(n=new Map,sy.set(e,n)),n.has(t))return n.get(t);let s=Pf(e).some(o=>{let r=e.byId.get(o.subject),i=e.byId.get(o.object);return!!r&&!!i&&r.class===t&&i.class===t});return n.set(t,s),s}function oy(e,t){let n=String(e.label||"").toLowerCase();if(t.every(o=>n.includes(o)))return"label";let s=(e.attributes||[]).map(o=>String(o.value??"").toLowerCase());return t.every(o=>s.some(r=>r.includes(o)))?"attr":null}function iy(e){return e.slice().sort((t,n)=>ry[n.via]-ry[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function ay(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Fs(n);if(Ms(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of Yo(e.label))if(Ms(o,n,s)<=s)return!0;return!1}function Ly(e,t,n){let s=e.individuals.filter(c=>c.class===t),o=[...Yo(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Ny(e,t),i=[];for(let c of s){let l=oy(c,o);if(l){i.push({ind:c,via:l});continue}if(!r)continue;[...vO(e,c.id)].some(d=>{let p=e.byId.get(d);return!!p&&!!oy(p,o)})&&i.push({ind:c,via:"chain"})}if(i.length||!r)return{narrow:iy(i),broad:[]};let a=new Map;for(let c of s)for(let l of Cy(e,c.id)){if(!a.has(l)){let u=e.byId.get(l);u&&u.class===t&&ay(u,n)&&a.set(l,{ind:u,via:"chain"})}for(let u of mf(e,l)){if(u===c.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&ay(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:iy([...a.values()])}}function Py(e){return[...vc(Ec(e)).entries()].sort((t,n)=>n[1]-t[1]||Xo(t[0],n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function gf(e,t,n){let s=String(t||"").trim().toLowerCase();if(!s)return[];let o=on(s);return e.individuals.filter(r=>{if(n&&r.class!==n)return!1;let i=String(r.label||"").toLowerCase();return i===s||String(r.id||"").toLowerCase()===s?!0:r.class==="Module"&&on(i)===o})}function bf(e,t){if(!t||typeof t!="object")return null;if(Array.isArray(t)){for(let n of t){let s=bf(e,n);if(s)return s}return null}if(t.node==="named")return gf(e,t.term,t.entityType).length?null:{term:t.term,entityType:t.entityType||null,elsewhere:gf(e,t.term,null)[0]||null};for(let n of Object.values(t)){let s=bf(e,n);if(s)return s}return null}function rn(e,t,n){switch(t.node){case"named":return gf(e,t.term,t.entityType);case"clause":return pn(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?Py(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=Ly(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Lt(t.kind).flatMap(o=>tt(e,o)).map(o=>o.subject));return e.individuals.filter(o=>s.has(o.id)&&(!t.entityType||o.class===t.entityType))}case"forwardComplement":{let s=zs(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=$y(e,t.kind);if(!o)return[];let r=new Set(Qi(e,t.kind,new Set([s.match.id])).map(i=>i.id));return e.individuals.filter(i=>i.class===o&&!r.has(i.id))}case"commitFilter":return wf(e,t).matches;case"reverseSet":{let s=new Set(rn(e,t.inner,n).map(o=>o.id));return Cf(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(rn(e,t.inner,n).map(o=>o.id));return Qi(e,t.kind,s)}case"prevSet":{let s=n&&n.prev;return Array.isArray(s)?s.map(o=>e.byId.get(o)).filter(Boolean):[]}case"membership":{let s=Nf(e,t.term,n&&n.contextId);if(s.kind==="dir"){if(!t.entityType||t.entityType==="Module")return s.mods;let i=new Set(s.mods.map(c=>c.id));return Rn(Lr.flatMap(c=>Qi(e,c,i))).filter(c=>c.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=Lf(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"membershipSet":{let s=rn(e,t.inner,n);return s.length?Rn(s.flatMap(o=>zc(e,o.id,t.entityType))):[]}case"qualifier":return t.inner.node==="membership"?Uy(e,t,n).matches:rn(e,t.inner,n).filter(o=>t.filters.every(r=>po(e,o,Ge[r])));case"boolean":return Dy(e,t,n);case"anaphora":return By(e,t,n).matches;default:return[]}}function EO(e){let t=Ge[e],n=My(t);return n&&Object.keys(Ge).find(s=>Ge[s].via===n.via&&Ge[s].value===n.value)||null}function Fy(e,t,n){let s=[],o=[];for(let r of t.atoms){let i=o;if(r.op==="seed")o=rn(e,r.ast,n);else if(r.kind==="qual"){let a=l=>r.filters.every(u=>po(e,l,Ge[u])),c=l=>r.filters.every(u=>{let d=My(Ge[u]);return d?po(e,l,d):!po(e,l,Ge[u])});o=r.op==="difference"?i.filter(c):i.filter(a)}else{let a=rn(e,r.ast,n),c=new Set(a.map(l=>l.id));if(r.op==="intersection")o=i.filter(l=>c.has(l.id));else if(r.op==="difference")o=i.filter(l=>!c.has(l.id));else if(r.op==="union"){let l=new Set(i.map(u=>u.id));o=i.slice();for(let u of a)l.has(u.id)||(l.add(u.id),o.push(u))}}s.push({atom:r,before:i,after:o})}return{matches:o,steps:s}}function Dy(e,t,n){return Fy(e,t,n).matches}function xO(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=_n(e,o);r&&r.match&&!n.has(r.match.id)&&(n.add(r.match.id),s.push(r.match))}return s.length>=2?s:null}function By(e,t,n){let o=xO(e,t.candidateTerms);if(!o){let p=n&&n.prev;if(!Array.isArray(p)||!p.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=p.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(p=>i.filters.every(f=>po(e,p,Ge[f])));else if(i&&i.type==="entity")r=r.filter(p=>p.class===i.entityType);else if(i&&i.type==="clause"){let p=_n(e,i.clause.object);if(!p.match)r=[];else{let f=Yr[i.clause.kind],h=[...Lt(i.clause.kind),...f?[f]:[]],m=new Set(h.flatMap(b=>tt(e,b)).filter(b=>b.object===p.match.id).map(b=>b.subject));r=r.filter(b=>m.has(b.id))}}let a=p=>p.length&&p.every(f=>f.class===p[0].class)?p[0].class:null,c=i&&i.type==="entity"?i.entityType:a(o),l=r.length?a(r):c;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:l,matches:[]};let u=ta(l,r,"anaphora",{bound:!0}),d=r.length?null:kO(e,o,i);return{compositeKind:"set",matches:r,entityType:l,referents:u,...d?{emptied:d}:{}}}function kO(e,t,n){if(!t.length||!n)return null;let s={...Zi(t,null,null)};if(n.type==="qual"){let o=Wc(e,n.filters,!1,t);return o?{held:s,step:o}:null}return n.type==="entity"?{held:s,step:{type:"entityKind",entityType:n.entityType}}:n.type==="clause"&&n.clause?.kind&&n.clause.object?{held:s,step:{type:"clause",clause:{kind:n.clause.kind,object:n.clause.object},excluded:!1}}:null}function zy(e,t,n){let s=n.kind==="*"?jO:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of tt(e,r)){let a=i.subject===t.id,c=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let l=e.byId.get(i.object);if(!l||l.class!==n.filter)continue}o+=1}else(n.dir==="in"&&c||n.dir==="both"&&(a||c))&&(o+=1)}return o}function RO(e){let t=e.individuals.filter(s=>s.class==="Commit"),n=s=>String((s.attributes||[]).find(o=>o.key==="date")?.value||"");return t.sort(Qr(n)),{compositeKind:"recentCommits",matches:t}}function wf(e,t){let{op:n,pivotRaw:s,entityType:o=null}=t,r=f=>String((f.attributes||[]).find(h=>h.key==="date")?.value||"").slice(0,10),i=null,a=null,c=null;if(_O.test(s))i=s;else{let{match:f,ambiguous:h}=_n(e,s,{expectedClass:"Commit"});f&&!h&&f.class==="Commit"&&r(f)&&(a=f.id,c=f.label,i=r(f))}if(!i)return{compositeKind:"commitFilter",op:n,pivotRaw:s,entityType:o,pivotResolved:!1,matches:[]};let l=e.individuals.filter(f=>f.class==="Commit"&&f.id!==a&&r(f)).filter(f=>{let h=r(f);return n==="since"?h>=i:n==="before"?h<i:n==="after"?h>i:h===i}).sort(Qr(r)),u=o&&o!=="Commit"&&o!=="Change"?Rn(l.flatMap(f=>qy(e,f,o).matches)):null,d=u||l,p=[];if(d.length){let f=u?o:"Commit";p.push({kind:"set",class:f,label:`${d.length} ${fe(f,d.length)} ${n} ${s}`,ids:d.map(h=>h.id),attrs:{count:d.length,op:n,...a?{pivot:a}:{}},lane:"commitFilter"})}return a&&p.push({kind:"event",class:"Commit",label:c,ids:[a],attrs:{date:i},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:i,pivotResolved:!0,entityType:o,windowCount:l.length,matches:d,referents:p}}function TO(e,t,n){let s=rn(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size){let a=Xr(e,t.inner,n);return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0,...a?{emptied:a}:{}}}let r=Cf(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(c=>c.key==="date")?.value||"");return r.sort(Qr(i)),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function AO(e,t,n){let s=rn(e,t.inner,n),o=s.length?null:Xr(e,t.inner,n);return{compositeKind:"whereSet",matches:s,entityType:t.entityType,sites:s.map(r=>(r.attributes||[]).find(i=>i.key==="site")?.value||null),...o?{emptied:o}:{}}}function IO(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(tt(e,"tests").map(c=>c.subject));n=n.filter(c=>!a.has(c.id)&&!Vo(String(c.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:zy(e,a,t.metric)})).sort((a,c)=>t.extreme==="most"?c.score-a.score:a.score-c.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?ta(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function Uy(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(b=>po(e,m,Ge[b])):null,a=m=>ta(r,m,"membership"),c=Nf(e,o.term,n&&n.contextId);if(c.kind==="dir"){let m;if(!r||r==="Module")m=c.mods;else{let b=new Set(c.mods.map(g=>g.id));m=Rn(Lr.flatMap(g=>Qi(e,g,b))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(c.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:l,inherited:u,viaLabel:d}=Lf(e,c.id,c.entityClass,r,i),p=!l.length&&u.length>0,f=p?u:l,h=f.length?null:OO(e,c,r,s);return{compositeKind:"membership",entityType:r,matches:f,inheritedNotOwn:p,viaLabel:d,ownerLabel:c.label,referents:a(f),...h?{emptied:h}:{}}}function OO(e,t,n,s){if(!s)return null;let{own:o,inherited:r}=Lf(e,t.id,t.entityClass,n,null),i=o.length?o:r;if(!i.length)return null;let a=Wc(e,s.filters,!1,i);return a?{held:{...Zi(i,null,{entityType:n}),owner:t.label},step:a}:null}function CO(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=_n(e,o,{expectedClass:"Module"});if(!a.match)return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMiss:!0,matches:[]};r=a.match}if(s){let a=_n(e,s,{expectedClass:n}),c=!r||a.match&&Qo(e,a.match)===r.id,l=a.match&&c;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:l?[a.match]:[]}}let i=r?Bf(e,new Set([r.id]),n):e.individuals.filter(a=>a.class===n);return{compositeKind:"exists",entityType:n,term:null,scopeModule:o,scopeMatch:r,matches:i}}function NO(e,t,n){let s=Qo(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||zc(e,n.id).some(o=>o.id===t.id)}function LO(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=zs(e,s,n.contextId);if(a.unresolvedPronoun)return{compositeKind:"qualCheck",qualCheckMiss:"pronoun",term:s,matches:[]};if(!a.match)return{compositeKind:"qualCheck",qualCheckMiss:"unresolved",term:s,matches:[]};if(i){let d=Nf(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!NO(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let c=po(e,a.match,Ge[o]),l=r?!c:c,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:l,matches:[a.match],referents:u}}function PO(e,t,n){let s=_n(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=rn(e,{node:"allOfClass",entityType:t.entityType},n),r=Dy(e,t.complement,n),i=r.length===0;return{compositeKind:"universal",entityType:t.entityType,kind:t.kind,object:s.match.label,holds:i,total:o.length,counter:r,matches:i?o:r}}function MO(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(rn(e,t.inner,n).map(s=>s.id));if(t.node==="clause"&&t.clause?.shape==="reverse"&&t.clause.kind==="touches"&&t.clause.entityType==="Commit"){let{objMatch:s,ambiguous:o}=pn(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function FO(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};let s=bf(e,t);if(s)return{compositeMiss:!0,unknownName:s,matches:[]};if(t.node==="exists")return CO(e,t);if(t.node==="qualCheck")return LO(e,t,n);if(t.node==="universal")return PO(e,t,n);if(t.node==="count"){if(t.base.node==="commitFilter"){let l=wf(e,t.base);return l.pivotResolved?{compositeKind:"count",count:l.matches.length,entityType:t.entityType,matches:[]}:l}let c=MO(e,t.base,n);return c?{compositeKind:"count",count:wO(e,c),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:rn(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:rn(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return RC(e,t);if(t.node==="superlative")return IO(e,t);if(t.node==="temporal")return TO(e,t,n);if(t.node==="whereSet")return AO(e,t,n);if(t.node==="recentCommits")return RO(e);if(t.node==="commitFilter")return wf(e,t);if(t.node==="anaphora")return By(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return Uy(e,t,n);if(t.node==="find"){let{narrow:c,broad:l}=Ly(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:c.length?c:l,broad:!c.length&&l.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let o=rn(e,t,n),r=t.entityType||null,i=ta(r,o,t.node==="qualifier"?"qualifierListing":"compositeSet"),a=o.length?null:Xr(e,t,n);return{compositeKind:"set",matches:o,entityType:r,referents:i,...a?{emptied:a}:{}}}function Mf(e){let t=e?.node==="clause"?e.clause:null;if(!t?.kind||!t.object||t.modifier==="transitive"||t.shape!=="reverse"&&t.shape!=="forward")return null;let n=t.shape==="forward";return n&&mo(t.kind).includes(" ")?null:{kind:t.kind,object:t.object,passive:n,entityType:t.entityType||e.entityType||null}}function Ff(e){let t=mo(e.kind);return`${t.endsWith("e")?`${t}d`:`${t}ed`} ${DO[e.kind]||"by"} ${e.object}`}function Wc(e,t,n,s){let o=a=>s.every(c=>a.every(l=>po(e,c,Ge[l])));if(n&&!o(t))return null;let r=n||!t.every(a=>Ge[a]?.value===!1)?[]:t.map(EO),i=r.length>0&&r.every(Boolean)&&o(r);return{type:"qual",filters:i?r:t,negated:!n&&!i}}function zO(e,t,n){if(t.kind==="qual")return t.op!=="difference"&&t.op!=="intersection"?null:Wc(e,t.filters,t.op==="difference",n);if(t.op!=="difference"&&t.op!=="intersection")return null;let s=t.op==="difference";if(t.ast?.node==="named")return{type:"named",term:t.ast.term,excluded:s};let o=Mf(t.ast);return o?{type:"clause",clause:o,excluded:s}:null}function Xr(e,t,n){if(!t||typeof t!="object")return null;if(t.node==="boolean"){let{steps:o}=Fy(e,t,n),r=[...o].reverse().find(c=>c.before.length&&!c.after.length);if(!r)return Xr(e,o[0]?.atom?.ast,n);let i=zO(e,r.atom,r.before);if(!i)return null;let a=o.indexOf(r)===1?o[0].atom.ast:null;return{held:Zi(r.before,a,t),step:i}}if(t.node==="qualifier"&&t.inner?.node!=="membership"&&t.filters?.length){let o=rn(e,t.inner,n);if(!o.length)return Xr(e,t.inner,n);let r=Wc(e,t.filters,!1,o);return r?{held:Zi(o,t.inner,t),step:r}:null}if(t.node==="reverseSet"||t.node==="forwardSet"||t.node==="membershipSet"){let o=rn(e,t.inner,n);if(!o.length)return Xr(e,t.inner,n);let r=t.node==="membershipSet"?t.entityType?{type:"membership",entityType:t.entityType}:null:{type:t.node==="reverseSet"?"reverse":"forward",kind:t.kind,entityType:t.entityType||null};return r?{held:Zi(o,t.inner,t),step:r}:null}let s=Mf(t);return s?{leaf:s}:null}function Zi(e,t,n){let s=Mf(t);return{count:e.length,entityType:BO(e)||s?.entityType||n?.entityType||null,clause:s,wholeKind:t?.node==="allOfClass",members:e}}function yf(){return'compositional queries also work: "which functions call X and call Y", "what calls something that imports X", "public methods of X", "list functions" / "show me the classes", "how many classes", "which module has the most imports", "find me the payment class", or (after a listing) "which of those are tested"'}function UO(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=go(e);return n?`${t} in ${n}`:t}function $f(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some($f):Array.isArray(e.filters)&&e.filters.some(t=>Ge[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some($f)}function Wy(e,t){return!["Function","Method"].includes(t)||!$f(e)?null:`This index records tests edges module to module, so a ${fe(t,1)} counts as covered exactly when the module it lives in is tested \u2014 ask about that module to see the coverage itself.`}function WO(e){if(e?.node==="qualifier"&&e.inner?.node==="allOfClass"&&e.filters?.length)return{entityType:e.inner.entityType||e.entityType,filters:e.filters,negated:!1};if(e?.node!=="boolean"||e.atoms?.length!==2)return null;let[t,n]=e.atoms;return t.op!=="seed"||t.ast?.node!=="allOfClass"||n.kind!=="qual"||!n.filters?.length||n.op!=="difference"&&n.op!=="intersection"?null:{entityType:t.ast.entityType||e.entityType,filters:n.filters,negated:n.op==="difference"}}function Gy(e){let t=WO(e);if(!t)return null;let n=fe(t.entityType||"Module",2),s=t.negated?"":"not ";return`Try "which ${n} are ${s}${jn(t.filters)}" for that branch on its own.`}function GO(e,t){return!e||!t?null:t==="Package"?Py(e).length:e.individuals.filter(n=>n.class===t).length}function VO(e){let t=n=>e.entityType?fe(e.entityType,n):null;switch(e.type){case"qual":{let n=jn(e.filters);return e.negated?{one:`it is not ${n}`,many:`none of them is ${n}`}:{one:`it is ${n}`,many:`all of them are ${n}`}}case"named":return e.excluded?{one:`it is named "${e.term}"`,many:`all of them are named "${e.term}"`}:{one:`it is not named "${e.term}"`,many:`none of them is named "${e.term}"`};case"clause":{let{clause:n}=e;if(n.passive){let r=Ff(n);return e.excluded?{one:`it is ${r}`,many:`all of them are ${r}`}:{one:`it is not ${r}`,many:`none of them is ${r}`}}let s=mo(n.kind),o=Jr(n.kind);return e.excluded?{one:`it ${o} ${n.object} too`,many:`all of them ${s} ${n.object} too`}:{one:`it does not ${s} ${n.object}`,many:`none of them ${o} ${n.object}`}}case"reverse":{let n=Jr(e.kind),s=t(1)?`no ${t(1)} in this index`:"nothing in this index";return{one:`${s} ${n} it`,many:`${s} ${n} them`}}case"forward":{let n=Jr(e.kind);return{one:`it ${n} nothing in this index`,many:`none of them ${n} anything in this index`}}case"membership":return{one:`it has no ${t(2)}`,many:`none of them has any ${t(2)}`};case"entityKind":return{one:`it is not a ${t(1)}`,many:`none of them is a ${t(1)}`};default:return null}}function KO(e){let t=fe(e.entityType,1),n=fe(e.entityType,2);if(e.owner)return{one:`${e.owner} has 1 ${t}`,many:`${e.owner} has ${e.count} ${n}`};if(e.wholeKind)return{one:`The index has 1 ${t}`,many:`The index has ${e.count} ${n}`};if(e.clause?.passive){let o=Ff(e.clause);return{one:`1 ${t} is ${o}`,many:`${e.count} ${n} are ${o}`}}if(e.clause)return{one:`1 ${t} ${Jr(e.clause.kind)} ${e.clause.object}`,many:`${e.count} ${n} ${mo(e.clause.kind)} ${e.clause.object}`};let s=ls(e.members);return{one:`1 ${t} matched that far (${s})`,many:`${e.count} ${n} matched that far (${s})`}}function HO(e){if(!e.clause||!e.entityType)return null;let t=fe(e.entityType,2);return`Try "${e.clause.passive?`which ${t} are ${Ff(e.clause)}`:`which ${t} ${mo(e.clause.kind)} ${e.clause.object}`}" for that branch on its own.`}function Sf(e,t,{branchNote:n=null,verdictTail:s=""}={}){if(!e?.held)return null;let o=VO(e.step);if(!o)return null;let r=e.held,i=KO(r),a=r.count===1,c=HO(r)||n;return`${t?`no ${fe(t,2)} match that`:"nothing matches that"}${s}. ${a?i.one:i.many}, but ${a?o.one:o.many}.${c?` ${c}`:""}`}function Vy(e){if(e.passive){let n=e.entityType?`no ${fe(e.entityType,2)}`:"nothing";return`${e.object} ${Jr(e.kind)} ${n} in this index`}return`${e.entityType?`no ${fe(e.entityType,1)} in this index`:"nothing in this index"} ${Jr(e.kind)} ${e.object}`}function Ky(e,t){let n=GO(e,t);return n===null?`nothing in the index matches that${t?` (${fe(t,2)})`:""}`:n===0?`no ${fe(t,2)} in this index`:n===1?`the index has 1 ${fe(t,1)}, and it does not match that`:`the index has ${n} ${fe(t,2)}, and none of them matches that`}function ly(e,t,n,s,o){let r=Wy(t.inner,n.entityType)||Gy(t.inner),i=Sf(n.emptied,n.entityType,{branchNote:r,verdictTail:s});return i||`${n.emptied?.leaf?Vy(n.emptied.leaf):Ky(e,n.entityType)}${s}. ${r||o}`}function qO(e,t,n){if(t.compositeMiss){if(t.reason==="no-prev")return{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1};if(t.unknownName){let{term:s,entityType:o,elsewhere:r}=t.unknownName,i=o?fe(o,1):"entity",a=r?` "${s}" names ${Ds(fe(r.class,1))} ${fe(r.class,1)} here, not ${Ds(i)} ${i}.`:"";return{content:`no ${i} named "${s}" in this index.${a}`,miss:!0,ambiguous:!1}}return{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${yf()}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="exists"){if(t.scopeMiss)return{content:`no module matching "${t.scopeModule}" found in the index.`,miss:!0,ambiguous:!1};let s=fe(t.entityType,1),o=fe(t.entityType,2),r=t.scopeMatch?` in ${t.scopeMatch.label}`:"";if(t.term){if(!t.matches.length)return{content:`No \u2014 no ${s} named "${t.term}" found${r}.`,miss:!0,ambiguous:!1};let i=t.matches[0],a=go(i),c=i.class==="Module"?"":a?`, ${Yi("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${ls(t.matches)}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 no ${o} found${r}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="qualCheck"){if(t.qualCheckMiss==="pronoun")return{content:`"${t.term}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="unresolved")return{content:`couldn't find "${t.term}" in the index to check.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="scope")return{content:`couldn't find "${t.scope}" in the index to check inside.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="outsideScope")return{content:`No \u2014 ${t.subjectLabel} isn't in ${t.scopeLabel}.`,miss:!0,ambiguous:!1};let s=t.subject.label,o=t.negated?`not ${t.qualifier}`:t.qualifier,r=t.negated?t.qualifier:`not ${t.qualifier}`;return{content:`${t.holds?"Yes":"No"} \u2014 ${s} is ${t.holds?o:r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="universal"){if(t.universalMiss==="unresolved")return{content:`couldn't find "${t.object}" in the index to check.`,miss:!0,ambiguous:!1,matches:[]};let s=fe(t.entityType,t.total),o=xI(t.kind);return t.holds?{content:`Yes \u2014 all ${t.total} ${s} ${o} ${t.object}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 ${t.counter.length} of ${t.total} ${s} do not ${o} ${t.object}: ${ls(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?fe(t.entityType,t.count):t.count===1?"result":"results";return{content:`${t.count} ${s}.`,miss:!1,ambiguous:!1,matches:[]}}if(t.compositeKind==="list"){if(!t.matches.length)return{content:`no ${fe(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>ct?` \u2014 narrow with "${fe(t.entityType,2)} in <module>"`:"";return{content:`${ls(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=jn(t.asked),o=Do[t.relation].nouns[1];return t.pairs.length?{content:`${t.pairs.map(i=>`${i.subject.label||i.subject.id} ${i.reads} ${i.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]}}if(t.compositeKind==="membership"){if(!t.matches.length){let s=Sf(t.emptied,t.entityType);return s?{content:s,miss:!0,ambiguous:!1,matches:[]}:{content:`${t.ownerLabel&&t.entityType?`${t.ownerLabel} has no ${fe(t.entityType,2)} in this index.`:cy(n,t.entityType)} ${uo(n)}`,miss:!0,ambiguous:!1,matches:[]}}if(t.inheritedNotOwn){let s=fe(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${ls(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${ls(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=fe(t.entityType,1);if(!t.matches.length)return{content:`no ${fe(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?UO(t.matches[0]):ls(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:fe(t.entityType,2)}: ${o}.`,miss:!1,ambiguous:!1,matches:t.matches,relatedNotExact:!0}:{content:`${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="recentCommits"){if(!t.matches.length)return{content:"no commits recorded in this index.",miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,dn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>dn?` \u2026+${t.matches.length-dn} more`:"";return{content:`${t.matches.length} recent commit(s): ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="commitFilter"){if(!t.pivotResolved)return{content:`"${t.pivotRaw}" isn't a recognized date (yyyy-mm-dd) or a known commit \u2014 try "what changed since 2026-06-01" or "what changed before <commit>".`,miss:!0,ambiguous:!1,matches:[]};if(!t.windowCount)return{content:`no commits recorded ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]};if(t.entityType&&t.entityType!=="Commit"&&t.entityType!=="Change"){let i=fe(t.entityType,t.matches.length||2);return t.matches.length?{content:`${ls(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${i} changed ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]}}let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,dn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>dn?` \u2026+${t.matches.length-dn} more`:"";return{content:`${t.matches.length} commit(s) changed ${t.op} ${t.pivotRaw}: ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="superlative"){if(!t.matches.length)return{content:`no ${fe(t.entityType,2)} to rank in this index.`,miss:!0,ambiguous:!1};let s=t.extreme==="most"?"the most":"the fewest",o=t.matches.length>1?` (${t.matches.length}-way tie)`:"";return{content:`${ls(t.matches)} \u2014 ${s} ${t.metricNoun} (${t.score})${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="temporal"){let s=t.innerCount||0,o=t.entityType?fe(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:ly(n,e,t,", so there is no change history to date",uo(n)),miss:!0,ambiguous:!1,matches:[]};if(!t.matches.length)return{content:`no recorded commit touched the ${s} ${o} in that set in this index. ${uo(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let c=(i.attributes||[]).find(d=>d.key==="message")?.value||"",l=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${l}${c?` ("${c}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="whereSet"){if(!t.matches.length)return{content:ly(n,e,t,", so there is no location to cite",`${yf()}.`),miss:!0,ambiguous:!1,matches:[]};let s=t.matches.map((r,i)=>vf(r,t.sites[i])||`${r.label} has no recorded code location in this index.`),o=t.matches.filter((r,i)=>vf(r,t.sites[i]));return{content:s.join(" "),miss:o.length===0,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=Wy(e,t.entityType)||Gy(e),o=Sf(t.emptied,t.entityType,{branchNote:s});if(o)return{content:o,miss:!0,ambiguous:!1,matches:[]};let r=s||uo(n);return{content:`${t.emptied?.leaf?`${Vy(t.emptied.leaf)}.`:cy(n,t.entityType)} ${r}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${ls(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function Df(){return`"which <functions|classes|modules> <imports|calls|uses|inherits from|tests> <name>" or "what does <name> <import|call|export>" or "what uses <name>" or "where is <name> defined" / "where is <name> mentioned" or "when did <name> change" or "which commits touched <name>" or "which changes touch commit <sha>"/"what did commit <sha> touch" (a commit's own changes) or plainly "what calls this" (about a selected node) or "what does <term> mean"/"what is a <ClassName>" (about the graph's own vocabulary). `+yf()}function uo(e=null){return e&&Di(e)===0?Gd:`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function Yo(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Uc(e){if(e.length<5)return e;let t=e.replace(/(ing|ers|ors|er|or)$/,"");return t===e?e:t.length>=3&&t[t.length-1]===t[t.length-2]?t.slice(0,-1):t}function Hy(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function YO(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Xi(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(b=>b.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let b=i[2],g=r.filter(w=>w.class==="Commit"&&(String(w.id).toLowerCase().startsWith(`commit:${b}`)||String(w.label).toLowerCase().startsWith(b)));if(g.length===1)return{match:g[0],candidates:[],tier:1,ambiguous:!1};if(g.length>1)return{match:g[0],candidates:g.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(b=>String(b.label).toLowerCase()===o||String(b.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let c=`ext:${o}`,l=null;e:for(let b of e.relations)for(let g of b.edges)if(String(g.object).toLowerCase()===c){l=g.object;break e}if(l&&!n)return{match:{id:l,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(b=>b.trim()).filter(Boolean);if(u.length>1){let b=new Set;for(let g of u){let w=Xi(e,g,{expectedClass:n});w.match&&!w.ambiguous&&b.add(w.match.id)}if(b.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],p=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(p){let b=o.split(".").pop();for(let g of r){let w=String(g.label||"").toLowerCase();g.class==="Module"?w.split("/").pop()===o&&d.push({ind:g,score:1e3-Math.abs(w.length-o.length)}):w.includes(o)?d.push({ind:g,score:2e3-Math.abs(w.length-o.length)}):w.endsWith(`.${b}`)&&d.push({ind:g,score:1500-Math.abs(w.length-o.length)})}}else{let b=[...Yo(s)],g=o.split(/\s+/).find(v=>v.includes("/")),w=g?g.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,S=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,T=S?YO(s):null;for(let v of r){let E=String(v.label||"").toLowerCase(),I=E.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(I===o){d.push({ind:v,score:5e3});continue}if(o.length>=4&&(I.startsWith(o)||I.endsWith(o))){d.push({ind:v,score:4e3-Math.abs(I.length-o.length)});continue}if(S){let $=Hy(v.label);if($&&$===T){d.push({ind:v,score:5e3});continue}let _=/[/_-]/.test(v.label)||/\.[a-z0-9]+$/i.test(String(v.label||""));if($&&_&&T.length>=4&&$.includes(T)){d.push({ind:v,score:2e3-Math.abs($.length-T.length)});continue}}if(v.class==="Module"){let $=Uc(o);if($!==o&&$===Uc(I)){let _=Fs(o);if(Ms(I,o,_)>_){d.push({ind:v,score:3e3-Math.abs(I.length-o.length)});continue}}}if(o.length>=4&&E.includes(o)){d.push({ind:v,score:1e3-Math.abs(E.length-o.length)});continue}let k=Yo(v.label),R=b.filter($=>k.has($)).length;R>0&&(!w||k.has(w))&&d.push({ind:v,score:R/b.length*lf})}}if(d.sort((b,g)=>g.score-b.score),d.length){let[b,...g]=d,w=g.filter(S=>S.score===b.score),y=b.score>=lf?g.filter(S=>S.score>=lf):g;return{match:b.ind,candidates:y.slice(0,4).map(S=>S.ind),tier:3,ambiguous:w.length>0}}let f=p||o.includes("/"),h=null,m=!f&&typeof Go=="function"?Go(e.proseIndex,s).filter(b=>!n||e.byId.get(b.id)?.class===n):[];if(m.length){let[b,...g]=m,w=e.byId.get(b.id);if(w){let y=g.filter(S=>S.score===b.score);if(h={match:w,candidates:g.slice(0,4).map(S=>e.byId.get(S.id)).filter(Boolean),tier:4,ambiguous:y.length>0,matchedVia:"prose"},!h.ambiguous&&b.via!=="spell")return h}}if(!i&&o.length>=4){let b=Fs(o),g=b+1,w=[];for(let y of r){let S=Ms(String(y.label||"").toLowerCase(),o,b);if(S>0)for(let T of Yo(y.label)){if(S<=0)break;S=Math.min(S,Ms(T,o,b))}S<g?(g=S,w=[y]):S===g&&S<=b&&w.push(y)}if(g<=b&&w.length===1)return{match:w[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(g<=b&&w.length>1&&!h){let[y,...S]=w;return{match:y,candidates:S.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return h||{match:null,candidates:[],tier:null,ambiguous:!1}}function uf(e,t){let n=Hy(t),s=[...Yo(t)],o=[];for(let r of Yo(e))n.includes(r)||s.some(i=>Uc(i)===Uc(r))||Dc.has(r)||Jy.has(r)||o.push(r);return o}function Pc(e,t){if(!e?.match||e.tier!==3||e.matchedVia)return e;if(e.ambiguous){let s=[e.match,...e.candidates||[]],o=s.map(r=>new Set(uf(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),uf(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:jn(s.slice(0,4).map(r=>r.label))}:e}let n=uf(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function _n(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(XO,"").trim(),i=r.match(JO);if(i){let a=r.slice(0,i.index).trim(),c=nt[i[1].toLowerCase()];if(a&&c){let l=Pc(Xi(e,a,{expectedClass:c}),a);if(l?.match?.id&&!l.ambiguous)return l}}if(r&&r!==o){let a=Pc(Xi(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Pc(Xi(e,t,n),t)}return Pc(Xi(e,t,n),t)}function zs(e,t,n){if(Bo.includes(String(t||"").trim().toLowerCase())){if(!n)return{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0};let s=e.byId.get(n);return s?{match:s,candidates:[],tier:1,ambiguous:!1}:{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0}}return _n(e,t)}function Bf(e,t,n){let s=[];for(let o of tt(e,"defines")){if(!t.has(o.subject))continue;let r=e.byId.get(o.object);r&&r.class===n&&s.push(r)}return s}function qy(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||fo.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],c=a.flatMap(l=>tt(e,l)).filter(l=>l.subject===t.id).map(l=>e.byId.get(l.object)).filter(Boolean);return n&&fo.has(n)&&(c=c.filter(l=>l.class===n)),{matches:c,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function tC(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&zf.has(uy(s.label))).map(s=>({ind:s,named:n.has(uy(s.label))?1:0,depth:String(s.label).split("/").length,fixture:eC(s.label)?1:0})).sort((s,o)=>o.named-s.named||s.depth-o.depth||s.fixture-o.fixture||Xo(String(s.ind.label),String(o.ind.label))).map(s=>s.ind)}function nC(e,t,n){return e!=="reverse"?!1:t==="imports"||t==="calls"?!n||n==="Module":t==="inherits"?!n||n==="Class":!1}function sC(e,t,n){let s=Lt(n).flatMap(a=>tt(e,a)),o=a=>{let c=`ext:${String(a.label).toLowerCase()}`;return s.filter(l=>l.object===a.id||String(l.object).toLowerCase()===c).map(l=>e.byId.get(l.subject)).filter(Boolean)},r=new Map,i=o(t);for(;i.length;){let a=i.shift();r.has(a.id)||a.id===t.id||(r.set(a.id,a),i.push(...o(a)))}return[...r.values()].sort((a,c)=>Xo(String(a.label),String(c.label)))}function Uf(e){return(e?.attributes||[]).find(t=>oC.has(t.prop))?.value||null}function rC(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Ds(e)} ${e} in this graph's vocabulary`}function pn(e,t,{contextId:n=null,prev:s=null,pinnedObjMatch:o=null}={}){if(!t)return{matches:[],objMatch:null,candidates:[],traversal:null,ambiguous:!1};if(t.node)return FO(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let x=t.candidates.map(j=>{let M=pn(e,j,{contextId:n,prev:s});return{parsed:j,result:M,rendered:Xn(j,M,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:x}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let x=String(t.object||"").trim(),j=x.toLowerCase(),M=(e.individuals||[]).find(D=>{if(!Uf(D))return!1;if(String(D.label).toLowerCase()===j)return!0;let H=(D.attributes||[]).find(Y=>Y.key==="token")?.value;return H&&String(H).toLowerCase()===j});if(!M){let D=Oy(e,x);return D?{matches:[D.hit],objMatch:D.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:D.text,traversal:`schema lookup for "${x}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${x}"`,ambiguous:!1}}return{matches:[M],objMatch:M,candidates:[],traversal:`schema lookup for "${x}"`,ambiguous:!1}}if(r==="mentions"){let x=String(t.object||"").trim();return{matches:(typeof Go=="function"?Go(e.proseIndex,x):[]).map(D=>e.byId.get(D.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${x}"`}}if(r==="where"&&QO.test(String(t.object||"").trim())){let x=tC(e,t.object);return{matches:x,objMatch:x[0]||null,candidates:x.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...zf].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!nC(r,i,a))return{matches:[],objMatch:null,candidates:[],ambiguous:!1,unsupportedModifier:!0,traversal:`modifier "${t.modifier}" requested for a "${i}" query \u2014 no closure traversal exists for this combination yet`};if(r==="ask"){let x=zs(e,t.subject,n),j=zs(e,t.object,n);if(!x.match||!j.match||x.ambiguous||j.ambiguous)return{matches:[],objMatch:j.match,candidates:j.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(x.unresolvedPronoun||j.unresolvedPronoun)};let[M,D]=[x.match,j.match];i==="touches"&&D.class==="Commit"&&M.class!=="Commit"&&([M,D]=[D,M]);let H=Yr[i],Y=[...new Set(H?[...Lt(i),H]:Lt(i))],Z=Y.flatMap(P=>tt(e,P)).filter(P=>P.subject===M.id&&P.object===D.id);return{matches:Z,answer:t.negated?Z.length===0:Z.length>0,objMatch:j.match,subjMatch:x.match,candidates:[],traversal:`${Y.join("+")} edge from ${M.label} to ${D.label}`,ambiguous:!1}}let c;if(o)c={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(c=zs(e,t.object,n),t.altObject&&t.altObject!==t.object){let x=zs(e,t.altObject,n),j=!!c.match&&!c.ambiguous,M=!!x.match&&!x.ambiguous;!j&&M?c=x:j&&M&&c.match.id!==x.match.id&&(c={...c,ambiguous:!0,candidates:[x.match,...c.candidates||[]]})}if(t.kind==="tests"&&c.match&&!c.ambiguous&&!String(t.object||"").includes("/")){let x=D=>D.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),j=x(String(t.object||"").trim().toLowerCase()),M=(e.individuals||[]).find(D=>{if(D.class!=="Module"||D.id===c.match.id)return!1;let H=String(D.label||"").toLowerCase().split("/").pop();return H!==x(H)&&x(H)===j});M&&(c={...c,ambiguous:!0,candidates:[M,...c.candidates||[]]})}}let{match:l,candidates:u,ambiguous:d,unresolvedPronoun:p,matchedVia:f,unplacedWords:h,nearestLabel:m}=c;if(!l)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:p,unplacedWords:h,nearestLabel:m};if(d){let j=Rn([l,...u||[]]).slice(0,ct).map(M=>{let D=pn(e,t,{contextId:n,prev:s,pinnedObjMatch:M});return{candidate:M,result:D,rendered:Xn(t,D,e)}});return{matches:[],objMatch:l,candidates:u,traversal:null,ambiguous:!0,branches:j}}if(r==="where"){let x=(l.attributes||[]).find(j=>j.key==="site")?.value||null;return{matches:[l],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whereShape:!0,site:x,traversal:x?`site attribute of ${l.label}`:`class + defining module of ${l.label}`}}if(r==="when"){let x=D=>String((D.attributes||[]).find(H=>H.key==="date")?.value||""),j;if(l.class==="Commit")j=[l];else{let D=["touches","touchesSymbol"].flatMap(Y=>tt(e,Y)).filter(Y=>Y.object===l.id),H=new Set;j=[];for(let Y of D){if(H.has(Y.subject))continue;H.add(Y.subject);let Z=e.byId.get(Y.subject);Z&&Z.class==="Commit"&&j.push(Z)}j.sort(Qr(x))}let M=j.length&&x(j[0])?[{kind:"event",class:"Commit",label:j[0].label,ids:[j[0].id],attrs:{date:x(j[0]).slice(0,10)},lane:"when"}]:[];return{matches:j,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whenShape:!0,referents:M,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit date first`}}if(r==="whoLast"){let x=Y=>String((Y.attributes||[]).find(Z=>Z.key==="date")?.value||""),j=["touches","touchesSymbol"].flatMap(Y=>tt(e,Y)).filter(Y=>Y.object===l.id),M=new Set,D=[];for(let Y of j){if(M.has(Y.subject))continue;M.add(Y.subject);let Z=e.byId.get(Y.subject);Z&&Z.class==="Commit"&&D.push(Z)}D.sort(Qr(x));let H=D.length&&x(D[0])?[{kind:"event",class:"Commit",label:D[0].label,ids:[D[0].id],attrs:{date:x(D[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:D,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whoLastShape:!0,referents:H,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit's author`}}if(i==="touches"&&l.class==="Commit")return qy(e,l,a,{candidates:u,ambiguous:d,matchedVia:f});if(r==="forward"){let x=Yr[i],M=!!(x&&l.class&&fo.has(l.class))?[...new Set([...Lt(i),x])]:Lt(i);if(a&&a!=="Change"){let K=Rf(e,M),W=cf[a];if(K.size&&!K.has(a)&&!(W&&K.has(W)))return{matches:[],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,forwardGrainMiss:!0,wantClasses:[...K],traversal:`${M.join("+")} edges where subject = ${l.label} (grain mismatch: this "${i}" relation never targets a ${Bs(a)})`}}let H=M.flatMap(K=>tt(e,K)).filter(K=>K.subject===l.id).map(K=>e.byId.get(K.object)).filter(Boolean),Y=Rn(H),Z=Y,P="";if(a&&a!=="Change"){Z=Y.filter(W=>W.class===a);let K=cf[a];if(!Z.length&&K){let W=Y.filter(C=>C.class===K);W.length&&(Z=W,P=`, widened to ${K} subjects (no ${a} recorded)`)}}return{matches:Z,objMatch:l,candidates:u,traversal:`${M.join("+")} edges where subject = ${l.label}${P}`,ambiguous:d,matchedVia:f}}if(t.modifier==="transitive")return i==="inherits"?{matches:sC(e,l,i),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`subclass closure over inherits edges from ${l.label}`}:{matches:Ur(e,l,{maxDepth:dy,includeCycleReturn:!0}).flat().map(M=>e.byId.get(M.id)).filter(Boolean),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`reverse dependency closure over imports+calls edges from ${l.label} (impactClosure, maxDepth=${dy})`};let b=Yr[i]||Lt(i).find(x=>my.has(x))||null,g=!!(l.class&&fo.has(l.class));if(b&&(fo.has(a)||g)){let x=tt(e,b).filter(P=>P.object===l.id),j=Rn(x.map(P=>e.byId.get(P.subject)).filter(Boolean)),M=!a||a==="Change"?j:j.filter(P=>P.class===a),D="",H=cf[a];if(!M.length&&H){let P=j.filter(K=>K.class===H);P.length&&(M=P,D=`, widened to ${H} subjects (no ${a} recorded)`)}let Y=(i==="touches"||i==="calls"||i==="uses")&&l.class==="Class"&&!tt(e,"contains").some(P=>P.subject===l.id),Z=Y?e.byId.get(Qo(e,l)||""):null;if(M.length||!(Y&&Z))return{matches:M,objMatch:l,candidates:u,traversal:`${b} edges where object = ${l.label}${D}`,ambiguous:d,matchedVia:f}}let w=l,y=u,S=d,T=f,v="",E=$y(e,i);if(E&&w.class&&w.class!==E){let x=_n(e,t.object,{expectedClass:E});if(x.match&&!x.ambiguous)w=x.match,y=x.candidates,S=x.ambiguous,T=x.matchedVia;else if(E==="Module"){let j=Qo(e,w),M=j&&e.byId.get(j);if(M)v=`, refined from ${w.label} to its containing module`,w=M;else return{matches:[],objMatch:w,candidates:y,ambiguous:S,matchedVia:T,wrongGrainMiss:!0,wantClass:E,traversal:`"${t.object}" resolved to ${Bs(w.class)} ${w.label} (grain mismatch: this "${i}" question needs a ${Bs(E)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:w,candidates:y,ambiguous:S,matchedVia:T,wrongGrainMiss:!0,wantClass:E,traversal:`"${t.object}" resolved to ${Bs(w.class)} ${w.label} (grain mismatch: this "${i}" question needs a ${Bs(E)})`}}let I=Lt(i).flatMap(x=>tt(e,x)).filter(x=>x.object===w.id);i==="cochange"&&(I=I.concat(Lt(i).flatMap(x=>tt(e,x)).filter(x=>x.subject===w.id).map(x=>({...x,subject:x.object,object:x.subject}))));let k="";if(!I.length&&w.class){let x=`ext:${String(w.label).toLowerCase()}`;I=Lt(i).flatMap(j=>tt(e,j)).filter(j=>String(j.object).toLowerCase()===x),I.length&&(k=` (by name, via unresolved ${x} references)`)}let R=[],$=new Set;for(let x of I){let j=e.byId.get(x.subject);j&&!$.has(j.id)&&($.add(j.id),R.push(j))}let _,O="";if(!a||a==="Change")_=R;else{let x=R.filter(M=>M.class===a),j=x.length||!Iy(i,a)?[]:Ay(e,new Set([w.id]));if(x.length)_=x;else if(j.length)_=j,O=`, falling back to ${w.label}'s recorded source site (no defines edge)`;else if(a!=="Module"&&R.some(M=>M.class==="Module")){let M=new Set(R.filter(D=>D.class==="Module").map(D=>D.id));_=Bf(e,M,a),O=`, then ${Bs(a)} defined in the matched module(s)`}else _=[]}return{matches:_,objMatch:w,candidates:y,traversal:`${Lt(i).join("+")} edges where object = ${w.label}${k}${O}${v}`,ambiguous:S,matchedVia:T}}function go(e){if(e.class==="Module")return e.label;let t=(e.attributes||[]).find(s=>s.key==="site")?.value;if(t)return String(t).split(":")[0];let n=String(e.id||"").match(/^fn:(.+)#/);return n?n[1]:null}function vf(e,t){let n=String(t||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(n){let o=n[3]&&n[3]!==n[2]?`lines ${n[2]}-${n[3]}`:`line ${n[2]}`;return`${Ef(e)} is defined in ${n[1]} at ${o}.`}let s=go(e);return s?`${Ef(e)} is defined in ${s} (no line span recorded in this index).`:null}function Ef(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function iC(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function jn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Ji(e){let t=e.object??e.subject??"?";return`${e.entityType?fe(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function mo(e){return Fo[e]?.bare||e}function Jr(e){return Ug(e)}function aC(e){let t=mo(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function cC(e){if(!Array.isArray(e.atoms)||e.atoms.length!==2)return null;let[t,n]=e.atoms;if(t.op!=="seed"||t.ast?.node!=="allOfClass"||n.op!=="difference")return null;let s=fe(e.entityType,2);if(n.kind==="qual")return`${s} that are not ${n.filters.join(" and not ")}`;if(n.kind!=="set"||!n.ast)return null;if(n.ast.node==="existsEdge")return`${s} that do not ${mo(n.ast.kind)} anything`;let o=n.ast.node==="clause"?n.ast.clause:n.ast;if(!o||o.node||!o.kind)return null;let r=o.object??o.subject;return r==null?null:`${s} that do not ${mo(o.kind)} ${JSON.stringify(String(r))}`}function Yy(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Ji).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>Yy(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?cC(e):null)||`a compositional query (${e.node})`,machine:`composite(${e.node})`};let t=r=>JSON.stringify(String(r??"")),n=[];e.kind&&n.push(e.kind),e.negated&&n.push("negated"),e.entityType&&n.push(`entityType=${e.entityType}`),e.modifier&&e.modifier!=="direct"&&n.push(`modifier=${e.modifier}`),e.subject!=null&&n.push(`subject=${t(e.subject)}`),e.object!=null&&n.push(t(e.object));let s=`${e.shape}(${n.join(", ")})`,o;if(e.shape==="ask")o=`does "${e.subject}" ${e.negated?"not ":""}${qo(e.kind)} "${e.object}"?`;else if(e.shape==="meta")o=`what does "${e.object}" mean, in this graph's own vocabulary?`;else if(e.shape==="mentions")o=`where is "${e.object}" mentioned?`;else if(e.shape==="where")o=`where is "${e.object}" defined?`;else{let r=e.entityType?fe(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${qo(e.kind)}`:`${r}${qo(e.kind)} "${e.object}"`}return{english:o,machine:s}}function Xn(e,t,n=null){let s=Xy(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function Xy(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${Df()}`,miss:!0,ambiguous:!1};if(e.node)return qO(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
|
|
55
|
-
${t.branches.map((c,l)=>`${l+1}) as ${
|
|
53
|
+
`)}`+(o.length>Ud?`
|
|
54
|
+
\u2026+${o.length-Ud} more`:"")}var Wd,Sb,Nb,xb,V_,H_,Dd,q_,Sc,Y_,X_,J_,Mb,Q_,Z_,eT,tT,nT,sT,oT,rT,iT,aT,cT,lT,uT,dT,fT,pT,hT,mT,gT,bT,wT,yT,$T,ST,vT,kb,ET,xT,Fb,Db,Bb,kT,jT,RT,_T,TT,Rb,_b,OT,Tb,yc,Ab,Ib,Ob,Fi,Xe,NT,LT,Yb,PT,dn,Zb,MT,lw,DT,BT,zT,UT,WT,GT,VT,KT,Bd,Cb,xc,HT,zd,Ud,Fe=L(()=>{Kn();qn();Ld();Li();Os();Wd="This store holds no code index, so it records no modules or commits to look through.",Sb={"mgx:importsnamespace":"imports","mgx:callscoarse":"calls","seon:declaresmethod":"defines","mgx:testscoverage":"tests","mgx:touchedbycommit":"touches","seon:containscodeentity":"contains","seon:hassupertype":"inherits","mgx:changecoupledwith":"cochange","mgx:reexports":"reexports","mgx:serves":"serves","mgx:denotes":"denotes","mgx:touchessymbol":"touchesSymbol","mgx:callssymbol":"callsSymbol","seon:usescomplextype":"imports","seon:invokesmethod":"calls","seon:history":"touches","mgx:subclassof":"inherits","mg:imports":"imports","mg:calls":"calls","mg:defines":"defines","mg:tests":"tests","mg:touches":"touches","mgx:saidinsession":"saidInSession","mgx:inreplyto":"inReplyTo","mgx:statedby":"statedBy","mgx:canonicalisedfrom":"canonicalisedFrom"};Nb=e=>/^(git|turn):/.test(String(e||""));xb=30,V_=8;H_=2,Dd=25,q_=3;Sc=10,Y_=8,X_=3,J_=2,Mb=5,Q_=4,Z_=.2,eT=.35,tT=.15,nT=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),sT=.2,oT=.35,rT=.2,iT=.35,aT=e=>/\.cs$/i.test(e),cT=e=>/^I[A-Z]/.test(String(e||"")),lT=.2,uT=.35,dT=50,fT=.2,pT=.35,hT=.5,mT=Mb,gT=3,bT=4,wT=1,yT=.9,$T=.5,ST=.2,vT=.35,kb=4,ET=2,xT=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],Fb=3,Db=12,Bb=.9,kT=["imports","calls","callsSymbol","inherits"],jT=.5,RT=.6,_T=.2,TT=.35;Rb=128,_b=4,OT=64,Tb=250,yc=class extends Error{};Ab=new WeakMap;Ib=40,Ob=40,Fi=30;Xe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";NT=25,LT=15;Yb=40,PT="tests edges are recorded module to module, so this is module-grain coverage.";dn=15;Zb=new Set(["Function","Method"]);MT=8;lw={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};DT=8,BT=16,zT=4,UT=6,WT=12,GT=2,VT=8,KT=3,Bd=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),Cb=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),xc=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},HT=e=>{let t=new Map,n=e[0]??0,s=0;for(let o of e){let r=(t.get(o)||0)+1;t.set(o,r),r>s&&(s=r,n=o)}return n};zd=20;Ud=40});function at(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function vw(e){let t=String(e||"");return gw&&(t=t.replace(gw," ")),t.replace(/\s+/g," ").trim()}function Ew(e){let t=String(e||"");t=t.replace(gA," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(dA);if(o&&(t=o[1].trim()),o=t.match(fA),o&&(t=o[1].trim()),o=t.match(bw),o&&(t=o[1].trim()),o=t.match(ww),o&&(t=o[1].trim()),o=t.match(yw),o&&(t=o[1].trim()),o=t.match(mA),o&&(t=o[1].trim()),o=t.match($w),o&&(t=o[1].trim()),o=t.match(bA),o&&(t=o[1].trim()),o=t.match(wA),o&&co.test(o[1].trim())&&(t=o[1].trim()),o=t.match(yA),o&&co.test(o[1].trim())&&(t=o[1].trim()),o=t.match($A),o&&co.test(o[1].trim())&&(t=o[1].trim()),o=t.match(SA),o&&co.test(o[1].trim())&&(t=o[1].trim()),o=t.match(vA),o&&co.test(o[1].trim())&&(t=o[1].trim()),o=t.match(EA),o&&co.test(o[1].trim())&&(t=o[1].trim()),o=t.match(xA),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(kA),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(jA),o&&(t=`what do you ${o[1].toLowerCase()} about ${o[2].trim()}`),o=t.match(RA),o){let r=o[1].trim();uA(r)||(t=!_A.test(r)&&(aA.test(r)||co.test(r))?r:`describe ${r}`)}if(o=t.match(TA),o){let r=o[1].trim();(co.test(r)||AA.test(r)||$w.test(r)||bw.test(r)||yw.test(r)||ww.test(r)||IA.test(r))&&(t=r)}if(t===s)break}return t}function UA(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(BA);if(o&&(t=o[1].trim()),o=t.match(zA),o&&(t=o[1].trim()),t===s)break}return t}function GA(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(WA);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function Bi(e){let t=String(e||"").trim(),n=t.match(HA)||t.match(qA);return n?n[1].trim():null}function Jd(e){let t=String(e||""),n=t.match(KA);if(n){let o=kw[n[1].toLowerCase()],r=xw[n[2].toLowerCase()],i=n[5]||n[6],a=n[4]?n[4].toLowerCase():Yd[i.toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${a}`}let s=Bi(t);return s?`which modules transitively import ${s}`:t}function zi(e){return String(e||"").replace(ZT,t=>xd[t.toLowerCase()])}function Ho(e){let t=zi(e);return t=t.replace(eA,n=>kd[n.toLowerCase()]),t=t.replace(tA,n=>jd[n.toLowerCase()]),t=t.replace(nA,"with"),t=t.replace(sA,(n,s)=>`${s} for`),t=t.replace(oA,(n,s)=>`for ${s}`),t=t.replace(rA,(n,s)=>s),t=t.replace(YA,"$1$2"),t=t.replace(Wg,"$1ing"),t=Ew(t),t=GA(t),t=UA(t),t=Jd(t),t=vw(t),t=En(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ui(e){for(let t of[...Vg,...Gg]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Qd(e){for(let t of XA){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function _w(e){let t=String(e||"").match(JA);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var QT,ZT,Sw,eA,tA,nA,sA,oA,rA,iA,gw,aA,co,cA,lA,uA,Di,dA,fA,pA,hA,bw,ww,yw,mA,gA,bA,wA,yA,$A,SA,vA,EA,xA,kA,jA,RA,_A,TA,AA,IA,$w,jc,OA,CA,NA,LA,PA,MA,FA,_W,Xd,DA,TW,AW,IW,BA,zA,WA,xw,kw,VA,Yd,KA,jw,Rw,HA,qA,YA,XA,JA,pt,fn,be,Cn=L(()=>{rs();QT=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b","gi"),ZT=QT(xd),Sw=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b(?!\\.[a-z0-9])","gi"),eA=Sw(kd),tA=Sw(jd),nA=/(?<=^|\s)w\/(?=\s|$)/gi,sA=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,oA=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,rA=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,iA=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),gw=Ii.length?new RegExp("\\b("+[...Ii].sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b\\s*,?","gi"):null;aA=new RegExp("\\b(?:"+Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b","i"),co=/^(?:which|what|who|whose|where|when|why|how)\b/i,cA=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),lA=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,uA=e=>{if(lA.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return cA.has((t[t.length-1]||"").toLowerCase())},Di="[,.;:!]|\u2014|\u2013|-",dA=/^(?:hi|hiya|hello|hey|yo|howdy|g'?day|yeah\s+nah|good\s+(?:morning|afternoon|evening|day)|greetings|salutations)(?:\s+(?:there|pardner|folks|friend|mate))?\s*[,.—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,fA=/^(?:thanks|thank\s+you|many\s+thanks|thx|ty|cheers)(?:\s+(?:so\s+much|a\s+lot|very\s+much|a\s+bunch))?\s*[,—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,pA="ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|another\\s+one",hA="(?:just\\s+)?(?:one|another)\\s+more",bw=new RegExp(`^(?:(?:${pA})[\\s,]+|(?:${hA})\\s*(?:${Di})\\s*)+(.+)$`,"i"),ww=/^(?:just\s+(?:poking\s+around|looking\s+around|browsing|exploring|checking\s+(?:this|it)\s+out)|first\s+time\s+(?:trying\s+this\s+out|using\s+this|here)|i'?m\s+new\s+(?:here|around\s+here|to\s+(?:this|all\s+this)(?:\s+(?:repo|codebase|project|app|tool|thing))?))\s*[,.—–-]\s*(.+)$/i,yw=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,mA=/^(?:please[\s,]+)+(.+)$/i,gA=/,?\s*if\s+(?:it'?s|it\s+is|that'?s|that\s+is)\s+not\s+too\s+much\s+(?:trouble|bother|hassle)\s*,?\s*/i,bA=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,wA=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,yA=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,$A=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,SA=/^do\s+you\s+know\s+(.+?)\??$/i,vA=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,EA=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,xA=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,kA=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,jA=/^what\s+you\s+(know|remember)\s+about\s+(.+?)\??$/i,RA=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,_A=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,TA=/^(?:and|also|so|then|now|but)\s+(.+)$/i,AA=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,IA=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,$w=/^(?:(?:actually|no\s+wait|wait|hold\s+on|never\s+mind|scratch\s+that|on\s+second\s+thought|i\s+mean(?:t)?)[\s,.]+)+(.+)$/i;jc=e=>[...e].sort((t,n)=>n.length-t.length).map(at).join("|"),OA=Object.freeze(["oh","ah","aha","ooh","ohh","wow","huh","hm","hmm","mm","mmm","heh","ha","yay","ugh","oof","phew","whoa","oops","yikes","oi"]),CA=Object.freeze(["nice","cool","great","neat","lovely","interesting","good","ok","okay","fair enough","makes sense","i see","got it","fine"]),NA=Object.freeze(["um","umm","uhm","uh","uhh","er","err","erm","ehm","eh","well","anyway","anyhow","anyways","regardless","moving on"]),LA=Object.freeze(["quick question","quick q","one quick question","just a quick question","random question","random thing","one more random thing","another random thing","one more thing","one last thing","last thing","one more question","side note","side question","sidebar","off topic","unrelated","on a different note","different topic","changing the subject","new topic","just curious","out of curiosity","curious","genuinely curious","while i'm here","while i have you","before i forget"]),PA=`(?:${jc(OA)})(?:\\s+(?:${jc(CA)}))?\\s*(?:${Di})\\s*`,MA=`(?:${jc(NA)})\\s*(?:(?:${Di})\\s*|\\s+)`,FA=`(?:${jc(LA)})\\s*(?:${Di})\\s*`,_W=new RegExp(`^(?:sorry\\s*(?:${Di})?\\s*)?(?:${PA}|${MA}|${FA})+`,"i"),Xd="what|who|which|where|when|why|how",DA="is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must",TW=new RegExp(`\\b(?:an?|the)?\\s*(?:${Xd})\\s*\\?\\s*$`,"i"),AW=new RegExp(`^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:${Xd})\\b`,"i"),IW=new RegExp(`\\b(?:${Xd})\\s+(?:i|you|he|she|it|we|they)?\\s*(?:${DA})\\b`,"i"),BA=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,zA=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;WA=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;xw=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),kw=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),VA="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",Yd=Object.freeze({tests:"tested","a test":"tested","any tests":"tested",coverage:"covered","test coverage":"covered"}),KA=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(kw).join("|")+")\\s+("+Object.keys(xw).join("|")+")\\s+(.+?),\\s*(?:(?:is|are)\\s+(?:it|that|they|this)\\s+("+VA+")|(?:has|have)\\s+(?:it|that|they|this)\\s+got\\s+("+Object.keys(Yd).join("|")+")|(?:does|do)\\s+(?:it|that|they|this)\\s+have\\s+("+Object.keys(Yd).join("|")+"))\\??$","i"),jw="(?:were|was)\\s+(?:deleted|removed)",Rw="what\\s+(?:would|might|could)\\s+(?:break|fail|be\\s+affected)",HA=new RegExp("^if\\s+(.+?)\\s+"+jw+",?\\s*"+Rw+"\\??$","i"),qA=new RegExp("^"+Rw+"\\s+if\\s+(.+?)\\s+"+jw+"\\??$","i");YA=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${vd.map(at).join("|")})(\\s*[?.!]*)$`,"i");XA=Object.freeze([{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:are|is)\s+(?:in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:does|do)\s+(.+?)\s+have\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+are\s+(?:the\s+)?(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:of|in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^(?:the\s+)?(?:members?|methods?|attributes?|contents)\s+of\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+else\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:defined|declared)\s+(?:the\s+)?(?:function\s+|method\s+|class\s+|module\s+|variable\s+|constant\s+)?(.+?)\??$/i,to:e=>`where is ${e[1]} defined`},{re:/^where'?s\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^were\s+is\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^what\s+is\s+the\s+purpose\s+of\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\??$/i,to:e=>`what is a ${e[1]}`},{re:new RegExp(`^what\\s+does\\s+(?:the\\s+)?(?!(?:an?|it|this|that|these|those)\\s)(.+?)\\s+do\\s+(?:${Ed.map(at).join("|")})\\??$`,"i"),to:e=>`what is a ${e[1]}`},{re:/^(?:which|what)\s+(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:are|is)\s+(public|private|protected|static|abstract|constant|exported|re-?exported|tested|covered|untested|uncovered)\??$/i,to:e=>`${e[2].toLowerCase()} ${e[1].toLowerCase()}`},{re:/^what\s+(?:is|are)\s+(not\s+)?(tested|untested|covered|uncovered)\??$/i,to:e=>{let t=e[2].toLowerCase();return`${e[1]?t==="tested"?"untested":t==="covered"?"uncovered":t:t} modules`}},{re:/^what\s+does\s+(.+?)\s+changes?\s+together\s+with\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^what\s+changes?\s+together\s+with\s+(.+?)\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^how\s+many\s+commits\s+(?:are|were)\s+(?:recorded|logged)\s+(?:for|against)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`how many commits touched ${e[1]}`},{re:/^who\s+(?:wrote|authored)\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^who\s+is\s+the\s+authors?\s+of\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^(?:does|do)\s+(?!.*\bnot\b)(.+?)\s+have\s+(?:any\s+)?(?:tests?|test\s+coverage|coverage)\??$/i,to:e=>`what tests ${e[1]}`},{re:/^(?:is|are)\s+(?!.*\bnot\b)(.+?)\s+tested\??$/i,to:e=>`what tests ${e[1]}`},{re:/^what\s+needs\s+(?:to\s+be\s+)?(?:a\s+)?(?:tested|tests?|testing|coverage|covering)\??$/i,to:()=>"untested modules"},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:(?:that|which)\s+)?(?:have|has|having|with)\s+no\s+tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+without\s+(?:any\s+)?tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:new RegExp(`^(?:do|does)\\s+(.+?)\\s+(${iA})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);JA=new RegExp("^(?:which|what|who|list|show(?:\\s+me)?|find|give\\s+me)?\\s*(?:the\\s+|all\\s+)?([a-z][a-z-]*)\\s+(?:(?:that|which|who)\\s+)?(?:(?:do|does|did|are|is|was|were|have|has|can|could|will|would|should)\\s+not|cannot|can't|won't|couldn't|shouldn't|wouldn't|not)\\s+(.+)$","i");pt=new Set(["what","who","which","where","when","why","how","does","do","did","is","are","was","were","the","a","an","of","to","from","at","in","on","there","something","anything","nothing","one","any","anywhere","last","usually","typically","generally","normally","often","commonly","mostly","should","would","could","can","will","shall","might","must"]),fn=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),be=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var Aw,Tw=L(()=>{Aw={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chappe","chapped","chappes","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seiding","seifing","seiing","seined","seiths","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Ps(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let c=1;c<=t.length;c+=1){let l=e[r-1]===t[c-1]?0:1,u=Math.min(o[c]+1,i[c-1]+1,o[c-1]+l);r>1&&c>1&&e[r-1]===t[c-2]&&e[r-2]===t[c-1]&&(u=Math.min(u,s[c-2]+l)),i[c]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function ef(e){return/^[a-z]+$/.test(e)&&!pt.has(e)&&!Zd.has(e)}function Cw(e){return tI(e)?null:Rc(e,Ow,Ms(e))}function Rc(e,t,n=Ms(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Ps(e,i,Math.min(s,n));a<s?(s=a,o=i,r=!1):a===s&&a<=n&&i!==o&&(r=!0)}return s<=n&&!r?o:null}var ZA,Ms,Zd,Iw,Ow,eI,tI,Wr=L(()=>{rs();Tw();Cn();ZA=["used"];Ms=e=>e.length<=5?1:2,Zd=new Set([...Object.keys(he),...Object.keys(nt),...Object.keys(xn),...ZA].flatMap(e=>e.split(" "))),Iw=4,Ow=[...new Set([...Object.keys(he),...Object.keys(xn)].flatMap(e=>e.split(" ")).filter(e=>e.length>=Iw))],eI=new Set(Aw.words),tI=e=>eI.has(e)});function Gr(e){for(let t of rI){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var _c,nI,sI,oI,tf,rI,Nw,Tc=L(()=>{rs();Cn();_c=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),nI=Object.keys(nt).sort((e,t)=>t.length-e.length).map(at).join("|"),sI=Object.keys(xn).sort((e,t)=>t.length-e.length).map(at).join("|"),oI=zo.slice().sort((e,t)=>t.length-e.length).map(at).join("|"),tf=(e,t)=>e==="defines"&&Ai.has(t),rI=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${_c})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return tf(n,t)?null:so({shape:"ask",entityType:null,modifier:"direct",kind:n,subject:e[1].trim(),object:e[3].trim()},t)}},{name:"reverse",re:new RegExp(`^which\\s+(${nI})\\s+(?:(${sI})\\s+)?(${_c})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=he[t];return tf(n,t)?null:so({shape:"reverse",entityType:nt[e[1].toLowerCase()],modifier:e[2]?xn[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()},t)}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${_c})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return tf(n,t)?null:so({shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()},t)}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${oI})\\??$`,"i"),build:e=>({shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:e[1].trim()})},{name:"meta-whatis",re:new RegExp("^what\\s+(?:is|are)\\s+(?:(an?|the)\\s+)?(.+?)\\??$","i"),build:e=>{let t=e[1]?e[1].toLowerCase():null,n=En(e[2].trim()),s=!/\s/.test(n);if(t==="the"&&!s||!t&&!nt[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&Ug.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:oo(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${Gn.map(at).join("|")})\\??$`,"i"),build:e=>({shape:"mentions",entityType:null,modifier:"direct",kind:"mentions",object:e[1].trim()})},{name:"where",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)(?:\\s+(?:${vn.map(at).join("|")}))?\\??$`,"i"),build:e=>({shape:"where",entityType:null,modifier:"direct",kind:"where",object:e[1].trim()})},{name:"when",re:new RegExp(`^when\\s+(?:did|does|do|was|were|is)\\s+(.+?)\\s+(?:last\\s+)?(${_c})\\??$`,"i"),build:e=>he[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];Nw={id:"grammar",class:"graph-query",run(e){let t=Gr(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function Lw(e){let t=e.trim().split(/\s+/);return t.length>1&&ac.has(t[0].toLowerCase())}function lI(e){return he[e.trim().toLowerCase()]==="calls"}function Ut(e,t,n=null){let s=Object.keys(t).sort((o,r)=>r.split(" ").length-o.split(" ").length);for(let o of s){let r=o.split(" ");for(let i=0;i<=e.length-r.length;i+=1)if(!(n&&r.some((a,c)=>n.has(i+c)))&&r.every((a,c)=>e[i+c]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Gi(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(k=>k.toLowerCase());if(s.includes("where")&&!Ut(s,he)){let k=s.some(_=>Gn.includes(_)),R=new Set([...vn,...Gn]),$=n.filter((_,O)=>!pt.has(s[O])&&!R.has(s[O])).join(" ").trim();if($){let _=k?"mentions":"where";return{shape:_,entityType:null,modifier:"direct",kind:_,object:$}}}if(new Set(["has","have","had"]).has(s[0])){let k=s.length;for(;k>1&&(s[k-1]==="ever"||s[k-1]==="been");)k-=1;if((k>1?he[s[k-1]]:null)==="touches"){let $=n.slice(1,k-1).filter((_,O)=>!pt.has(s[1+O])).join(" ").trim();if($)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:$}}}let r=s,i=Ut(s,he);if(!i&&t){let k=s.map(R=>{if(!ef(R))return R;let $=t.lemma(R);return Zd.has($)?$:R});i=Ut(k,he),i&&(r=k)}let a=null;if(!i){let k=s.map(R=>R.length>=4&&ef(R)&&Cw(R)||R);if(i=Ut(k,he),i){r=k;let R=s.slice(i.start,i.end).findIndex((_,O)=>_!==k[i.start+O]),$=i.start+Math.max(R,0);a={from:s[$],to:k[$]}}}let c=!1;if(!i)for(let k=0;k<s.length;k+=1){let R=ro[s[k]];if(!(R&&s[k]==="used"&&s[k+1]==="for")&&R&&s.slice(0,k).some($=>Wi.has($))){i={kind:R,start:k,end:k+1},c=!0;break}}if(!i)return null;!c&&i.end-i.start===1&&ro[s[i.start]]&&s.slice(0,i.start).some(k=>Wi.has(k))&&(c=!0);let l=k=>a?{...k,fuzzyVerb:a}:k;if(t&&i.end-i.start===1){let k=i.start,R=s[k-1];if((R==="the"||R==="these"||R==="those")&&s[k+1]==="of"&&t.posTags(n)[k]==="NOUN"){let _=n.slice(k+2).filter((O,x)=>!pt.has(s[k+2+x])).join(" ").trim();if(_)return l({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:_})}}let u=new Set,d=k=>{if(k)for(let R=k.start;R<k.end;R+=1)u.add(R)};d(i);for(let[k,R]of Object.entries(he)){if(R!==i.kind)continue;let $=k.split(" "),_=i.end;if($.every((O,x)=>r[_+x]===O)){d({start:_,end:_+$.length});break}}let p=Ut(r,nt,u);d(p);let f=Ut(r,xn,u);d(f);let h=(k,R)=>n.slice(k,R).filter(($,_)=>!u.has(k+_)&&!pt.has(s[k+_])).join(" ").trim(),m=h(0,i.start),b=h(i.end,n.length);c&&!s.includes("by")&&cI.has(b.toLowerCase())&&(b="");let g=i.kind,w=p?nt[r.slice(p.start,p.end).join(" ")]:null,y=f?xn[r.slice(f.start,f.end).join(" ")]:"direct",S=r.slice(i.start,i.end).join(" ");if(g==="touches"&&s.includes("when")){let k=m||b;if(k)return l({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:k})}if(g==="touches"&&s.includes("who")&&s.includes("last")){let k=m||b;if(k)return l({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:k})}let T=s.indexOf("by"),v=s.slice(0,i.start).findIndex(k=>Wi.has(k)),E=v>=0,I=E&&v>T;if(T>=0&&!u.has(T)&&E){let k=(_,O)=>n.slice(_,O).filter((x,j)=>{let M=_+j,D=s[M];return!u.has(M)&&!pt.has(D)&&D!=="by"&&!Wi.has(D)&&!iI.has(D)&&!aI.has(D)}).join(" ").trim(),[R,$]=I?[k(v+1,n.length),k(T+1,v)]:[k(0,T),k(T+1,n.length)];if(R&&$)return g==="defines"&&Ai.has(r.slice(i.start,i.end).join(" "))?null:l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:$,object:R});if($)return l({shape:"forward",entityType:w,modifier:y,kind:g,object:$});if(R)return l({shape:"reverse",entityType:w,modifier:y,kind:g,object:R})}if(c&&T<0&&b&&s[i.start]==="called")return null;if(m&&b){if(g==="defines"&&Ai.has(S)||g==="calls"&&(Lw(b)||lI(m)))return null;let k=c&&T<0?cc[`${s[i.start]} ${s[i.end]}`]:null;return k&&k.role==="agent"&&k.kind===g?l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:b,object:m}):l(so({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:m,object:b},S))}if(b){if(g==="calls"&&Lw(b))return null;let k=p&&p.start>=i.end?null:w;return l(so({shape:"reverse",entityType:k,modifier:y,kind:g,object:b},S))}if(g==="inherits"&&!m&&p&&p.start===i.end){let k=r.slice(p.start,p.end).join(" ");if(k)return l({shape:"reverse",entityType:null,modifier:y,kind:g,object:k})}if(m&&!b&&E&&i.end-i.start===1&&ro[s[i.start]]){if(m.split(/\s+/).length>1)return null;if(g==="touches")return l({shape:"when",entityType:null,modifier:"direct",kind:g,object:m});let k=Wi.has(s[0]);return l({shape:"reverse",entityType:w,modifier:y,kind:g,object:m,...k?{polar:!0}:{}})}return m?l(so({shape:"forward",entityType:w,modifier:"direct",kind:g,object:m},S)):null}var Wi,iI,aI,cI,Pw,Ac=L(()=>{rs();Cn();Wr();Wi=new Set(["is","are","was","were","be","been","being","get","gets","got"]),iI=new Set(["which","what","who","whom","whose"]),aI=new Set(Ts.map(e=>e.toLowerCase())),cI=new Set(["recently","lately","yet","already","ever","again"]);Pw={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Gi(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function dI(e,t,n){if(!n||typeof n.posTags!="function"||!t.length)return[];let s=new Set(t.map(i=>i.toLowerCase())),o;try{o=n.posTags(e)}catch{return[]}let r=[];for(let i=0;i<e.length;i+=1){let a=e[i],c=a.toLowerCase();!/^[a-z]+$/.test(a)||Mw.has(c)||!s.has(c)||o[i]==="VERB"&&r.push(c)}return r}function fI(e,t=null){let n=fn(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!Mw.has(a)&&(uI.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=dI(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var Mw,uI,Fw,Dw=L(()=>{rs();Cn();Tc();Ac();Mw=new Set([...pt,...be(Bo),...be(Object.keys(he)),...be(Object.keys(nt)),...be(Object.keys(xn)),...be(Object.keys(Ge)),...be(Uo),...be(Wo),...be(Object.keys(ss)),...be(Object.keys(os)),...be(Object.keys(io)),...be(Ts),...be(Oi),...be(zo),...be(vn),...be(Gn),...be(In),...be(Object.keys(Lr))]),uI=new Set([...be(Ii),...be(lc)]);Fw={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Gr(e))return null;let{text:n,dropped:s,maybeNoise:o}=fI(e,t.nlp||null);if(!s.length||!n)return null;let r=Gr(n)||Gi(n,t.nlp||null);if(!r)return null;if(o.length&&(r.shape==="where"||r.shape==="mentions")&&r.object){let i=r.object.split(/\s+/).filter(a=>!o.includes(a.toLowerCase())).join(" ").trim();i&&i!==r.object&&(r.altObject=i)}return{strategyId:"noise-strip",class:"noise-stripped",candidates:[{parsed:r,confidence:.75,note:`noise-stripped to "${n}"`}]}}}});var Bw=L(()=>{});var Ic,Oc=L(()=>{Ic=()=>{}});function Uw(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Vr(e.subject)===Vr(t.subject)&&Vr(e.object)===Vr(t.object):Vr(e.object)===Vr(t.object)}function nf(e){let t=(e||[]).filter(l=>l&&Array.isArray(l.candidates)&&l.candidates.length);if(!t.length)return null;let n=[];for(let l of t)for(let u of l.candidates)!u||!u.parsed||n.push({parsed:u.parsed,confidence:typeof u.confidence=="number"?u.confidence:.5,note:u.note||null,via:u.via||null,strategyId:l.strategyId,class:l.class});if(n.some(l=>!Ww(l))&&(n=n.filter(l=>!Ww(l))),!n.length)return null;let s=new Map;for(let l of n)s.has(l.class)||s.set(l.class,[]),s.get(l.class).push(l);let o=[];for(let[l,u]of s){let d=[];for(let p of u){let f=d.find(h=>Uw(h.parsed,p.parsed)&&h.via===p.via);if(f){f.agreed+=1,f.confidence=Math.max(f.confidence,p.confidence),zw(p.parsed)<zw(f.parsed)&&(f.parsed=p.parsed);continue}d.push({...p,agreed:1})}d.length&&o.push({class:l,candidates:d})}if(!o.length)return null;let r=l=>Math.max(...l.candidates.map(u=>u.confidence)),i=o[0];for(let l of o)r(l)>r(i)&&(i=l);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(l=>l.parsed)},c=o.filter(l=>l!==i).map(l=>l.candidates[0]).filter(l=>!i.candidates.some(u=>Uw(u.parsed,l.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:c}}function mI(e){if(!e)return"something else";if(e.ambiguousParse)return"one of several readings";let t=e.object??e.subject??"?";return`${e.kind} "${t}"`}function Gw(e,{describe:t=mI,answerFor:n=null}={}){return(e||[]).map(s=>{let o=s.note||t(s.parsed),r=n&&n(s)||"ask it that way";return`if you mean ${o} then ${r}`})}var Vr,pI,zw,hI,Ww,sf=L(()=>{Vr=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),pI=/^\s*(?:the|a|an)\s+/i,zw=e=>[e?.subject,e?.object].filter(t=>pI.test(String(t||""))).length;hI=new Set(["fuzzy","lemma","spell"]),Ww=e=>hI.has(e.via)});function Cc(e){of=e}function Nc(){return typeof of=="function"?of():null}var of,Kr=L(()=>{of=null});function Hw(e,t={},n=bI){let s=[];for(let o of n)try{let r=o.run(e,t);r&&typeof r.then!="function"&&s.push(r)}catch{}return s}var gI,bI,qw=L(()=>{Cn();Tc();Ac();Dw();Bw();Oc();sf();Kr();gI=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],bI=[Nw,Pw,Fw,...gI]});function Fs(e){return wI.test(String(e||"").trim())?"an":"a"}function Lc(e){let t=String(e||"").trim();return t&&(/(?:s|x|z|ch|sh)$/.test(t)?`${t}es`:/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:`${t}s`)}function Hr(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Vi(e){let t=(e||[]).map(n=>String(n||"").trim()).filter(Boolean);return t.length===0?"":t.length===1?t[0]:t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t[t.length-1]}`}var wI,Ki=L(()=>{wI=/^[aeiou]/i});var Hi,rf=L(()=>{Hi=(e,t,n)=>n});var Qy={};Nt(Qy,{DYNAMIC_TAIL_OK_RE:()=>Gf,applyNegationFrames:()=>Ui,ask:()=>go,classDisplayName:()=>Ds,degreeMetric:()=>Dy,metaFallbackEntityAnswer:()=>Ay,normalizeQuery:()=>Ho,parseQuery:()=>Jo,parseQueryFull:()=>xf,render:()=>Yn,rephraseHint:()=>Ff,resolveObject:()=>_n,traverse:()=>pn,worldRelationGraphPayload:()=>_C});function tt(e,t){let n=Yw.get(e);n||(n=new Map,Yw.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Ls(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function fe(e,t){let[n,s]=df[e]||["result","results"];return t===1?n:s}function Zi(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${fe(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function Ds(e){let t=String(e||"");if(typeof Vn=="function"){let n=Vn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function qo(e){return $I[e]||e}function kI(e){if(!e?.ambiguousParse||!Array.isArray(e.candidates)||e.candidates.length!==2)return e;let t=e.candidates.find(r=>r?.shape==="meta"),n=e.candidates.find(r=>r!==t);if(!t||!n)return e;let s=String(t.object||"").trim().toLowerCase();if(!s||xI.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return be(zo).includes(o)?t:e}function RI(e,t){if(!e||e.shape!=="where"||e.altObject||!jI.test(t))return e;let n=ic(t),s=ic(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=fn(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||pt.has(i)||he[i]||i.endsWith("ing"))return o;let a=fn(n).map(l=>l.toLowerCase());for(;a.length&&hy.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let c=r.slice(0,-1).join(" ");return{...e,object:c,altObject:s,verb:i}}function Jo(e,{nlp:t=void 0}={}){return xf(e,{nlp:t}).parsed}function xf(e,{nlp:t=void 0}={}){let n=t===void 0?Nc():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Qd(Ui(Ho(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=TI(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=nf(Hw(o,{nlp:n,raw:s}));return i?{parsed:RI(kI(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function Bc(e,t){return t.length&&kf.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function Qr(e,t){return Gr(e)||Gi(e,t)}function TI(e,t){let n=fn(e),s=n.map(o=>o.toLowerCase());return eO(n,s)||nO(n,s)||CI(n,s,t)||by(e,t,0)||sO(n,s,t)||LI(n,s,t)||GI(n,s,t,0)||YI(n,s,t,0)||Sy(n,s)||QI(n,s,t)||oO(n,s,t)||aO(n,s,t)||lO(n,s,t,0)||iO(n,s,t,0)||yy(n,s,t,0)||Rf(n,s,t,0)||$y(n,s,t,0)||DI(n,s,t)||II(n,s)||jy(n,s,t,0)}function II(e,t){let n=0;AI.has(t[n])&&(n+=1);let s=ft(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=h=>h+1<t.length?cc[`${t[h]} ${t[h+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,c=-1,l;for(let h=a;h+1<t.length;h+=1){let m=r(h);if(m){c=h,l=m;break}}if(c<0)return null;let u=e.slice(a,c).join(" ").trim(),d=e.slice(c+2).join(" ").trim();if(!u||!d)return null;let p=(h,m)=>h.role==="object"?{shape:"reverse",kind:h.kind,entityType:o,modifier:"direct",object:m}:{shape:"forward",kind:h.kind,modifier:"direct",object:m},f=p(i,u);return f.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:f}},{op:"intersection",kind:"set",ast:{node:"clause",clause:p(l,d)}}]}}function Mc(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function CI(e,t,n){if(!["do","does","did"].includes(t[0])||!OI.has(t[1]))return null;let s=ft(t[2]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;if(o==="Change")return{node:"miss",reason:`"${t[2]}" isn't an enumerable kind \u2014 a universal check needs a concrete kind (functions, classes, modules, \u2026)`};let r=t[2],i=e.slice(3),a=t.slice(3);if(!i.length)return null;let c=Ut(a,he);if(!c)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((p,f)=>(f<c.start||f>=c.end)&&!pt.has(a[f])&&a[f]!=="from").join(" ").trim();if(!u)return null;let d=zs(`which ${r} ${i.join(" ")}`,n,1);return!d||d.node==="miss"?{node:"miss",reason:d&&d.reason||"the universal clause didn't parse"}:{node:"universal",entityType:o,kind:c.kind,object:u,complement:Mc(o,{op:"difference",kind:"set",ast:d})}}function by(e,t,n=0){let s=_w(e);if(!s)return null;let o=ft(s.entWord);if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;if(r==="Change")return{node:"miss",reason:`"${s.entWord}" isn't an enumerable kind \u2014 a set complement needs a concrete kind (functions, classes, modules, \u2026)`};let i=fn(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ge[d]))return Mc(r,{op:"difference",kind:"qual",filters:a});let c=Ut(a,he);if(!c)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,p)=>(p<c.start||p>=c.end)&&!pt.has(a[p])&&a[p]!=="from").length)return Mc(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:c.kind}});let u=zs(`which ${s.entWord} ${s.predicate}`,t,n+1);return!u||u.node==="miss"?{node:"miss",reason:u&&u.reason||"the negated clause didn't parse"}:Mc(r,{op:"difference",kind:"set",ast:u})}function LI(e,t,n){let s=0;for(;s<t.length&&NI.has(t[s]);)s+=1;if(!["do","does","did"].includes(t[s]))return null;s+=1;let o=e.slice(s),r=t.slice(s),i=r.indexOf("not");if(i<0)return null;let a=Ut(r,he);if(!a)return null;let l=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!pt.has(r[d])).join(" ").trim();return l?{node:"forwardComplement",kind:a.kind,subjectTerm:l}:null}function jf(e,t){let n=new Set;for(let s of t)for(let o of tt(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function wy(e,t){let n=Lt(t),s=n.filter(r=>!py.has(r)),o=jf(e,s.length?s:n);return o.size===1?[...o][0]:null}function zs(e,t,n){if(n>my)return{node:"miss",reason:"too deep to resolve"};let s=by(e,t,n);if(s)return s;let o=fn(e),r=o.map(p=>p.toLowerCase()),i=Sy(o,r);if(i)return i;let a=yy(o,r,t,n);if(a)return a;let c=Rf(o,r,t,n);if(c)return c;let l=$y(o,r,t,n);if(l)return l;let u=jy(o,r,t,n);if(u)return u;let d=Qr(e,t);return d?{node:"clause",clause:d}:null}function PI(e){let t=e.map(r=>r.toLowerCase()),n=Object.keys(io).sort((r,i)=>i.split(" ").length-r.split(" ").length),s=[],o=e.length;for(;;){let r=null;for(let c=o-1;c>=1&&!r;c-=1)for(let l of n){let u=l.split(" ");if(c+u.length<=o&&t.slice(c,c+u.length).join(" ")===l){r={at:c,len:u.length,op:io[l]};break}}if(!r)break;let i=e.slice(r.at+r.len,o),{blc:a}=Bc(i,i.map(c=>c.toLowerCase()));if(!a.length||!a.every(c=>Ge[c]))break;s.unshift({op:r.op,kind:"qual",filters:a}),o=r.at}return!s.length||!o?null:{rest:e.slice(0,o),lifted:s}}function Rf(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=In.includes(t[o]),i=!r&&gy(t[o]);if(!r&&!i||r&&o+1>=t.length||!ft(t[o-1]))continue;let c=e.slice(0,o-1);if(!c.length||c.every(m=>Ge[m.toLowerCase()]))continue;let l=Qr([...c,ff].join(" "),n);if(!l||l.shape!=="reverse"&&l.shape!=="forward"||l.modifier&&l.modifier!=="direct")continue;let u=e.slice(r?o+1:o),d=PI(u),p=`which ${t[o-1]} ${(d?d.rest:u).join(" ")}`,f=zs(p,n,s+1);if(!f||f.node==="miss")return f?{node:"miss",reason:f.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"};let h={node:l.shape==="reverse"?"reverseSet":"forwardSet",kind:l.kind,entityType:l.entityType,inner:f};return d?{node:"boolean",entityType:l.entityType,atoms:[{op:"seed",kind:"set",ast:h},...d.lifted]}:h}return null}function yy(e,t,n,s){let o=0;(po.has(t[o])||_f.has(t[o]))&&(o+=1);let r=ft(t[o]);if(!r||r.placeholder||!r.entityType||(o+=1,kf.has(t[o])&&(o+=1),!MI.has(t[o])||t[o+1]!=="in"))return null;let i=e.slice(o+2);return i.length?Tf(r.entityType,i,n,s):null}function $y(e,t,n,s){let o=0;if(!po.has(t[0]))return null;o+=1;let r=ft(t[o]);if(!r)return null;o+=1;let i=e.slice(o),a=t.slice(o);if(i.length<2)return null;let c=null;for(let m=i.length-1;m>0;m-=1){let b=a.slice(m),g=Ut(b,he);if(g&&g.start===0&&g.end===b.length){c={kind:g.kind,at:m};break}}if(!c)return null;let l=i.slice(0,c.at),u=a.slice(0,c.at);if(!u.some(m=>In.includes(m)))return null;let d=l,p=u;for(;p.length&&_f.has(p[0]);)d=d.slice(1),p=p.slice(1);if(!p.length||!ft(p[0]))return null;let f=po.has(p[0])?d.join(" "):`which ${d.join(" ")}`,h=zs(f,n,s+1);return!h||h.node==="miss"?{node:"miss",reason:h&&h.reason||"the embedded subject clause didn't parse"}:{node:"forwardSet",kind:c.kind,entityType:r.entityType,inner:h}}function DI(e,t,n){for(let s=0;s<t.length;s+=1){if(!FI.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!he[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),ff,...e.slice(s+1)],a=Qr(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===ff&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function GI(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!BI.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(zI.has(t[d])){r=d;break}if(r<0)return null;let i=e.slice(o,r),a=t.slice(o,r);for(;a.length&&UI.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&WI.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>In.includes(d)))return null;let c=po.has(a[0])?i.join(" "):`which ${i.join(" ")}`,l=zs(c,n,s+1);if(!l||l.node==="miss")return l?{node:"miss",reason:l.reason||"the inner set of the temporal query didn't parse"}:{node:"miss",reason:"the inner set of the temporal query didn't parse"};let u=ft(a[0]);return{node:"temporal",inner:l,entityType:u&&u.entityType||null}}function Sy(e,t){if(!KI.has(t[0]))return null;let n=1,s=null;if(t[n]!=="changed"){let i=ft(t[n]);if(!i||i.placeholder)return null;s=i.entityType,n+=1}if(t[n]!=="changed"||(n+=1,t[n]==="ever"&&(n+=1),!VI.has(t[n])))return null;let o=t[n],r=e.slice(n+1).join(" ").trim();return r?{node:"commitFilter",op:o,pivotRaw:r,entityType:s}:{node:"miss",reason:`"changed ${o}" needs a date or commit afterward`}}function Tf(e,t,n,s){let o=t.map(r=>r.toLowerCase());if(o.some(r=>In.includes(r))){let r=t,i=o;for(;i.length&&_f.has(i[0]);)r=r.slice(1),i=i.slice(1);if(i.length&&ft(i[0])){let a=po.has(i[0])?r.join(" "):`which ${r.join(" ")}`,c=zs(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the owner clause of this membership query didn't parse"}:{node:"membershipSet",entityType:e,inner:c}}}return{node:"membership",entityType:e,term:t.join(" ")}}function YI(e,t,n,s=0){if(t[0]!=="where"||!HI.has(t[1])||!hy.has(t[t.length-1]))return null;let o=e.slice(2,t.length-1),r=t.slice(2,t.length-1);for(;r.length&&qI.has(r[0]);)o=o.slice(1),r=r.slice(1);if(!o.length||!r.some(l=>In.includes(l)))return null;let i=ft(r[0]);if(!i)return null;let a=po.has(r[0])?o.join(" "):`which ${o.join(" ")}`,c=zs(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the inner set of the location query didn't parse"}:{node:"whereSet",inner:c,entityType:i.entityType||null}}function JI(e){let t=new Set,n=[];for(let s of e){if(!s||!XI.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function QI(e,t,n){if(t.length===2&&t[0]==="which"&&(t[1]==="ones"||t[1]==="one"))return{node:"anaphora",mode:"list",filter:{type:"all"}};let s=-1,o=!1;for(let d=1;d<t.length;d+=1){if(!Oi.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let p=t.slice(0,d).join(" ");if(d===t.length-1&&(Uo.includes(p)||Wo.includes(p))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Uo.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=ZI(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let c=o?s-1:s,l=JI(e.slice(0,c)),u={node:"anaphora",mode:i,filter:a};return l.length>=2&&(u.candidateTerms=l),u}function ZI(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&_I.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ge[a]))return{type:"qual",filters:r};if(o.length===1){let a=ft(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=Qr(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function eO(e,t){let n;if(t[0]==="is"&&t[1]==="there")n=2;else if(t[0]==="are"&&t[1]==="there")n=2;else return null;let s=t[n];if(s==="a"||s==="an"||s==="any")n+=1;else return null;let o=n<t.length?ft(t[n]):null;if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;n+=1;let i=t.slice(n),a=e.slice(n);if(i.length&&i[i.length-1]==="anywhere"?(i=i.slice(0,-1),a=a.slice(0,-1)):i.length>=2&&i[i.length-2]==="at"&&i[i.length-1]==="all"&&(i=i.slice(0,-2),a=a.slice(0,-2)),!i.length)return{node:"exists",entityType:r,term:null,scopeModule:null};if(i[0]==="called"||i[0]==="named"){if(i.length<2)return{node:"miss",reason:`"${i[0]}" needs a name afterward`};let c=i.indexOf("in",1);if(c>0){let u=a.slice(1,c).join(" ").trim(),d=a.slice(c+1).join(" ").trim();return!u||!d?{node:"miss",reason:'a named existence check needs both a name and a module after "in"'}:{node:"exists",entityType:r,term:u,scopeModule:d}}let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:l,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:null,scopeModule:c}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function tO(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=oo(n).slice(e.length).trim(),o=fn(s),r=o.findIndex(a=>a.toLowerCase()==="in");if(r<0)return null;let i=o.slice(r+1).join(" ").trim();return i?{scope:i}:{node:"miss",reason:'"in" needs a scope afterward'}}function nO(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let l=1;l<t.length;l+=1)if(Ge[t[l]]){n=l,s=t[l-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&ro[t[n]]){let l=o+1;for(;l<t.length&&(t[l]==="the"||t[l]==="a"||t[l]==="an");)l+=1;let u=t[l];if(u&&!Kg.has(u))return null}let r=tO(t[n],e.slice(n+1));if(r?.node==="miss")return r;let i=1;t[i]==="the"&&(i+=1);let a=s?n-1:n;a>i&&(t[a-1]==="a"||t[a-1]==="an")&&(a-=1);let c=a>i?e.slice(i,a).join(" ").trim():"";return c?{node:"qualCheck",term:c,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function sO(e,t,n){if(!["do","does","did","is","are","was","were"].includes(t[0]))return null;let s=t.indexOf("not",1);if(s<0)return null;let o=Qr(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function oO(e,t,n){let s=Uo.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&Ge[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?ft(t[o]):null;if(!i)return{node:"miss",reason:"count needs a known entity kind (functions, classes, modules, \u2026)"};let a=t[o];o+=1;let c=e.slice(o),l=t.slice(o).some(d=>!pt.has(d)&&!vy.has(d)),u;if(l){let d=zs(`which ${a} ${c.join(" ")}`,n,1);if(!d||d.node==="miss")return{node:"miss",reason:"the count restrictor didn't parse"};u=d}else u={node:"allOfClass",entityType:i.entityType};return r.length&&(u={node:"qualifier",filters:r,inner:u}),{node:"count",entityType:i.entityType,base:u}}function iO(e,t,n,s){let o=0,r=!1,i=null;for(let w of Ey){let y=w.split(" ");if(t.slice(0,y.length).join(" ")===w){i=w,o=y.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&Af.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ge[t[o]];)a.push(t[o]),o+=1;let c=o<t.length?ft(t[o]):null;if(!c||c.placeholder||c.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!Ts.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${xy}`}:null;let l=c.entityType,u=t[o];o+=1;let d=e.slice(o),p=t.slice(o).some(w=>!pt.has(w)&&!vy.has(w)),f=t.slice(o),h=d;(f[0]==="is"||f[0]==="are")&&(f=f.slice(1),h=h.slice(1));let m=r&&rO.has(f[0]);if(r&&(p&&!m||d.length===0))return null;let b,g=!1;if(p){let w=m?h:d,y=zs(`which ${[...a,u,...w].join(" ")}`,n,(s||0)+1);if(!y||y.node==="miss")return{node:"miss",reason:y&&y.reason||"the list filter didn't parse"};b=y,g=!0}else b={node:"allOfClass",entityType:l},a.length&&(b={node:"qualifier",filters:a,inner:b});return{node:"list",entityType:l,base:b,scoped:g}}function aO(e,t,n){let s=null,o=-1;for(let h=0;h<t.length;h+=1){let m=t.slice(h,h+2).join(" ");if(ss[m]){s=ss[m],o=h;break}if(ss[t[h]]){s=ss[t[h]],o=h;break}}if(!s)return null;let r=null,i=null;for(let h=o;h<t.length;h+=1)if(os[t[h]]){r=os[t[h]],i=t[h];break}if(!r){for(let h=o-1;h>=0;h-=1)if(os[t[h]]){r=os[t[h]],i=t[h];break}}let a=t.includes("connected")||t.slice(o,o+2).join(" ")==="most connected"||["largest","biggest","smallest"].includes(t[o]),c=["important","significant","central","key","core","essential","critical","principal"],l=t.some(h=>c.includes(h));!r&&(a||l)&&(r=os.connections,i="connections");let u,d=null;for(let h of t){let m=ft(h);if(m&&!m.placeholder){u=m.entityType,d=h;break}}if(!d&&(u=i?Hg[i]:void 0,!u))return{node:"miss",reason:"a superlative needs an entity kind (module, class, function, \u2026)"};if(!r)return{node:"miss",reason:"name what to rank by (imports, callers, methods, tests, or connections)"};let p=["needs","need","needing","lacks","lack","lacking","misses","missing"],f=t.some(h=>p.includes(h))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:f}}function lO(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&Af.has(t[o]);)o+=1;if(o>=t.length)return null;let r=ft(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&cO.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=ft(t[t.length-1]);if(i&&!i.placeholder&&i.entityType!=="Change"){let a=e.slice(o,t.length-1).join(" ").trim();if(a)return{node:"find",entityType:i.entityType,term:a}}return t.some(a=>In.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!Ts.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${xy}`}:null}function uO(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&Af.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(In.includes(t[i])){s=i;break}if(s<0)return null;let o=ft(t[s-1]);if(!o||o.placeholder||o.entityType==="Change")return null;let r=e.slice(n,s-1).join(" ").trim();return r?{entityType:o.entityType,term:r,relIdx:s}:null}function ky(e,t,n,s){if(!n.length||n[0]!=="named"&&!(n[0]==="called"&&s)||n[1]==="by")return null;let o=t.slice(1).join(" ").trim();return o?{node:"named",entityType:e||null,term:o}:null}function dO(e,t,n,s,o,r){let{branches:i,ops:a}=Fc(n,s),c=null,l=[];for(let u=0;u<i.length;u+=1){let d=i[u],p=d.map(y=>y.toLowerCase()),f=u===0?"intersection":a[u-1],h=Bc(d,p);if(h.blc.length&&h.blc.every(y=>Ge[y])){l.push({op:f,kind:"qual",filters:h.blc});continue}let m=ky(e,h.bw,h.blc,h.blc.length!==p.length);if(m){l.push({op:f,kind:"set",ast:m});continue}if(p[0]==="of"||p[0]==="in"){let y=Tf(e,d.slice(1),o,r);if(y.node==="miss")return{miss:y.reason};l.push({op:f,kind:"set",ast:y});continue}let b=d,g=Ut(p,he);g?c=d.slice(g.start,g.end):c&&(b=[...c,...d]);let w=Ry(`${t} ${b.join(" ")}`,o,r);if(!w||w.node==="miss")return{miss:w&&w.reason||"a clause in the combination didn't parse"};l.push({op:f,kind:"set",ast:w})}return{atoms:l}}function jy(e,t,n,s){let o=uO(e,t);if(o){let{entityType:R,term:$,relIdx:_}=o,O=t.slice(_+1),x=e.slice(_+1);if(!O.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[_]}"`};let j=dO(R,`which ${t[_-1]}`,O,x,n,s+1);if(j.miss)return{node:"miss",reason:j.miss};let M=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:$}},...j.atoms];return M.length===1?M[0].ast:{node:"boolean",entityType:R,atoms:M}}let r=0;for(;r<t.length&&po.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ge[t[r]];)a.push(t[r]),r+=1;let c=r<t.length?ft(t[r]):null;if(!c){let R=r+1<t.length?ft(t[r+1]):null;if(Xw.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(kf.has(t[r])){let $=r+1;$<t.length&&(t[$]==="the"||t[$]==="a"||t[$]==="an")&&($+=1);let _=$+1<t.length?ft(t[$+1]):null;if(Xw.has(t[$])&&_&&_.entityType==="Commit"&&$+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!he[t[r]]&&!pt.has(t[r])&&!Uf.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let l=c.entityType,u=t[r];r+=1;let d=t.slice(r),p=e.slice(r),f=!1;d.length&&In.includes(d[0])&&(f=!0,d=d.slice(1),p=p.slice(1));let h=d[0]==="of"||d[0]==="in",m=d.length>0&&gy(d[0]),b=p.length>0&&Fc(d,p).branches.some(R=>{let{blc:$}=Bc(R,R.map(_=>_.toLowerCase()));return $.length&&$.every(_=>Ge[_])}),g=p.length>0?Fc(d,p).branches:[],w=!1;if(g.length>1){let R=g[0].map(_=>_.toLowerCase()),$=Ut(R,he);$&&$.start===0&&(w=g.slice(1).every(_=>{let O=_.map(j=>j.toLowerCase()),x=Ut(O,he);return x&&x.start===0?x.kind===$.kind:!x}))}let y=!1;if(g.length>1){let R=g[0].map(_=>_.toLowerCase()),$=Ut(R,he);$&&$.start===0&&(y=g.slice(1).every(_=>{let O=_.map(j=>j.toLowerCase()),x=Ut(O,he);return!!x&&x.start===0&&x.end-x.start===1}))}if(!(a.length||f||h||m||b||w||y))return null;if(!p.length){let R={node:"allOfClass",entityType:l};return a.length?{node:"qualifier",filters:a,inner:R,entityType:l}:{node:"miss",reason:"nothing to filter or traverse"}}let S=c.placeholder?"what":`which ${u}`,{branches:T,ops:v}=Fc(d,p),E=null,I=[];for(let R=0;R<T.length;R+=1){let $=T[R],_=$.map(Y=>Y.toLowerCase()),O=R===0?"seed":v[R-1],x=Bc($,_);if(x.blc.length&&x.blc.every(Y=>Ge[Y])){I.push({op:O,kind:"qual",filters:x.blc});continue}let j=ky(l,x.bw,x.blc,x.blc.length!==_.length);if(j){I.push({op:O,kind:"set",ast:j});continue}if(_[0]==="of"||_[0]==="in"){let Y=Tf(l,$.slice(1),n,s+1);if(Y.node==="miss")return Y;I.push({op:O,kind:"set",ast:Y});continue}let M=$,D=Ut(_,he);D?E=$.slice(D.start,D.end):E&&(M=[...E,...$]);let H=Ry(`${S} ${M.join(" ")}`,n,s+1);if(!H||H.node==="miss")return{node:"miss",reason:H&&H.reason||"a clause in the combination didn't parse"};I.push({op:O,kind:"set",ast:H})}if(I[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let k;return I.length===1?k=I[0].ast:k={node:"boolean",entityType:l,atoms:I},a.length&&(k={node:"qualifier",filters:a,inner:k,entityType:l}),k}function Ry(e,t,n){if(n>my)return{node:"miss",reason:"too deep to resolve"};let s=fn(e),o=s.map(a=>a.toLowerCase()),r=Rf(s,o,t,n);if(r)return r;let i=Qr(e,t);return i?{node:"clause",clause:i}:null}function Fc(e,t){let n=Object.keys(io).sort((a,c)=>c.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let c of n){let l=c.split(" ");if(e.slice(i,i+l.length).join(" ")===c){a={c,len:l.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(io[a.c]),i+=a.len,r=i):a?(i+=a.len,r=i):i+=1}return s.push(t.slice(r)),{branches:s,ops:o}}function If(e){let t=Jw.get(e);if(t)return t;t=new Map;for(let n of e.individuals||[])n.class==="Module"&&t.set(on(n.label),n);return Jw.set(e,t),t}function _y(e,t){let n=If(e),s=[];for(let o of t){let r=e.byId.get(o);if(!r||r.class==="Module")continue;let i=mo(r),a=i?n.get(on(i)):null;a&&s.push(a)}return Rn(s)}function pO(e){let t=Qw.get(e);if(t)return t;t=new Map;let n=If(e);for(let s of e.individuals||[]){if(s.class==="Module")continue;let o=mo(s),r=o?n.get(on(o)):null;r&&(t.has(r.id)||t.set(r.id,[]),t.get(r.id).push(s))}return Qw.set(e,t),t}function Of(e,t,n,s){let o=qr[t];if(o&&uo.has(n)){let d=tt(e,o).filter(p=>s.has(p.object));return Rn(d.map(p=>e.byId.get(p.subject)).filter(p=>p&&p.class===n))}let a=(!!o&&[...s].some(d=>uo.has(e.byId.get(d)?.class))?[...Lt(t),o]:Lt(t)).flatMap(d=>tt(e,d)),c=a.filter(d=>s.has(d.object));t==="cochange"&&(c=c.concat(a.filter(d=>s.has(d.subject)).map(d=>({...d,subject:d.object,object:d.subject}))));let l=Rn(c.map(d=>e.byId.get(d.subject)).filter(Boolean));if(!n||n==="Change")return l;let u=l.filter(d=>d.class===n);if(Ty(t,n)){let d=new Set(c.map(f=>f.object)),p=new Set([...s].filter(f=>!d.has(f)));return Rn([...u,..._y(e,p)])}return u.length?u:n!=="Module"&&l.some(d=>d.class==="Module")?Df(e,new Set(l.filter(d=>d.class==="Module").map(d=>d.id)),n):[]}function mO(e){let t=new Set;for(let n of["touches","touchesSymbol"])for(let s of tt(e,n)){let o=e.byId.get(s.subject);o?.class==="Commit"&&t.add(String(o.label||"").toLowerCase())}return e.individuals.filter(n=>n.class==="Commit").map(n=>String(n.label||"").toLowerCase()).filter(n=>n&&!t.has(n)).sort()}function gO(e,t){let n=new Set(Of(e,"touches","Commit",t).map(o=>String(o.label||"").toLowerCase())),s=mO(e);for(let o of t)for(let r of e.byId.get(o)?.derived_from||[]){let i=hO.exec(String(r||""));if(!i)continue;let a=i[1].toLowerCase(),c=s.find(l=>l.startsWith(a)||a.startsWith(l));c&&n.add(c)}return n.size}function Xi(e,t,n){let s=Lt(t).flatMap(o=>tt(e,o)).filter(o=>n.has(o.subject));return Rn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Rn(e){let t=new Set,n=[];for(let s of e)s&&!t.has(s.id)&&(t.add(s.id),n.push(s));return n}function bO(e,t){let n=on(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&on(o.label).startsWith(s))}function pf(e){let t=Zw.get(e);if(t)return t;let n=new Set;for(let i of tt(e,"reexports")){n.add(String(i.object).toLowerCase());let a=e.byId.get(i.object);a&&n.add(String(a.label).toLowerCase())}let s=new Set,o=new Set;for(let i of tt(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of tt(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},Zw.set(e,t),t}function Qo(e,t){return t?t.class==="Module"?t.id:pf(e).moduleOfSymbol.get(t.id)||null:null}function wO(e,t){let n=Qo(e,t);if(n)return n;let s=mo(t);return s&&If(e).get(on(s))?.id||null}function Ay(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>yO.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Qo(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=fe(o.class,1),c=a==="attribute"?"an":"a",l=i?`, ${Hi("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${c} ${a} in this codebase${l} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function zc(e,t,n){let s=Rn(Nr.flatMap(i=>Xi(e,i,new Set([t])))),o=n?s.filter(i=>i.class===n):s;if(o.length)return o;let r=pO(e).get(t)||[];return n?r.filter(i=>i.class===n):r}function Cf(e,t,n=null){let s=Bs(e,t,n);if(!(s.match&&s.tier===1)){let o=bO(e,t);if(o.length)return{kind:"dir",mods:o}}return s.match?{kind:"single",id:s.match.id,entityClass:s.match.class,label:s.match.label}:{kind:"miss"}}function Nf(e,t,n,s,o){let r=o||(()=>!0),i=zc(e,t,s).filter(r);if(i.length||!Oy(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Iy(e,t)){let c=e.byId.get(a);if(!c)continue;let l=zc(e,a,s).filter(r);if(l.length)return{own:i,inherited:l,viaId:a,viaLabel:c.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function fo(e,t,n){if(!n)return!1;switch(n.via){case"visibility":return String((t.attributes||[]).find(o=>o.key==="visibility")?.value||"public").toLowerCase()===n.value;case"attr":return!!(t.attributes||[]).find(s=>s.key===n.attr)?.value;case"exported":{let s=pf(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=wO(e,t),o=pf(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Vo(String(r.label).toLowerCase()))||!s?!1:o.testedModules.has(s)===n.value}default:return!1}}function Lf(e){return tt(e,"inherits")}function hf(e,t){return Lf(e).filter(n=>n.object===t).map(n=>n.subject)}function ey(e,t){return Lf(e).filter(n=>n.subject===t).map(n=>n.object)}function $O(e,t){let n=new Set,s=[...hf(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of hf(e,o))n.has(r)||s.push(r)}}return n}function Iy(e,t){let n=new Set,s=[...ey(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of ey(e,o))n.has(r)||s.push(r)}}return n}function Oy(e,t){let n=ty.get(e);if(n||(n=new Map,ty.set(e,n)),n.has(t))return n.get(t);let s=Lf(e).some(o=>{let r=e.byId.get(o.subject),i=e.byId.get(o.object);return!!r&&!!i&&r.class===t&&i.class===t});return n.set(t,s),s}function ny(e,t){let n=String(e.label||"").toLowerCase();if(t.every(o=>n.includes(o)))return"label";let s=(e.attributes||[]).map(o=>String(o.value??"").toLowerCase());return t.every(o=>s.some(r=>r.includes(o)))?"attr":null}function oy(e){return e.slice().sort((t,n)=>sy[n.via]-sy[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function ry(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Ms(n);if(Ps(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of Yo(e.label))if(Ps(o,n,s)<=s)return!0;return!1}function Cy(e,t,n){let s=e.individuals.filter(c=>c.class===t),o=[...Yo(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Oy(e,t),i=[];for(let c of s){let l=ny(c,o);if(l){i.push({ind:c,via:l});continue}if(!r)continue;[...$O(e,c.id)].some(d=>{let p=e.byId.get(d);return!!p&&!!ny(p,o)})&&i.push({ind:c,via:"chain"})}if(i.length||!r)return{narrow:oy(i),broad:[]};let a=new Map;for(let c of s)for(let l of Iy(e,c.id)){if(!a.has(l)){let u=e.byId.get(l);u&&u.class===t&&ry(u,n)&&a.set(l,{ind:u,via:"chain"})}for(let u of hf(e,l)){if(u===c.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&ry(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:oy([...a.values()])}}function Ny(e){return[...vc(Ec(e)).entries()].sort((t,n)=>n[1]-t[1]||Xo(t[0],n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function mf(e,t,n){let s=String(t||"").trim().toLowerCase();if(!s)return[];let o=on(s);return e.individuals.filter(r=>{if(n&&r.class!==n)return!1;let i=String(r.label||"").toLowerCase();return i===s||String(r.id||"").toLowerCase()===s?!0:r.class==="Module"&&on(i)===o})}function gf(e,t){if(!t||typeof t!="object")return null;if(Array.isArray(t)){for(let n of t){let s=gf(e,n);if(s)return s}return null}if(t.node==="named")return mf(e,t.term,t.entityType).length?null:{term:t.term,entityType:t.entityType||null,elsewhere:mf(e,t.term,null)[0]||null};for(let n of Object.values(t)){let s=gf(e,n);if(s)return s}return null}function rn(e,t,n){switch(t.node){case"named":return mf(e,t.term,t.entityType);case"clause":return pn(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?Ny(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=Cy(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Lt(t.kind).flatMap(o=>tt(e,o)).map(o=>o.subject));return e.individuals.filter(o=>s.has(o.id)&&(!t.entityType||o.class===t.entityType))}case"forwardComplement":{let s=Bs(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=wy(e,t.kind);if(!o)return[];let r=new Set(Xi(e,t.kind,new Set([s.match.id])).map(i=>i.id));return e.individuals.filter(i=>i.class===o&&!r.has(i.id))}case"commitFilter":return bf(e,t).matches;case"reverseSet":{let s=new Set(rn(e,t.inner,n).map(o=>o.id));return Of(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(rn(e,t.inner,n).map(o=>o.id));return Xi(e,t.kind,s)}case"prevSet":{let s=n&&n.prev;return Array.isArray(s)?s.map(o=>e.byId.get(o)).filter(Boolean):[]}case"membership":{let s=Cf(e,t.term,n&&n.contextId);if(s.kind==="dir"){if(!t.entityType||t.entityType==="Module")return s.mods;let i=new Set(s.mods.map(c=>c.id));return Rn(Nr.flatMap(c=>Xi(e,c,i))).filter(c=>c.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=Nf(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"membershipSet":{let s=rn(e,t.inner,n);return s.length?Rn(s.flatMap(o=>zc(e,o.id,t.entityType))):[]}case"qualifier":return t.inner.node==="membership"?By(e,t,n).matches:rn(e,t.inner,n).filter(o=>t.filters.every(r=>fo(e,o,Ge[r])));case"boolean":return My(e,t,n);case"anaphora":return Fy(e,t,n).matches;default:return[]}}function SO(e){let t=Ge[e],n=Ly(t);return n&&Object.keys(Ge).find(s=>Ge[s].via===n.via&&Ge[s].value===n.value)||null}function Py(e,t,n){let s=[],o=[];for(let r of t.atoms){let i=o;if(r.op==="seed")o=rn(e,r.ast,n);else if(r.kind==="qual"){let a=l=>r.filters.every(u=>fo(e,l,Ge[u])),c=l=>r.filters.every(u=>{let d=Ly(Ge[u]);return d?fo(e,l,d):!fo(e,l,Ge[u])});o=r.op==="difference"?i.filter(c):i.filter(a)}else{let a=rn(e,r.ast,n),c=new Set(a.map(l=>l.id));if(r.op==="intersection")o=i.filter(l=>c.has(l.id));else if(r.op==="difference")o=i.filter(l=>!c.has(l.id));else if(r.op==="union"){let l=new Set(i.map(u=>u.id));o=i.slice();for(let u of a)l.has(u.id)||(l.add(u.id),o.push(u))}}s.push({atom:r,before:i,after:o})}return{matches:o,steps:s}}function My(e,t,n){return Py(e,t,n).matches}function vO(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=_n(e,o);r&&r.match&&!n.has(r.match.id)&&(n.add(r.match.id),s.push(r.match))}return s.length>=2?s:null}function Fy(e,t,n){let o=vO(e,t.candidateTerms);if(!o){let p=n&&n.prev;if(!Array.isArray(p)||!p.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=p.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(p=>i.filters.every(f=>fo(e,p,Ge[f])));else if(i&&i.type==="entity")r=r.filter(p=>p.class===i.entityType);else if(i&&i.type==="clause"){let p=_n(e,i.clause.object);if(!p.match)r=[];else{let f=qr[i.clause.kind],h=[...Lt(i.clause.kind),...f?[f]:[]],m=new Set(h.flatMap(b=>tt(e,b)).filter(b=>b.object===p.match.id).map(b=>b.subject));r=r.filter(b=>m.has(b.id))}}let a=p=>p.length&&p.every(f=>f.class===p[0].class)?p[0].class:null,c=i&&i.type==="entity"?i.entityType:a(o),l=r.length?a(r):c;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:l,matches:[]};let u=Zi(l,r,"anaphora",{bound:!0}),d=r.length?null:EO(e,o,i);return{compositeKind:"set",matches:r,entityType:l,referents:u,...d?{emptied:d}:{}}}function EO(e,t,n){if(!t.length||!n)return null;let s={...Ji(t,null,null)};if(n.type==="qual"){let o=Wc(e,n.filters,!1,t);return o?{held:s,step:o}:null}return n.type==="entity"?{held:s,step:{type:"entityKind",entityType:n.entityType}}:n.type==="clause"&&n.clause?.kind&&n.clause.object?{held:s,step:{type:"clause",clause:{kind:n.clause.kind,object:n.clause.object},excluded:!1}}:null}function Dy(e,t,n){let s=n.kind==="*"?xO:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of tt(e,r)){let a=i.subject===t.id,c=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let l=e.byId.get(i.object);if(!l||l.class!==n.filter)continue}o+=1}else(n.dir==="in"&&c||n.dir==="both"&&(a||c))&&(o+=1)}return o}function kO(e){let t=e.individuals.filter(s=>s.class==="Commit"),n=s=>String((s.attributes||[]).find(o=>o.key==="date")?.value||"");return t.sort(Jr(n)),{compositeKind:"recentCommits",matches:t}}function bf(e,t){let{op:n,pivotRaw:s,entityType:o=null}=t,r=f=>String((f.attributes||[]).find(h=>h.key==="date")?.value||"").slice(0,10),i=null,a=null,c=null;if(jO.test(s))i=s;else{let{match:f,ambiguous:h}=_n(e,s,{expectedClass:"Commit"});f&&!h&&f.class==="Commit"&&r(f)&&(a=f.id,c=f.label,i=r(f))}if(!i)return{compositeKind:"commitFilter",op:n,pivotRaw:s,entityType:o,pivotResolved:!1,matches:[]};let l=e.individuals.filter(f=>f.class==="Commit"&&f.id!==a&&r(f)).filter(f=>{let h=r(f);return n==="since"?h>=i:n==="before"?h<i:n==="after"?h>i:h===i}).sort(Jr(r)),u=o&&o!=="Commit"&&o!=="Change"?Rn(l.flatMap(f=>Ky(e,f,o).matches)):null,d=u||l,p=[];if(d.length){let f=u?o:"Commit";p.push({kind:"set",class:f,label:`${d.length} ${fe(f,d.length)} ${n} ${s}`,ids:d.map(h=>h.id),attrs:{count:d.length,op:n,...a?{pivot:a}:{}},lane:"commitFilter"})}return a&&p.push({kind:"event",class:"Commit",label:c,ids:[a],attrs:{date:i},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:i,pivotResolved:!0,entityType:o,windowCount:l.length,matches:d,referents:p}}function RO(e,t,n){let s=rn(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size){let a=Yr(e,t.inner,n);return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0,...a?{emptied:a}:{}}}let r=Of(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(c=>c.key==="date")?.value||"");return r.sort(Jr(i)),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function _O(e,t,n){let s=rn(e,t.inner,n),o=s.length?null:Yr(e,t.inner,n);return{compositeKind:"whereSet",matches:s,entityType:t.entityType,sites:s.map(r=>(r.attributes||[]).find(i=>i.key==="site")?.value||null),...o?{emptied:o}:{}}}function TO(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(tt(e,"tests").map(c=>c.subject));n=n.filter(c=>!a.has(c.id)&&!Vo(String(c.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:Dy(e,a,t.metric)})).sort((a,c)=>t.extreme==="most"?c.score-a.score:a.score-c.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?Zi(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function By(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(b=>fo(e,m,Ge[b])):null,a=m=>Zi(r,m,"membership"),c=Cf(e,o.term,n&&n.contextId);if(c.kind==="dir"){let m;if(!r||r==="Module")m=c.mods;else{let b=new Set(c.mods.map(g=>g.id));m=Rn(Nr.flatMap(g=>Xi(e,g,b))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(c.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:l,inherited:u,viaLabel:d}=Nf(e,c.id,c.entityClass,r,i),p=!l.length&&u.length>0,f=p?u:l,h=f.length?null:AO(e,c,r,s);return{compositeKind:"membership",entityType:r,matches:f,inheritedNotOwn:p,viaLabel:d,ownerLabel:c.label,referents:a(f),...h?{emptied:h}:{}}}function AO(e,t,n,s){if(!s)return null;let{own:o,inherited:r}=Nf(e,t.id,t.entityClass,n,null),i=o.length?o:r;if(!i.length)return null;let a=Wc(e,s.filters,!1,i);return a?{held:{...Ji(i,null,{entityType:n}),owner:t.label},step:a}:null}function IO(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=_n(e,o,{expectedClass:"Module"});if(!a.match)return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMiss:!0,matches:[]};r=a.match}if(s){let a=_n(e,s,{expectedClass:n}),c=!r||a.match&&Qo(e,a.match)===r.id,l=a.match&&c;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:l?[a.match]:[]}}let i=r?Df(e,new Set([r.id]),n):e.individuals.filter(a=>a.class===n);return{compositeKind:"exists",entityType:n,term:null,scopeModule:o,scopeMatch:r,matches:i}}function OO(e,t,n){let s=Qo(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||zc(e,n.id).some(o=>o.id===t.id)}function CO(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Bs(e,s,n.contextId);if(a.unresolvedPronoun)return{compositeKind:"qualCheck",qualCheckMiss:"pronoun",term:s,matches:[]};if(!a.match)return{compositeKind:"qualCheck",qualCheckMiss:"unresolved",term:s,matches:[]};if(i){let d=Cf(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!OO(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let c=fo(e,a.match,Ge[o]),l=r?!c:c,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:l,matches:[a.match],referents:u}}function NO(e,t,n){let s=_n(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=rn(e,{node:"allOfClass",entityType:t.entityType},n),r=My(e,t.complement,n),i=r.length===0;return{compositeKind:"universal",entityType:t.entityType,kind:t.kind,object:s.match.label,holds:i,total:o.length,counter:r,matches:i?o:r}}function LO(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(rn(e,t.inner,n).map(s=>s.id));if(t.node==="clause"&&t.clause?.shape==="reverse"&&t.clause.kind==="touches"&&t.clause.entityType==="Commit"){let{objMatch:s,ambiguous:o}=pn(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function PO(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};let s=gf(e,t);if(s)return{compositeMiss:!0,unknownName:s,matches:[]};if(t.node==="exists")return IO(e,t);if(t.node==="qualCheck")return CO(e,t,n);if(t.node==="universal")return NO(e,t,n);if(t.node==="count"){if(t.base.node==="commitFilter"){let l=bf(e,t.base);return l.pivotResolved?{compositeKind:"count",count:l.matches.length,entityType:t.entityType,matches:[]}:l}let c=LO(e,t.base,n);return c?{compositeKind:"count",count:gO(e,c),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:rn(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:rn(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return kC(e,t);if(t.node==="superlative")return TO(e,t);if(t.node==="temporal")return RO(e,t,n);if(t.node==="whereSet")return _O(e,t,n);if(t.node==="recentCommits")return kO(e);if(t.node==="commitFilter")return bf(e,t);if(t.node==="anaphora")return Fy(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return By(e,t,n);if(t.node==="find"){let{narrow:c,broad:l}=Cy(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:c.length?c:l,broad:!c.length&&l.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let o=rn(e,t,n),r=t.entityType||null,i=Zi(r,o,t.node==="qualifier"?"qualifierListing":"compositeSet"),a=o.length?null:Yr(e,t,n);return{compositeKind:"set",matches:o,entityType:r,referents:i,...a?{emptied:a}:{}}}function Pf(e){let t=e?.node==="clause"?e.clause:null;if(!t?.kind||!t.object||t.modifier==="transitive"||t.shape!=="reverse"&&t.shape!=="forward")return null;let n=t.shape==="forward";return n&&ho(t.kind).includes(" ")?null:{kind:t.kind,object:t.object,passive:n,entityType:t.entityType||e.entityType||null}}function Mf(e){let t=ho(e.kind);return`${t.endsWith("e")?`${t}d`:`${t}ed`} ${MO[e.kind]||"by"} ${e.object}`}function Wc(e,t,n,s){let o=a=>s.every(c=>a.every(l=>fo(e,c,Ge[l])));if(n&&!o(t))return null;let r=n||!t.every(a=>Ge[a]?.value===!1)?[]:t.map(SO),i=r.length>0&&r.every(Boolean)&&o(r);return{type:"qual",filters:i?r:t,negated:!n&&!i}}function DO(e,t,n){if(t.kind==="qual")return t.op!=="difference"&&t.op!=="intersection"?null:Wc(e,t.filters,t.op==="difference",n);if(t.op!=="difference"&&t.op!=="intersection")return null;let s=t.op==="difference";if(t.ast?.node==="named")return{type:"named",term:t.ast.term,excluded:s};let o=Pf(t.ast);return o?{type:"clause",clause:o,excluded:s}:null}function Yr(e,t,n){if(!t||typeof t!="object")return null;if(t.node==="boolean"){let{steps:o}=Py(e,t,n),r=[...o].reverse().find(c=>c.before.length&&!c.after.length);if(!r)return Yr(e,o[0]?.atom?.ast,n);let i=DO(e,r.atom,r.before);if(!i)return null;let a=o.indexOf(r)===1?o[0].atom.ast:null;return{held:Ji(r.before,a,t),step:i}}if(t.node==="qualifier"&&t.inner?.node!=="membership"&&t.filters?.length){let o=rn(e,t.inner,n);if(!o.length)return Yr(e,t.inner,n);let r=Wc(e,t.filters,!1,o);return r?{held:Ji(o,t.inner,t),step:r}:null}if(t.node==="reverseSet"||t.node==="forwardSet"||t.node==="membershipSet"){let o=rn(e,t.inner,n);if(!o.length)return Yr(e,t.inner,n);let r=t.node==="membershipSet"?t.entityType?{type:"membership",entityType:t.entityType}:null:{type:t.node==="reverseSet"?"reverse":"forward",kind:t.kind,entityType:t.entityType||null};return r?{held:Ji(o,t.inner,t),step:r}:null}let s=Pf(t);return s?{leaf:s}:null}function Ji(e,t,n){let s=Pf(t);return{count:e.length,entityType:FO(e)||s?.entityType||n?.entityType||null,clause:s,wholeKind:t?.node==="allOfClass",members:e}}function wf(){return'compositional queries also work: "which functions call X and call Y", "what calls something that imports X", "public methods of X", "list functions" / "show me the classes", "how many classes", "which module has the most imports", "find me the payment class", or (after a listing) "which of those are tested"'}function BO(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=mo(e);return n?`${t} in ${n}`:t}function yf(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(yf):Array.isArray(e.filters)&&e.filters.some(t=>Ge[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(yf)}function zy(e,t){return!["Function","Method"].includes(t)||!yf(e)?null:`This index records tests edges module to module, so a ${fe(t,1)} counts as covered exactly when the module it lives in is tested \u2014 ask about that module to see the coverage itself.`}function zO(e){if(e?.node==="qualifier"&&e.inner?.node==="allOfClass"&&e.filters?.length)return{entityType:e.inner.entityType||e.entityType,filters:e.filters,negated:!1};if(e?.node!=="boolean"||e.atoms?.length!==2)return null;let[t,n]=e.atoms;return t.op!=="seed"||t.ast?.node!=="allOfClass"||n.kind!=="qual"||!n.filters?.length||n.op!=="difference"&&n.op!=="intersection"?null:{entityType:t.ast.entityType||e.entityType,filters:n.filters,negated:n.op==="difference"}}function Uy(e){let t=zO(e);if(!t)return null;let n=fe(t.entityType||"Module",2),s=t.negated?"":"not ";return`Try "which ${n} are ${s}${jn(t.filters)}" for that branch on its own.`}function UO(e,t){return!e||!t?null:t==="Package"?Ny(e).length:e.individuals.filter(n=>n.class===t).length}function WO(e){let t=n=>e.entityType?fe(e.entityType,n):null;switch(e.type){case"qual":{let n=jn(e.filters);return e.negated?{one:`it is not ${n}`,many:`none of them is ${n}`}:{one:`it is ${n}`,many:`all of them are ${n}`}}case"named":return e.excluded?{one:`it is named "${e.term}"`,many:`all of them are named "${e.term}"`}:{one:`it is not named "${e.term}"`,many:`none of them is named "${e.term}"`};case"clause":{let{clause:n}=e;if(n.passive){let r=Mf(n);return e.excluded?{one:`it is ${r}`,many:`all of them are ${r}`}:{one:`it is not ${r}`,many:`none of them is ${r}`}}let s=ho(n.kind),o=Xr(n.kind);return e.excluded?{one:`it ${o} ${n.object} too`,many:`all of them ${s} ${n.object} too`}:{one:`it does not ${s} ${n.object}`,many:`none of them ${o} ${n.object}`}}case"reverse":{let n=Xr(e.kind),s=t(1)?`no ${t(1)} in this index`:"nothing in this index";return{one:`${s} ${n} it`,many:`${s} ${n} them`}}case"forward":{let n=Xr(e.kind);return{one:`it ${n} nothing in this index`,many:`none of them ${n} anything in this index`}}case"membership":return{one:`it has no ${t(2)}`,many:`none of them has any ${t(2)}`};case"entityKind":return{one:`it is not a ${t(1)}`,many:`none of them is a ${t(1)}`};default:return null}}function GO(e){let t=fe(e.entityType,1),n=fe(e.entityType,2);if(e.owner)return{one:`${e.owner} has 1 ${t}`,many:`${e.owner} has ${e.count} ${n}`};if(e.wholeKind)return{one:`The index has 1 ${t}`,many:`The index has ${e.count} ${n}`};if(e.clause?.passive){let o=Mf(e.clause);return{one:`1 ${t} is ${o}`,many:`${e.count} ${n} are ${o}`}}if(e.clause)return{one:`1 ${t} ${Xr(e.clause.kind)} ${e.clause.object}`,many:`${e.count} ${n} ${ho(e.clause.kind)} ${e.clause.object}`};let s=as(e.members);return{one:`1 ${t} matched that far (${s})`,many:`${e.count} ${n} matched that far (${s})`}}function VO(e){if(!e.clause||!e.entityType)return null;let t=fe(e.entityType,2);return`Try "${e.clause.passive?`which ${t} are ${Mf(e.clause)}`:`which ${t} ${ho(e.clause.kind)} ${e.clause.object}`}" for that branch on its own.`}function $f(e,t,{branchNote:n=null,verdictTail:s=""}={}){if(!e?.held)return null;let o=WO(e.step);if(!o)return null;let r=e.held,i=GO(r),a=r.count===1,c=VO(r)||n;return`${t?`no ${fe(t,2)} match that`:"nothing matches that"}${s}. ${a?i.one:i.many}, but ${a?o.one:o.many}.${c?` ${c}`:""}`}function Wy(e){if(e.passive){let n=e.entityType?`no ${fe(e.entityType,2)}`:"nothing";return`${e.object} ${Xr(e.kind)} ${n} in this index`}return`${e.entityType?`no ${fe(e.entityType,1)} in this index`:"nothing in this index"} ${Xr(e.kind)} ${e.object}`}function Gy(e,t){let n=UO(e,t);return n===null?`nothing in the index matches that${t?` (${fe(t,2)})`:""}`:n===0?`no ${fe(t,2)} in this index`:n===1?`the index has 1 ${fe(t,1)}, and it does not match that`:`the index has ${n} ${fe(t,2)}, and none of them matches that`}function ay(e,t,n,s,o){let r=zy(t.inner,n.entityType)||Uy(t.inner),i=$f(n.emptied,n.entityType,{branchNote:r,verdictTail:s});return i||`${n.emptied?.leaf?Wy(n.emptied.leaf):Gy(e,n.entityType)}${s}. ${r||o}`}function KO(e,t,n){if(t.compositeMiss){if(t.reason==="no-prev")return{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1};if(t.unknownName){let{term:s,entityType:o,elsewhere:r}=t.unknownName,i=o?fe(o,1):"entity",a=r?` "${s}" names ${Fs(fe(r.class,1))} ${fe(r.class,1)} here, not ${Fs(i)} ${i}.`:"";return{content:`no ${i} named "${s}" in this index.${a}`,miss:!0,ambiguous:!1}}return{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${wf()}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="exists"){if(t.scopeMiss)return{content:`no module matching "${t.scopeModule}" found in the index.`,miss:!0,ambiguous:!1};let s=fe(t.entityType,1),o=fe(t.entityType,2),r=t.scopeMatch?` in ${t.scopeMatch.label}`:"";if(t.term){if(!t.matches.length)return{content:`No \u2014 no ${s} named "${t.term}" found${r}.`,miss:!0,ambiguous:!1};let i=t.matches[0],a=mo(i),c=i.class==="Module"?"":a?`, ${Hi("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${as(t.matches)}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 no ${o} found${r}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="qualCheck"){if(t.qualCheckMiss==="pronoun")return{content:`"${t.term}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="unresolved")return{content:`couldn't find "${t.term}" in the index to check.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="scope")return{content:`couldn't find "${t.scope}" in the index to check inside.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="outsideScope")return{content:`No \u2014 ${t.subjectLabel} isn't in ${t.scopeLabel}.`,miss:!0,ambiguous:!1};let s=t.subject.label,o=t.negated?`not ${t.qualifier}`:t.qualifier,r=t.negated?t.qualifier:`not ${t.qualifier}`;return{content:`${t.holds?"Yes":"No"} \u2014 ${s} is ${t.holds?o:r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="universal"){if(t.universalMiss==="unresolved")return{content:`couldn't find "${t.object}" in the index to check.`,miss:!0,ambiguous:!1,matches:[]};let s=fe(t.entityType,t.total),o=vI(t.kind);return t.holds?{content:`Yes \u2014 all ${t.total} ${s} ${o} ${t.object}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 ${t.counter.length} of ${t.total} ${s} do not ${o} ${t.object}: ${as(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?fe(t.entityType,t.count):t.count===1?"result":"results";return{content:`${t.count} ${s}.`,miss:!1,ambiguous:!1,matches:[]}}if(t.compositeKind==="list"){if(!t.matches.length)return{content:`no ${fe(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>ct?` \u2014 narrow with "${fe(t.entityType,2)} in <module>"`:"";return{content:`${as(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=jn(t.asked),o=Do[t.relation].nouns[1];return t.pairs.length?{content:`${t.pairs.map(i=>`${i.subject.label||i.subject.id} ${i.reads} ${i.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]}}if(t.compositeKind==="membership"){if(!t.matches.length){let s=$f(t.emptied,t.entityType);return s?{content:s,miss:!0,ambiguous:!1,matches:[]}:{content:`${t.ownerLabel&&t.entityType?`${t.ownerLabel} has no ${fe(t.entityType,2)} in this index.`:iy(n,t.entityType)} ${lo(n)}`,miss:!0,ambiguous:!1,matches:[]}}if(t.inheritedNotOwn){let s=fe(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${as(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${as(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=fe(t.entityType,1);if(!t.matches.length)return{content:`no ${fe(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?BO(t.matches[0]):as(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:fe(t.entityType,2)}: ${o}.`,miss:!1,ambiguous:!1,matches:t.matches,relatedNotExact:!0}:{content:`${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="recentCommits"){if(!t.matches.length)return{content:"no commits recorded in this index.",miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,dn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>dn?` \u2026+${t.matches.length-dn} more`:"";return{content:`${t.matches.length} recent commit(s): ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="commitFilter"){if(!t.pivotResolved)return{content:`"${t.pivotRaw}" isn't a recognized date (yyyy-mm-dd) or a known commit \u2014 try "what changed since 2026-06-01" or "what changed before <commit>".`,miss:!0,ambiguous:!1,matches:[]};if(!t.windowCount)return{content:`no commits recorded ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]};if(t.entityType&&t.entityType!=="Commit"&&t.entityType!=="Change"){let i=fe(t.entityType,t.matches.length||2);return t.matches.length?{content:`${as(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${i} changed ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]}}let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,dn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>dn?` \u2026+${t.matches.length-dn} more`:"";return{content:`${t.matches.length} commit(s) changed ${t.op} ${t.pivotRaw}: ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="superlative"){if(!t.matches.length)return{content:`no ${fe(t.entityType,2)} to rank in this index.`,miss:!0,ambiguous:!1};let s=t.extreme==="most"?"the most":"the fewest",o=t.matches.length>1?` (${t.matches.length}-way tie)`:"";return{content:`${as(t.matches)} \u2014 ${s} ${t.metricNoun} (${t.score})${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="temporal"){let s=t.innerCount||0,o=t.entityType?fe(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:ay(n,e,t,", so there is no change history to date",lo(n)),miss:!0,ambiguous:!1,matches:[]};if(!t.matches.length)return{content:`no recorded commit touched the ${s} ${o} in that set in this index. ${lo(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let c=(i.attributes||[]).find(d=>d.key==="message")?.value||"",l=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${l}${c?` ("${c}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="whereSet"){if(!t.matches.length)return{content:ay(n,e,t,", so there is no location to cite",`${wf()}.`),miss:!0,ambiguous:!1,matches:[]};let s=t.matches.map((r,i)=>Sf(r,t.sites[i])||`${r.label} has no recorded code location in this index.`),o=t.matches.filter((r,i)=>Sf(r,t.sites[i]));return{content:s.join(" "),miss:o.length===0,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=zy(e,t.entityType)||Uy(e),o=$f(t.emptied,t.entityType,{branchNote:s});if(o)return{content:o,miss:!0,ambiguous:!1,matches:[]};let r=s||lo(n);return{content:`${t.emptied?.leaf?`${Wy(t.emptied.leaf)}.`:iy(n,t.entityType)} ${r}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${as(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function Ff(){return`"which <functions|classes|modules> <imports|calls|uses|inherits from|tests> <name>" or "what does <name> <import|call|export>" or "what uses <name>" or "where is <name> defined" / "where is <name> mentioned" or "when did <name> change" or "which commits touched <name>" or "which changes touch commit <sha>"/"what did commit <sha> touch" (a commit's own changes) or plainly "what calls this" (about a selected node) or "what does <term> mean"/"what is a <ClassName>" (about the graph's own vocabulary). `+wf()}function lo(e=null){return e&&Mi(e)===0?Wd:`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function Yo(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Uc(e){if(e.length<5)return e;let t=e.replace(/(ing|ers|ors|er|or)$/,"");return t===e?e:t.length>=3&&t[t.length-1]===t[t.length-2]?t.slice(0,-1):t}function Vy(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function HO(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function qi(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(b=>b.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let b=i[2],g=r.filter(w=>w.class==="Commit"&&(String(w.id).toLowerCase().startsWith(`commit:${b}`)||String(w.label).toLowerCase().startsWith(b)));if(g.length===1)return{match:g[0],candidates:[],tier:1,ambiguous:!1};if(g.length>1)return{match:g[0],candidates:g.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(b=>String(b.label).toLowerCase()===o||String(b.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let c=`ext:${o}`,l=null;e:for(let b of e.relations)for(let g of b.edges)if(String(g.object).toLowerCase()===c){l=g.object;break e}if(l&&!n)return{match:{id:l,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(b=>b.trim()).filter(Boolean);if(u.length>1){let b=new Set;for(let g of u){let w=qi(e,g,{expectedClass:n});w.match&&!w.ambiguous&&b.add(w.match.id)}if(b.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],p=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(p){let b=o.split(".").pop();for(let g of r){let w=String(g.label||"").toLowerCase();g.class==="Module"?w.split("/").pop()===o&&d.push({ind:g,score:1e3-Math.abs(w.length-o.length)}):w.includes(o)?d.push({ind:g,score:2e3-Math.abs(w.length-o.length)}):w.endsWith(`.${b}`)&&d.push({ind:g,score:1500-Math.abs(w.length-o.length)})}}else{let b=[...Yo(s)],g=o.split(/\s+/).find(v=>v.includes("/")),w=g?g.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,S=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,T=S?HO(s):null;for(let v of r){let E=String(v.label||"").toLowerCase(),I=E.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(I===o){d.push({ind:v,score:5e3});continue}if(o.length>=4&&(I.startsWith(o)||I.endsWith(o))){d.push({ind:v,score:4e3-Math.abs(I.length-o.length)});continue}if(S){let $=Vy(v.label);if($&&$===T){d.push({ind:v,score:5e3});continue}let _=/[/_-]/.test(v.label)||/\.[a-z0-9]+$/i.test(String(v.label||""));if($&&_&&T.length>=4&&$.includes(T)){d.push({ind:v,score:2e3-Math.abs($.length-T.length)});continue}}if(v.class==="Module"){let $=Uc(o);if($!==o&&$===Uc(I)){let _=Ms(o);if(Ps(I,o,_)>_){d.push({ind:v,score:3e3-Math.abs(I.length-o.length)});continue}}}if(o.length>=4&&E.includes(o)){d.push({ind:v,score:1e3-Math.abs(E.length-o.length)});continue}let k=Yo(v.label),R=b.filter($=>k.has($)).length;R>0&&(!w||k.has(w))&&d.push({ind:v,score:R/b.length*cf})}}if(d.sort((b,g)=>g.score-b.score),d.length){let[b,...g]=d,w=g.filter(S=>S.score===b.score),y=b.score>=cf?g.filter(S=>S.score>=cf):g;return{match:b.ind,candidates:y.slice(0,4).map(S=>S.ind),tier:3,ambiguous:w.length>0}}let f=p||o.includes("/"),h=null,m=!f&&typeof Go=="function"?Go(e.proseIndex,s).filter(b=>!n||e.byId.get(b.id)?.class===n):[];if(m.length){let[b,...g]=m,w=e.byId.get(b.id);if(w){let y=g.filter(S=>S.score===b.score);if(h={match:w,candidates:g.slice(0,4).map(S=>e.byId.get(S.id)).filter(Boolean),tier:4,ambiguous:y.length>0,matchedVia:"prose"},!h.ambiguous&&b.via!=="spell")return h}}if(!i&&o.length>=4){let b=Ms(o),g=b+1,w=[];for(let y of r){let S=Ps(String(y.label||"").toLowerCase(),o,b);if(S>0)for(let T of Yo(y.label)){if(S<=0)break;S=Math.min(S,Ps(T,o,b))}S<g?(g=S,w=[y]):S===g&&S<=b&&w.push(y)}if(g<=b&&w.length===1)return{match:w[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(g<=b&&w.length>1&&!h){let[y,...S]=w;return{match:y,candidates:S.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return h||{match:null,candidates:[],tier:null,ambiguous:!1}}function lf(e,t){let n=Vy(t),s=[...Yo(t)],o=[];for(let r of Yo(e))n.includes(r)||s.some(i=>Uc(i)===Uc(r))||Dc.has(r)||Yy.has(r)||o.push(r);return o}function Pc(e,t){if(!e?.match||e.tier!==3||e.matchedVia)return e;if(e.ambiguous){let s=[e.match,...e.candidates||[]],o=s.map(r=>new Set(lf(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),lf(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:jn(s.slice(0,4).map(r=>r.label))}:e}let n=lf(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function _n(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(qO,"").trim(),i=r.match(YO);if(i){let a=r.slice(0,i.index).trim(),c=nt[i[1].toLowerCase()];if(a&&c){let l=Pc(qi(e,a,{expectedClass:c}),a);if(l?.match?.id&&!l.ambiguous)return l}}if(r&&r!==o){let a=Pc(qi(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Pc(qi(e,t,n),t)}return Pc(qi(e,t,n),t)}function Bs(e,t,n){if(Bo.includes(String(t||"").trim().toLowerCase())){if(!n)return{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0};let s=e.byId.get(n);return s?{match:s,candidates:[],tier:1,ambiguous:!1}:{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0}}return _n(e,t)}function Df(e,t,n){let s=[];for(let o of tt(e,"defines")){if(!t.has(o.subject))continue;let r=e.byId.get(o.object);r&&r.class===n&&s.push(r)}return s}function Ky(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||uo.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],c=a.flatMap(l=>tt(e,l)).filter(l=>l.subject===t.id).map(l=>e.byId.get(l.object)).filter(Boolean);return n&&uo.has(n)&&(c=c.filter(l=>l.class===n)),{matches:c,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function ZO(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&Bf.has(cy(s.label))).map(s=>({ind:s,named:n.has(cy(s.label))?1:0,depth:String(s.label).split("/").length,fixture:QO(s.label)?1:0})).sort((s,o)=>o.named-s.named||s.depth-o.depth||s.fixture-o.fixture||Xo(String(s.ind.label),String(o.ind.label))).map(s=>s.ind)}function eC(e,t,n){return e!=="reverse"?!1:t==="imports"||t==="calls"?!n||n==="Module":t==="inherits"?!n||n==="Class":!1}function tC(e,t,n){let s=Lt(n).flatMap(a=>tt(e,a)),o=a=>{let c=`ext:${String(a.label).toLowerCase()}`;return s.filter(l=>l.object===a.id||String(l.object).toLowerCase()===c).map(l=>e.byId.get(l.subject)).filter(Boolean)},r=new Map,i=o(t);for(;i.length;){let a=i.shift();r.has(a.id)||a.id===t.id||(r.set(a.id,a),i.push(...o(a)))}return[...r.values()].sort((a,c)=>Xo(String(a.label),String(c.label)))}function zf(e){return(e?.attributes||[]).find(t=>nC.has(t.prop))?.value||null}function sC(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Fs(e)} ${e} in this graph's vocabulary`}function pn(e,t,{contextId:n=null,prev:s=null,pinnedObjMatch:o=null}={}){if(!t)return{matches:[],objMatch:null,candidates:[],traversal:null,ambiguous:!1};if(t.node)return PO(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let x=t.candidates.map(j=>{let M=pn(e,j,{contextId:n,prev:s});return{parsed:j,result:M,rendered:Yn(j,M,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:x}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let x=String(t.object||"").trim(),j=x.toLowerCase(),M=(e.individuals||[]).find(D=>{if(!zf(D))return!1;if(String(D.label).toLowerCase()===j)return!0;let H=(D.attributes||[]).find(Y=>Y.key==="token")?.value;return H&&String(H).toLowerCase()===j});if(!M){let D=Ay(e,x);return D?{matches:[D.hit],objMatch:D.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:D.text,traversal:`schema lookup for "${x}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${x}"`,ambiguous:!1}}return{matches:[M],objMatch:M,candidates:[],traversal:`schema lookup for "${x}"`,ambiguous:!1}}if(r==="mentions"){let x=String(t.object||"").trim();return{matches:(typeof Go=="function"?Go(e.proseIndex,x):[]).map(D=>e.byId.get(D.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${x}"`}}if(r==="where"&&XO.test(String(t.object||"").trim())){let x=ZO(e,t.object);return{matches:x,objMatch:x[0]||null,candidates:x.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...Bf].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!eC(r,i,a))return{matches:[],objMatch:null,candidates:[],ambiguous:!1,unsupportedModifier:!0,traversal:`modifier "${t.modifier}" requested for a "${i}" query \u2014 no closure traversal exists for this combination yet`};if(r==="ask"){let x=Bs(e,t.subject,n),j=Bs(e,t.object,n);if(!x.match||!j.match||x.ambiguous||j.ambiguous)return{matches:[],objMatch:j.match,candidates:j.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(x.unresolvedPronoun||j.unresolvedPronoun)};let[M,D]=[x.match,j.match];i==="touches"&&D.class==="Commit"&&M.class!=="Commit"&&([M,D]=[D,M]);let H=qr[i],Y=[...new Set(H?[...Lt(i),H]:Lt(i))],Z=Y.flatMap(P=>tt(e,P)).filter(P=>P.subject===M.id&&P.object===D.id);return{matches:Z,answer:t.negated?Z.length===0:Z.length>0,objMatch:j.match,subjMatch:x.match,candidates:[],traversal:`${Y.join("+")} edge from ${M.label} to ${D.label}`,ambiguous:!1}}let c;if(o)c={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(c=Bs(e,t.object,n),t.altObject&&t.altObject!==t.object){let x=Bs(e,t.altObject,n),j=!!c.match&&!c.ambiguous,M=!!x.match&&!x.ambiguous;!j&&M?c=x:j&&M&&c.match.id!==x.match.id&&(c={...c,ambiguous:!0,candidates:[x.match,...c.candidates||[]]})}if(t.kind==="tests"&&c.match&&!c.ambiguous&&!String(t.object||"").includes("/")){let x=D=>D.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),j=x(String(t.object||"").trim().toLowerCase()),M=(e.individuals||[]).find(D=>{if(D.class!=="Module"||D.id===c.match.id)return!1;let H=String(D.label||"").toLowerCase().split("/").pop();return H!==x(H)&&x(H)===j});M&&(c={...c,ambiguous:!0,candidates:[M,...c.candidates||[]]})}}let{match:l,candidates:u,ambiguous:d,unresolvedPronoun:p,matchedVia:f,unplacedWords:h,nearestLabel:m}=c;if(!l)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:p,unplacedWords:h,nearestLabel:m};if(d){let j=Rn([l,...u||[]]).slice(0,ct).map(M=>{let D=pn(e,t,{contextId:n,prev:s,pinnedObjMatch:M});return{candidate:M,result:D,rendered:Yn(t,D,e)}});return{matches:[],objMatch:l,candidates:u,traversal:null,ambiguous:!0,branches:j}}if(r==="where"){let x=(l.attributes||[]).find(j=>j.key==="site")?.value||null;return{matches:[l],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whereShape:!0,site:x,traversal:x?`site attribute of ${l.label}`:`class + defining module of ${l.label}`}}if(r==="when"){let x=D=>String((D.attributes||[]).find(H=>H.key==="date")?.value||""),j;if(l.class==="Commit")j=[l];else{let D=["touches","touchesSymbol"].flatMap(Y=>tt(e,Y)).filter(Y=>Y.object===l.id),H=new Set;j=[];for(let Y of D){if(H.has(Y.subject))continue;H.add(Y.subject);let Z=e.byId.get(Y.subject);Z&&Z.class==="Commit"&&j.push(Z)}j.sort(Jr(x))}let M=j.length&&x(j[0])?[{kind:"event",class:"Commit",label:j[0].label,ids:[j[0].id],attrs:{date:x(j[0]).slice(0,10)},lane:"when"}]:[];return{matches:j,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whenShape:!0,referents:M,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit date first`}}if(r==="whoLast"){let x=Y=>String((Y.attributes||[]).find(Z=>Z.key==="date")?.value||""),j=["touches","touchesSymbol"].flatMap(Y=>tt(e,Y)).filter(Y=>Y.object===l.id),M=new Set,D=[];for(let Y of j){if(M.has(Y.subject))continue;M.add(Y.subject);let Z=e.byId.get(Y.subject);Z&&Z.class==="Commit"&&D.push(Z)}D.sort(Jr(x));let H=D.length&&x(D[0])?[{kind:"event",class:"Commit",label:D[0].label,ids:[D[0].id],attrs:{date:x(D[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:D,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whoLastShape:!0,referents:H,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit's author`}}if(i==="touches"&&l.class==="Commit")return Ky(e,l,a,{candidates:u,ambiguous:d,matchedVia:f});if(r==="forward"){let x=qr[i],M=!!(x&&l.class&&uo.has(l.class))?[...new Set([...Lt(i),x])]:Lt(i);if(a&&a!=="Change"){let K=jf(e,M),W=af[a];if(K.size&&!K.has(a)&&!(W&&K.has(W)))return{matches:[],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,forwardGrainMiss:!0,wantClasses:[...K],traversal:`${M.join("+")} edges where subject = ${l.label} (grain mismatch: this "${i}" relation never targets a ${Ds(a)})`}}let H=M.flatMap(K=>tt(e,K)).filter(K=>K.subject===l.id).map(K=>e.byId.get(K.object)).filter(Boolean),Y=Rn(H),Z=Y,P="";if(a&&a!=="Change"){Z=Y.filter(W=>W.class===a);let K=af[a];if(!Z.length&&K){let W=Y.filter(C=>C.class===K);W.length&&(Z=W,P=`, widened to ${K} subjects (no ${a} recorded)`)}}return{matches:Z,objMatch:l,candidates:u,traversal:`${M.join("+")} edges where subject = ${l.label}${P}`,ambiguous:d,matchedVia:f}}if(t.modifier==="transitive")return i==="inherits"?{matches:tC(e,l,i),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`subclass closure over inherits edges from ${l.label}`}:{matches:zr(e,l,{maxDepth:ly,includeCycleReturn:!0}).flat().map(M=>e.byId.get(M.id)).filter(Boolean),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`reverse dependency closure over imports+calls edges from ${l.label} (impactClosure, maxDepth=${ly})`};let b=qr[i]||Lt(i).find(x=>py.has(x))||null,g=!!(l.class&&uo.has(l.class));if(b&&(uo.has(a)||g)){let x=tt(e,b).filter(P=>P.object===l.id),j=Rn(x.map(P=>e.byId.get(P.subject)).filter(Boolean)),M=!a||a==="Change"?j:j.filter(P=>P.class===a),D="",H=af[a];if(!M.length&&H){let P=j.filter(K=>K.class===H);P.length&&(M=P,D=`, widened to ${H} subjects (no ${a} recorded)`)}let Y=(i==="touches"||i==="calls"||i==="uses")&&l.class==="Class"&&!tt(e,"contains").some(P=>P.subject===l.id),Z=Y?e.byId.get(Qo(e,l)||""):null;if(M.length||!(Y&&Z))return{matches:M,objMatch:l,candidates:u,traversal:`${b} edges where object = ${l.label}${D}`,ambiguous:d,matchedVia:f}}let w=l,y=u,S=d,T=f,v="",E=wy(e,i);if(E&&w.class&&w.class!==E){let x=_n(e,t.object,{expectedClass:E});if(x.match&&!x.ambiguous)w=x.match,y=x.candidates,S=x.ambiguous,T=x.matchedVia;else if(E==="Module"){let j=Qo(e,w),M=j&&e.byId.get(j);if(M)v=`, refined from ${w.label} to its containing module`,w=M;else return{matches:[],objMatch:w,candidates:y,ambiguous:S,matchedVia:T,wrongGrainMiss:!0,wantClass:E,traversal:`"${t.object}" resolved to ${Ds(w.class)} ${w.label} (grain mismatch: this "${i}" question needs a ${Ds(E)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:w,candidates:y,ambiguous:S,matchedVia:T,wrongGrainMiss:!0,wantClass:E,traversal:`"${t.object}" resolved to ${Ds(w.class)} ${w.label} (grain mismatch: this "${i}" question needs a ${Ds(E)})`}}let I=Lt(i).flatMap(x=>tt(e,x)).filter(x=>x.object===w.id);i==="cochange"&&(I=I.concat(Lt(i).flatMap(x=>tt(e,x)).filter(x=>x.subject===w.id).map(x=>({...x,subject:x.object,object:x.subject}))));let k="";if(!I.length&&w.class){let x=`ext:${String(w.label).toLowerCase()}`;I=Lt(i).flatMap(j=>tt(e,j)).filter(j=>String(j.object).toLowerCase()===x),I.length&&(k=` (by name, via unresolved ${x} references)`)}let R=[],$=new Set;for(let x of I){let j=e.byId.get(x.subject);j&&!$.has(j.id)&&($.add(j.id),R.push(j))}let _,O="";if(!a||a==="Change")_=R;else{let x=R.filter(M=>M.class===a),j=x.length||!Ty(i,a)?[]:_y(e,new Set([w.id]));if(x.length)_=x;else if(j.length)_=j,O=`, falling back to ${w.label}'s recorded source site (no defines edge)`;else if(a!=="Module"&&R.some(M=>M.class==="Module")){let M=new Set(R.filter(D=>D.class==="Module").map(D=>D.id));_=Df(e,M,a),O=`, then ${Ds(a)} defined in the matched module(s)`}else _=[]}return{matches:_,objMatch:w,candidates:y,traversal:`${Lt(i).join("+")} edges where object = ${w.label}${k}${O}${v}`,ambiguous:S,matchedVia:T}}function mo(e){if(e.class==="Module")return e.label;let t=(e.attributes||[]).find(s=>s.key==="site")?.value;if(t)return String(t).split(":")[0];let n=String(e.id||"").match(/^fn:(.+)#/);return n?n[1]:null}function Sf(e,t){let n=String(t||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(n){let o=n[3]&&n[3]!==n[2]?`lines ${n[2]}-${n[3]}`:`line ${n[2]}`;return`${vf(e)} is defined in ${n[1]} at ${o}.`}let s=mo(e);return s?`${vf(e)} is defined in ${s} (no line span recorded in this index).`:null}function vf(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function oC(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function jn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Yi(e){let t=e.object??e.subject??"?";return`${e.entityType?fe(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function ho(e){return Fo[e]?.bare||e}function Xr(e){return Bg(e)}function rC(e){let t=ho(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function iC(e){if(!Array.isArray(e.atoms)||e.atoms.length!==2)return null;let[t,n]=e.atoms;if(t.op!=="seed"||t.ast?.node!=="allOfClass"||n.op!=="difference")return null;let s=fe(e.entityType,2);if(n.kind==="qual")return`${s} that are not ${n.filters.join(" and not ")}`;if(n.kind!=="set"||!n.ast)return null;if(n.ast.node==="existsEdge")return`${s} that do not ${ho(n.ast.kind)} anything`;let o=n.ast.node==="clause"?n.ast.clause:n.ast;if(!o||o.node||!o.kind)return null;let r=o.object??o.subject;return r==null?null:`${s} that do not ${ho(o.kind)} ${JSON.stringify(String(r))}`}function Hy(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Yi).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>Hy(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?iC(e):null)||`a compositional query (${e.node})`,machine:`composite(${e.node})`};let t=r=>JSON.stringify(String(r??"")),n=[];e.kind&&n.push(e.kind),e.negated&&n.push("negated"),e.entityType&&n.push(`entityType=${e.entityType}`),e.modifier&&e.modifier!=="direct"&&n.push(`modifier=${e.modifier}`),e.subject!=null&&n.push(`subject=${t(e.subject)}`),e.object!=null&&n.push(t(e.object));let s=`${e.shape}(${n.join(", ")})`,o;if(e.shape==="ask")o=`does "${e.subject}" ${e.negated?"not ":""}${qo(e.kind)} "${e.object}"?`;else if(e.shape==="meta")o=`what does "${e.object}" mean, in this graph's own vocabulary?`;else if(e.shape==="mentions")o=`where is "${e.object}" mentioned?`;else if(e.shape==="where")o=`where is "${e.object}" defined?`;else{let r=e.entityType?fe(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${qo(e.kind)}`:`${r}${qo(e.kind)} "${e.object}"`}return{english:o,machine:s}}function Yn(e,t,n=null){let s=qy(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function qy(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${Ff()}`,miss:!0,ambiguous:!1};if(e.node)return KO(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
|
|
55
|
+
${t.branches.map((c,l)=>`${l+1}) as ${Yi(c.parsed)}: ${c.rendered.content}`).join(`
|
|
56
56
|
`)}
|
|
57
|
-
(ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(
|
|
57
|
+
(ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Yi),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,c)=>`${c+1}) ${Yi(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Yi),candidateParses:e.candidates};if(t.unresolvedPronoun)return{content:`"${e.object??e.subject}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.unsupportedModifier)return{content:`the "${e.modifier}" modifier isn't supported for "${e.kind}" queries yet \u2014 only imports/calls (module-level) have a transitive closure today.`,miss:!0,ambiguous:!1};if(t.wrongGrainMiss){let i=t.objMatch.class?fe(t.objMatch.class,1):"term",a=fe(t.wantClass,1);return{content:`"${e.object}" resolved to the ${i} ${t.objMatch.label}, but this question needs a ${a} \u2014 no ${a} named "${e.object}" was found in the index.`,miss:!0,ambiguous:!1}}if(t.forwardGrainMiss){let i=t.wantClasses.map(a=>fe(a,2));return{content:`${t.objMatch.label}'s "${qo(e.kind)}" relation in this index never produces ${fe(e.entityType,2)} \u2014 only ${jn(i)}.`,miss:!0,ambiguous:!1}}if(e.shape==="meta"){if(!t.objMatch)return{content:`"${e.object}" isn't a term in this graph's own vocabulary (no matching class or predicate).`,miss:!0,ambiguous:!1};if(t.metaCodeClass)return{content:t.metaFallbackText,miss:!1,ambiguous:!1,matches:t.matches};let i=zf(t.objMatch)||"";return{content:`${t.objMatch.label} is ${sC(t.objMatch.class)}: ${i}`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.mentionsShape){if(!t.matches.length)return{content:`"${e.object}" is not mentioned in any indexed identifier or doc-comment prose.`,miss:!0,ambiguous:!1};let i=t.matches.slice(0,ct).map(c=>`${c.label} (${fe(c.class,1)})`),a=t.matches.length>ct?`, \u2026and ${t.matches.length-ct} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${jn(i)}${a}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.entryPointShape){if(!t.matches.length)return{content:`no entry-point module found in the index \u2014 no module basename matches ${jn([...Bf])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,c=a.slice(0,ct).map(d=>d.label),l=a.length>ct?`, \u2026and ${a.length-ct} more`:"",u=a.length?` \u2014 also matched: ${jn(c)}${l}`:"";return{content:`ranked ${t.matches.length} entry-point match${t.matches.length===1?"":"es"}; top: ${i.label}${u}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.objMatch&&(!t.candidates||t.candidates.length===0)&&e.shape!=="ask"){let i=String(e.object||"").trim(),a=e.entityType&&df[e.entityType]?fe(e.entityType,1):"module",c=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let l=jn(t.unplacedWords.map(p=>`"${p}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${c} matching "${e.object}" found in the index. ${l} ${u} nothing here, and reading past ${t.unplacedWords.length===1?"it":"them"} would answer a different question.${d}`,miss:!0,ambiguous:!1,candidates:[]}}return{content:`no ${c} matching "${e.object}" found in the index. ${lo(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(g=>g.class==="Commit")){let g=y=>!["Commit","Session","Source","Utterance"].includes(y?.class),w=i.filter(g);w.length&&(i=w,a?.length&&(a=a.filter(y=>g(y.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let g=String(e.object||"").toLowerCase(),w=new Set(Vn(String(e.object||"")).filter(E=>E.length>=3)),y=new Set(i.map(E=>E.id)),S=null,T=0,v=1/0;if(w.size)for(let E of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(E.class)||y.has(E.id))continue;let I=Vn(String(E.label)).filter(R=>w.has(R)).length;if(!I||I<T)continue;let k=Ps(String(E.label).toLowerCase(),g,8);(I>T||k<v)&&(S=E,T=I,v=k)}if(S&&(i=[...i,S],a)){let E=pn(n,e,{pinnedObjMatch:S});a=[...a,{candidate:S,result:E,rendered:Yn(e,E,n)}]}}let c=i.length&&i.every(g=>g.class===i[0].class)?i[0].class:null,l=c?df[c]?fe(c,1):Ds(c):"module",u=i.slice(0,ct).map(g=>g.label),d=i.length>ct?`, \u2026and ${i.length-ct} more`:"",p=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${jn(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,f=String(e.object||""),h=f?new RegExp(`\\b${at(f)}\\b`,"gi"):null,m=g=>{let w=String(g.candidate.label||"");return!h||!w?g.rendered.content:g.rendered.content.split(w).map(y=>y.replace(h,w)).join(w)};return{content:a&&a.length?`${p}
|
|
58
58
|
${a.map((g,w)=>`${w+1}) ${g.candidate.label}: ${m(g)}`).join(`
|
|
59
|
-
`)}`:p,miss:!1,ambiguous:!0,candidates:i.map(g=>g.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=vf(i,t.site);return a?{content:a,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${uo(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(p=>p.key==="date")?.value||"";if(!c)return{content:`commit ${a.label} touched ${i}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1};let l=(a.attributes||[]).find(p=>p.key==="message")?.value||"",u=String(c).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Yi("is-dated",a.id,"is dated")} ${u}${l?` ("${l}")`:""}.`,miss:!1,ambiguous:!1,matches:t.matches};let d=t.matches.length-1;return{content:`${i} was last touched by commit ${a.label} on ${u}${l?` ("${l}")`:""}${d?`; ${d} earlier commit${d===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whoLastShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${uo(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!c)return{content:`commit ${a.label} last touched ${i}, but this index records no commit author \u2014 regenerate the graph to attach mgx:commitAuthor.`,miss:!0,ambiguous:!1};let l=t.matches.length-1;return{content:`${i} was last touched by ${c} (commit ${a.label})${l?`; ${l} earlier commit${l===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.commitSubject){let i=`commit ${t.objMatch.label}`;if(!t.matches.length)return{content:`${i} touched nothing recorded in the index.`,miss:!0,ambiguous:!1};let a=new Map;for(let u of t.matches.slice(0,ct)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let c=[...a.entries()].map(([u,d])=>`${fe(u,d.length)} ${jn(d)}`),l=t.matches.length>ct?`; \u2026and ${t.matches.length-ct} more`:"";return{content:`${i} touched ${c.join("; ")}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(e.shape==="ask"){if(!t.objMatch||!t.subjMatch)return{content:"couldn't resolve one of the terms in this question.",miss:!0,ambiguous:!1};let i=`${t.traversal}.`,a=`no ${e.kind} edge found from ${t.subjMatch.label} to ${t.objMatch.label}.`,c=e.negated?a:i,l=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?c:l}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(Lr.includes(e.kind)&&n&&t.objMatch)for(let l of Lr){if(l===e.kind)continue;let u={...e,kind:l},d=pn(n,u,{pinnedObjMatch:t.objMatch});if(d?.matches?.length&&!d.ambiguous)return Xy(u,d,n)}return{content:`${t.objMatch.label} has no ${qo(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}if(e.kind==="tests"&&!e.entityType)return{content:`No tests cover ${String(e.object||"").replace(kI,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=e.entityType?fe(e.entityType,2):(()=>{let l=[...Rf(n,Lt(e.kind))];return l.length===1?fe(l[0],2):l.length>1?l.map(u=>fe(u,2)).join(" or "):fe("Module",2)})(),a=t.objMatch&&Bo.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object,c=e.modifier==="transitive"?"transitively":"directly";return{content:`No ${i} found whose module ${c} ${qo(e.kind)} ${a}. ${uo(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${aC(e.kind)} by ${t.matches[0].label}.`,miss:!1,ambiguous:!1,matches:t.matches};if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!fo.has(i.class))){let i=t.matches.slice(0,ct).map(c=>c.class==="Commit"?iC(c):c.label),a=t.matches.length>ct?`, \u2026and ${t.matches.length-ct} more`:"";return{content:i.join(" and ")+a+".",miss:!1,ambiguous:!1,matches:t.matches}}let s=new Map;for(let i of t.matches.slice(0,ct)){let a=go(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(Ef(i))}let o=[...s.entries()].map(([i,a],c)=>{let l=jn(a);return c===0?`in ${i} there is ${l}`:`there is ${l} in ${i}`}),r=t.matches.length>ct?` \u2026and ${t.matches.length-ct} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function Qy(e){if(e.length<4||dC.has(e))return null;let t=Fs(e),n=t+1,s=null,o=!1;for(let r of uC){let i=Ms(e,r,Math.min(n,t));i<n?(n=i,s=r,o=!1):i===n&&i<=t&&r!==s&&(o=!0)}return n<=t&&!o?s:null}function fy(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!Uf(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=Qy(n);return!!s&&s!==n&&!!nt[s]}function Zy(e,t,n){if(!t)return!1;if(t.ambiguousParse)return"ambiguous";if(t.node)return t.node!=="miss";if(t.shape==="meta"||t.shape==="mentions")return!0;let s=zs(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||fy(s,t.object))return!1;if(t.shape==="ask"){let o=zs(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!fy(o,t.subject))}return!0}function fC(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return Xg.includes(t)}function pC(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Gi(Ho(String(t||""))),i=fn(r);if(!i.length)return null;let a=[],c=[],l=$=>{let _=_n(e,$);return!!_.match&&_.tier!=null&&_.tier<=2},u=$=>{let _=_n(e,$);return!!_.match&&_.tier!=null&&_.tier<=3},d=$=>{let _=String($||"").trim().toLowerCase();return Bo.includes(_)?!0:fn(_).some(O=>{let x=O.toLowerCase();return!Dc.has(x)&&!xf.has(x)})},p=new Set(["reverse","forward","where","when","ask"]),f=$=>{let _=$.join(" "),O=Jo(_,{nlp:n});return Zy(e,O,s)!==!0||O&&!O.node&&p.has(O.shape)&&(O.object!=null&&!d(O.object)||O.shape==="ask"&&O.subject!=null&&!d(O.subject))||Xn(O,pn(e,O,{contextId:s,prev:o}),e).miss?null:{parsed:O,text:_}},h=$=>({parsed:$.parsed,from:r,to:$.text,dropped:[...a],steps:c}),m=0,b=Math.max(i.length,1)+12;for(;m<b;m+=1){let $=-1;for(let x=0;x<i.length;x+=1){let j=i[x].toLowerCase();if(Wf.has(j)&&!Dc.has(j)&&!l(i[x])){$=x;break}}if($<0)break;let _=i[$];i=i.filter((x,j)=>j!==$),a.push(_),c.push(`strip noise "${_}" \u2192 "${i.join(" ")}"`);let O=f(i);if(O)return h(O)}let g=Jo(i.join(" "),{nlp:n}),w=new Set;if(g&&!g.node&&p.has(g.shape))for(let $ of[g.object,g.subject])for(let _ of fn(String($||"").toLowerCase()))w.add(_);let y=[],S=[],T=[];for(let $ of i){let _=$.toLowerCase();if(!/^[a-z]+$/.test(_)||Dc.has(_)||xf.has(_)||u($)){y.push($);continue}let x=Qy(_);if(x&&x!==_){y.push(x),T.push(`${$}\u2192${x}`);continue}if(w.has(_)){y.push($);continue}S.push($)}if((T.length||S.length)&&y.length){i=y,a.push(...S),T.length&&c.push(`fuzzy-correct ${JSON.stringify(T)} \u2192 "${i.join(" ")}"`),S.length&&c.push(`drop unmatched ${JSON.stringify(S)} \u2192 "${i.join(" ")}"`);let $=f(i);if($)return h($)}let v=!1,E=i.map($=>{let _=$.toLowerCase();return Pr[_]&&!u($)?(v=!0,Pr[_]):$});if(v){c.push(`normalise synonyms \u2192 "${E.join(" ")}"`);let $=f(E);if($)return h($)}let I=fn(r).map($=>$.toLowerCase()),k=[],R=[];for(let $ of I){if(Jy.has($))continue;let _=nt[$];_&&_!=="Change"?k.push($):R.push($)}if(k.length===1&&R.length===0){let $=f(["count",k[0]]);if($)return c.push(`bare kind "${k[0]}" \u2192 count`),h($)}return null}function mC(e,t){let n=String(t||"");if(!e||!py.test(n))return n;let s=e.individuals.filter(c=>c.class==="Commit");if(!s.length)return n;let o=c=>String((c.attributes||[]).find(l=>l.key==="date")?.value||""),r=[...s].sort(Qr(o))[0];if(!r)return n;let i=n.replace(py,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return hC.test(a)?`${a} touched`:i}function gC(e){let t=String(e||"").toLowerCase(),n=new Set([t]);return t.endsWith("ies")&&n.add(`${t.slice(0,-3)}y`),(t.endsWith("ses")||t.endsWith("es"))&&n.add(t.slice(0,-2)),t.endsWith("s")&&t.length>1&&n.add(t.slice(0,-1)),[...n]}function Gf(e,t){let n=gC(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function yC(e,t){let n=String(t||"").trim(),s=n.match(bC),o=s?null:n.match(wC),r=s||o;if(!r||!Vf.test(r[2]||"")||nt[r[1].toLowerCase()])return null;let i=Gf(e,r[1]);if(!i)return null;let a={node:"allOfClass",entityType:i};return s?{node:"list",entityType:i,base:a,scoped:!1}:{node:"count",entityType:i,base:a}}function $C(e,t){let n=String(t||"").split(/\s*,\s*|\s+and\s+/i).map(r=>r.trim()).filter(Boolean);if(!n.length)return null;let s=[],o=[];for(let r of n){let i=r.replace(/^(?:all\s+)?(?:the\s+)?/i,"").trim();if(!/^[a-z][a-z'-]*$/i.test(i))return null;let a=Gf(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function xC(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=new Set;for(let o of e?.individuals||[])o?.id&&(String(o.id).toLowerCase()===n||String(o.label||"").toLowerCase()===n)&&s.add(o.id);return s.size===1?[...s][0]:null}function kC(e,t){let n=ic(String(t||"").trim()),s=n.match(SC),o=s?Bg[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(vC)?.[1]||n.match(EC)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Do[o].predicate},a=$C(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let c=xC(e,r);return c?{...i,subjects:[c],asked:[c]}:null}function jC(e,t){return Do[e].matchesLocativePredicates?Nr(ea(t.prop))||Nr(ea(t.predicate)):null}function RC(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Do[t.relation],r=ea(o.predicate),i=new Map,a=new Map;for(let l of e?.relations||[]){let u=ea(l.prop),d=ea(l.predicate),p=u===r||d===r,f=p?null:jC(t.relation,l);if(!(!p&&!f))for(let h of l.edges||[]){let m=e.byId?.get(h.subject);if(!m||!(s?s.has(h.subject):n.has(m.class)))continue;let g={subject:m,object:h.object,reads:p?o.reads:`is ${f}`};p?i.set(h.subject,g):a.set(`${u||d}\0${h.subject}`,g)}}let c=[...i.values(),...[...a.values()].filter(l=>!i.has(l.subject.id))].sort((l,u)=>Xo(String(l.subject.id),String(u.subject.id))||Xo(String(l.object),String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:c,matches:c.map(l=>l.subject)}}function df(e){let t=_C.exec(String(e??""));return t?{base:t[1],epoch:t[2]?Number(t[2]):0,stamp:Number(t[3])}:{base:String(e??""),epoch:0,stamp:0}}function AC(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(df(a.subject).base,String(a.object));let s=new Set(zg),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:c,epoch:l,stamp:u}=df(a.subject),d=n.get(c)||t(c);if(!d)continue;let p=`${a.predicate}\0${c}`;TC(r.get(p),l,u)&&(o.set(c,{id:c,label:c,class:d}),r.set(p,{epoch:l,stamp:u,predicate:a.predicate,subject:c,object:df(a.object).base}))}let i=new Map;for(let a of r.values())i.has(a.predicate)||i.set(a.predicate,{prop:a.predicate,predicate:a.predicate,examples:[]}),i.get(a.predicate).examples.push({subject:a.subject,object:a.object});return{individuals:[...o.values()],objectProperties:[...i.values()]}}function CC(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=Gf(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(c=>c.id));if(i.size<2)return!1;let a=new Map;for(let c of e?.individuals||[])c?.id&&(a.has(c.id)||a.set(c.id,new Set),a.get(c.id).add(c.class));return[...i].every(c=>c===o||a.get(c)?.has(o))}function NC(e,t){return t?.class?t.class==="Module"||t.class==="File"?!0:!!Qo(e,t):!1}function LC(e,t){let n=Ui(t);if(!n)return null;let s=_n(e,n),o=s?.ambiguous?null:s?.match;return!o||o.class!=="Class"?null:`which classes transitively inherit from ${o.label}`}function MC(e,t){let n=Wi(String(t||"")).trim();if(Ui(n)||Qd(n)!==n)return null;let s=n.match(PC);if(!s)return null;let o=_n(e,s[1].trim()),r=o?.ambiguous?null:o?.match;if(!r||!NC(e,r))return null;let i=r.class==="Class"?"what inherits from it":r.class==="Module"||r.class==="File"?"what imports or calls it":"what calls it";return{content:`I can't answer that \u2014 the index records what is, not what would be. What it can read about ${r.label}: "what would break if ${r.label} were deleted" (${i}), or "/describe ${r.label}" for the facts it holds.`,tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,relaxed:null}}}function bo(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(fC(t))return{content:Df(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};let r=MC(e,t);if(r)return r;t=LC(e,t)||t,t=mC(e,t);let i=kf(t,{nlp:s}),a=i.parsed,c=a,l=null;if(Zy(e,a,n)===!1){let f=pC(e,t,{nlp:s,contextId:n,prev:o});f&&(c=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let u=pn(e,c,{contextId:n,prev:o}),d=Xn(c,u,e);if(hy(e,c,u,d)){let f=yC(e,t);if(f){let h=pn(e,f,{contextId:n,prev:o}),m=Xn(f,h,e);m.miss||(c=f,u=h,d=m,l=null)}}if(hy(e,c,u,d)){let f=kC(e,t);if(f){let h=pn(e,f,{contextId:n,prev:o}),m=Xn(f,h,e);m.miss||(c=f,u=h,d=m,l=null)}}if(c===null&&d.miss&&!d.ambiguous){let h=Wi(String(t||"")).trim().match(IC)?.[1]?.trim();if(h&&!/\s+(?:for|about)$/i.test(h)){let m=Jo(`what is a ${h}`,{nlp:s});m?.shape==="meta"&&(u=pn(e,m,{contextId:n,prev:o}),d=Xn(m,u,e))}}if(c===null&&d.miss&&!d.ambiguous){let h=Ho(String(t||"")).match(OC)?.[1]?.trim();if(h){let m=Jo(`what is a ${h}`,{nlp:s});if(m?.shape==="meta"){let b=pn(e,m,{contextId:n,prev:o}),g=Xn(m,b,e);!g.miss&&!g.ambiguous&&(u=b,d=g)}}}let p=l&&!d.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${d.content}`:d.content;if(!l&&!d.miss&&!d.ambiguous&&i.alternates.length){let f=i.alternates.map(h=>{let m=pn(e,h.parsed,{contextId:n,prev:o}),b=Xn(h.parsed,m,e);return b.miss?null:{a:h,text:b.content}}).filter(Boolean);if(f.length){let h=Kw(f.map(m=>m.a),{answerFor:m=>f.find(b=>b.a===m)?.text||null});p=`${p}
|
|
59
|
+
`)}`:p,miss:!1,ambiguous:!0,candidates:i.map(g=>g.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=Sf(i,t.site);return a?{content:a,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${lo(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(p=>p.key==="date")?.value||"";if(!c)return{content:`commit ${a.label} touched ${i}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1};let l=(a.attributes||[]).find(p=>p.key==="message")?.value||"",u=String(c).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Hi("is-dated",a.id,"is dated")} ${u}${l?` ("${l}")`:""}.`,miss:!1,ambiguous:!1,matches:t.matches};let d=t.matches.length-1;return{content:`${i} was last touched by commit ${a.label} on ${u}${l?` ("${l}")`:""}${d?`; ${d} earlier commit${d===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whoLastShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${lo(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!c)return{content:`commit ${a.label} last touched ${i}, but this index records no commit author \u2014 regenerate the graph to attach mgx:commitAuthor.`,miss:!0,ambiguous:!1};let l=t.matches.length-1;return{content:`${i} was last touched by ${c} (commit ${a.label})${l?`; ${l} earlier commit${l===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.commitSubject){let i=`commit ${t.objMatch.label}`;if(!t.matches.length)return{content:`${i} touched nothing recorded in the index.`,miss:!0,ambiguous:!1};let a=new Map;for(let u of t.matches.slice(0,ct)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let c=[...a.entries()].map(([u,d])=>`${fe(u,d.length)} ${jn(d)}`),l=t.matches.length>ct?`; \u2026and ${t.matches.length-ct} more`:"";return{content:`${i} touched ${c.join("; ")}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(e.shape==="ask"){if(!t.objMatch||!t.subjMatch)return{content:"couldn't resolve one of the terms in this question.",miss:!0,ambiguous:!1};let i=`${t.traversal}.`,a=`no ${e.kind} edge found from ${t.subjMatch.label} to ${t.objMatch.label}.`,c=e.negated?a:i,l=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?c:l}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(Nr.includes(e.kind)&&n&&t.objMatch)for(let l of Nr){if(l===e.kind)continue;let u={...e,kind:l},d=pn(n,u,{pinnedObjMatch:t.objMatch});if(d?.matches?.length&&!d.ambiguous)return qy(u,d,n)}return{content:`${t.objMatch.label} has no ${qo(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}if(e.kind==="tests"&&!e.entityType)return{content:`No tests cover ${String(e.object||"").replace(EI,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=e.entityType?fe(e.entityType,2):(()=>{let l=[...jf(n,Lt(e.kind))];return l.length===1?fe(l[0],2):l.length>1?l.map(u=>fe(u,2)).join(" or "):fe("Module",2)})(),a=t.objMatch&&Bo.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object,c=e.modifier==="transitive"?"transitively":"directly";return{content:`No ${i} found whose module ${c} ${qo(e.kind)} ${a}. ${lo(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${rC(e.kind)} by ${t.matches[0].label}.`,miss:!1,ambiguous:!1,matches:t.matches};if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!uo.has(i.class))){let i=t.matches.slice(0,ct).map(c=>c.class==="Commit"?oC(c):c.label),a=t.matches.length>ct?`, \u2026and ${t.matches.length-ct} more`:"";return{content:i.join(" and ")+a+".",miss:!1,ambiguous:!1,matches:t.matches}}let s=new Map;for(let i of t.matches.slice(0,ct)){let a=mo(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(vf(i))}let o=[...s.entries()].map(([i,a],c)=>{let l=jn(a);return c===0?`in ${i} there is ${l}`:`there is ${l} in ${i}`}),r=t.matches.length>ct?` \u2026and ${t.matches.length-ct} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function Xy(e){if(e.length<4||lC.has(e))return null;let t=Ms(e),n=t+1,s=null,o=!1;for(let r of cC){let i=Ps(e,r,Math.min(n,t));i<n?(n=i,s=r,o=!1):i===n&&i<=t&&r!==s&&(o=!0)}return n<=t&&!o?s:null}function uy(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!zf(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=Xy(n);return!!s&&s!==n&&!!nt[s]}function Jy(e,t,n){if(!t)return!1;if(t.ambiguousParse)return"ambiguous";if(t.node)return t.node!=="miss";if(t.shape==="meta"||t.shape==="mentions")return!0;let s=Bs(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||uy(s,t.object))return!1;if(t.shape==="ask"){let o=Bs(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!uy(o,t.subject))}return!0}function uC(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return qg.includes(t)}function dC(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ui(Ho(String(t||""))),i=fn(r);if(!i.length)return null;let a=[],c=[],l=$=>{let _=_n(e,$);return!!_.match&&_.tier!=null&&_.tier<=2},u=$=>{let _=_n(e,$);return!!_.match&&_.tier!=null&&_.tier<=3},d=$=>{let _=String($||"").trim().toLowerCase();return Bo.includes(_)?!0:fn(_).some(O=>{let x=O.toLowerCase();return!Dc.has(x)&&!Ef.has(x)})},p=new Set(["reverse","forward","where","when","ask"]),f=$=>{let _=$.join(" "),O=Jo(_,{nlp:n});return Jy(e,O,s)!==!0||O&&!O.node&&p.has(O.shape)&&(O.object!=null&&!d(O.object)||O.shape==="ask"&&O.subject!=null&&!d(O.subject))||Yn(O,pn(e,O,{contextId:s,prev:o}),e).miss?null:{parsed:O,text:_}},h=$=>({parsed:$.parsed,from:r,to:$.text,dropped:[...a],steps:c}),m=0,b=Math.max(i.length,1)+12;for(;m<b;m+=1){let $=-1;for(let x=0;x<i.length;x+=1){let j=i[x].toLowerCase();if(Uf.has(j)&&!Dc.has(j)&&!l(i[x])){$=x;break}}if($<0)break;let _=i[$];i=i.filter((x,j)=>j!==$),a.push(_),c.push(`strip noise "${_}" \u2192 "${i.join(" ")}"`);let O=f(i);if(O)return h(O)}let g=Jo(i.join(" "),{nlp:n}),w=new Set;if(g&&!g.node&&p.has(g.shape))for(let $ of[g.object,g.subject])for(let _ of fn(String($||"").toLowerCase()))w.add(_);let y=[],S=[],T=[];for(let $ of i){let _=$.toLowerCase();if(!/^[a-z]+$/.test(_)||Dc.has(_)||Ef.has(_)||u($)){y.push($);continue}let x=Xy(_);if(x&&x!==_){y.push(x),T.push(`${$}\u2192${x}`);continue}if(w.has(_)){y.push($);continue}S.push($)}if((T.length||S.length)&&y.length){i=y,a.push(...S),T.length&&c.push(`fuzzy-correct ${JSON.stringify(T)} \u2192 "${i.join(" ")}"`),S.length&&c.push(`drop unmatched ${JSON.stringify(S)} \u2192 "${i.join(" ")}"`);let $=f(i);if($)return h($)}let v=!1,E=i.map($=>{let _=$.toLowerCase();return Lr[_]&&!u($)?(v=!0,Lr[_]):$});if(v){c.push(`normalise synonyms \u2192 "${E.join(" ")}"`);let $=f(E);if($)return h($)}let I=fn(r).map($=>$.toLowerCase()),k=[],R=[];for(let $ of I){if(Yy.has($))continue;let _=nt[$];_&&_!=="Change"?k.push($):R.push($)}if(k.length===1&&R.length===0){let $=f(["count",k[0]]);if($)return c.push(`bare kind "${k[0]}" \u2192 count`),h($)}return null}function pC(e,t){let n=String(t||"");if(!e||!dy.test(n))return n;let s=e.individuals.filter(c=>c.class==="Commit");if(!s.length)return n;let o=c=>String((c.attributes||[]).find(l=>l.key==="date")?.value||""),r=[...s].sort(Jr(o))[0];if(!r)return n;let i=n.replace(dy,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return fC.test(a)?`${a} touched`:i}function hC(e){let t=String(e||"").toLowerCase(),n=new Set([t]);return t.endsWith("ies")&&n.add(`${t.slice(0,-3)}y`),(t.endsWith("ses")||t.endsWith("es"))&&n.add(t.slice(0,-2)),t.endsWith("s")&&t.length>1&&n.add(t.slice(0,-1)),[...n]}function Wf(e,t){let n=hC(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function bC(e,t){let n=String(t||"").trim(),s=n.match(mC),o=s?null:n.match(gC),r=s||o;if(!r||!Gf.test(r[2]||"")||nt[r[1].toLowerCase()])return null;let i=Wf(e,r[1]);if(!i)return null;let a={node:"allOfClass",entityType:i};return s?{node:"list",entityType:i,base:a,scoped:!1}:{node:"count",entityType:i,base:a}}function wC(e,t){let n=String(t||"").split(/\s*,\s*|\s+and\s+/i).map(r=>r.trim()).filter(Boolean);if(!n.length)return null;let s=[],o=[];for(let r of n){let i=r.replace(/^(?:all\s+)?(?:the\s+)?/i,"").trim();if(!/^[a-z][a-z'-]*$/i.test(i))return null;let a=Wf(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function vC(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=new Set;for(let o of e?.individuals||[])o?.id&&(String(o.id).toLowerCase()===n||String(o.label||"").toLowerCase()===n)&&s.add(o.id);return s.size===1?[...s][0]:null}function EC(e,t){let n=ic(String(t||"").trim()),s=n.match(yC),o=s?Fg[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match($C)?.[1]||n.match(SC)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Do[o].predicate},a=wC(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let c=vC(e,r);return c?{...i,subjects:[c],asked:[c]}:null}function xC(e,t){return Do[e].matchesLocativePredicates?Cr(Qi(t.prop))||Cr(Qi(t.predicate)):null}function kC(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Do[t.relation],r=Qi(o.predicate),i=new Map,a=new Map;for(let l of e?.relations||[]){let u=Qi(l.prop),d=Qi(l.predicate),p=u===r||d===r,f=p?null:xC(t.relation,l);if(!(!p&&!f))for(let h of l.edges||[]){let m=e.byId?.get(h.subject);if(!m||!(s?s.has(h.subject):n.has(m.class)))continue;let g={subject:m,object:h.object,reads:p?o.reads:`is ${f}`};p?i.set(h.subject,g):a.set(`${u||d}\0${h.subject}`,g)}}let c=[...i.values(),...[...a.values()].filter(l=>!i.has(l.subject.id))].sort((l,u)=>Xo(String(l.subject.id),String(u.subject.id))||Xo(String(l.object),String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:c,matches:c.map(l=>l.subject)}}function uf(e){let t=jC.exec(String(e??""));return t?{base:t[1],epoch:t[2]?Number(t[2]):0,stamp:Number(t[3])}:{base:String(e??""),epoch:0,stamp:0}}function _C(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(uf(a.subject).base,String(a.object));let s=new Set(Dg),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:c,epoch:l,stamp:u}=uf(a.subject),d=n.get(c)||t(c);if(!d)continue;let p=`${a.predicate}\0${c}`;RC(r.get(p),l,u)&&(o.set(c,{id:c,label:c,class:d}),r.set(p,{epoch:l,stamp:u,predicate:a.predicate,subject:c,object:uf(a.object).base}))}let i=new Map;for(let a of r.values())i.has(a.predicate)||i.set(a.predicate,{prop:a.predicate,predicate:a.predicate,examples:[]}),i.get(a.predicate).examples.push({subject:a.subject,object:a.object});return{individuals:[...o.values()],objectProperties:[...i.values()]}}function IC(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=Wf(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(c=>c.id));if(i.size<2)return!1;let a=new Map;for(let c of e?.individuals||[])c?.id&&(a.has(c.id)||a.set(c.id,new Set),a.get(c.id).add(c.class));return[...i].every(c=>c===o||a.get(c)?.has(o))}function OC(e,t){return t?.class?t.class==="Module"||t.class==="File"?!0:!!Qo(e,t):!1}function CC(e,t){let n=Bi(t);if(!n)return null;let s=_n(e,n),o=s?.ambiguous?null:s?.match;return!o||o.class!=="Class"?null:`which classes transitively inherit from ${o.label}`}function LC(e,t){let n=zi(String(t||"")).trim();if(Bi(n)||Jd(n)!==n)return null;let s=n.match(NC);if(!s)return null;let o=_n(e,s[1].trim()),r=o?.ambiguous?null:o?.match;if(!r||!OC(e,r))return null;let i=r.class==="Class"?"what inherits from it":r.class==="Module"||r.class==="File"?"what imports or calls it":"what calls it";return{content:`I can't answer that \u2014 the index records what is, not what would be. What it can read about ${r.label}: "what would break if ${r.label} were deleted" (${i}), or "/describe ${r.label}" for the facts it holds.`,tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,relaxed:null}}}function go(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(uC(t))return{content:Ff(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};let r=LC(e,t);if(r)return r;t=CC(e,t)||t,t=pC(e,t);let i=xf(t,{nlp:s}),a=i.parsed,c=a,l=null;if(Jy(e,a,n)===!1){let f=dC(e,t,{nlp:s,contextId:n,prev:o});f&&(c=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let u=pn(e,c,{contextId:n,prev:o}),d=Yn(c,u,e);if(fy(e,c,u,d)){let f=bC(e,t);if(f){let h=pn(e,f,{contextId:n,prev:o}),m=Yn(f,h,e);m.miss||(c=f,u=h,d=m,l=null)}}if(fy(e,c,u,d)){let f=EC(e,t);if(f){let h=pn(e,f,{contextId:n,prev:o}),m=Yn(f,h,e);m.miss||(c=f,u=h,d=m,l=null)}}if(c===null&&d.miss&&!d.ambiguous){let h=zi(String(t||"")).trim().match(TC)?.[1]?.trim();if(h&&!/\s+(?:for|about)$/i.test(h)){let m=Jo(`what is a ${h}`,{nlp:s});m?.shape==="meta"&&(u=pn(e,m,{contextId:n,prev:o}),d=Yn(m,u,e))}}if(c===null&&d.miss&&!d.ambiguous){let h=Ho(String(t||"")).match(AC)?.[1]?.trim();if(h){let m=Jo(`what is a ${h}`,{nlp:s});if(m?.shape==="meta"){let b=pn(e,m,{contextId:n,prev:o}),g=Yn(m,b,e);!g.miss&&!g.ambiguous&&(u=b,d=g)}}}let p=l&&!d.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${d.content}`:d.content;if(!l&&!d.miss&&!d.ambiguous&&i.alternates.length){let f=i.alternates.map(h=>{let m=pn(e,h.parsed,{contextId:n,prev:o}),b=Yn(h.parsed,m,e);return b.miss?null:{a:h,text:b.content}}).filter(Boolean);if(f.length){let h=Gw(f.map(m=>m.a),{answerFor:m=>f.find(b=>b.a===m)?.text||null});p=`${p}
|
|
60
60
|
${h.join(`
|
|
61
61
|
`)}`}}if(!d.ambiguous&&u.objMatch&&Array.isArray(u.candidates)&&u.candidates.length){let f=new Set((u.matches||[]).map(m=>m&&m.id)),h=u.candidates.filter(m=>m&&m.id&&m.id!==u.objMatch.id&&!f.has(m.id));if(h.length){let m=h.slice(0,3).map(w=>w.label).filter(Boolean),b=h.length-m.length,g=m.join(", ")+(b>0?`, +${b} more`:"");p=`${p}
|
|
62
|
-
(answering for ${u.objMatch.label} \u2014 ${h.length} other match${h.length===1?"":"es"}: ${g})`}}return!Array.isArray(u.referents)&&!d.miss&&!d.ambiguous&&(c?.shape==="reverse"||c?.shape==="forward")&&c.entityType&&Array.isArray(u.matches)&&u.matches.length&&u.matches.every(f=>f&&f.class===c.entityType)&&(u={...u,referents:
|
|
63
|
-
`);return{start:o,end:r,text:a,truncated:i}}async function
|
|
64
|
-
`);return s==null||o==null?{lines:l}:{lines:l,...
|
|
65
|
-
## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(
|
|
66
|
-
## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${c} @ ${e.moduleLabel}:${i}-${a}`),r.push(
|
|
62
|
+
(answering for ${u.objMatch.label} \u2014 ${h.length} other match${h.length===1?"":"es"}: ${g})`}}return!Array.isArray(u.referents)&&!d.miss&&!d.ambiguous&&(c?.shape==="reverse"||c?.shape==="forward")&&c.entityType&&Array.isArray(u.matches)&&u.matches.length&&u.matches.every(f=>f&&f.class===c.entityType)&&(u={...u,referents:Zi(c.entityType,u.matches,"relationListing")}),{content:p,tmct_ask:{mechanical:!0,parsed:c&&!c.ambiguousParse?c:null,canonical:Hy(c),matches:(u.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?mo(f):void 0})),traversal:u.traversal||null,miss:!!d.miss,ambiguous:!!d.ambiguous,relaxed:l,matchedVia:u.matchedVia||null,...Array.isArray(u.referents)&&u.referents.length?{discourse:u.referents}:{},...d.ambiguous?{candidates:d.candidates,candidateParses:d.candidateParses}:{}}}}var Xo,Jr,Yw,qr,uo,af,yI,Lt,py,ct,df,$I,SI,vI,EI,xI,jI,hy,my,ff,_I,po,kf,ft,gy,AI,OI,NI,MI,FI,BI,zI,UI,WI,VI,KI,_f,HI,qI,XI,vy,Af,Ey,xy,rO,cO,Xw,Jw,fO,Ty,Qw,hO,Zw,yO,ty,sy,Ly,xO,jO,MO,FO,as,iy,cf,qO,YO,XO,Bf,JO,cy,QO,ly,nC,Dc,Ef,Uf,Yy,aC,cC,lC,dy,fC,mC,gC,Gf,yC,$C,SC,Qi,jC,RC,TC,AC,fy,NC,cs=L(()=>{Fe();Ld();rs();Cn();Wr();Tc();Ac();qw();sf();Kn();Ki();rf();Kr();Xo=(e,t)=>e<t?-1:e>t?1:0,Jr=e=>(t,n)=>Xo(e(n),e(t))||Xo(String(t.id),String(n.id)),Yw=new WeakMap;qr={calls:"callsSymbol",touches:"touchesSymbol"},uo=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),af={Function:"Method",Method:"Function"},yI={uses:["imports","calls","callsSymbol"]},Lt=e=>yI[e]||[e],py=new Set(Object.values(qr)),ct=12,df={Function:["function","functions"],Method:["method","methods"],Class:["class","classes"],Module:["module","modules"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Change:["change","changes"],Package:["package","packages"],Fact:["fact","facts"],Utterance:["utterance","utterances"],Session:["session","sessions"],Source:["source","sources"],Rule:["rule","rules"]};$I={cochange:"cochanges",reexports:"export"};SI={imports:"import",calls:"call",callsSymbol:"call",inherits:"inherit from",contains:"contain",tests:"test",touches:"touch",cochange:"cochange",reexports:"export",uses:"use",serves:"serve",denotes:"denote"},vI=e=>SI[e]||qo(e),EI=new RegExp(`^(?:${Object.keys(he).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),xI=new Set(["imports"]);jI=/^where\s+(?:does|do|did)\s+/i,hy=new Set(be(vn));my=4,ff="zzinnerset",_I=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),po=new Set(["which","what","who","list","show","find","give","me","us","all"]),kf=new Set(["are","is","was","were"]);ft=e=>nt[e]?{entityType:nt[e],placeholder:!1}:Ts.includes(e)?{entityType:null,placeholder:!0}:null,gy=e=>!!he[e]&&e.endsWith("ing");AI=new Set(["which","the","all"]);OI=new Set(["all","every","each"]);NI=new Set(["what","which","thing","things","one","ones","stuff"]);MI=new Set(["defined","declared"]);FI=new Set(["those","them"]);BI=new Set(["did","was","were","do","does","has","have","had"]),zI=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),UI=new Set(["last","recently","ever","get","got","been","then","now","already"]),WI=new Set(["the","a","an","all","those","these","any"]);VI=new Set(["since","before","after","on"]),KI=new Set(["what","which"]);_f=new Set(["the","a","an","all","those","these","any"]);HI=new Set(["is","are","was","were","does","do","did"]),qI=new Set(["the","a","an","all","those","these","any"]);XI=/\b[\w-]+(?:[/.][\w-]+)+\b|\b[A-Z][A-Za-z0-9_]*\b|\b[a-z][a-z0-9]*[A-Z][A-Za-z0-9]*\b/;vy=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);Af=new Set(["the","a","an","all","me","us"]),Ey=[...Wo].sort((e,t)=>t.split(" ").length-e.split(" ").length),xy="functions, classes, methods, modules, packages, attributes, variables, or commits",rO=new Set(["in","inside","under"]);cO=new Set(["called","named","about","like","containing","matching","with"]);Xw=new Set(["recent","latest","newest"]);Jw=new WeakMap;fO=new Set(["defines","contains"]),Ty=(e,t)=>t==="Module"&&Lt(e).some(n=>fO.has(n)),Qw=new WeakMap;hO=/^git:(.+)$/i;Zw=new WeakMap;yO=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);ty=new WeakMap;sy={label:3,chain:2,attr:1};Ly=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;xO=["imports","calls","callsSymbol","inherits","contains","tests"];jO=/^\d{4}-\d{2}-\d{2}$/;MO={defines:"in",contains:"in"};FO=e=>e.length&&e.every(t=>t.class===e[0].class)?e[0].class:null;as=e=>jn(e.slice(0,ct).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>ct?`, \u2026and ${e.length-ct} more`:"");iy=(e,t)=>`${Gy(e,t)}.`;cf=10;qO=/^(?:the|a|an)\s+/i,YO=new RegExp(`\\s+(${Object.keys(nt).join("|")})$`,"i");XO=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,Bf=new Set(["index","main","app","server","cli","__main__"]),JO=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),cy=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),QO=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>JO.has(t));ly=8;nC=new Set(["mgx:schemaDoc","mgx:lexiconDoc"]);Dc=new Set([...be(Object.keys(he)),...be(Object.keys(nt)),...be(Object.keys(xn)),...be(Object.keys(Ge)),...be(Uo),...be(Object.keys(ss)),...be(Object.keys(os)),...be(Object.keys(io)),...be(Ts),...be(Oi),...be(zo),...be(vn),...be(Gn),...be(In),...be(Object.keys(Lr)),...be([...ac])]),Ef=new Set([...pt,...po,...Bo]),Uf=new Set(be(lc)),Yy=new Set([...Uf,...Ef]),aC=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],cC=[...new Set([...be(Object.keys(he)),...Object.keys(nt),...aC])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!pt.has(e)),lC=new Set(["impact","impacts","impacted"]);dy=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,fC=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;mC=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,gC=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,Gf=/^(?:are there(?:\s+in\s+total)?|is there|do you know(?:\s+about)?|do you have|exist(?:s)?|are known|in (?:the |a )?(?:graph|memory)|you know(?:\s+about)?)?[?.!\s]*$/i;yC=new RegExp(`^(?:${Ey.map(at).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),$C=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,SC=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Qi=e=>String(e||"").toLowerCase();jC=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;RC=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;TC=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,AC=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;fy=(e,t,n,s)=>s.ambiguous?IC(e,t,n):!!s.miss;NC=new RegExp("^if\\s+(.+?)\\s+(?:were|was|had|has|is|are|becomes?|became|gets?|got|stops?|stopped|starts?|started)\\s+[^,]*,?\\s*(?:would|will|could|might|should)\\b","i")});function bo(e,t,n,s){let o=Math.max(1,t),r=Math.min(e.length,n),i=!1;s!=null&&r-o+1>s&&(r=o+s-1,i=!0);let a=e.slice(o-1,r).map((c,l)=>`${o+l} ${c}`).join(`
|
|
63
|
+
`);return{start:o,end:r,text:a,truncated:i}}async function Us({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Xt(t),a=Xt(i,n);if(a!==i&&!a.startsWith(i+Cg))throw new Le(`refusing to read outside the repository root: ${n}`);let l=(await e(a,"utf8")).split(`
|
|
64
|
+
`);return s==null||o==null?{lines:l}:{lines:l,...bo(l,s,o,r)}}var Gc=L(()=>{Qe();sn()});function Pt(e){return{ok:!0,value:e}}function Mt(e,{detail:t="",term:n=null}={}){if(!wt[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function ls(e){return!e||!e.id?null:{id:String(e.id),label:e.label!=null?String(e.label):String(e.id),class:e.class||"Entity",attributes:(Array.isArray(e.attributes)?e.attributes:[]).map(t=>({key:t.key,value:t.value,prop:t.prop||null}))}}function Vc(e,{predicate:t="",prop:n=null}={}){let s={subject:e.subject,object:e.object,predicate:t,prop:n||null};return e.subjectLabel!=null&&(s.subjectLabel=e.subjectLabel),e.objectLabel!=null&&(s.objectLabel=e.objectLabel),e.weight!=null&&(s.weight=e.weight),s}var Kf,PC,wt,Hf,RG,Zy,qf,MC,Xn,Vf,Qt,_G,e$=L(()=>{Kf="1.1.0",PC="urn:tmct:core",wt=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),Hf=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),RG=Object.freeze({imports:"tmct:imports",calls:"tmct:calls",callsSymbol:"tmct:calls",defines:"tmct:defines",tests:"tmct:covers",touches:"tmct:touches",touchesSymbol:"tmct:touches",contains:"tmct:contains",inherits:"tmct:extends",cochange:"tmct:dependsOn",reexports:"tmct:exports",serves:"tmct:serves",denotes:"tmct:denotes"}),Zy=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),qf=Object.freeze(Object.values(Zy).flat()),MC=Object.freeze(new Set(Zy.source));Xn="Individual",Vf="Edge",Qt="concurrent-safe: reads immutable graph truth; no shared mutable state",_G=Object.freeze({version:Kf,ontology:PC,missReasons:Object.values(wt),edgeKinds:[...Hf],types:{Individual:{fields:{id:"string (opaque provider id)",label:"string (human/display name)",class:"string \u2014 a tmct: class token (module|class|function|method|attribute|variable|commit|test|\u2026)",attributes:"Array<{ key: string, value: string, prop: string|null }> \u2014 prop is the SEON/mgx token grounding the value"}},Edge:{fields:{subject:"string (individual id)",object:"string (individual id)",predicate:"string \u2014 the relation predicate",prop:"string|null \u2014 the SEON/mgx property token; see edgeKinds \u2192 tmct: mapping",subjectLabel:"string? (additive)",objectLabel:"string? (additive)",weight:"number? (additive; e.g. cochange coupling)"}},Result:{shape:"{ ok: true, value: T } | { ok: false, miss: Miss }"},Miss:{shape:"{ reason: MISS_REASONS, detail: string, term: string|null }"}},capabilitiesModel:"A provider advertises `capabilities: string[]` (service names it implements). A service outside the set is negotiated away to miss(CAPABILITY_ABSENT) \u2014 never an error. snippet may be advertised yet answer miss(NO_SOURCE) when no working tree exists (it has nothing useful without fs); context is graph-only-capable since INTERFACE_VERSION 1.1.0 \u2014 it returns a real hit (graph-only bundle) for any resolvable symbol even with no working tree, only escalating NO_SOURCE-style behavior to richer body text when source-capable.",services:{resolve:{group:"resolution",args:{term:"string"},result:`{ match: ${Xn}, candidates: ${Xn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"The resolveSymbol seam: map a free term to an individual + runner-up candidates. Every id-taking service consumes a resolved id."},describe:{group:"resolution",args:{id:"string"},result:`{ individual: ${Xn}, out: ${Vf}[], incoming: ${Vf}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${Xn}[], attributes: ${Xn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${Xn}[], subclasses: ${Xn}[], levels: Array<${Xn}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"Forward bases + the transitive reverse inheritance closure (who extends this). `subclasses` is the flat closure; `levels` groups the same individuals by inheritance depth (direct children first), mirroring `impact`'s leveled shape."},exports:{group:"resolution",args:{moduleId:"string"},result:`{ exports: ${Xn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"A module's curated public API (resolved __all__ / re-exports)."},signature:{group:"resolution",args:{id:"string"},result:"{ id, label, class, params, returns, raises, decorators, doc, selfFields, flags }",misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"The compact API surface of a symbol without its body."},edges:{group:"traversal",args:{id:"string",kind:"EDGE_KINDS member"},result:`{ kind: string, edges: ${Vf}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"Outgoing edges of one closed kind from an individual (an honest empty array is not a miss).",note:"An unknown kind (outside EDGE_KINDS) is a programming error and throws TypeError, not a miss."},impact:{group:"traversal",args:{moduleId:"string"},result:"{ total: number, levels: Array<Array<{ id, label, via, tests }>> }",misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"The transitive dependent closure the interpreter cannot compute without provider truth."},snippet:{group:"source",args:{id:"string"},result:"{ path: string, span: { start, end }, body: string|null } \u2014 Promise<Result>",misses:["UNRESOLVED_TERM","NO_SOURCE"],concurrency:Qt,purpose:"The exact source span of a symbol. A provider with no working tree returns miss(NO_SOURCE) honestly \u2014 snippet has nothing useful without fs.",note:"ASYNC (returns Promise<Result>) \u2014 a real body read is inherently fs I/O; callers should always await it. A graph-only provider still resolves synchronously-in-spirit (the promise settles on the same tick) but the return type is uniformly a Promise regardless of sourceAccess."},context:{group:"source",args:{symbol:"string",depth:"min|auto|full?"},result:"{ text: string, tier: string } (a sized edit bundle) \u2014 Promise<Result>",misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"The composed edit bundle (exemplar, siblings, registration, insertion region). A graph-only provider returns the graph-only sections as a real hit; a source-capable provider (sourceAccess:true, repoRoot, readFile) additionally includes the anchor/exemplar/inlined-callee body text.",note:"ASYNC (returns Promise<Result>) \u2014 see snippet's note; source-capable rendering is fs I/O."},architecture:{group:"aggregate",args:{package:"string?"},result:"{ modules: number, packages: Array<[dir, count]>, hubs: Array<{ id, label, importers }> }",misses:[],concurrency:Qt,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${Xn}[] }`,misses:[],concurrency:Qt,purpose:"Modules with no covering test module (via the tests relation)."},stats:{group:"aggregate",args:{},result:"{ total: number, classes: Array<{ class: string, count: number }>, truncated: boolean }",misses:[],concurrency:Qt,purpose:"Per-tmct:class individual counts, read straight from the payload."},history:{group:"temporal",args:{id:"string"},result:"{ commits: Array<{ id, label, author, date, message }> }",misses:["UNRESOLVED_TERM"],concurrency:Qt,purpose:"The commits that touched an individual (tmct:commit individuals via tmct:touches)."},search:{group:"search",args:{query:"string",kind:"string?",name:"string?",decorator:"string?"},result:`{ results: ${Xn}[] }`,misses:[],concurrency:Qt,purpose:"Lexical, provider-local locate. An empty result set is honest, not a miss."},ask:{group:"search",args:{query:"string"},result:"{ content: string, tmct_ask: object } (the composed NL round-trip envelope)",misses:[],concurrency:Qt,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function FC(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(Vc(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(Vc(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function DC(e,t){for(let n of e.relations)if(Ls(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function zC(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Us({readFile:n,repoRoot:s,path:e.moduleLabel}))}catch{o=null}if(!o)return"";let r=[];if(t.anchor&&e.anchor?.site){let{start:i,end:a}=e.anchor.site;r.push(`
|
|
65
|
+
## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(bo(o,i,a,Yf).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,c=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
|
|
66
|
+
## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${c} @ ${e.moduleLabel}:${i}-${a}`),r.push(bo(o,i,a,Yf).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=BC;for(let a of e.calleeBodies){if(i<=0)break;let c=a.site.start,u=a.site.path===e.moduleLabel?o:null;if(!u)try{({lines:u}=await Us({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=bo(u,c,a.site.end,i);r.push(`
|
|
67
67
|
## inlined callee body (depth-1 in-repo call): ${a.label} @ ${a.site.path}:${c}-${a.site.end}`),r.push(d.text),i-=d.end-c+1}}return r.join(`
|
|
68
|
-
`)}function Kc(e,{sourceAccess:t=!1,repoRoot:n=null,readFile:s=null,tel:o=null,ask:r=null}={}){let i=e.byId;if(t&&(!n||typeof s!="function"))throw new TypeError("createGraphService({ sourceAccess: true }) requires both repoRoot and readFile \u2014 fs access is an injected capability, not an ambient import.");let a=l=>i.get(l)||null,c={version:
|
|
69
|
-
${g}`:b,tier:h})},architecture({package:l=""}={}){let u=String(l||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(g=>(g.class||"")==="Module"&&(!u||String(g.label||"").toLowerCase().startsWith(u))),p=new Map;for(let g of d){let w=g.label.includes("/")?g.label.slice(0,g.label.lastIndexOf("/")):"(root)";p.set(w,(p.get(w)||0)+1)}let f=new Set(d.map(g=>g.id)),h=new Map;for(let g of Ae(e,"imports"))f.has(g.object)&&h.set(g.object,(h.get(g.object)||0)+1);let m=[...h.entries()].sort((g,w)=>w[1]-g[1]).map(([g,w])=>({id:g,label:i.get(g)?.label||g,importers:w})),b=[...p.entries()].sort((g,w)=>w[1]-g[1]);return Pt({modules:d.length,packages:b,hubs:m})},untested(){let l=new Set(Ae(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!l.has(d.id)&&!/\.test\./.test(d.label||"")).map(
|
|
68
|
+
`)}function Kc(e,{sourceAccess:t=!1,repoRoot:n=null,readFile:s=null,tel:o=null,ask:r=null}={}){let i=e.byId;if(t&&(!n||typeof s!="function"))throw new TypeError("createGraphService({ sourceAccess: true }) requires both repoRoot and readFile \u2014 fs access is an injected capability, not an ambient import.");let a=l=>i.get(l)||null,c={version:Kf,capabilities:[...qf],sourceAccess:!!t,graph:e,resolve(l){let{match:u,candidates:d}=kn(e,String(l??""));return u?Pt({match:ls(u),candidates:d.map(ls)}):Mt(wt.UNRESOLVED_TERM,{term:String(l??"")})},describe(l){let u=a(l);if(!u)return Mt(wt.UNRESOLVED_TERM,{term:l});let{out:d,incoming:p}=FC(e,l);return Pt({individual:ls(u),out:d,incoming:p})},members(l){if(!a(l))return Mt(wt.UNRESOLVED_TERM,{term:l});let d=Ae(e,"contains").filter(h=>h.subject===l),p=[],f=[];for(let h of d){let m=i.get(h.object),b=m?ls(m):{id:h.object,label:h.objectLabel||h.object,class:"Entity",attributes:[]};(m?.class||"")==="Attribute"?f.push(b):p.push(b)}return Pt({methods:p,attributes:f})},subclasses(l){if(!a(l))return Mt(wt.UNRESOLVED_TERM,{term:l});let d=Ae(e,"inherits"),p=d.filter(w=>w.subject===l).map(w=>i.get(w.object)?ls(i.get(w.object)):{id:w.object,label:w.objectLabel||w.object,class:"Class",attributes:[]}),f=new Map;for(let w of d)f.has(w.object)||f.set(w.object,[]),f.get(w.object).push(w.subject);let h=new Set([l]),m=[],b=[],g=[l];for(let w=0;w<8&&g.length;w+=1){let y=[],S=[];for(let T of g)for(let v of f.get(T)||[]){if(h.has(v))continue;h.add(v);let E=i.get(v),I=E?ls(E):{id:v,label:v,class:"Class",attributes:[]};m.push(I),S.push(I),y.push(v)}S.length&&b.push(S),g=y}return Pt({bases:p,subclasses:m,levels:b})},exports(l){if(!a(l))return Mt(wt.UNRESOLVED_TERM,{term:l});let p=Ae(e,"reexports").filter(f=>f.subject===l).map(f=>i.get(f.object)?ls(i.get(f.object)):{id:f.object,label:f.objectLabel||f.object,class:"Entity",attributes:[]});return Pt({exports:p})},signature(l){let u=a(l);if(!u)return Mt(wt.UNRESOLVED_TERM,{term:l});let d=[];for(let[f,h]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])hn(u,f)&&d.push(h);let p=hn(u,"visibility");return p&&d.push(p),Pt({id:u.id,label:u.label,class:u.class||"Entity",params:hn(u,"params"),returns:hn(u,"returns"),raises:hn(u,"raises"),decorators:hn(u,"decorators"),doc:hn(u,"doc"),selfFields:hn(u,"self_fields"),flags:d})},edges(l,u,{limit:d,offset:p=0}={}){if(!Hf.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(l))return Mt(wt.UNRESOLVED_TERM,{term:l});let h=DC(e,u),m=Ae(e,u).filter(b=>b.subject===l).map(b=>Vc(b,h));return m=d==null?m.slice(p):m.slice(p,p+d),Pt({kind:u,edges:m})},impact(l,{maxDepth:u}={}){let d=a(l);if(!d)return Mt(wt.UNRESOLVED_TERM,{term:l});let p=u==null?zr(e,d):zr(e,d,{maxDepth:u}),f=p.reduce((h,m)=>h+m.length,0);return Pt({total:f,levels:p})},async snippet(l){let u=a(l);if(!u)return Mt(wt.UNRESOLVED_TERM,{term:l});let d=Jt(u);if(!c.sourceAccess)return Mt(wt.NO_SOURCE,{term:l,detail:d?`span is ${d.path}:${d.start}-${d.end}; this provider exposes no working tree`:"no source span in the graph"});if(!d)return Mt(wt.NO_SOURCE,{term:l,detail:"no source span in the graph (likely a module)"});try{let p=await Us({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Yf});return Pt({path:d.path,span:{start:d.start,end:d.end},body:p.text})}catch(p){return Mt(wt.NO_SOURCE,{term:l,detail:`could not read ${d.path}: ${p?.message||p}`})}},async context(l,{depth:u="auto"}={}){let{match:d}=kn(e,String(l??""));if(!d)return Mt(wt.UNRESOLVED_TERM,{term:String(l??"")});let p=Ur(e,d),f=String(u||"auto").trim().toLowerCase(),h,m;f==="min"?(h="TINY",m=Ko("TINY")):f==="full"?(h="FULL",m=Ko("FULL")):{tier:h,mask:m}=kc(p,e,{});let b=fw(p,m);if(!c.sourceAccess)return Pt({text:b,tier:h});let g=await zC(p,m,{readFile:s,repoRoot:n});return Pt({text:g?`${b}
|
|
69
|
+
${g}`:b,tier:h})},architecture({package:l=""}={}){let u=String(l||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(g=>(g.class||"")==="Module"&&(!u||String(g.label||"").toLowerCase().startsWith(u))),p=new Map;for(let g of d){let w=g.label.includes("/")?g.label.slice(0,g.label.lastIndexOf("/")):"(root)";p.set(w,(p.get(w)||0)+1)}let f=new Set(d.map(g=>g.id)),h=new Map;for(let g of Ae(e,"imports"))f.has(g.object)&&h.set(g.object,(h.get(g.object)||0)+1);let m=[...h.entries()].sort((g,w)=>w[1]-g[1]).map(([g,w])=>({id:g,label:i.get(g)?.label||g,importers:w})),b=[...p.entries()].sort((g,w)=>w[1]-g[1]);return Pt({modules:d.length,packages:b,hubs:m})},untested(){let l=new Set(Ae(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!l.has(d.id)&&!/\.test\./.test(d.label||"")).map(ls);return Pt({modules:u})},stats(){let l=new Map;for(let d of e.individuals){let p=d.class||"Entity";l.set(p,(l.get(p)||0)+1)}let u=[...l.entries()].map(([d,p])=>({class:d,count:p})).sort((d,p)=>p.count-d.count||d.class.localeCompare(p.class));return Pt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(l){if(!a(l))return Mt(wt.UNRESOLVED_TERM,{term:l});let d=[...Ae(e,"touches"),...Ae(e,"touchesSymbol")].filter(h=>h.object===l),p=new Set,f=[];for(let h of d){if(p.has(h.subject))continue;p.add(h.subject);let m=i.get(h.subject);f.push({id:h.subject,label:h.subjectLabel||m?.label||h.subject,author:m?hn(m,"author")??hn(m,"commitAuthor"):null,date:m?hn(m,"date")??hn(m,"commitDate"):null,message:m?hn(m,"message")??hn(m,"commitMessage"):null})}return Pt({commits:f})},search(l,{kind:u="",name:d="",decorator:p="",limit:f=Sc,offset:h=0}={}){let m=String(l||""),b=String(u||"").trim().toLowerCase(),g=String(d||"").trim(),w=String(p||"").trim().toLowerCase(),y;if(b&&b!=="module"){let T=null;if(g){let E=Vd(g);if(E.error)return Mt(wt.UNRESOLVED_TERM,{term:g,detail:E.error});T=E}let v=m.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{y=qd(e,v,{kind:b,decFilter:w,nameRe:T}).map(E=>E.ind)}catch(E){return Mt(wt.UNRESOLVED_TERM,{term:g,detail:String(E?.message||E)})}}else{let T=new Map;for(let v of e.individuals)(v.class||"")==="Module"&&T.set(v.label,v);y=Wb(e,m).map(({path:v})=>T.get(v)).filter(Boolean)}let S=y.slice(h,h+f).map(ls);return Pt({results:S})},ask(l){if(typeof r!="function")return Mt(wt.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(l||""));return Pt({content:u,tmct_ask:d})}};if(o)for(let l of qf){let u=c[l];typeof u=="function"&&(c[l]=(...d)=>{let p=performance.now(),f=u.apply(c,d);return f&&typeof f.then=="function"?f.then(h=>(t$(o,l,performance.now()-p,h),h)):(t$(o,l,performance.now()-p,f),f)})}return c}function t$(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:UC(s)})}catch{}}function UC(e){if(!e||typeof e!="object"||e.ok!==!0)return{ok:!1,reason:e?.miss?.reason||null};let t=0,n=e.value;if(Array.isArray(n))t=n.length;else if(n&&typeof n=="object")for(let s of Object.values(n))Array.isArray(s)&&(t+=s.length);return{ok:!0,count:t}}var hn,Yf,BC,Hc=L(()=>{Fe();Gc();e$();hn=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Yf=200,BC=120});async function ea(e,t){let n=await t.fetchEntities(e),s=$c(n);if(!s.individuals.length){let o=new Le(`the graph at ${e?.graphFile} is empty \u2014 no entities to answer from yet (this repo starts with no graph; the chat session folds the conversation into one).`);throw o.emptyGraph=!0,o}return s}var qc=L(()=>{sn();Fe()});function wo({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function ht(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Le(`${t} is required`);return n}function Wt(e,t,n){let{match:s,candidates:o}=kn(e.graph,t);if(!s)throw new Le(`no entity matching ${n} "${t}" in the code-map graph. Try a repo-relative path (e.g. path/to/module), a basename, or tmct_search for a fuzzy lookup.`);return{match:s,candidates:o}}var ta,yt,ot=L(()=>{sn();Fe();ta=200;yt=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=Wt(s,ht(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function n$(e,{config:t,source:n=Mr,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Le("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,c=!!e?.untuned,l=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await ea(t,n),p=ve(ve(t.graphFile)),f=Kc(d,{sourceAccess:!0,repoRoot:p,readFile:Ne,tel:o,ask:go}),{match:h}=Wt(f,r,"symbol"),m=Ur(d,h),b,g,w=!1;a||i==="min"?(b="TINY",g=Ko("TINY")):l||i==="full"?(b="FULL",g=Ko("FULL"),w=!0):{tier:b,mask:g,topup:w}=kc(m,d,{untuned:c}),s&&!l&&(g=uw(g));let y=null;if(m.moduleLabel)try{({lines:y}=await Us({readFile:Ne,repoRoot:p,path:m.moduleLabel}))}catch{y=null}let S=E=>y&&y[E-1]!=null?y[E-1].trim():"",T=(E,I)=>bo(y,E,I,ta).text,v=[`Edit context for ${m.moduleLabel} [${b}${s?" secondary":""}] \u2014 assembled from the typed graph + that file. You do NOT need to Read it; write the new code directly after reviewing this.`];if(g.anchor&&m.anchor?.site&&y){let{start:E,end:I}=m.anchor.site;v.push(`
|
|
70
70
|
## anchor: ${m.anchor.label} (${m.anchor.class}) @ ${m.moduleLabel}:${E}-${I}`),v.push(T(E,I)),m.callHint&&v.push(m.callHint)}if(g.registration&&m.globals.length){v.push(`
|
|
71
71
|
## registration / module globals (replicate this pattern):`);for(let E of m.globals)v.push(` ${E.label} = ${E.value}${E.site?` [:${E.site.start}]`:""}`)}if(g.exemplar&&m.exemplar?.site&&y){let{start:E,end:I}=m.exemplar.site,k=m.exemplar.decorators?` @${m.exemplar.decorators}`:"";v.push(`
|
|
72
|
-
## closest example (full body) \u2014 copy this style: ${m.exemplar.label} (${m.exemplar.class})${k} @ ${m.moduleLabel}:${E}-${I}`),v.push(T(E,I)),m.callHint&&v.push(m.callHint)}if(g.inlinedCallees&&m.calleeBodies.length&&y){let E=120;for(let I of m.calleeBodies){if(E<=0)break;let k=I.site.start,$=I.site.path===m.moduleLabel&&y?y:await
|
|
72
|
+
## closest example (full body) \u2014 copy this style: ${m.exemplar.label} (${m.exemplar.class})${k} @ ${m.moduleLabel}:${E}-${I}`),v.push(T(E,I)),m.callHint&&v.push(m.callHint)}if(g.inlinedCallees&&m.calleeBodies.length&&y){let E=120;for(let I of m.calleeBodies){if(E<=0)break;let k=I.site.start,$=I.site.path===m.moduleLabel&&y?y:await Us({readFile:Ne,repoRoot:p,path:I.site.path}).then(O=>O.lines).catch(()=>null);if(!$)continue;let _=bo($,k,I.site.end,E);v.push(`
|
|
73
73
|
## inlined callee body (depth-1 in-repo call): ${I.label} @ ${I.site.path}:${k}-${I.site.end}`),v.push(_.text),E-=_.end-k+1}}if(g.classMembers&&m.classMembers&&m.classMembers.members.length){v.push(`
|
|
74
74
|
## members of ${m.classMembers.className} (the edit likely lives INSIDE this class \u2014 copy a member's shape, do not read the class body):`);for(let E of m.classMembers.members){let I=String(E.label).split(".").pop(),k=E.params!=null&&E.params!==""?`(${E.params})${E.returns?` -> ${E.returns}`:""}`:"",R=E.decorators?`@${E.decorators} `:"",$=E.raises?` raises=${E.raises}`:"";v.push(` ${E.class} ${I}${E.site?` :${E.site.start}`:""} ${R}${I}${k}${$}`)}}if(g.siblings&&m.siblings.length){v.push(`
|
|
75
75
|
## sibling symbols to copy the style of (most relevant first; ${m.siblings.length} total):`);for(let E of m.siblings.slice(0,m.siblingCap)){let I=E.site?S(E.site.start):"",k=E.decorators?`@${E.decorators} `:"",R=E.raises?` raises=${E.raises}`:"";v.push(` ${E.class} ${E.label}${E.site?` :${E.site.start}`:""} ${k}${I}${R}`)}m.siblings.length>m.siblingCap&&v.push(` \u2026+${m.siblings.length-m.siblingCap} more (use ${u}search kind=function or ${u}snippet <name> for any of them)`)}if(g.allExports&&m.allExports&&v.push(`
|
|
@@ -82,29 +82,29 @@ ${g}`:b,tier:h})},architecture({package:l=""}={}){let u=String(l||"").trim().toL
|
|
|
82
82
|
## covering tests: ${m.tests.join(", ")}`),g.cochange&&m.cochange&&m.cochange.length&&v.push(`
|
|
83
83
|
## usually changed together (consider editing these too): ${m.cochange.map(E=>`${E.label} (\xD7${E.weight})`).join(", ")}`),v.push(`
|
|
84
84
|
You now have the snippet, the sibling style, the registration anchor and the tests. Write the new code with Edit/Write \u2014 do NOT Read ${m.moduleLabel}.`),b!=="FULL"&&v.push(`(bundle tier ${b}; for any omitted sections run ${u}context_more {"symbol":"${r}"}, or ${u}context with depth="full".)`),{text:v.join(`
|
|
85
|
-
`),tier:b,topup:w}}async function Jf(e,{config:t,source:n,tel:s}){return(await o$(e,{config:t,source:n,tel:s})).text}var Qf=L(()=>{zt();Qe();sn();Gc();Pi();Fe();us();Hc();qc();ot();Jf.ownsGraphLoad=!0});function r$(e,{graph:t,svc:n}){let{match:s}=Wt(n,ht(e,"symbol"),"symbol");return pw(Wr(t,s))}var i$=L(()=>{Fe();ot()});function Yc(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function oa(e){return Yc(e).toString(16).padStart(8,"0")}function Zf(e){let t=new TextEncoder().encode(String(e)),n=t.length*8,s=new Uint8Array((t.length+8>>6)+1<<6);s.set(t),s[t.length]=128;let o=new DataView(s.buffer);o.setUint32(s.length-8,Math.floor(n/4294967296)),o.setUint32(s.length-4,n>>>0);let r=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),i=new Uint32Array(64),a=(u,d)=>u>>>d|u<<32-d;for(let u=0;u<s.length;u+=64){for(let y=0;y<16;y+=1)i[y]=o.getUint32(u+y*4);for(let y=16;y<64;y+=1){let S=a(i[y-15],7)^a(i[y-15],18)^i[y-15]>>>3,T=a(i[y-2],17)^a(i[y-2],19)^i[y-2]>>>10;i[y]=i[y-16]+S+i[y-7]+T>>>0}let[d,p,f,h,m,b,g,w]=r;for(let y=0;y<64;y+=1){let S=a(m,6)^a(m,11)^a(m,25),T=m&b^~m&g,v=w+S+T+VC[y]+i[y]>>>0,E=a(d,2)^a(d,13)^a(d,22),I=d&p^d&f^p&f,k=E+I>>>0;w=g,g=b,b=m,m=h+v>>>0,h=f,f=p,p=d,d=v+k>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+p>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+h>>>0,r[4]=r[4]+m>>>0,r[5]=r[5]+b>>>0,r[6]=r[6]+g>>>0,r[7]=r[7]+w>>>0}let c=new Uint8Array(32),l=new DataView(c.buffer);for(let u=0;u<8;u+=1)l.setUint32(u*4,r[u]);return c}function KC(e,t){let n=Zf(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function V(e){let t=Qn(e);return qC.test(t.toLowerCase())||(t=t.replace(/^\/c\/[a-z]{2,3}\//i,""),t=t.replace(/^[a-z][\w.-]*:/i,""),t=t.replace(/_/g," ").replace(/\s+/g," ").trim(),t=t.replace(/^(?:the|an?)\s+/i,"")),t.toLowerCase()}function fs(e){let t=Qn(e);return YC.get(t)??t}function we(e,t,n){return Zo(V(e),fs(t),V(n))}var VC,HC,Qn,qC,YC,Zo,Ve=L(()=>{VC=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);HC=2e3,Qn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,HC),qC=/^fact:[0-9a-f]{16}$/;YC=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"],["mgx:used-for","mgx:usedFor"],["mgx:made-of","mgx:madeOf"]]);Zo=(e,t,n)=>`fact:${KC(`${e}\0${t}\0${n}`,8)}`});function XC(e=a$,t=c$){let n=new Set((t||[]).map(([r,i])=>Xc(r,i))),s=(e||[]).map(r=>r.top),o=[];for(let r=0;r<s.length;r+=1)for(let i=r+1;i<s.length;i+=1){let[a,c]=s[r]<s[i]?[s[r],s[i]]:[s[i],s[r]];n.has(Xc(a,c))||o.push([a,c])}return o.sort((r,i)=>r[0]<i[0]?-1:r[0]>i[0]?1:r[1]<i[1]?-1:r[1]>i[1]?1:0),o}function ra({subClassEdges:e=[],typeEdges:t=[],maxHops:n=JC,maxVisited:s=QC,topClasses:o=a$,overlappingPairs:r=c$}={}){let i=new Map;for(let g of o||[])for(let w of g.labels||[]){let y=V(w);y&&i.set(y,g.top)}let a=(o||[]).map(g=>g.top),c=XC(o,r),l=new Set(c.map(([g,w])=>Xc(g,w))),u=new Map,d=(g,w)=>{!g||!w||g===w||(u.has(g)||u.set(g,new Set),u.get(g).add(w))};for(let[g,w]of e||[])d(g,w);for(let[g,w]of t||[])d(g,w);let p=new Map;for(let[g,w]of u)p.set(g,[...w].sort(ep));let f=new Map;function h(g){if(!g)return[];if(f.has(g))return f.get(g);let w=[],y=i.get(g);if(y)w=[y];else{let S=new Set([g]),T=[g];for(let v=1;v<=n&&T.length&&S.size<s;v+=1){let E=[];for(let k of T){for(let R of p.get(k)||[])if(!S.has(R)&&(S.add(R),E.push(R),S.size>=s))break;if(S.size>=s)break}E.sort(ep);let I=new Set;for(let k of E){let R=i.get(k);R&&I.add(R)}if(I.size){w=[...I].sort(ep);break}T=E}}return f.set(g,w),w}function m(g,w){for(let y of g)for(let S of w)if(y===S||!l.has(Xc(y,S)))return!1;return!0}function b(g,w){if(!g||!w||g===w)return!1;let y=h(g);if(!y.length)return!1;let S=h(w);return S.length?m(y,S):!1}return{declines:b,topsOf:h,tops:a,disjointPairs:c}}var a$,c$,Xc,JC,QC,ep,Jc=L(()=>{Ve();a$=[{top:"place",labels:["place","location"]},{top:"body part",labels:["body part","organ","internal organ","external body part","body covering","limb","blood vessel"]},{top:"living thing",labels:["living thing","organism"]},{top:"artifact",labels:["artifact","instrumentality"]},{top:"substance",labels:["substance","matter"]},{top:"event",labels:["event","happening"]},{top:"communication",labels:["communication","message"]},{top:"time period",labels:["time period"]},{top:"feeling",labels:["feeling","emotion"]}],c$=[["artifact","communication"],["artifact","place"],["artifact","substance"],["body part","substance"],["communication","event"],["communication","feeling"],["living thing","substance"]],Xc=(e,t)=>e<t?`${e}\u241F${t}`:`${t}\u241F${e}`;JC=6,QC=3e3,ep=(e,t)=>e<t?-1:e>t?1:0});var mn={};Nt(mn,{CARDINALITY_RULE_CONFIDENCE:()=>oN,CAX_DW_RULE:()=>np,CAX_DW_RULE_CONFIDENCE:()=>op,CAX_MAXC0_RULE_CONFIDENCE:()=>iN,CLS_SVF1_RULE:()=>rp,CLS_SVF1_RULE_CONFIDENCE:()=>ap,DEFAULT_MAX_ENVIRONMENTS:()=>ni,DISJOINT_PREDICATE:()=>ei,ENTAILED_DISJOINT_PROVENANCE:()=>sp,ENTAILED_PROVENANCE:()=>d$,ENTAILED_SCM_SVF_PROVENANCE:()=>dp,ENTAILED_SVF1_PROVENANCE:()=>ip,ENTAILED_TYPE_PROVENANCE:()=>p$,ON_PROPERTY_PREDICATE:()=>Pn,SCM_SVF_RULE:()=>up,SCM_SVF_RULE_CONFIDENCE:()=>fp,SOME_VALUES_FROM_PREDICATE:()=>Mn,SUBCLASS_PREDICATE:()=>Be,TYPE_PREDICATE:()=>Gt,buildCardinalityRestrictions:()=>lp,buildRelevanceFrontier:()=>tp,buildSubClassSuccessors:()=>Zc,deriveDisjointViolations:()=>b$,deriveSomeValuesFromApplication:()=>w$,deriveSomeValuesFromSubsumption:()=>y$,deriveSubClassClosure:()=>h$,deriveSubClassClosureDelta:()=>m$,deriveTypePropagation:()=>g$,entailedTrustFrom:()=>eN,findConsistencyViolations:()=>cN,findIsaChain:()=>pp,proveCardinalityAtLeast:()=>rN,proveMaxCardinalityZeroDenial:()=>aN,retractSubClassOf:()=>fN,syllogise:()=>S$});function l$(e,t,n){for(let s of t)if(typeof e?.[s]!="function")throw new TypeError(`${n} needs a store option carrying { ${t.join(", ")} } (memory/core.mjs's read/write functions) \u2014 missing ${s}`);return e}function eN(e,t=1){let n=(Array.isArray(e)?e:[]).filter(o=>typeof o=="number");if(!n.length)return null;let s=Math.max(0,Math.min(1,Math.min(...n)*t));return Number(s.toFixed(6))}function Vs(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function h$(e,{depth:t=32,budget:n=50,focus:s=null,gate:o=null}={}){let r=new Set,i=new Map;for(let[d,p]of e||[])!d||!p||d===p||(r.add(`${d}${ze}${p}`),i.has(d)||i.set(d,new Set),i.get(d).add(p));let a=s instanceof Set?s.size?s:null:Vs(s),c=(d,p,f)=>!a||a.has(d)||a.has(p)||a.has(f),l=[],u=new Set;for(let d=0;d<t;d+=1){let p=[];for(let[h,m]of i)for(let b of m){let g=i.get(b);if(g)for(let w of g){if(h===w)continue;let y=`${h}${ze}${w}`;r.has(y)||u.has(y)||c(h,b,w)&&(o?.declines(h,w)||p.push([h,b,w,y]))}}if(!p.length)break;p.sort((h,m)=>Pe(h[0],m[0])||Pe(h[2],m[2])||Pe(h[1],m[1]));let f=!1;for(let[h,m,b,g]of p)if(!u.has(g)){if(l.length>=n)break;u.add(g),l.push({subject:h,object:b,via:m}),i.has(h)||i.set(h,new Set),i.get(h).add(b),f=!0}if(l.length>=n||!f)break}return l}function m$(e,t,{depth:n=32,budget:s=50,focus:o=null,gate:r=null}={}){let i=new Set,a=new Map,c=new Map;for(let[m,b]of e||[])!m||!b||m===b||(i.add(`${m}${ze}${b}`),a.has(m)||a.set(m,new Set),a.get(m).add(b),c.has(b)||c.set(b,new Set),c.get(b).add(m));let l=[],u=new Set;for(let[m,b]of t||[]){if(!m||!b||m===b)continue;let g=`${m}${ze}${b}`;u.has(g)||(u.add(g),l.push([m,b]))}let d=o instanceof Set?o.size?o:null:Vs(o),p=(m,b,g)=>!d||d.has(m)||d.has(b)||d.has(g),f=[],h=new Set;for(let m=0;m<n&&l.length;m+=1){let b=[],g=(S,T,v)=>{if(S===v)return;let E=`${S}${ze}${v}`;i.has(E)||h.has(E)||p(S,T,v)&&(r?.declines(S,v)||b.push([S,T,v,E]))};for(let[S,T]of l){for(let v of a.get(T)||[])g(S,T,v);for(let v of c.get(S)||[])g(v,S,T)}if(!b.length)break;b.sort((S,T)=>Pe(S[0],T[0])||Pe(S[2],T[2])||Pe(S[1],T[1]));let w=!1,y=[];for(let[S,T,v,E]of b)if(!h.has(E)){if(f.length>=s)break;h.add(E),f.push({subject:S,object:v,via:T}),a.has(S)||a.set(S,new Set),a.get(S).add(v),c.has(v)||c.set(v,new Set),c.get(v).add(S),y.push([S,v]),w=!0}if(f.length>=s||!w)break;l=y}return f}function ps(e){let t=new Map;for(let[s,o]of e||[])!s||!o||s===o||(t.has(s)||t.set(s,new Set),t.get(s).add(o));let n=new Map;return s=>{if(n.has(s))return n.get(s);let o=new Set,r=[...t.get(s)||[]];for(;r.length;){let i=r.pop();if(!o.has(i)){o.add(i);for(let a of t.get(i)||[])o.has(a)||r.push(a)}}return n.set(s,o),o}}function tN(e){return ps((e||[]).map(([t,n])=>[n,t]))}function tp(e,t){let n=[],s=[],o=new Map,r=new Map;for(let l of e||[])!l||!l.subject||!l.predicate||!l.object||(Gs(l.predicate)?n.push([l.subject,l.object]):$o(l.predicate)?s.push([l.subject,l.object]):ti(l.predicate)?o.set(l.subject,l.object):aa(l.predicate)&&r.set(l.subject,l.object));let i=tN(n),a=new Set;for(let l of t||[]){let u=V(l);if(u){a.add(u);for(let d of i(u))a.add(d)}}let c=new Set(a);for(let[l,u]of s)a.has(u)&&c.add(l);for(let[l,u]of r)o.has(l)&&a.has(u)&&c.add(l);return c}function g$(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e,gate:r=null}={}){let i=ps(t),a=new Set,c=new Set;for(let[h,m]of o||[])h&&m&&a.add(`${h}${ze}${m}`);let l=s instanceof Set?s.size?s:null:Vs(s),u=(h,m,b)=>!l||l.has(h)||l.has(m)||l.has(b),d=[];for(let[h,m]of e||[]){if(!h||!m)continue;let b=`${h}${ze}${m}`;if(!c.has(b)){c.add(b);for(let g of i(m)){if(g===m||g===h)continue;let w=`${h}${ze}${g}`;a.has(w)||u(h,m,g)&&(r?.declines(h,g)||d.push([h,m,g,w]))}}}d.sort((h,m)=>Pe(h[0],m[0])||Pe(h[2],m[2])||Pe(h[1],m[1]));let p=[],f=new Set;for(let[h,m,b,g]of d)if(!f.has(g)){if(p.length>=n)break;f.add(g),p.push({subject:h,object:b,via:m})}return p}function b$(e,t,n,{budget:s=50,focus:o=null}={}){let r=ps(t),i=new Map,a=new Set;for(let[h,m]of n||[])!h||!m||h===m||(a.add(`${h}${ze}${m}`),a.add(`${m}${ze}${h}`),i.has(h)||i.set(h,new Set),i.get(h).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(h));if(!i.size)return[];let c=new Set,l=o instanceof Set?o.size?o:null:Vs(o),u=(h,m,b)=>!l||l.has(h)||l.has(m)||l.has(b),d=[];for(let[h,m]of e||[]){if(!h||!m)continue;let b=`${h}${ze}${m}`;if(!c.has(b)){c.add(b);for(let g of[m,...r(m)]){let w=i.get(g);if(w)for(let y of w){if(y===h)continue;let S=`${h}${ze}${y}`;a.has(S)||u(h,m,y)&&d.push([h,m,g,y,S])}}}}d.sort((h,m)=>Pe(h[0],m[0])||Pe(h[3],m[3])||Pe(h[2],m[2])||Pe(h[1],m[1]));let p=[],f=new Set;for(let[h,m,b,g,w]of d)if(!f.has(w)){if(p.length>=s)break;f.add(w),p.push({subject:h,object:g,viaType:m,viaClass:b})}return p}function w$(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=ps(n),a=new Map;for(let b of s||[]){if(!b||!b.restriction||!b.property||!b.target)continue;let g=`${b.property}${ze}${b.target}`;a.has(g)||a.set(g,new Set),a.get(g).add(b.restriction)}if(!a.size)return[];let c=new Set,l=new Map;for(let[b,g]of t||[])!b||!g||(c.add(`${b}${ze}${g}`),l.has(b)||l.set(b,new Set),l.get(b).add(g));let u=r instanceof Set?r.size?r:null:Vs(r),d=(b,g,w)=>!u||u.has(b)||u.has(g)||u.has(w),p=new Set,f=[];for(let[b,g,w]of e||[]){if(!b||!g||!w)continue;let y=V(g),S=`${b}${ze}${y}${ze}${w}`;if(p.has(S))continue;p.add(S);let T=l.get(w);if(T)for(let v of T)for(let E of[v,...i(v)]){let I=a.get(`${y}${ze}${E}`);if(I)for(let k of I){if(b===k)continue;let R=`${b}${ze}${k}`;c.has(R)||d(b,w,k)&&f.push([b,g,y,w,v,E,k,R])}}}f.sort((b,g)=>Pe(b[0],g[0])||Pe(b[6],g[6])||Pe(b[1],g[1])||Pe(b[3],g[3]));let h=[],m=new Set;for(let[b,g,w,y,S,T,v,E]of f)if(!m.has(E)){if(h.length>=o)break;m.add(E),h.push({subject:b,object:v,viaProperty:g,viaPropertyKey:w,viaValue:y,viaType:S,viaTarget:T})}return h}function lp(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(ti(r.predicate))t.set(r.subject,r.object);else if(ZC(r.predicate))s.set(r.subject,r.object);else{let i=sN[String(r.predicate).trim().toLowerCase()];if(!i)continue;let a=Number(r.object);Number.isFinite(a)&&n.set(r.subject,{kind:i,n:a})}let o=[];for(let[r,{kind:i,n:a}]of n){if(t.get(r)!==nN)continue;let c=s.get(r);c&&o.push({restriction:r,kind:i,n:a,onClass:c})}return o.sort((r,i)=>Pe(r.restriction,i.restriction)),o}function y$(e,t,{budget:n=50,focus:s=null}={}){let o=ps(t),r=new Map;for(let p of e||[]){if(!p||!p.restriction||!p.property||!p.target)continue;let f=V(p.property);r.has(f)||r.set(f,[]),r.get(f).push({restriction:p.restriction,target:p.target})}let i=new Set;for(let[p,f]of t||[])p&&f&&i.add(`${p}${ze}${f}`);let a=s instanceof Set?s.size?s:null:Vs(s),c=(p,f)=>!a||a.has(p)||a.has(f),l=[];for(let[,p]of r)if(!(p.length<2))for(let f of p)for(let h of p){if(f.restriction===h.restriction||f.target===h.target||!o(f.target).has(h.target))continue;let m=`${f.restriction}${ze}${h.restriction}`;i.has(m)||c(f.restriction,h.restriction)&&l.push([f.restriction,h.restriction,f.target,h.target,m])}l.sort((p,f)=>Pe(p[0],f[0])||Pe(p[1],f[1]));let u=[],d=new Set;for(let[p,f,h,m,b]of l)if(!d.has(b)){if(u.length>=n)break;d.add(b),u.push({subject:p,object:f,viaY1:h,viaY2:m})}return u}function $$(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=ps(e),a=r instanceof Set?r.size?r:null:Vs(r),c=p=>!a||a.has(n)||a.has(p),l=new Map;for(let[p,f]of e||[])!p||!f||(l.has(p)||l.set(p,new Set),l.get(p).add(f));let u=new Map((t||[]).map(p=>[p.restriction,p])),d=0;for(let p of[n,...i(n)]){if(d>=o)break;if(d+=1,!!c(p))for(let f of l.get(p)||[]){let h=u.get(f);if(h&&s(h))return{viaClass:p,viaRestriction:f,record:h}}}return null}function rN(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=$$(e,t,n,a=>a.onClass===s&&(a.kind==="exactly"||a.kind==="min")&&a.n>=o,r);return i?{subject:n,object:s,m:o,n:i.record.n,kind:i.record.kind,viaClass:i.viaClass,viaRestriction:i.viaRestriction}:null}function aN(e,t,n,s,o={}){if(!s)return null;let r=$$(e,t,n,i=>i.onClass===s&&i.kind==="max"&&i.n===0,o);return r?{subject:n,object:s,viaClass:r.viaClass,viaRestriction:r.viaRestriction}:null}function cN(e,t,n,{budget:s=50,focus:o=null}={}){let r=ps(t),i=new Map;for(let[f,h]of n||[])!f||!h||f===h||(i.has(f)||i.set(f,new Set),i.get(f).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(f));if(!i.size)return[];let a=new Map;for(let[f,h]of e||[])!f||!h||(a.has(f)||a.set(f,new Set),a.get(f).add(h));let c=o instanceof Set?o.size?o:null:Vs(o),l=f=>!c||c.has(f),u=[],d=new Set;for(let[f,h]of a){if(!l(f))continue;let m=[...h].sort();for(let b=0;b<m.length;b+=1)for(let g=b+1;g<m.length;g+=1){let[w,y]=[m[b],m[g]],S=[w,...r(w)],T=[y,...r(y)],v=null;for(let I of S){let k=i.get(I);if(k){for(let R of T)if(k.has(R)){v=[I,R];break}if(v)break}}if(!v)continue;let E=`${f}${ze}${w}${ze}${y}`;d.has(E)||(d.add(E),u.push([f,w,y,v[0],v[1]]))}}u.sort((f,h)=>Pe(f[0],h[0])||Pe(f[1],h[1])||Pe(f[2],h[2]));let p=[];for(let[f,h,m,b,g]of u){if(p.length>=s)break;p.push({subject:f,classA:h,classB:m,viaA:b,viaB:g})}return p}async function S$(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=ni,full:i=!1,store:a,senseGate:c=!0}={}){let{loadMemory:l,readFactRows:u,appendFacts:d}=l$(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),p=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),h=u(f),m=h.filter(A=>Gs(A.predicate)).map(A=>[A.subject,A.object]),b=h.filter(A=>$o(A.predicate)).map(A=>[A.subject,A.object]),g=h.filter(A=>er(A.predicate)).map(A=>[A.subject,A.object]),w=new Map,y=new Map,S=[];for(let A of h){let me=String(A.predicate||"").trim().toLowerCase();ti(A.predicate)?w.set(A.subject,A.object):aa(A.predicate)?y.set(A.subject,A.object):cp.has(me)||S.push([A.subject,A.predicate,A.object])}let T=[];for(let[A,me]of w){let Ne=y.get(A);Ne&&T.push({restriction:A,property:me,target:Ne})}let v=c?ra({subClassEdges:h.filter(A=>Gs(A.predicate)&&!Qc(A.provenance)).map(A=>[A.subject,A.object]),typeEdges:h.filter(A=>$o(A.predicate)&&!Qc(A.provenance)).map(A=>[A.subject,A.object])}):null,E=Vs(s),I=o&&E?tp(h,[...E]):E,k=I===null&&p?await a.loadSyllogiseState(e):null,R=new Set(h.map(A=>A.id)),$=Array.isArray(k?.factIds)?k.factIds.filter(A=>!R.has(A)):[],_=k&&Array.isArray(k.factIds)&&!$.length&&!i?"delta":"full",O=_==="delta"?new Set(k.factIds):null,x=_==="delta"?h.filter(A=>!O.has(A.id)):h,j=x.length,M=new Map;for(let A of h)M.set(`${A.subject}${ze}${A.predicate}${ze}${A.object}`,A.trust);let D=(A,me,Ne)=>M.get(`${A}${ze}${me}${ze}${Ne}`),H=(A,me,Ne)=>M.has(`${A}${ze}${me}${ze}${Ne}`),Y=A=>A.filter(me=>typeof me=="number"),Z=_==="delta"&&!x.length,P=_==="delta"?x.filter(A=>Gs(A.predicate)).map(A=>[A.subject,A.object]):[],K=_==="delta"?P.length?m$(m,P,{depth:t,budget:n,focus:I,gate:v}):[]:h$(m,{depth:t,budget:n,focus:I,gate:v}),W=m.concat(K.map(A=>[A.subject,A.object])),C=I,F=null;if(_==="delta"&&!Z){let A=h.concat(K.map(Ne=>({subject:Ne.subject,predicate:Be,object:Ne.object}))),me=[];for(let Ne of x)me.push(Ne.subject,Ne.object);F=tp(A,me),C=F}let N=A=>!F||F.has(A),B=F?b.filter(([A,me])=>N(A)||N(me)):b,z=new Set;if(F)for(let A of x)er(A.predicate)&&(z.add(A.subject),z.add(A.object));let U=F&&z.size?ps(W):null,G=F?b.filter(([A,me])=>N(A)||N(me)||U&&[...U(me)].some(Ne=>z.has(Ne))):b,J=new Set;if(F){for(let A of x)if(ti(A.predicate)||aa(A.predicate)){let me=w.get(A.subject);me&&J.add(V(me))}}let ae=F?S.filter(([A,me,Ne])=>N(A)||N(Ne)||J.has(V(me))):S,pe=Math.max(0,n-K.length),re=pe>0&&!Z?g$(B,W,{budget:pe,focus:C,presentTypeEdges:b,gate:v}):[],ee=Math.max(0,n-K.length-re.length),X=ee>0&&!Z?b$(G,W,g,{budget:ee,focus:C}):[],te=Math.max(0,n-K.length-re.length-X.length),oe=te>0&&T.length&&!Z?w$(ae,b,W,T,{budget:te,focus:C}):[],Te=Math.max(0,n-K.length-re.length-X.length-oe.length),ge=Te>0&&T.length>1&&!Z?y$(T,W,{budget:Te,focus:C}):[],Ie=new Map(T.map(A=>[A.restriction,A])),Ee=[...K.map(A=>({subject:A.subject,predicate:Be,object:A.object,provenance:d$,justification:[[we(A.subject,Be,A.via),we(A.via,Be,A.object)]]})),...re.map(A=>({subject:A.subject,predicate:Gt,object:A.object,provenance:p$,justification:[[we(A.subject,Gt,A.via),we(A.via,Be,A.object)]]})),...X.map(A=>{let me=H(A.viaClass,ei,A.object),[Ne,_s]=me?[A.viaClass,A.object]:[A.object,A.viaClass],Ts=Y([D(A.subject,Gt,A.viaType),D(Ne,ei,_s),...A.viaClass!==A.viaType?[D(A.viaType,Be,A.viaClass)]:[]]);return{subject:A.subject,predicate:ei,object:A.object,provenance:sp,justification:[[we(A.subject,Gt,A.viaType),we(Ne,ei,_s),...A.viaClass!==A.viaType?[we(A.viaType,Be,A.viaClass)]:[]]],...Ts.length?{premiseTrusts:Ts,ruleConfidence:op}:{}}}),...oe.map(A=>{let me=Y([D(A.subject,A.viaProperty,A.viaValue),D(A.viaValue,Gt,A.viaType),D(A.object,Pn,A.viaPropertyKey),D(A.object,Mn,A.viaTarget),...A.viaType!==A.viaTarget?[D(A.viaType,Be,A.viaTarget)]:[]]);return{subject:A.subject,predicate:Gt,object:A.object,provenance:ip,justification:[[we(A.subject,A.viaProperty,A.viaValue),we(A.viaValue,Gt,A.viaType),we(A.object,Pn,A.viaPropertyKey),we(A.object,Mn,A.viaTarget),...A.viaType!==A.viaTarget?[we(A.viaType,Be,A.viaTarget)]:[]]],...me.length?{premiseTrusts:me,ruleConfidence:ap}:{}}}),...ge.map(A=>{let me=Ie.get(A.subject),Ne=Ie.get(A.object),_s=Y([me&&D(A.subject,Pn,me.property),D(A.subject,Mn,A.viaY1),Ne&&D(A.object,Pn,Ne.property),D(A.object,Mn,A.viaY2),D(A.viaY1,Be,A.viaY2)]);return{subject:A.subject,predicate:Be,object:A.object,provenance:dp,justification:[[...me?[we(A.subject,Pn,me.property)]:[],we(A.subject,Mn,A.viaY1),...Ne?[we(A.object,Pn,Ne.property)]:[],we(A.object,Mn,A.viaY2),we(A.viaY1,Be,A.viaY2)]],..._s.length?{premiseTrusts:_s,ruleConfidence:fp}:{}}})],xe=Ee.map(A=>({id:we(A.subject,A.predicate,A.object),subject:A.subject,predicate:A.predicate,object:A.object,environments:A.justification,write:A})),et=v$(h.concat(xe.map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object})))),ce=new Map(h.map(A=>[A.id,A])),le=A=>Gs(A)||$o(A)||er(A),de=A=>_!=="delta"||F!==null&&(F.has(A.subject)||F.has(A.object)),ut=h.filter(A=>le(A.predicate)&&Qc(A.provenance)&&ia(A).length<r&&de(A)).map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object,environments:ia(A),provenance:A.provenance})),Ct=[...xe,...ut].sort((A,me)=>Pe(A.subject,me.subject)||Pe(A.predicate,me.predicate)||Pe(A.object,me.object)),Yt=0,ie=!1,qe=0;for(let A of Ct){if(qe>=n){ie=!0;break}qe+=1;let me=et(A,{maxEnvironments:r+1}),{kept:Ne,truncated:_s}=uN(A.environments,me,r);if(_s&&(ie=!0),!(Ne.length<=A.environments.length)){if(Yt+=Ne.length-A.environments.length,A.write){A.write.justification=Ne;continue}Ee.push({subject:A.subject,predicate:A.predicate,object:A.object,justification:Ne,...E$(A.provenance,Ne,Ts=>ce.get(Ts)?.trust)||{}})}}let{ids:$t}=await d(e,Ee),Ze=[],St=0;for(let A of K)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.via,rule:u$}),St+=1;for(let A of re)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.via,rule:f$}),St+=1;for(let A of X)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.viaClass,rule:np}),St+=1;for(let A of oe)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.viaValue,rule:rp}),St+=1;for(let A of ge)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.viaY1,rule:up}),St+=1;let Or=Ze.length>=n;if(I===null&&p&&!Or){let A=new Set(R);for(let me of $t)A.add(me);await a.saveSyllogiseState(e,{version:1,factIds:[...A].sort(),completedAt:new Date().toISOString()})}return{derived:Ze,count:Ze.length,budget:n,depth:t,truncated:Or,mode:_,deltaSize:j,environmentsAdded:Yt,alternatesTruncated:ie}}function Qc(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function lN(e){let t=[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map;for(let u of e){let d=String(u.predicate||"").trim().toLowerCase();Gs(u.predicate)?t.push([u.subject,u.object]):$o(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):er(u.predicate)?(s.has(u.subject)||s.set(u.subject,new Set),s.get(u.subject).add(u.object),s.has(u.object)||s.set(u.object,new Set),s.get(u.object).add(u.subject)):ti(u.predicate)?o.set(u.subject,u.object):aa(u.predicate)?r.set(u.subject,u.object):cp.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([V(u.predicate),u.object]))}let a=ps(t),c=(u,d)=>u!==d&&a(u).has(d),l=u=>{let d=o.get(u),p=r.get(u);return d&&p?{property:V(d),target:p}:null};return u=>{if(Gs(u.predicate)){if(c(u.subject,u.object))return!0;let d=l(u.subject),p=l(u.object);return!!(d&&p&&d.property===p.property&&c(d.target,p.target))}if($o(u.predicate)){for(let p of n.get(u.subject)||[])if(c(p,u.object))return!0;let d=l(u.object);if(d){for(let[p,f]of i.get(u.subject)||[])if(p===d.property){for(let h of n.get(f)||[])if(h===d.target||c(h,d.target))return!0}}return!1}if(er(u.predicate)){for(let d of n.get(u.subject)||[])for(let p of[d,...a(d)])if(s.get(p)?.has(u.object))return!0;return!1}return!0}}function v$(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,c=new Map,l=new Map;for(let f of e){if(!f||!f.subject||!f.predicate||!f.object)continue;f.id&&t.add(f.id);let h=String(f.predicate||"").trim().toLowerCase();Gs(f.predicate)?(n.push([f.subject,f.object]),s.has(f.subject)||s.set(f.subject,new Set),s.get(f.subject).add(f.object)):$o(f.predicate)?(o.has(f.subject)||o.set(f.subject,new Set),o.get(f.subject).add(f.object)):er(f.predicate)?(r.add(`${f.subject}${ze}${f.object}`),i.has(f.subject)||i.set(f.subject,new Set),i.get(f.subject).add(f.object),i.has(f.object)||i.set(f.object,new Set),i.get(f.object).add(f.subject)):ti(f.predicate)?a.set(f.subject,f.object):aa(f.predicate)?c.set(f.subject,f.object):cp.has(h)||(l.has(f.subject)||l.set(f.subject,[]),l.get(f.subject).push([f.predicate,f.object]))}let u=ps(n),d=f=>s.get(f)||new Set,p=f=>{let h=a.get(f),m=c.get(f);return h&&m?{property:h,propertyKey:V(h),target:m}:null};return(f,{maxEnvironments:h=ni}={})=>{let m=[],b=new Set,g=w=>{if(m.length>=h||f.id&&w.includes(f.id)||!w.every(S=>t.has(S)))return;let y=[...w].sort().join(" ");b.has(y)||(b.add(y),m.push(w))};if(Gs(f.predicate)){for(let w of[...d(f.subject)].sort()){if(m.length>=h)break;w===f.subject||w===f.object||d(w).has(f.object)&&g([we(f.subject,Be,w),we(w,Be,f.object)])}if(m.length<h){let w=p(f.subject),y=p(f.object);w&&y&&w.propertyKey===y.propertyKey&&w.target!==y.target&&d(w.target).has(y.target)&&g([we(f.subject,Pn,w.property),we(f.subject,Mn,w.target),we(f.object,Pn,y.property),we(f.object,Mn,y.target),we(w.target,Be,y.target)])}return m}if($o(f.predicate)){for(let y of[...o.get(f.subject)||[]].sort()){if(m.length>=h)break;y!==f.object&&d(y).has(f.object)&&g([we(f.subject,Gt,y),we(y,Be,f.object)])}let w=p(f.object);if(w){let y=[...l.get(f.subject)||[]].filter(([S])=>V(S)===w.propertyKey).sort((S,T)=>Pe(S[0],T[0])||Pe(S[1],T[1]));for(let[S,T]of y){if(m.length>=h)break;for(let v of[...o.get(T)||[]].sort()){if(m.length>=h)break;v!==w.target&&!d(v).has(w.target)||g([we(f.subject,S,T),we(T,Gt,v),we(f.object,Pn,w.propertyKey),we(f.object,Mn,w.target),...v!==w.target?[we(v,Be,w.target)]:[]])}}}return m}if(er(f.predicate)){let w=[];for(let y of o.get(f.subject)||[])for(let S of[y,...u(y)])(i.get(S)||new Set).has(f.object)&&w.push([y,S]);w.sort((y,S)=>Pe(y[0],S[0])||Pe(y[1],S[1]));for(let[y,S]of w){if(m.length>=h)break;let T=r.has(`${S}${ze}${f.object}`),[v,E]=T?[S,f.object]:[f.object,S];g([we(f.subject,Gt,y),we(v,ei,E),...S!==y?[we(y,Be,S)]:[]])}return m}return m}}function uN(e,t,n){let s=[],o=new Set,r=!1;for(let i of[...e||[],...t||[]]){if(!Array.isArray(i)||!i.length)continue;let a=[...i].sort().join(" ");if(!o.has(a)){if(s.length>=n){r=!0;continue}o.add(a),s.push(i)}}return{kept:s,truncated:r}}function E$(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=dN.get(i);if(a!==void 0){s=a;break}}if(s===void 0)return null;let o=null,r=-1;for(let i of t||[]){let a=i.map(l=>n(l)).filter(l=>typeof l=="number");if(a.length!==i.length)continue;let c=Math.min(...a);c>r&&(r=c,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function fN(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=ni,store:i,sourceTags:a=[],predicate:c=Be}={}){let{loadMemory:l,readFactRows:u,removeFacts:d}=l$(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),p=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,h=(a||[]).filter(Boolean);if(h.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let m=V(t),b=V(n),g=we(m,c,b),w=await l(e),y=u(w),S=new Map(y.map(M=>[M.id,M]));if(!S.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let T=S.get(g).sourceIds||[],v=h.map(M=>f(g,M).slice(g.length+1)),E=h.length?T.filter(M=>v.includes(M)):[],I=!h.length||E.length>0;if(h.length&&!I)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let k=h.length>0&&E.length<T.length,R=new Set([g]),$=[g],_=new Map,O=!1;if(!k){let M=y.filter(Z=>ia(Z).length&&Qc(Z.provenance)),D=new Map;for(let Z of M)for(let P of ia(Z))for(let K of P)D.has(K)||D.set(K,new Set),D.get(K).add(Z.id);let H=0,Y=[g];for(;H<o;H+=1){let Z=new Set;for(let z of Y)for(let U of D.get(z)||[])R.has(U)||Z.add(U);let P=[...Z].map(z=>S.get(z)).sort((z,U)=>Pe(z.subject,U.subject)||Pe(z.predicate,U.predicate)||Pe(z.object,U.object));if(!P.length)break;let K=y.filter(z=>!R.has(z.id)&&!Z.has(z.id)),W=new Set(K.map(z=>z.id)),C=v$(K),F=lN(K),N=!1,B=!1;Y=[];for(let z of P){if(R.size>=s){B=!0;break}let U=ia(z),G=U.filter(ae=>ae.every(pe=>W.has(pe)));if(G.length){G.length!==U.length&&_.set(z.id,G);continue}let J=C(z,{maxEnvironments:r});if(J.length){_.set(z.id,J);continue}F(z)||(R.add(z.id),$.push(z.id),Y.push(z.id),N=!0)}if(B){O=!0;break}if(!N)break}!O&&H>=o&&(O=M.some(Z=>!R.has(Z.id)&&Z.justification.some(P=>R.has(P))))}let x=h.length?[...E.map(M=>`${g}@${M}`),...$.slice(1)]:$,{removed:j}=await d(e,x);if(p){let M=[..._.entries()].filter(([D])=>!R.has(D)).sort((D,H)=>Pe(D[0],H[0])).map(([D,H])=>{let Y=S.get(D);return{subject:Y.subject,predicate:Y.predicate,object:Y.object,justification:H,...E$(Y.provenance,H,Z=>S.get(Z)?.trust)||{}}});M.length&&await p(e,M)}return{retracted:j,count:j.length,budget:s,depth:o,truncated:O,found:!0,...h.length?{ownRecord:!0,stillStands:k}:{}}}function Zc(e){let t=new Map;for(let[n,s]of e||[])!n||!s||n===s||(t.has(n)||t.set(n,new Set),t.get(n).add(s));return t}function pp(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=s instanceof Map?s:Zc(s),a=[];for(let[l,u]of n||[])l===e&&u&&a.push({node:u,path:[{subject:l,predicate:Gt,object:u}]});for(let l of i.get(e)||[])a.push({node:l,path:[{subject:e,predicate:Be,object:l}]});let c=new Set([e]);for(let l=1;l<=o&&a.length;l+=1){for(let{node:d,path:p}of a)if(r.has(d))return p;if(l===o)break;let u=[];for(let{node:d,path:p}of a)if(!c.has(d)){c.add(d);for(let f of i.get(d)||[])c.has(f)||u.push({node:f,path:[...p,{subject:d,predicate:Be,object:f}]})}a=u}return null}var Pe,Be,u$,d$,Gt,f$,p$,ei,np,sp,op,Pn,Mn,rp,ip,ap,ni,ze,Gs,$o,er,ti,aa,ZC,cp,nN,sN,up,dp,fp,oN,iN,ia,dN,Ft=L(()=>{Ve();Jc();Pe=(e,t)=>e<t?-1:e>t?1:0;Be="rdfs:subClassOf",u$="subClassOf",d$=`entailed:${u$}`,Gt="rdf:type",f$="type",p$=`entailed:${f$}`,ei="owl:disjointWith",np="disjointWith",sp=`entailed:${np}`,op=.95,Pn="owl:onProperty",Mn="owl:someValuesFrom",rp="someValuesFrom",ip=`entailed:${rp}`,ap=.95,ni=4,ze="\u241F",Gs=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",$o=e=>String(e||"").trim().toLowerCase()==="rdf:type",er=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",ti=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",aa=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",ZC=e=>String(e||"").trim().toLowerCase()==="owl:onclass",cp=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);nN="has",sN={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};up="someValuesFromSubsumption",dp=`entailed:${up}`,fp=.95;oN=.95;iN=.95;ia=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);dN=new Map([[sp,op],[ip,ap],[dp,fp]])});function Zt(e,t){let n=el(e),s=el(t);return n<s?-1:n>s?1:0}var el,tr=L(()=>{el=e=>[e?.subject??"",e?.predicate??"",e?.object??"",e?.provenance??""].join("\0")});function ri(e){let t=String(e||""),n=k$.get(t);return n||(t.startsWith(x$)?tl+t.slice(x$.length):t)}function _$(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=pp(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function ol(e,t,n,{maxHops:s=3}={}){let o=oi(e),r=oi(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassSucc:c}=R$(i),l=i.filter(g=>(g.predicate===sl||g.predicate===si)&&r.has(g.object)),u=[];for(let g of l){let w=g.predicate===si?"negative":"positive";if(o.has(g.subject)){u.push({fact:g,polarity:w,hops:0,chain:null});continue}let y=_$(o,g.subject,a,c,s);y&&y.length&&u.push({fact:g,polarity:w,hops:y.length,chain:y})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:mp(o,r,i,{maxHops:s})};u.sort((g,w)=>g.hops-w.hops||(w.fact.trust||0)-(g.fact.trust||0)||Zt(g.fact,w.fact));let d=u[0].hops,p=u.filter(g=>g.hops===d),f=p.filter(g=>g.polarity==="positive").map(g=>g.fact),h=p.filter(g=>g.polarity==="negative").map(g=>g.fact),m=h.length&&!f.length?"negative":"positive",b=u.find(g=>g.hops>d&&g.polarity!==m)||null;return{verdict:f.length&&h.length?"both":h.length?"no":"yes",hops:d,positive:f,negative:h,chain:u[0].chain,overrides:b?{fact:b.fact,chain:b.chain}:null,baseRate:null}}function mp(e,t,n,{maxHops:s=3}={}){let o=oi(e),r=oi(t),i=Array.isArray(n)?n:[],a=i.filter(m=>m.predicate===Be||m.predicate===Gt),c=a.filter(m=>o.has(m.subject)).sort(Zt).map(m=>m.object);if(!c.length)return null;let l=c[0],u=[...new Set(a.filter(m=>m.object===l&&!o.has(m.subject)).sort(Zt).map(m=>m.subject))],d=m=>{let b=i.filter(g=>g.subject===m&&r.has(g.object)&&(g.predicate===sl||g.predicate===si)).sort(Zt)[0];return b?{name:m,polarity:b.predicate===si?"negative":"positive",fact:b}:{name:m,polarity:"unknown",fact:null}},p=u.map(d),{typeEdges:f,subClassSucc:h}=R$(i);return{klass:l,kinds:u.length,positive:p.filter(m=>m.polarity==="positive"),negative:p.filter(m=>m.polarity==="negative"),unknown:p.filter(m=>m.polarity==="unknown"),chain:_$(o,l,f,h,s)}}function gp(e,t,{exclude:n=[],maxHops:s=3}={}){let o=oi(e),r=oi(n),i=Array.isArray(t)?t:[],a=new Set,c=[];for(let l of i)l.predicate!==sl||!o.has(l.object)||r.has(l.subject)||a.has(l.subject)||(a.add(l.subject),ol(new Set([l.subject]),o,i,{maxHops:s}).verdict==="yes"&&c.push(l));return c.sort(pN)}var tl,x$,nl,k$,wV,j$,sl,si,hp,pN,oi,R$,rl=L(()=>{Ft();tr();tl="mgxneg:",x$="mgx:",nl="mgxneg:subClassOf",k$=new Map([[Be,nl]]),wV=new Map([...k$].map(([e,t])=>[t,e]));j$=e=>String(e||"").startsWith(tl),sl="mgx:capableOf",si=ri(sl),hp=6,pN=(e,t)=>(t.trust||0)-(e.trust||0)||Zt(e,t),oi=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),R$=e=>{let t=e.filter(s=>s.predicate===Gt).map(s=>[s.subject,s.object]),n=e.filter(s=>s.predicate===Be).map(s=>[s.subject,s.object]);return{typeEdges:t,subClassSucc:Zc(n)}}});function il(e){let t=String(e||"");return yp.has(t)?bp:mN.has(t)||gN.test(t)?ca:bN.has(t)?T$:wp}function wN(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(hb.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function yN(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(wN(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function $p(e,t){let n=t===T$;if(!n&&t!==ca)return null;let s=(e||[]).map(r=>({row:r,at:yN(r,n)}));s.sort((r,i)=>{if(r.at!==i.at)return r.at===null?1:i.at===null?-1:n?r.at-i.at:i.at-r.at;let a=(i.row.trust||0)-(r.row.trust||0);if(a)return a;let[c,l]=[String(r.row.object),String(i.row.object)];return c<l?-1:c>l?1:0});let o=s.map(r=>r.row);return{winner:o[0]||null,ranked:o,contested:s.length>1&&s[0].at===s[1].at}}var bp,ca,T$,wp,hN,yp,mN,gN,bN,A$=L(()=>{rl();Nn();bp="merge",ca="latest-observation-wins",T$="first-claim-wins",wp="contradiction",hN=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","mgx:memberOf","mgx:collectionOf","mgx:usedFor","mgx:receivesAction","mgx:causes","mgx:causesDesire","mgx:hasSubevent","mgx:hasPrerequisite","mgx:motivatedByGoal","mgx:obstructedBy","mgx:desires","mgx:hasProperty","mgx:madeOf","mgx:atLocation","mgx:locatedNear","mgx:createdBy","mgx:mannerOf","mgx:relatedTo","mgx:synonym","mgx:antonym","mgx:similarTo","mgx:symbolOf","mgx:knows-about","mgx:attributedTo"],yp=new Set(hN.flatMap(e=>[e,ri(e)])),mN=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in","mgx:on-top-of","mgx:on-plane","mgx:under","mgx:is-open","mgx:hasMass","mgx:feels","mgx:faces","mgx:pose","mgx:display-name","mgx:nodeName","mgx:worldName"]),gN=/^mgx:has-exit-([a-z]+)$/,bN=new Set(["mgx:playedBy"])});function I$(e){let t=String(e||"");return/^have$/i.test(t)?"has":/[a-z]y$/i.test(t)&&!/[aeiou]y$/i.test(t)?`${t.slice(0,-1)}ies`:/(?:s|x|z|ch|sh|o)$/i.test(t)?`${t}es`:`${t}s`}function nr(e){let t=String(e||"");return/^has$/i.test(t)?"have":/[a-z]ies$/i.test(t)&&!/[aeiou]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(?:ss|zz|x|ch|sh|o)es$/i.test(t)?t.slice(0,-2):/[sz]es$/i.test(t)?t.slice(0,-1):t.replace(/s$/i,"")}function vp(e){let t=nr(e);return/[^aeiou]e$/i.test(t)&&t.length>2?`${t.slice(0,-1)}ing`:`${t}ing`}function xN(e){for(let t of vN)if(e===t||e.endsWith(t)&&e.length-t.length>=EN)return!0;return!1}function Sp(e){let t=String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").split(/\s+/)[0]?.toLowerCase()??"";return t?SN.has(t)?!0:xN(t)?!1:/[a-z]s$/.test(t)&&!/ss$/.test(t):!1}function cl(e,t){if(Ks[e])return Ks[e];let n=String(e??"");if(n.startsWith("mgxneg:")){let l=cl(`mgx:${n.slice(7)}`,t);if(l==="can")return"cannot";if(l==="can be")return"cannot be";if(l==="is"||l.startsWith("is "))return`is not${l.slice(2)}`;let[u,...d]=l.split(" ");return[Sp(t)?"do not":"does not",nr(u),...d].join(" ")}let s=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(n);if(s)return`is ${s[1].replace(/-/g," ")} than`;let o=new RegExp(`^mgx:(${al}|${$N})-([a-z]+)$`,"i").exec(n);if(o)return`is ${o[1].toLowerCase()} ${o[2].toLowerCase()}`;let r=/^mgx:same-([a-z]+)-as$/i.exec(n);if(r)return`has the same ${r[1].toLowerCase()} as`;let i=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(n);if(i)return`${Sp(t)?i[1]:I$(i[1])}${i[2]?` ${i[2]}`:""}`;let a=/^tmct:([a-z]+)([A-Z][a-z]+)?$/.exec(n);if(a)return`${Sp(t)?nr(a[1]):a[1]}${a[2]?` ${a[2].toLowerCase()}`:""}`;let c=n.indexOf(":");return c===-1?n:n.slice(c+1)}function O$(e){let t=typeof e=="string"?[e]:Array.isArray(e)?e:e?.extraction;if(!Array.isArray(t)||!t.length)return"";let n=new Set(t.map(s=>String(s)));return Object.entries(kN).filter(([s])=>n.has(s)).map(([,s])=>s).join(" ")}var Ks,al,$N,SN,vN,EN,kN,ll=L(()=>{Ks=Object.freeze({"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","owl:unionOf":"is either","owl:complementOf":"is anything that is not","owl:oneOf":"includes exactly","owl:differentFrom":"is not the same as","mgx:partOf":"is part of","mgx:memberOf":"is a member of","mgx:collectionOf":"is a collection of","mgx:hasA":"has","mgx:usedFor":"is used for","mgx:capableOf":"can","mgx:atLocation":"is found in","mgx:causes":"causes","mgx:hasProperty":"is","mgx:madeOf":"is made of","mgx:receivesAction":"can be","mgx:createdBy":"is created by","mgx:mannerOf":"is a way to","mgx:desires":"wants","mgx:locatedNear":"is typically near","mgx:motivatedByGoal":"is motivated by","mgx:obstructedBy":"can be prevented by","mgx:causesDesire":"makes you want to","mgx:hasSubevent":"involves","mgx:hasFirstSubevent":"begins with","mgx:hasLastSubevent":"ends with","mgx:hasPrerequisite":"requires","mgx:ownedBy":"is owned by","mgx:rendersAs":"renders as","mgx:nameFor":"is the name for","mgx:synonym":"means the same as","mgx:antonym":"is the opposite of","mgx:similarTo":"is similar to","mgx:relatedTo":"is related to","mgx:symbolOf":"is a symbol of","mgx:currently-in":"is in","mgx:located-in":"is in","mgx:fixed-in":"is fixed in","mgx:stands-locked-in":"stands locked in","mgx:works-in":"works in","mgx:pursues":"pursues","mgx:evades":"evades","mgx:consumes":"eats","mgx:vision-radius":"sees within","mgx:guards":"guards","mgx:attributedTo":"is attributed to"}),al="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",$N=["hit","struck","killed","injured","wounded","damaged","destroyed","devastated","banned","halted","blocked","barred","suspended","imposed","arrested","detained","jailed","charged","convicted","sentenced","deported","released","freed","elected","appointed","ousted","overthrown","signed","adopted","approved","rejected","vetoed","launched","unveiled","seized","captured","invaded","attacked","bombed","targeted","discovered","uncovered","rescued","evacuated","sparked","triggered","caused","forced","deployed","restored","expanded"].join("|");SN=new Set(["people","men","women","children","mice","geese","feet","teeth","oxen"]),vN=new Set(["news","physics","species","series","means","measles","mathematics","politics","economics"]),EN=3;kN=Object.freeze({"clause-fallback":"(read from a clause fragment)","pronoun-carry":"(subject carried from the previous sentence)","identifier-token":"(identifier token)","reported-speech":"(read from reported speech)"})});var Ep,ul,la=L(()=>{Ep=new Set(["person","place","object","event","time","quantity","organization","group","animal","plant","furniture","vehicle","insect","emotion","metal","liquid","weather","planet","jewelry","cutlery","government","material","artifact","location","structure","food","drink","clothing","body","language","mind","family","meal","season","number","entity","abstraction","physical_entity","attribute","state","act","communication","cognition","measure","unit"]),ul=new Set([...Ep,"property","concept","idea","content"])});var C$=L(()=>{Ve();Jc()});function RN(e){let t=dl(e?.subject);if(N$(t))return t;let n=dl(e?.object);return N$(n)?n:""}function _N(e){return!!RN(e)}function L$(e){let t=[],n=new Map;for(let o of e){if(!_N(o)){t.push(o);continue}if(o.predicate!==TN)continue;let r=dl(o.subject),i=String(o.object??"").trim();if(!r||!i)continue;let a=n.get(r);a||n.set(r,a=new Set),a.add(i)}let s=new Map;for(let[o,r]of n)s.set(o,[...r].sort());return{claims:t,speakersByClaimId:s}}var jN,dl,N$,TN,AN,MV,xp=L(()=>{Ve();ll();la();qi();Nn();C$();jN=/^fact:[0-9a-f]{16}$/,dl=e=>String(e??"").trim().toLowerCase(),N$=e=>jN.test(dl(e));TN="mgx:attributedTo";AN=[["free","release"]],MV=new Map(AN.flatMap(e=>e.map(t=>[t,e[0]])))});function fa(e){let t=String(e||""),n=t.indexOf(fl);return n<0?"":t.slice(n+fl.length)}function LN(e){let t=1,n=0;for(let s of e)t*=1-CN(s),n+=1;return n?NN(Math.min(1,1-t)):0}function B$(e,t,n){let s=Date.parse(e),o=Date.parse(t);return Number.isFinite(s)?Number.isFinite(o)?n(s,o)===s?String(e):String(t):String(e):Number.isFinite(o)?String(t):""}function W$(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt),o=Number.isFinite(n)?n:-1/0,r=Number.isFinite(s)?s:-1/0;return o!==r?r-o:e.id<t.id?-1:e.id>t.id?1:0}function G$(e,t="",n=""){let s=t,o=n;for(let r of e)s=z$(s,r.assertedAt),o=U$(o,r.assertedAt);return{earliest:s,latest:o}}function _p({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let c=[...new Set(o)].filter(Boolean).sort(),l=a?LN(c.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:IN,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:createdAt",key:"createdAt",value:r},{prop:"mgx:sourceId",key:"sourceId",value:t},{prop:s,key:s===ii?"rollupSourceIds":"rollupRecordIds",value:c.join(" ")},{prop:da,key:"rollupCount",value:String(c.length)},{prop:hs,key:"rollupEarliest",value:r},{prop:ms,key:"rollupLatest",value:i},...l===void 0?[]:[{prop:ai,key:"rollupPrior",value:String(l)}]]}}function V$({groupId:e,sourceType:t,heads:n=[],existing:s=null,priorFor:o}){if(!e||!t||n.length<64||n.length<=8)return null;let i=n.slice().sort(W$).slice(8);if(!i.length)return null;let{earliest:a,latest:c}=G$(i,Vt(s,hs),Vt(s,ms));return{rollup:_p({id:kp(e,t),sourceKey:`rollup:${t}`,template:Tp(i[0].record||s),idsProp:ii,ids:[...pa(s),...i.map(u=>u.sourceId)],earliest:a,latest:c,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function K$({groupId:e,sourceId:t,leaves:n=[],existing:s=null}){if(!e||!t||n.length<8||n.length<=2)return null;let o=n.slice().sort(W$),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:c}=G$(i,Vt(s,hs),Vt(s,ms));return{rollup:_p({id:jp(e,t),sourceKey:t,template:Tp(i[0].record||s),idsProp:ua,ids:[...ON(s),...i.map(u=>u.id)],earliest:a,latest:c}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function Ap(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Hs(s),r=o?ii:ua,i=a=>Rp(Vt(a,r));return _p({id:s,sourceKey:Vt(e,"mgx:sourceId")||Vt(t,"mgx:sourceId"),template:Tp(Vt(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:z$(Vt(e,hs),Vt(t,hs)),latest:U$(Vt(e,ms),Vt(t,ms)),priorFor:o?n:void 0})}function H$(e,t){if(!t)return!1;for(let n of e||[])if(pa(n).includes(t))return!0;return!1}var IN,P$,M$,pl,F$,ii,ua,da,hs,ms,ai,fl,D$,kp,jp,Hs,ci,hl,Vt,Rp,pa,ON,CN,NN,z$,U$,Tp,Ip=L(()=>{IN="Fact",P$=64,M$=8,pl=8,F$=2,ii="mgx:rollupSourceIds",ua="mgx:rollupRecordIds",da="mgx:rollupCount",hs="mgx:rollupEarliest",ms="mgx:rollupLatest",ai="mgx:rollupPrior",fl="@rollup:",D$="#rollup",kp=(e,t)=>`${e}${fl}${t}`,jp=(e,t)=>`${e}@${t}${D$}`,Hs=e=>String(e||"").includes(fl),ci=e=>String(e||"").endsWith(D$),hl=e=>Hs(e)||ci(e);Vt=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Rp=e=>String(e||"").split(" ").filter(Boolean),pa=e=>Rp(Vt(e,ii)),ON=e=>Rp(Vt(e,ua)),CN=e=>Math.max(0,Math.min(1,Number(e)||0)),NN=e=>Number(e.toFixed(6));z$=(e,t)=>B$(e,t,Math.min),U$=(e,t)=>B$(e,t,Math.max);Tp=e=>({label:e?.label||"",subject:Vt(e,"rdf:subject"),predicate:Vt(e,"rdf:predicate"),object:Vt(e,"rdf:object")})});function Lp(e){let t=String(e||"");return Np(t)?t.slice(0,-wl.length):""}function q$(e,t){let n=Date.parse(e),s=Date.parse(t);return Number.isFinite(n)?Number.isFinite(s)&&s>n?String(t):String(e):Number.isFinite(s)?String(t):""}function Pp({id:e,sourceId:t,template:n,ids:s,retractedAt:o,tags:r}){let i=[...new Set(s)].filter(Boolean).sort(),a=[...new Set(r)].filter(Boolean).sort();return{id:e,label:n?.label||"",class:en,derived_from:[],mentions:[],attributes:[{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:sourceId",key:"sourceId",value:t||""},{prop:gl,key:"retractedRecordIds",value:i.join(" ")},{prop:Op,key:"retractedCount",value:String(i.length)},{prop:bl,key:"retractedAt",value:o||""},...a.length?[{prop:ha,key:"provenance",value:a.join(" | ")}]:[]]}}function X$({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...sr(o),...n].filter(Boolean);return a.length?Pp({id:Cp(e,t),sourceId:t,template:r||Y$(o),ids:a,retractedAt:q$(or(o),s),tags:[...ma(Fn(o,ha)),...ma(i)]}):null}function J$(e,t){let n=Y$(Fn(e,"rdf:subject")?e:t);return Pp({id:e?.id||t?.id,sourceId:Fn(e,"mgx:sourceId")||Fn(t,"mgx:sourceId"),template:n,ids:[...sr(e),...sr(t)],retractedAt:q$(or(e),or(t)),tags:[...ma(Fn(e,ha)),...ma(Fn(t,ha))]})}function MN(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function FN(e,t,n=""){return!e||!t||!sr(e).includes(t)?!1:MN(n,or(e))}function yl(e,t,n=""){for(let s of e||[])if(FN(s,t,n))return!0;return!1}function DN(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function BN(e){let t=String(e||"").split(" ").filter(Boolean),n=t[0]||"",s=n==="-"||!Number.isFinite(Date.parse(n))?"":n,o=s||n==="-"?t.slice(1):t;return{retractedAt:s,ids:o}}function $l(e){let t=Lp(e?.id);return t?{id:e.id,subject:t,predicate:ml,object:DN(or(e),sr(e)),provenance:Fn(e,ha)}:null}function Sl(e){if(!e||e.predicate!==ml)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=BN(e.object);return o.length?Pp({id:`${t}${wl}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:ma(e.provenance)}):null}var en,ml,gl,bl,Op,wl,ha,Cp,Np,Fn,PN,ma,sr,or,Y$,Mp=L(()=>{en="Retraction",ml="mgx:retracted",gl="mgx:retractedRecordIds",bl="mgx:retractedAt",Op="mgx:retractedCount",wl="#retracted",ha="mgx:factProvenance",Cp=(e,t)=>`${e}@${t}${wl}`,Np=e=>String(e||"").endsWith(wl);Fn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",PN=e=>String(e||"").split(" ").filter(Boolean),ma=e=>String(e||"").split(" | ").filter(Boolean),sr=e=>PN(Fn(e,gl)),or=e=>Fn(e,bl);Y$=e=>({label:e?.label||"",subject:Fn(e,"rdf:subject"),predicate:Fn(e,"rdf:predicate"),object:Fn(e,"rdf:object")})});var zN,UN,WN,GN,Fp,UV,Q$=L(()=>{Nn();zN="mgx:worldName",UN="mgx:nodeName",WN="mgx:playedBy",GN="mgx:waved",Fp="mgx:invitedBy",UV=Object.freeze([zN,UN,WN,GN,Fp])});function vl(e){let t=new Set;for(let n of e||[])n?.predicate===Fp&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function Dp(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function El({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=Dp(t,n);if(!o.length)return[];if(typeof s!="function")return[];let r=new Map;for(let a of o){let c=s(a);r.set(a,new Set([...c||[]].map(String)))}return[...new Set((e||[]).map(String).filter(Boolean))].sort().filter(a=>o.every(c=>r.get(c).has(a)))}var Bp=L(()=>{Q$()});function gs(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function QN(e,t){(!e?.class||!VN.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function ZN(e,t){for(let a of["rdf:subject","rdf:predicate","rdf:object"])ga(gs(e,a))||t.push(`a Fact needs a non-empty ${a}`);for(let a of["rdf:subject","rdf:object"]){let c=gs(e,a);c!==void 0&&YN.test(c)&&t.push(`a Fact's ${a} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(c)})`)}let n=gs(e,"mgx:factProvenance");n!==void 0&&!ga(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";XN(s)&&!Z$.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=gs(e,"mgx:sourceId");o!==void 0&&!ga(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=gs(e,"mgx:observedAt");r!==void 0&&!Number.isFinite(Date.parse(r))&&t.push(`mgx:observedAt, when present, must be a parseable instant (got ${JSON.stringify(r)})`);let i=gs(e,"mgx:extractionFinding");if(i!==void 0){let a=i.split(" ").filter(Boolean);a.length||t.push("mgx:extractionFinding, when present, must name at least one finding");for(let c of a)KN.has(c)||t.push(`mgx:extractionFinding must name findings from the closed vocabulary ${xl.join(" | ")} (got ${JSON.stringify(c)})`)}for(let a of JN){let c=gs(e,a);if(c===void 0)continue;let l=c.split(" ").filter(Boolean);l.length||t.push(`${a}, when present, must name at least one record id`);for(let u of l)Z$.test(u)||t.push(`${a} must name Fact record ids (got ${JSON.stringify(u)})`)}}function eL(e,t){ga(gs(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=gs(e,"mgx:ruleKind");if(!n||!HN.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${eS.join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of qN[n])ga(gs(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function tL(e){let t=[];return QN(e,t),e?.class==="Fact"&&ZN(e,t),e?.class==="Rule"&&eL(e,t),{ok:t.length===0,violations:t}}function zp(e){let t=tL(e);if(!t.ok){let n=new Error(`SHACL validation failed for ${e?.class} "${e?.id}": ${t.violations.join(" | ")}`);throw n.violations=t.violations,n}}var VN,xl,KN,eS,HN,qN,YN,Z$,XN,JN,ga,Up=L(()=>{VN=new Set(["Utterance","Fact","Session","Source","Rule"]),xl=Object.freeze(["identifier-token","clause-fallback","pronoun-carry","definitional-frame","reported-speech"]),KN=new Set(xl),eS=Object.freeze(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),HN=new Set(eS),qN={compose2:["mgx:ruleBase1","mgx:ruleBase2"],filter:["mgx:ruleBase1","mgx:ruleFilterProperty"],recursive:["mgx:ruleBaseCase","mgx:ruleRecStep"],"action-signature":["mgx:ruleActionSubjectClass","mgx:ruleActionTargetClass"],"action-precond":["mgx:ruleActionPrecondShape","mgx:ruleActionPrecondPredicate","mgx:ruleActionPrecondRole","mgx:ruleActionPrecondScope"],"action-effect":["mgx:ruleActionEffectPredicate","mgx:ruleActionEffectSubject"],"action-constraint":["mgx:ruleActionConstraintLeft","mgx:ruleActionConstraintRight","mgx:ruleActionConstraintGuard"]},YN=/[.!?]\s+\w/,Z$=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,XN=e=>e.includes("@")||/#v\d/.test(e),JN=["mgx:supersedes","mgx:supersededBy"];ga=e=>typeof e=="string"&&e.trim().length>0});function sS(e,t){return t?.rowKey&&(e.rowKey=t.rowKey),t?.rowClass&&(e.rowClass=t.rowClass),t?.provenance&&(e.provenance=t.provenance),t?.status&&(e.status=t.status),e}function wa(e){let t=[];if(!e||typeof e!="object")return["not an object"];e.kind!==li&&t.push(`kind is ${JSON.stringify(e.kind)}, expected ${JSON.stringify(li)}`),e.contractVersion!==1&&t.push(`contractVersion is ${JSON.stringify(e.contractVersion)}, expected 1`);for(let n of nL)typeof e[n]!="function"&&t.push(`${n}() is missing`);for(let n of sL)n in e&&e[n]!=null&&typeof e[n]!="function"&&t.push(`${n} is present but not a function`);return t}function Rl(e){return wa(e).length===0}function Wp(e){return new TextEncoder().encode(String(e?.json??"")).length}function _l(e){let t=[];if(!e||typeof e!="object")return["not an object"];if((typeof e.rowKey!="string"||!e.rowKey)&&t.push("rowKey must be a non-empty string"),kl.includes(e.rowClass)||t.push(`rowClass ${JSON.stringify(e.rowClass)} is outside the closed set (${kl.join(", ")})`),typeof e.term!="string"&&t.push("term must be a string, empty when the row has no term read path"),typeof e.json!="string"||!e.json)t.push("json must be a non-empty string");else{let n=Wp(e);n>rr&&t.push(`json is ${n} bytes, over the ${rr}-byte cap`)}return e.expiresAt!==void 0&&!Number.isInteger(e.expiresAt)&&t.push("expiresAt must be epoch seconds as an integer when present"),t}function oS(e){return _l(e).length===0}function ui(e,t={}){let n=_l(e);if(!n.length)return e;throw new Dn(`invalid memory row ${JSON.stringify(e?.rowKey??null)}: ${n.join("; ")}`,{rowKey:typeof e?.rowKey=="string"?e.rowKey:"",rowClass:e?.rowClass,...t})}var li,jl,kl,ba,rr,tS,nS,Dn,ir,nL,sL,di=L(()=>{li="tmct-memory-row-backend",jl=1,kl=Object.freeze(["fact","source","utterance","session","rule","retraction","edge-group","bookkeeping"]),ba="bookkeeping",rr=4096,tS="TMCT_BACKEND_REJECTED",nS="TMCT_BACKEND_UNAVAILABLE";Dn=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendRejected",this.code=tS,sS(this,n)}},ir=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendUnavailable",this.code=nS,sS(this,n)}},nL=Object.freeze(["readRows","putRows","deleteRows","readMeta","putMeta","deleteAll","close"]),sL=Object.freeze(["readRowsByTerm"])});function lL(){return Gp||(Gp=new Map([[Ke,"fact"],[bs,"source"],[So,"utterance"],[ar,"session"],[ws,"rule"],[en,"retraction"]])),Gp}function uL(e){let t=lL().get(e?.class);if(t)return t;throw new Dn(`individual ${JSON.stringify(e?.id??null)} has class ${JSON.stringify(e?.class??null)}, which no row class covers`,{rowKey:String(e?.id||"")})}function dL(e){return(e?.attributes||[]).some(t=>t?.prop===fi)?{...e,attributes:e.attributes.filter(t=>t?.prop!==fi)}:e}function fL(e,t){let n=new Map,s=0;for(let o of e||[]){let r;try{r=Number(JSON.parse(o?.json??"{}").ord)}catch{r=NaN}Number.isFinite(r)&&(n.set(o.rowKey,r),r>=s&&(s=r+1))}for(let o of t?.values()||[])Number.isFinite(o)&&o>=s&&(s=o+1);return o=>{let r=n.get(o)??t?.get(o);if(r!==void 0)return r;let i=s;return s+=1,i}}function rS(e,t,{onOversizedRow:n,log:s}){let o=Wp(e);if(o<=rr||n==="keep")return!0;let r=t?` (provenance: ${t})`:"",i=`${e.rowClass} row ${e.rowKey} serializes to ${o} bytes, over the ${rr}-byte cap${r}`;if(n==="drop")return s(`dropped an oversized memory row: ${i}`),!1;throw new Dn(i,{rowKey:e.rowKey,rowClass:e.rowClass,provenance:t})}function Vp(e,{priorRows:t=null,priorOrds:n=null,onOversizedRow:s="throw",log:o=pL}={}){if(!hL.has(s))throw new TypeError(`onOversizedRow must be "throw", "drop", or "keep", got ${JSON.stringify(s)}`);let r=fL(t,n),i={onOversizedRow:s,log:o},a=[];for(let c of e?.individuals||[]){if(!c?.id)continue;let l=uL(c),u={rowKey:String(c.id),rowClass:l,term:l==="fact"?V(cL(c,"subject")):"",json:JSON.stringify({ord:r(String(c.id)),individual:dL(c)})};rS(u,lS(c,iL),i)&&a.push(u)}for(let c of e?.objectProperties||[]){if(!c?.prop)continue;let l=`${oL}${c.prop}`,u={rowKey:l,rowClass:cS,term:"",json:JSON.stringify({ord:r(l),group:c})};rS(u,"",i)&&a.push(u)}return a}function mL(e){let t=[],n=[];for(let s=0;s<e.length;s+=1)e[s]?.class===Ke&&(t.push(s),n.push(e[s]));n.sort((s,o)=>s.id<o.id?-1:s.id>o.id?1:0);for(let s=0;s<t.length;s+=1)e[t[s]]=n[s]}function Tl(e){let t="",n="",s=!1,o=!1,r=!1;for(let i of e?.attributes||[])!o&&i?.key==="prose_tokens"&&(t=i.value||"",o=!0),!r&&i?.prop===rL&&(n=i.value||"",r=!0),i?.prop===fi&&(s=!0);return{proseTokens:t,supersedes:n,carriesSupersededBy:s}}function dS(e,t){t.index=e.proseIndex,Object.defineProperty(e,uS,{value:t,writable:!0,configurable:!0,enumerable:!1})}function gL(e,t){Object.defineProperty(e,Al,{value:{individuals:e.individuals,ids:t},writable:!0,configurable:!0,enumerable:!1})}function Kp(e){let t=e?.[Al];return!t||t.individuals!==e.individuals?null:t}function fS(e,t){let n=Kp(e);if(!n)return!1;let s=new Set(n.ids);for(let o of t)if(!s.has(String(o)))return!1;return!0}function pS(e,t){let n=Kp(e);if(!n)return!1;let s=new Set([...t].map(a=>String(a))),o=new Map;for(let a of e.individuals||[])a?.id&&o.set(String(a.id),a);let r=[],i=[];for(let a of n.ids){if(s.has(a))continue;let c=o.get(a);if(!c)return!1;r.push(a),i.push(c)}return e.individuals=i,n.individuals=i,n.ids=r,!0}function hS(e){e&&e[Al]&&(e[Al]=null)}function mS(e,t){let n=Kp(e);n&&n.ids.push(String(t))}function gS(e,{needSupersessions:t}={}){let n=e[uS];return!n||n.index!==e.proseIndex||!e.proseIndex||t&&!n.successorsById?null:n}function aS(e,t){let n=0,s=e.length;for(;n<s;){let o=n+s>>1;e[o]<t?n=o+1:s=o}return n}function Il(e,t,n,s){if(n!==s){for(let o of n?n.split(" "):[]){let r=e[o];if(!r)continue;let i=aS(r,t);r[i]===t&&(r.splice(i,1),r.length||delete e[o])}for(let o of s?s.split(" "):[]){let r=e[o]||(e[o]=[]);r.splice(aS(r,t),0,t)}}}function bS(e,t){let n=(e?.attributes||[]).some(o=>o?.prop===fi);if(!t&&!n)return;let s=(e.attributes||[]).filter(o=>o?.prop!==fi);e.attributes=t?[...s,{prop:fi,key:"supersededBy",value:[...t].sort().join(" ")}]:s}function bL(e,t){let n=new Map,s=new Map,o=new Map;for(let r of t){let{proseTokens:i,supersedes:a}=Tl(r);i&&s.set(r.id,i);let c=wS(r,a);if(c){o.set(r.id,c);for(let l of c.split(" ").filter(Boolean)){let u=n.get(l)||new Set;u.add(r.id),n.set(l,u)}}}for(let r of t)bS(r,n.get(r?.id));e.proseIndex=null,e.proseIndex=Ad(t),dS(e,{tokensById:s,supersedesById:o,successorsById:n})}function wL(e,t,n){let{tokensById:s,supersedesById:o,successorsById:r}=n,i=e.proseIndex,a=new Set,c=new Set,l=0,u=0,d=(f,h)=>{let m=r.get(h);m?.delete(f)&&(m.size||r.delete(h),a.add(h))},p=(f,h)=>{let m=r.get(h)||new Set;m.has(f)||(m.add(f),r.set(h,m),a.add(h))};for(let f of t){let h=f?.id,{proseTokens:m,supersedes:b,carriesSupersededBy:g}=Tl(f);g&&c.add(h),m&&(l+=1);let w=s.get(h)||"";m!==w&&(Il(i,h,w,m),m?s.set(h,m):s.delete(h));let y=wS(f,b);y&&(u+=1);let S=o.get(h)||"";if(y!==S){for(let T of S.split(" ").filter(Boolean))d(h,T);for(let T of y.split(" ").filter(Boolean))p(h,T);y?o.set(h,y):o.delete(h)}}if(s.size!==l||o.size!==u){let f=new Set(t.map(h=>h?.id));for(let[h,m]of s)f.has(h)||(Il(i,h,m,""),s.delete(h));for(let[h,m]of o)if(!f.has(h)){for(let b of m.split(" ").filter(Boolean))d(h,b);o.delete(h)}}for(let f of c)a.add(f);for(let f of r.keys())a.add(f);if(a.size)for(let f of t)a.has(f?.id)&&bS(f,r.get(f?.id))}function yL(e){let t=[ar,So,Ke,bs,ws],n=new Map(t.map(s=>[s,{name:s,count:0,sample:[]}]));for(let s of e){let o=n.get(s?.class);o&&(o.count+=1,o.sample.length<3&&o.sample.push(s.label))}return t.map(s=>n.get(s)).filter(s=>s.count)}function $L(e){let t="";for(let n of e){if(n?.class!==So)continue;let s=lS(n,aL);s>t&&(t=s)}return t}function Ol(e,{meta:t=null}={}){let n=ys();t?.memory!==void 0&&(n.memory=t.memory),t?.prefixes!==void 0&&(n.prefixes=t.prefixes);let s=[],o=[];for(let a of e||[]){if(!a||a.rowClass===ba)continue;let c=JSON.parse(a.json),u={ord:Number.isFinite(Number(c?.ord))?Number(c.ord):0,rowKey:String(a.rowKey||"")};a.rowClass===cS?o.push({...u,group:c?.group}):s.push({...u,individual:c?.individual})}s.sort(iS),o.sort(iS);let r=[],i=[];for(let a of s)a.individual&&(i.push(a.individual),r.push(String(a.individual.id??"")));return n.individuals=i,n.objectProperties=o.map(a=>a.group).filter(Boolean),gL(n,r),Cl(n)}function Cl(e){let t=e.individuals||[];mL(t);let n=gS(e,{needSupersessions:!0});return n?wL(e,t,n):bL(e,t),e.classes=yL(t),e.generated_at=$L(t),e}function yS(e){let t=e.individuals||[],n=gS(e);if(!n){let i=new Map;for(let a of t){let{proseTokens:c}=Tl(a);c&&i.set(a.id,c)}return e.proseIndex=null,e.proseIndex=Ad(t),dS(e,{tokensById:i,supersedesById:null,successorsById:null}),e}let{tokensById:s}=n;n.supersedesById=null,n.successorsById=null;let o=e.proseIndex,r=0;for(let i of t){let{proseTokens:a}=Tl(i);a&&(r+=1);let c=s.get(i?.id)||"";a!==c&&(Il(o,i?.id,c,a),a?s.set(i.id,a):s.delete(i?.id))}if(s.size!==r){let i=new Set(t.map(a=>a?.id));for(let[a,c]of s)i.has(a)||(Il(o,a,c,""),s.delete(a))}return e}function Hp(e,t){let n=new Map((e||[]).filter(i=>i?.rowKey).map(i=>[i.rowKey,i])),s=[],o=new Set;for(let i of t||[]){if(!i?.rowKey)continue;o.add(i.rowKey);let a=n.get(i.rowKey);a&&a.json===i.json&&a.term===i.term&&a.rowClass===i.rowClass||s.push(i)}let r=[...n.keys()].filter(i=>!o.has(i));return{puts:s,deletes:r}}var cS,oL,rL,fi,iL,aL,lS,cL,Gp,pL,hL,iS,uS,Al,wS,qp=L(()=>{Ue();Ve();Yn();di();cS="edge-group",oL="edge-group:",rL="mgx:supersedes",fi="mgx:supersededBy",iL="mgx:factProvenance",aL="mgx:utteranceTs",lS=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",cL=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Gp=null;pL=e=>console.warn(e),hL=new Set(["throw","drop","keep"]);iS=(e,t)=>e.ord-t.ord||(e.rowKey<t.rowKey?-1:e.rowKey>t.rowKey?1:0);uS=Symbol("tmct.carriedDerivations");Al=Symbol("tmct.assembledRowOrder");wS=(e,t)=>e?.class===Ke?t:""});var Yp={};Nt(Yp,{access:()=>EL,appendFile:()=>jL,basename:()=>UL,copyFile:()=>CL,createInterface:()=>HL,createReadStream:()=>LL,createRequire:()=>SL,createWriteStream:()=>PL,default:()=>YL,dirname:()=>DL,existsSync:()=>ML,fileURLToPath:()=>GL,isAbsolute:()=>zL,join:()=>FL,mkdir:()=>RL,mkdtemp:()=>_L,randomBytes:()=>VL,readFile:()=>xL,readFileSync:()=>vL,readdir:()=>NL,rename:()=>TL,resolve:()=>BL,rm:()=>IL,sep:()=>WL,spawnSync:()=>KL,stat:()=>OL,tmpdir:()=>qL,unlink:()=>AL,writeFile:()=>kL});var kt,SL,vL,EL,xL,kL,jL,RL,_L,TL,AL,IL,OL,CL,NL,LL,PL,ML,FL,DL,BL,zL,UL,WL,GL,VL,KL,HL,qL,YL,Xp=L(()=>{kt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SL=kt("createRequire"),vL=kt("readFileSync"),EL=kt("access"),xL=kt("readFile"),kL=kt("writeFile"),jL=kt("appendFile"),RL=kt("mkdir"),_L=kt("mkdtemp"),TL=kt("rename"),AL=kt("unlink"),IL=kt("rm"),OL=kt("stat"),CL=kt("copyFile"),NL=kt("readdir"),LL=kt("createReadStream"),PL=kt("createWriteStream"),ML=()=>!1,FL=(...e)=>e.join("/"),DL=e=>String(e).replace(/\/[^/]*$/,""),BL=(...e)=>e.join("/"),zL=e=>String(e).startsWith("/"),UL=e=>String(e).split("/").pop(),WL="/",GL=e=>String(e),VL=kt("randomBytes"),KL=kt("spawnSync"),HL=kt("createInterface"),qL=()=>"/tmp",YL={}});var XL,ya,Jp=L(()=>{XL=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,ya=class e extends Date{#n=!1;#e=!1;#t=null;constructor(t){let n=!0,s=!0,o="Z";if(typeof t=="string"){let r=t.match(XL);r?(r[1]||(n=!1,t=`0000-01-01T${t}`),s=!!r[2],s&&t[10]===" "&&(t=t.replace(" ","T")),r[2]&&+r[2]>23?t="":(o=r[3]||null,t=t.toUpperCase(),!o&&s&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#n=n,this.#e=s,this.#t=o)}isDateTime(){return this.#n&&this.#e}isLocal(){return!this.#n||!this.#e||!this.#t}isDate(){return this.#n&&!this.#e}isTime(){return this.#e&&!this.#n}isValid(){return this.#n||this.#e}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#t===null)return t.slice(0,-1);if(this.#t==="Z")return t;let n=+this.#t.slice(1,3)*60+ +this.#t.slice(4,6);return n=this.#t[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#t}static wrapAsOffsetDateTime(t,n="Z"){let s=new e(t);return s.#t=n,s}static wrapAsLocalDateTime(t){let n=new e(t);return n.#t=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#e=!1,n.#t=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#n=!1,n.#t=null,n}}});function JL(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function QL(e,t,n){let s=e.split(/\r\n|\n|\r/g),o="",r=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let a=s[i-1];a&&(o+=i.toString().padEnd(r," "),o+=": ",o+=a,o+=`
|
|
85
|
+
`),tier:b,topup:w}}async function Xf(e,{config:t,source:n,tel:s}){return(await n$(e,{config:t,source:n,tel:s})).text}var Jf=L(()=>{zt();Qe();sn();Gc();Ni();Fe();cs();Hc();qc();ot();Xf.ownsGraphLoad=!0});function s$(e,{graph:t,svc:n}){let{match:s}=Wt(n,ht(e,"symbol"),"symbol");return dw(Ur(t,s))}var o$=L(()=>{Fe();ot()});function Yc(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function na(e){return Yc(e).toString(16).padStart(8,"0")}function Qf(e){let t=new TextEncoder().encode(String(e)),n=t.length*8,s=new Uint8Array((t.length+8>>6)+1<<6);s.set(t),s[t.length]=128;let o=new DataView(s.buffer);o.setUint32(s.length-8,Math.floor(n/4294967296)),o.setUint32(s.length-4,n>>>0);let r=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),i=new Uint32Array(64),a=(u,d)=>u>>>d|u<<32-d;for(let u=0;u<s.length;u+=64){for(let y=0;y<16;y+=1)i[y]=o.getUint32(u+y*4);for(let y=16;y<64;y+=1){let S=a(i[y-15],7)^a(i[y-15],18)^i[y-15]>>>3,T=a(i[y-2],17)^a(i[y-2],19)^i[y-2]>>>10;i[y]=i[y-16]+S+i[y-7]+T>>>0}let[d,p,f,h,m,b,g,w]=r;for(let y=0;y<64;y+=1){let S=a(m,6)^a(m,11)^a(m,25),T=m&b^~m&g,v=w+S+T+WC[y]+i[y]>>>0,E=a(d,2)^a(d,13)^a(d,22),I=d&p^d&f^p&f,k=E+I>>>0;w=g,g=b,b=m,m=h+v>>>0,h=f,f=p,p=d,d=v+k>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+p>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+h>>>0,r[4]=r[4]+m>>>0,r[5]=r[5]+b>>>0,r[6]=r[6]+g>>>0,r[7]=r[7]+w>>>0}let c=new Uint8Array(32),l=new DataView(c.buffer);for(let u=0;u<8;u+=1)l.setUint32(u*4,r[u]);return c}function GC(e,t){let n=Qf(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function V(e){let t=Jn(e);return KC.test(t.toLowerCase())||(t=t.replace(/^\/c\/[a-z]{2,3}\//i,""),t=t.replace(/^[a-z][\w.-]*:/i,""),t=t.replace(/_/g," ").replace(/\s+/g," ").trim(),t=t.replace(/^(?:the|an?)\s+/i,"")),t.toLowerCase()}function us(e){let t=Jn(e);return HC.get(t)??t}function we(e,t,n){return Zo(V(e),us(t),V(n))}var WC,VC,Jn,KC,HC,Zo,Ve=L(()=>{WC=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);VC=2e3,Jn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,VC),KC=/^fact:[0-9a-f]{16}$/;HC=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"],["mgx:used-for","mgx:usedFor"],["mgx:made-of","mgx:madeOf"]]);Zo=(e,t,n)=>`fact:${GC(`${e}\0${t}\0${n}`,8)}`});function qC(e=r$,t=i$){let n=new Set((t||[]).map(([r,i])=>Xc(r,i))),s=(e||[]).map(r=>r.top),o=[];for(let r=0;r<s.length;r+=1)for(let i=r+1;i<s.length;i+=1){let[a,c]=s[r]<s[i]?[s[r],s[i]]:[s[i],s[r]];n.has(Xc(a,c))||o.push([a,c])}return o.sort((r,i)=>r[0]<i[0]?-1:r[0]>i[0]?1:r[1]<i[1]?-1:r[1]>i[1]?1:0),o}function sa({subClassEdges:e=[],typeEdges:t=[],maxHops:n=YC,maxVisited:s=XC,topClasses:o=r$,overlappingPairs:r=i$}={}){let i=new Map;for(let g of o||[])for(let w of g.labels||[]){let y=V(w);y&&i.set(y,g.top)}let a=(o||[]).map(g=>g.top),c=qC(o,r),l=new Set(c.map(([g,w])=>Xc(g,w))),u=new Map,d=(g,w)=>{!g||!w||g===w||(u.has(g)||u.set(g,new Set),u.get(g).add(w))};for(let[g,w]of e||[])d(g,w);for(let[g,w]of t||[])d(g,w);let p=new Map;for(let[g,w]of u)p.set(g,[...w].sort(Zf));let f=new Map;function h(g){if(!g)return[];if(f.has(g))return f.get(g);let w=[],y=i.get(g);if(y)w=[y];else{let S=new Set([g]),T=[g];for(let v=1;v<=n&&T.length&&S.size<s;v+=1){let E=[];for(let k of T){for(let R of p.get(k)||[])if(!S.has(R)&&(S.add(R),E.push(R),S.size>=s))break;if(S.size>=s)break}E.sort(Zf);let I=new Set;for(let k of E){let R=i.get(k);R&&I.add(R)}if(I.size){w=[...I].sort(Zf);break}T=E}}return f.set(g,w),w}function m(g,w){for(let y of g)for(let S of w)if(y===S||!l.has(Xc(y,S)))return!1;return!0}function b(g,w){if(!g||!w||g===w)return!1;let y=h(g);if(!y.length)return!1;let S=h(w);return S.length?m(y,S):!1}return{declines:b,topsOf:h,tops:a,disjointPairs:c}}var r$,i$,Xc,YC,XC,Zf,Jc=L(()=>{Ve();r$=[{top:"place",labels:["place","location"]},{top:"body part",labels:["body part","organ","internal organ","external body part","body covering","limb","blood vessel"]},{top:"living thing",labels:["living thing","organism"]},{top:"artifact",labels:["artifact","instrumentality"]},{top:"substance",labels:["substance","matter"]},{top:"event",labels:["event","happening"]},{top:"communication",labels:["communication","message"]},{top:"time period",labels:["time period"]},{top:"feeling",labels:["feeling","emotion"]}],i$=[["artifact","communication"],["artifact","place"],["artifact","substance"],["body part","substance"],["communication","event"],["communication","feeling"],["living thing","substance"]],Xc=(e,t)=>e<t?`${e}\u241F${t}`:`${t}\u241F${e}`;YC=6,XC=3e3,Zf=(e,t)=>e<t?-1:e>t?1:0});var mn={};Nt(mn,{CARDINALITY_RULE_CONFIDENCE:()=>nN,CAX_DW_RULE:()=>tp,CAX_DW_RULE_CONFIDENCE:()=>sp,CAX_MAXC0_RULE_CONFIDENCE:()=>oN,CLS_SVF1_RULE:()=>op,CLS_SVF1_RULE_CONFIDENCE:()=>ip,DEFAULT_MAX_ENVIRONMENTS:()=>ti,DISJOINT_PREDICATE:()=>Zr,ENTAILED_DISJOINT_PROVENANCE:()=>np,ENTAILED_PROVENANCE:()=>l$,ENTAILED_SCM_SVF_PROVENANCE:()=>up,ENTAILED_SVF1_PROVENANCE:()=>rp,ENTAILED_TYPE_PROVENANCE:()=>d$,ON_PROPERTY_PREDICATE:()=>Nn,SCM_SVF_RULE:()=>lp,SCM_SVF_RULE_CONFIDENCE:()=>dp,SOME_VALUES_FROM_PREDICATE:()=>Ln,SUBCLASS_PREDICATE:()=>Be,TYPE_PREDICATE:()=>Gt,buildCardinalityRestrictions:()=>cp,buildRelevanceFrontier:()=>ep,buildSubClassSuccessors:()=>Zc,deriveDisjointViolations:()=>m$,deriveSomeValuesFromApplication:()=>g$,deriveSomeValuesFromSubsumption:()=>b$,deriveSubClassClosure:()=>f$,deriveSubClassClosureDelta:()=>p$,deriveTypePropagation:()=>h$,entailedTrustFrom:()=>QC,findConsistencyViolations:()=>iN,findIsaChain:()=>fp,proveCardinalityAtLeast:()=>sN,proveMaxCardinalityZeroDenial:()=>rN,retractSubClassOf:()=>uN,syllogise:()=>y$});function a$(e,t,n){for(let s of t)if(typeof e?.[s]!="function")throw new TypeError(`${n} needs a store option carrying { ${t.join(", ")} } (memory/core.mjs's read/write functions) \u2014 missing ${s}`);return e}function QC(e,t=1){let n=(Array.isArray(e)?e:[]).filter(o=>typeof o=="number");if(!n.length)return null;let s=Math.max(0,Math.min(1,Math.min(...n)*t));return Number(s.toFixed(6))}function Gs(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function f$(e,{depth:t=32,budget:n=50,focus:s=null,gate:o=null}={}){let r=new Set,i=new Map;for(let[d,p]of e||[])!d||!p||d===p||(r.add(`${d}${ze}${p}`),i.has(d)||i.set(d,new Set),i.get(d).add(p));let a=s instanceof Set?s.size?s:null:Gs(s),c=(d,p,f)=>!a||a.has(d)||a.has(p)||a.has(f),l=[],u=new Set;for(let d=0;d<t;d+=1){let p=[];for(let[h,m]of i)for(let b of m){let g=i.get(b);if(g)for(let w of g){if(h===w)continue;let y=`${h}${ze}${w}`;r.has(y)||u.has(y)||c(h,b,w)&&(o?.declines(h,w)||p.push([h,b,w,y]))}}if(!p.length)break;p.sort((h,m)=>Pe(h[0],m[0])||Pe(h[2],m[2])||Pe(h[1],m[1]));let f=!1;for(let[h,m,b,g]of p)if(!u.has(g)){if(l.length>=n)break;u.add(g),l.push({subject:h,object:b,via:m}),i.has(h)||i.set(h,new Set),i.get(h).add(b),f=!0}if(l.length>=n||!f)break}return l}function p$(e,t,{depth:n=32,budget:s=50,focus:o=null,gate:r=null}={}){let i=new Set,a=new Map,c=new Map;for(let[m,b]of e||[])!m||!b||m===b||(i.add(`${m}${ze}${b}`),a.has(m)||a.set(m,new Set),a.get(m).add(b),c.has(b)||c.set(b,new Set),c.get(b).add(m));let l=[],u=new Set;for(let[m,b]of t||[]){if(!m||!b||m===b)continue;let g=`${m}${ze}${b}`;u.has(g)||(u.add(g),l.push([m,b]))}let d=o instanceof Set?o.size?o:null:Gs(o),p=(m,b,g)=>!d||d.has(m)||d.has(b)||d.has(g),f=[],h=new Set;for(let m=0;m<n&&l.length;m+=1){let b=[],g=(S,T,v)=>{if(S===v)return;let E=`${S}${ze}${v}`;i.has(E)||h.has(E)||p(S,T,v)&&(r?.declines(S,v)||b.push([S,T,v,E]))};for(let[S,T]of l){for(let v of a.get(T)||[])g(S,T,v);for(let v of c.get(S)||[])g(v,S,T)}if(!b.length)break;b.sort((S,T)=>Pe(S[0],T[0])||Pe(S[2],T[2])||Pe(S[1],T[1]));let w=!1,y=[];for(let[S,T,v,E]of b)if(!h.has(E)){if(f.length>=s)break;h.add(E),f.push({subject:S,object:v,via:T}),a.has(S)||a.set(S,new Set),a.get(S).add(v),c.has(v)||c.set(v,new Set),c.get(v).add(S),y.push([S,v]),w=!0}if(f.length>=s||!w)break;l=y}return f}function ds(e){let t=new Map;for(let[s,o]of e||[])!s||!o||s===o||(t.has(s)||t.set(s,new Set),t.get(s).add(o));let n=new Map;return s=>{if(n.has(s))return n.get(s);let o=new Set,r=[...t.get(s)||[]];for(;r.length;){let i=r.pop();if(!o.has(i)){o.add(i);for(let a of t.get(i)||[])o.has(a)||r.push(a)}}return n.set(s,o),o}}function ZC(e){return ds((e||[]).map(([t,n])=>[n,t]))}function ep(e,t){let n=[],s=[],o=new Map,r=new Map;for(let l of e||[])!l||!l.subject||!l.predicate||!l.object||(Ws(l.predicate)?n.push([l.subject,l.object]):yo(l.predicate)?s.push([l.subject,l.object]):ei(l.predicate)?o.set(l.subject,l.object):ra(l.predicate)&&r.set(l.subject,l.object));let i=ZC(n),a=new Set;for(let l of t||[]){let u=V(l);if(u){a.add(u);for(let d of i(u))a.add(d)}}let c=new Set(a);for(let[l,u]of s)a.has(u)&&c.add(l);for(let[l,u]of r)o.has(l)&&a.has(u)&&c.add(l);return c}function h$(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e,gate:r=null}={}){let i=ds(t),a=new Set,c=new Set;for(let[h,m]of o||[])h&&m&&a.add(`${h}${ze}${m}`);let l=s instanceof Set?s.size?s:null:Gs(s),u=(h,m,b)=>!l||l.has(h)||l.has(m)||l.has(b),d=[];for(let[h,m]of e||[]){if(!h||!m)continue;let b=`${h}${ze}${m}`;if(!c.has(b)){c.add(b);for(let g of i(m)){if(g===m||g===h)continue;let w=`${h}${ze}${g}`;a.has(w)||u(h,m,g)&&(r?.declines(h,g)||d.push([h,m,g,w]))}}}d.sort((h,m)=>Pe(h[0],m[0])||Pe(h[2],m[2])||Pe(h[1],m[1]));let p=[],f=new Set;for(let[h,m,b,g]of d)if(!f.has(g)){if(p.length>=n)break;f.add(g),p.push({subject:h,object:b,via:m})}return p}function m$(e,t,n,{budget:s=50,focus:o=null}={}){let r=ds(t),i=new Map,a=new Set;for(let[h,m]of n||[])!h||!m||h===m||(a.add(`${h}${ze}${m}`),a.add(`${m}${ze}${h}`),i.has(h)||i.set(h,new Set),i.get(h).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(h));if(!i.size)return[];let c=new Set,l=o instanceof Set?o.size?o:null:Gs(o),u=(h,m,b)=>!l||l.has(h)||l.has(m)||l.has(b),d=[];for(let[h,m]of e||[]){if(!h||!m)continue;let b=`${h}${ze}${m}`;if(!c.has(b)){c.add(b);for(let g of[m,...r(m)]){let w=i.get(g);if(w)for(let y of w){if(y===h)continue;let S=`${h}${ze}${y}`;a.has(S)||u(h,m,y)&&d.push([h,m,g,y,S])}}}}d.sort((h,m)=>Pe(h[0],m[0])||Pe(h[3],m[3])||Pe(h[2],m[2])||Pe(h[1],m[1]));let p=[],f=new Set;for(let[h,m,b,g,w]of d)if(!f.has(w)){if(p.length>=s)break;f.add(w),p.push({subject:h,object:g,viaType:m,viaClass:b})}return p}function g$(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=ds(n),a=new Map;for(let b of s||[]){if(!b||!b.restriction||!b.property||!b.target)continue;let g=`${b.property}${ze}${b.target}`;a.has(g)||a.set(g,new Set),a.get(g).add(b.restriction)}if(!a.size)return[];let c=new Set,l=new Map;for(let[b,g]of t||[])!b||!g||(c.add(`${b}${ze}${g}`),l.has(b)||l.set(b,new Set),l.get(b).add(g));let u=r instanceof Set?r.size?r:null:Gs(r),d=(b,g,w)=>!u||u.has(b)||u.has(g)||u.has(w),p=new Set,f=[];for(let[b,g,w]of e||[]){if(!b||!g||!w)continue;let y=V(g),S=`${b}${ze}${y}${ze}${w}`;if(p.has(S))continue;p.add(S);let T=l.get(w);if(T)for(let v of T)for(let E of[v,...i(v)]){let I=a.get(`${y}${ze}${E}`);if(I)for(let k of I){if(b===k)continue;let R=`${b}${ze}${k}`;c.has(R)||d(b,w,k)&&f.push([b,g,y,w,v,E,k,R])}}}f.sort((b,g)=>Pe(b[0],g[0])||Pe(b[6],g[6])||Pe(b[1],g[1])||Pe(b[3],g[3]));let h=[],m=new Set;for(let[b,g,w,y,S,T,v,E]of f)if(!m.has(E)){if(h.length>=o)break;m.add(E),h.push({subject:b,object:v,viaProperty:g,viaPropertyKey:w,viaValue:y,viaType:S,viaTarget:T})}return h}function cp(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(ei(r.predicate))t.set(r.subject,r.object);else if(JC(r.predicate))s.set(r.subject,r.object);else{let i=tN[String(r.predicate).trim().toLowerCase()];if(!i)continue;let a=Number(r.object);Number.isFinite(a)&&n.set(r.subject,{kind:i,n:a})}let o=[];for(let[r,{kind:i,n:a}]of n){if(t.get(r)!==eN)continue;let c=s.get(r);c&&o.push({restriction:r,kind:i,n:a,onClass:c})}return o.sort((r,i)=>Pe(r.restriction,i.restriction)),o}function b$(e,t,{budget:n=50,focus:s=null}={}){let o=ds(t),r=new Map;for(let p of e||[]){if(!p||!p.restriction||!p.property||!p.target)continue;let f=V(p.property);r.has(f)||r.set(f,[]),r.get(f).push({restriction:p.restriction,target:p.target})}let i=new Set;for(let[p,f]of t||[])p&&f&&i.add(`${p}${ze}${f}`);let a=s instanceof Set?s.size?s:null:Gs(s),c=(p,f)=>!a||a.has(p)||a.has(f),l=[];for(let[,p]of r)if(!(p.length<2))for(let f of p)for(let h of p){if(f.restriction===h.restriction||f.target===h.target||!o(f.target).has(h.target))continue;let m=`${f.restriction}${ze}${h.restriction}`;i.has(m)||c(f.restriction,h.restriction)&&l.push([f.restriction,h.restriction,f.target,h.target,m])}l.sort((p,f)=>Pe(p[0],f[0])||Pe(p[1],f[1]));let u=[],d=new Set;for(let[p,f,h,m,b]of l)if(!d.has(b)){if(u.length>=n)break;d.add(b),u.push({subject:p,object:f,viaY1:h,viaY2:m})}return u}function w$(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=ds(e),a=r instanceof Set?r.size?r:null:Gs(r),c=p=>!a||a.has(n)||a.has(p),l=new Map;for(let[p,f]of e||[])!p||!f||(l.has(p)||l.set(p,new Set),l.get(p).add(f));let u=new Map((t||[]).map(p=>[p.restriction,p])),d=0;for(let p of[n,...i(n)]){if(d>=o)break;if(d+=1,!!c(p))for(let f of l.get(p)||[]){let h=u.get(f);if(h&&s(h))return{viaClass:p,viaRestriction:f,record:h}}}return null}function sN(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=w$(e,t,n,a=>a.onClass===s&&(a.kind==="exactly"||a.kind==="min")&&a.n>=o,r);return i?{subject:n,object:s,m:o,n:i.record.n,kind:i.record.kind,viaClass:i.viaClass,viaRestriction:i.viaRestriction}:null}function rN(e,t,n,s,o={}){if(!s)return null;let r=w$(e,t,n,i=>i.onClass===s&&i.kind==="max"&&i.n===0,o);return r?{subject:n,object:s,viaClass:r.viaClass,viaRestriction:r.viaRestriction}:null}function iN(e,t,n,{budget:s=50,focus:o=null}={}){let r=ds(t),i=new Map;for(let[f,h]of n||[])!f||!h||f===h||(i.has(f)||i.set(f,new Set),i.get(f).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(f));if(!i.size)return[];let a=new Map;for(let[f,h]of e||[])!f||!h||(a.has(f)||a.set(f,new Set),a.get(f).add(h));let c=o instanceof Set?o.size?o:null:Gs(o),l=f=>!c||c.has(f),u=[],d=new Set;for(let[f,h]of a){if(!l(f))continue;let m=[...h].sort();for(let b=0;b<m.length;b+=1)for(let g=b+1;g<m.length;g+=1){let[w,y]=[m[b],m[g]],S=[w,...r(w)],T=[y,...r(y)],v=null;for(let I of S){let k=i.get(I);if(k){for(let R of T)if(k.has(R)){v=[I,R];break}if(v)break}}if(!v)continue;let E=`${f}${ze}${w}${ze}${y}`;d.has(E)||(d.add(E),u.push([f,w,y,v[0],v[1]]))}}u.sort((f,h)=>Pe(f[0],h[0])||Pe(f[1],h[1])||Pe(f[2],h[2]));let p=[];for(let[f,h,m,b,g]of u){if(p.length>=s)break;p.push({subject:f,classA:h,classB:m,viaA:b,viaB:g})}return p}async function y$(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=ti,full:i=!1,store:a,senseGate:c=!0}={}){let{loadMemory:l,readFactRows:u,appendFacts:d}=a$(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),p=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),h=u(f),m=h.filter(A=>Ws(A.predicate)).map(A=>[A.subject,A.object]),b=h.filter(A=>yo(A.predicate)).map(A=>[A.subject,A.object]),g=h.filter(A=>er(A.predicate)).map(A=>[A.subject,A.object]),w=new Map,y=new Map,S=[];for(let A of h){let me=String(A.predicate||"").trim().toLowerCase();ei(A.predicate)?w.set(A.subject,A.object):ra(A.predicate)?y.set(A.subject,A.object):ap.has(me)||S.push([A.subject,A.predicate,A.object])}let T=[];for(let[A,me]of w){let Ce=y.get(A);Ce&&T.push({restriction:A,property:me,target:Ce})}let v=c?sa({subClassEdges:h.filter(A=>Ws(A.predicate)&&!Qc(A.provenance)).map(A=>[A.subject,A.object]),typeEdges:h.filter(A=>yo(A.predicate)&&!Qc(A.provenance)).map(A=>[A.subject,A.object])}):null,E=Gs(s),I=o&&E?ep(h,[...E]):E,k=I===null&&p?await a.loadSyllogiseState(e):null,R=new Set(h.map(A=>A.id)),$=Array.isArray(k?.factIds)?k.factIds.filter(A=>!R.has(A)):[],_=k&&Array.isArray(k.factIds)&&!$.length&&!i?"delta":"full",O=_==="delta"?new Set(k.factIds):null,x=_==="delta"?h.filter(A=>!O.has(A.id)):h,j=x.length,M=new Map;for(let A of h)M.set(`${A.subject}${ze}${A.predicate}${ze}${A.object}`,A.trust);let D=(A,me,Ce)=>M.get(`${A}${ze}${me}${ze}${Ce}`),H=(A,me,Ce)=>M.has(`${A}${ze}${me}${ze}${Ce}`),Y=A=>A.filter(me=>typeof me=="number"),Z=_==="delta"&&!x.length,P=_==="delta"?x.filter(A=>Ws(A.predicate)).map(A=>[A.subject,A.object]):[],K=_==="delta"?P.length?p$(m,P,{depth:t,budget:n,focus:I,gate:v}):[]:f$(m,{depth:t,budget:n,focus:I,gate:v}),W=m.concat(K.map(A=>[A.subject,A.object])),C=I,F=null;if(_==="delta"&&!Z){let A=h.concat(K.map(Ce=>({subject:Ce.subject,predicate:Be,object:Ce.object}))),me=[];for(let Ce of x)me.push(Ce.subject,Ce.object);F=ep(A,me),C=F}let N=A=>!F||F.has(A),B=F?b.filter(([A,me])=>N(A)||N(me)):b,z=new Set;if(F)for(let A of x)er(A.predicate)&&(z.add(A.subject),z.add(A.object));let U=F&&z.size?ds(W):null,G=F?b.filter(([A,me])=>N(A)||N(me)||U&&[...U(me)].some(Ce=>z.has(Ce))):b,J=new Set;if(F){for(let A of x)if(ei(A.predicate)||ra(A.predicate)){let me=w.get(A.subject);me&&J.add(V(me))}}let ae=F?S.filter(([A,me,Ce])=>N(A)||N(Ce)||J.has(V(me))):S,pe=Math.max(0,n-K.length),re=pe>0&&!Z?h$(B,W,{budget:pe,focus:C,presentTypeEdges:b,gate:v}):[],ee=Math.max(0,n-K.length-re.length),X=ee>0&&!Z?m$(G,W,g,{budget:ee,focus:C}):[],te=Math.max(0,n-K.length-re.length-X.length),oe=te>0&&T.length&&!Z?g$(ae,b,W,T,{budget:te,focus:C}):[],Te=Math.max(0,n-K.length-re.length-X.length-oe.length),ge=Te>0&&T.length>1&&!Z?b$(T,W,{budget:Te,focus:C}):[],Ie=new Map(T.map(A=>[A.restriction,A])),Ee=[...K.map(A=>({subject:A.subject,predicate:Be,object:A.object,provenance:l$,justification:[[we(A.subject,Be,A.via),we(A.via,Be,A.object)]]})),...re.map(A=>({subject:A.subject,predicate:Gt,object:A.object,provenance:d$,justification:[[we(A.subject,Gt,A.via),we(A.via,Be,A.object)]]})),...X.map(A=>{let me=H(A.viaClass,Zr,A.object),[Ce,js]=me?[A.viaClass,A.object]:[A.object,A.viaClass],Rs=Y([D(A.subject,Gt,A.viaType),D(Ce,Zr,js),...A.viaClass!==A.viaType?[D(A.viaType,Be,A.viaClass)]:[]]);return{subject:A.subject,predicate:Zr,object:A.object,provenance:np,justification:[[we(A.subject,Gt,A.viaType),we(Ce,Zr,js),...A.viaClass!==A.viaType?[we(A.viaType,Be,A.viaClass)]:[]]],...Rs.length?{premiseTrusts:Rs,ruleConfidence:sp}:{}}}),...oe.map(A=>{let me=Y([D(A.subject,A.viaProperty,A.viaValue),D(A.viaValue,Gt,A.viaType),D(A.object,Nn,A.viaPropertyKey),D(A.object,Ln,A.viaTarget),...A.viaType!==A.viaTarget?[D(A.viaType,Be,A.viaTarget)]:[]]);return{subject:A.subject,predicate:Gt,object:A.object,provenance:rp,justification:[[we(A.subject,A.viaProperty,A.viaValue),we(A.viaValue,Gt,A.viaType),we(A.object,Nn,A.viaPropertyKey),we(A.object,Ln,A.viaTarget),...A.viaType!==A.viaTarget?[we(A.viaType,Be,A.viaTarget)]:[]]],...me.length?{premiseTrusts:me,ruleConfidence:ip}:{}}}),...ge.map(A=>{let me=Ie.get(A.subject),Ce=Ie.get(A.object),js=Y([me&&D(A.subject,Nn,me.property),D(A.subject,Ln,A.viaY1),Ce&&D(A.object,Nn,Ce.property),D(A.object,Ln,A.viaY2),D(A.viaY1,Be,A.viaY2)]);return{subject:A.subject,predicate:Be,object:A.object,provenance:up,justification:[[...me?[we(A.subject,Nn,me.property)]:[],we(A.subject,Ln,A.viaY1),...Ce?[we(A.object,Nn,Ce.property)]:[],we(A.object,Ln,A.viaY2),we(A.viaY1,Be,A.viaY2)]],...js.length?{premiseTrusts:js,ruleConfidence:dp}:{}}})],xe=Ee.map(A=>({id:we(A.subject,A.predicate,A.object),subject:A.subject,predicate:A.predicate,object:A.object,environments:A.justification,write:A})),et=$$(h.concat(xe.map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object})))),ce=new Map(h.map(A=>[A.id,A])),le=A=>Ws(A)||yo(A)||er(A),de=A=>_!=="delta"||F!==null&&(F.has(A.subject)||F.has(A.object)),ut=h.filter(A=>le(A.predicate)&&Qc(A.provenance)&&oa(A).length<r&&de(A)).map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object,environments:oa(A),provenance:A.provenance})),Ct=[...xe,...ut].sort((A,me)=>Pe(A.subject,me.subject)||Pe(A.predicate,me.predicate)||Pe(A.object,me.object)),Yt=0,ie=!1,qe=0;for(let A of Ct){if(qe>=n){ie=!0;break}qe+=1;let me=et(A,{maxEnvironments:r+1}),{kept:Ce,truncated:js}=cN(A.environments,me,r);if(js&&(ie=!0),!(Ce.length<=A.environments.length)){if(Yt+=Ce.length-A.environments.length,A.write){A.write.justification=Ce;continue}Ee.push({subject:A.subject,predicate:A.predicate,object:A.object,justification:Ce,...S$(A.provenance,Ce,Rs=>ce.get(Rs)?.trust)||{}})}}let{ids:$t}=await d(e,Ee),Ze=[],St=0;for(let A of K)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.via,rule:c$}),St+=1;for(let A of re)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.via,rule:u$}),St+=1;for(let A of X)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.viaClass,rule:tp}),St+=1;for(let A of oe)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.viaValue,rule:op}),St+=1;for(let A of ge)Ze.push({id:$t[St],subject:A.subject,object:A.object,via:A.viaY1,rule:lp}),St+=1;let Ir=Ze.length>=n;if(I===null&&p&&!Ir){let A=new Set(R);for(let me of $t)A.add(me);await a.saveSyllogiseState(e,{version:1,factIds:[...A].sort(),completedAt:new Date().toISOString()})}return{derived:Ze,count:Ze.length,budget:n,depth:t,truncated:Ir,mode:_,deltaSize:j,environmentsAdded:Yt,alternatesTruncated:ie}}function Qc(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function aN(e){let t=[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map;for(let u of e){let d=String(u.predicate||"").trim().toLowerCase();Ws(u.predicate)?t.push([u.subject,u.object]):yo(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):er(u.predicate)?(s.has(u.subject)||s.set(u.subject,new Set),s.get(u.subject).add(u.object),s.has(u.object)||s.set(u.object,new Set),s.get(u.object).add(u.subject)):ei(u.predicate)?o.set(u.subject,u.object):ra(u.predicate)?r.set(u.subject,u.object):ap.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([V(u.predicate),u.object]))}let a=ds(t),c=(u,d)=>u!==d&&a(u).has(d),l=u=>{let d=o.get(u),p=r.get(u);return d&&p?{property:V(d),target:p}:null};return u=>{if(Ws(u.predicate)){if(c(u.subject,u.object))return!0;let d=l(u.subject),p=l(u.object);return!!(d&&p&&d.property===p.property&&c(d.target,p.target))}if(yo(u.predicate)){for(let p of n.get(u.subject)||[])if(c(p,u.object))return!0;let d=l(u.object);if(d){for(let[p,f]of i.get(u.subject)||[])if(p===d.property){for(let h of n.get(f)||[])if(h===d.target||c(h,d.target))return!0}}return!1}if(er(u.predicate)){for(let d of n.get(u.subject)||[])for(let p of[d,...a(d)])if(s.get(p)?.has(u.object))return!0;return!1}return!0}}function $$(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,c=new Map,l=new Map;for(let f of e){if(!f||!f.subject||!f.predicate||!f.object)continue;f.id&&t.add(f.id);let h=String(f.predicate||"").trim().toLowerCase();Ws(f.predicate)?(n.push([f.subject,f.object]),s.has(f.subject)||s.set(f.subject,new Set),s.get(f.subject).add(f.object)):yo(f.predicate)?(o.has(f.subject)||o.set(f.subject,new Set),o.get(f.subject).add(f.object)):er(f.predicate)?(r.add(`${f.subject}${ze}${f.object}`),i.has(f.subject)||i.set(f.subject,new Set),i.get(f.subject).add(f.object),i.has(f.object)||i.set(f.object,new Set),i.get(f.object).add(f.subject)):ei(f.predicate)?a.set(f.subject,f.object):ra(f.predicate)?c.set(f.subject,f.object):ap.has(h)||(l.has(f.subject)||l.set(f.subject,[]),l.get(f.subject).push([f.predicate,f.object]))}let u=ds(n),d=f=>s.get(f)||new Set,p=f=>{let h=a.get(f),m=c.get(f);return h&&m?{property:h,propertyKey:V(h),target:m}:null};return(f,{maxEnvironments:h=ti}={})=>{let m=[],b=new Set,g=w=>{if(m.length>=h||f.id&&w.includes(f.id)||!w.every(S=>t.has(S)))return;let y=[...w].sort().join(" ");b.has(y)||(b.add(y),m.push(w))};if(Ws(f.predicate)){for(let w of[...d(f.subject)].sort()){if(m.length>=h)break;w===f.subject||w===f.object||d(w).has(f.object)&&g([we(f.subject,Be,w),we(w,Be,f.object)])}if(m.length<h){let w=p(f.subject),y=p(f.object);w&&y&&w.propertyKey===y.propertyKey&&w.target!==y.target&&d(w.target).has(y.target)&&g([we(f.subject,Nn,w.property),we(f.subject,Ln,w.target),we(f.object,Nn,y.property),we(f.object,Ln,y.target),we(w.target,Be,y.target)])}return m}if(yo(f.predicate)){for(let y of[...o.get(f.subject)||[]].sort()){if(m.length>=h)break;y!==f.object&&d(y).has(f.object)&&g([we(f.subject,Gt,y),we(y,Be,f.object)])}let w=p(f.object);if(w){let y=[...l.get(f.subject)||[]].filter(([S])=>V(S)===w.propertyKey).sort((S,T)=>Pe(S[0],T[0])||Pe(S[1],T[1]));for(let[S,T]of y){if(m.length>=h)break;for(let v of[...o.get(T)||[]].sort()){if(m.length>=h)break;v!==w.target&&!d(v).has(w.target)||g([we(f.subject,S,T),we(T,Gt,v),we(f.object,Nn,w.propertyKey),we(f.object,Ln,w.target),...v!==w.target?[we(v,Be,w.target)]:[]])}}}return m}if(er(f.predicate)){let w=[];for(let y of o.get(f.subject)||[])for(let S of[y,...u(y)])(i.get(S)||new Set).has(f.object)&&w.push([y,S]);w.sort((y,S)=>Pe(y[0],S[0])||Pe(y[1],S[1]));for(let[y,S]of w){if(m.length>=h)break;let T=r.has(`${S}${ze}${f.object}`),[v,E]=T?[S,f.object]:[f.object,S];g([we(f.subject,Gt,y),we(v,Zr,E),...S!==y?[we(y,Be,S)]:[]])}return m}return m}}function cN(e,t,n){let s=[],o=new Set,r=!1;for(let i of[...e||[],...t||[]]){if(!Array.isArray(i)||!i.length)continue;let a=[...i].sort().join(" ");if(!o.has(a)){if(s.length>=n){r=!0;continue}o.add(a),s.push(i)}}return{kept:s,truncated:r}}function S$(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=lN.get(i);if(a!==void 0){s=a;break}}if(s===void 0)return null;let o=null,r=-1;for(let i of t||[]){let a=i.map(l=>n(l)).filter(l=>typeof l=="number");if(a.length!==i.length)continue;let c=Math.min(...a);c>r&&(r=c,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function uN(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=ti,store:i,sourceTags:a=[],predicate:c=Be}={}){let{loadMemory:l,readFactRows:u,removeFacts:d}=a$(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),p=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,h=(a||[]).filter(Boolean);if(h.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let m=V(t),b=V(n),g=we(m,c,b),w=await l(e),y=u(w),S=new Map(y.map(M=>[M.id,M]));if(!S.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let T=S.get(g).sourceIds||[],v=h.map(M=>f(g,M).slice(g.length+1)),E=h.length?T.filter(M=>v.includes(M)):[],I=!h.length||E.length>0;if(h.length&&!I)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let k=h.length>0&&E.length<T.length,R=new Set([g]),$=[g],_=new Map,O=!1;if(!k){let M=y.filter(Z=>oa(Z).length&&Qc(Z.provenance)),D=new Map;for(let Z of M)for(let P of oa(Z))for(let K of P)D.has(K)||D.set(K,new Set),D.get(K).add(Z.id);let H=0,Y=[g];for(;H<o;H+=1){let Z=new Set;for(let z of Y)for(let U of D.get(z)||[])R.has(U)||Z.add(U);let P=[...Z].map(z=>S.get(z)).sort((z,U)=>Pe(z.subject,U.subject)||Pe(z.predicate,U.predicate)||Pe(z.object,U.object));if(!P.length)break;let K=y.filter(z=>!R.has(z.id)&&!Z.has(z.id)),W=new Set(K.map(z=>z.id)),C=$$(K),F=aN(K),N=!1,B=!1;Y=[];for(let z of P){if(R.size>=s){B=!0;break}let U=oa(z),G=U.filter(ae=>ae.every(pe=>W.has(pe)));if(G.length){G.length!==U.length&&_.set(z.id,G);continue}let J=C(z,{maxEnvironments:r});if(J.length){_.set(z.id,J);continue}F(z)||(R.add(z.id),$.push(z.id),Y.push(z.id),N=!0)}if(B){O=!0;break}if(!N)break}!O&&H>=o&&(O=M.some(Z=>!R.has(Z.id)&&Z.justification.some(P=>R.has(P))))}let x=h.length?[...E.map(M=>`${g}@${M}`),...$.slice(1)]:$,{removed:j}=await d(e,x);if(p){let M=[..._.entries()].filter(([D])=>!R.has(D)).sort((D,H)=>Pe(D[0],H[0])).map(([D,H])=>{let Y=S.get(D);return{subject:Y.subject,predicate:Y.predicate,object:Y.object,justification:H,...S$(Y.provenance,H,Z=>S.get(Z)?.trust)||{}}});M.length&&await p(e,M)}return{retracted:j,count:j.length,budget:s,depth:o,truncated:O,found:!0,...h.length?{ownRecord:!0,stillStands:k}:{}}}function Zc(e){let t=new Map;for(let[n,s]of e||[])!n||!s||n===s||(t.has(n)||t.set(n,new Set),t.get(n).add(s));return t}function fp(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=s instanceof Map?s:Zc(s),a=[];for(let[l,u]of n||[])l===e&&u&&a.push({node:u,path:[{subject:l,predicate:Gt,object:u}]});for(let l of i.get(e)||[])a.push({node:l,path:[{subject:e,predicate:Be,object:l}]});let c=new Set([e]);for(let l=1;l<=o&&a.length;l+=1){for(let{node:d,path:p}of a)if(r.has(d))return p;if(l===o)break;let u=[];for(let{node:d,path:p}of a)if(!c.has(d)){c.add(d);for(let f of i.get(d)||[])c.has(f)||u.push({node:f,path:[...p,{subject:d,predicate:Be,object:f}]})}a=u}return null}var Pe,Be,c$,l$,Gt,u$,d$,Zr,tp,np,sp,Nn,Ln,op,rp,ip,ti,ze,Ws,yo,er,ei,ra,JC,ap,eN,tN,lp,up,dp,nN,oN,oa,lN,Ft=L(()=>{Ve();Jc();Pe=(e,t)=>e<t?-1:e>t?1:0;Be="rdfs:subClassOf",c$="subClassOf",l$=`entailed:${c$}`,Gt="rdf:type",u$="type",d$=`entailed:${u$}`,Zr="owl:disjointWith",tp="disjointWith",np=`entailed:${tp}`,sp=.95,Nn="owl:onProperty",Ln="owl:someValuesFrom",op="someValuesFrom",rp=`entailed:${op}`,ip=.95,ti=4,ze="\u241F",Ws=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",yo=e=>String(e||"").trim().toLowerCase()==="rdf:type",er=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",ei=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",ra=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",JC=e=>String(e||"").trim().toLowerCase()==="owl:onclass",ap=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);eN="has",tN={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};lp="someValuesFromSubsumption",up=`entailed:${lp}`,dp=.95;nN=.95;oN=.95;oa=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);lN=new Map([[np,sp],[rp,ip],[up,dp]])});function Zt(e,t){let n=el(e),s=el(t);return n<s?-1:n>s?1:0}var el,tr=L(()=>{el=e=>[e?.subject??"",e?.predicate??"",e?.object??"",e?.provenance??""].join("\0")});function oi(e){let t=String(e||""),n=E$.get(t);return n||(t.startsWith(v$)?tl+t.slice(v$.length):t)}function j$(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=fp(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function ol(e,t,n,{maxHops:s=3}={}){let o=si(e),r=si(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassSucc:c}=k$(i),l=i.filter(g=>(g.predicate===sl||g.predicate===ni)&&r.has(g.object)),u=[];for(let g of l){let w=g.predicate===ni?"negative":"positive";if(o.has(g.subject)){u.push({fact:g,polarity:w,hops:0,chain:null});continue}let y=j$(o,g.subject,a,c,s);y&&y.length&&u.push({fact:g,polarity:w,hops:y.length,chain:y})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:hp(o,r,i,{maxHops:s})};u.sort((g,w)=>g.hops-w.hops||(w.fact.trust||0)-(g.fact.trust||0)||Zt(g.fact,w.fact));let d=u[0].hops,p=u.filter(g=>g.hops===d),f=p.filter(g=>g.polarity==="positive").map(g=>g.fact),h=p.filter(g=>g.polarity==="negative").map(g=>g.fact),m=h.length&&!f.length?"negative":"positive",b=u.find(g=>g.hops>d&&g.polarity!==m)||null;return{verdict:f.length&&h.length?"both":h.length?"no":"yes",hops:d,positive:f,negative:h,chain:u[0].chain,overrides:b?{fact:b.fact,chain:b.chain}:null,baseRate:null}}function hp(e,t,n,{maxHops:s=3}={}){let o=si(e),r=si(t),i=Array.isArray(n)?n:[],a=i.filter(m=>m.predicate===Be||m.predicate===Gt),c=a.filter(m=>o.has(m.subject)).sort(Zt).map(m=>m.object);if(!c.length)return null;let l=c[0],u=[...new Set(a.filter(m=>m.object===l&&!o.has(m.subject)).sort(Zt).map(m=>m.subject))],d=m=>{let b=i.filter(g=>g.subject===m&&r.has(g.object)&&(g.predicate===sl||g.predicate===ni)).sort(Zt)[0];return b?{name:m,polarity:b.predicate===ni?"negative":"positive",fact:b}:{name:m,polarity:"unknown",fact:null}},p=u.map(d),{typeEdges:f,subClassSucc:h}=k$(i);return{klass:l,kinds:u.length,positive:p.filter(m=>m.polarity==="positive"),negative:p.filter(m=>m.polarity==="negative"),unknown:p.filter(m=>m.polarity==="unknown"),chain:j$(o,l,f,h,s)}}function mp(e,t,{exclude:n=[],maxHops:s=3}={}){let o=si(e),r=si(n),i=Array.isArray(t)?t:[],a=new Set,c=[];for(let l of i)l.predicate!==sl||!o.has(l.object)||r.has(l.subject)||a.has(l.subject)||(a.add(l.subject),ol(new Set([l.subject]),o,i,{maxHops:s}).verdict==="yes"&&c.push(l));return c.sort(dN)}var tl,v$,nl,E$,aV,x$,sl,ni,pp,dN,si,k$,rl=L(()=>{Ft();tr();tl="mgxneg:",v$="mgx:",nl="mgxneg:subClassOf",E$=new Map([[Be,nl]]),aV=new Map([...E$].map(([e,t])=>[t,e]));x$=e=>String(e||"").startsWith(tl),sl="mgx:capableOf",ni=oi(sl),pp=6,dN=(e,t)=>(t.trust||0)-(e.trust||0)||Zt(e,t),si=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),k$=e=>{let t=e.filter(s=>s.predicate===Gt).map(s=>[s.subject,s.object]),n=e.filter(s=>s.predicate===Be).map(s=>[s.subject,s.object]);return{typeEdges:t,subClassSucc:Zc(n)}}});function il(e){let t=String(e||"");return wp.has(t)?gp:pN.has(t)||hN.test(t)?ia:mN.has(t)?R$:bp}function gN(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(fb.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function bN(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(gN(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function yp(e,t){let n=t===R$;if(!n&&t!==ia)return null;let s=(e||[]).map(r=>({row:r,at:bN(r,n)}));s.sort((r,i)=>{if(r.at!==i.at)return r.at===null?1:i.at===null?-1:n?r.at-i.at:i.at-r.at;let a=(i.row.trust||0)-(r.row.trust||0);if(a)return a;let[c,l]=[String(r.row.object),String(i.row.object)];return c<l?-1:c>l?1:0});let o=s.map(r=>r.row);return{winner:o[0]||null,ranked:o,contested:s.length>1&&s[0].at===s[1].at}}var gp,ia,R$,bp,fN,wp,pN,hN,mN,_$=L(()=>{rl();qn();gp="merge",ia="latest-observation-wins",R$="first-claim-wins",bp="contradiction",fN=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","mgx:memberOf","mgx:collectionOf","mgx:usedFor","mgx:receivesAction","mgx:causes","mgx:causesDesire","mgx:hasSubevent","mgx:hasPrerequisite","mgx:motivatedByGoal","mgx:obstructedBy","mgx:desires","mgx:hasProperty","mgx:madeOf","mgx:atLocation","mgx:locatedNear","mgx:createdBy","mgx:mannerOf","mgx:relatedTo","mgx:synonym","mgx:antonym","mgx:similarTo","mgx:symbolOf","mgx:knows-about","mgx:attributedTo"],wp=new Set(fN.flatMap(e=>[e,oi(e)])),pN=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in","mgx:on-top-of","mgx:on-plane","mgx:under","mgx:is-open","mgx:hasMass","mgx:feels","mgx:faces","mgx:pose","mgx:display-name","mgx:nodeName","mgx:worldName"]),hN=/^mgx:has-exit-([a-z]+)$/,mN=new Set(["mgx:playedBy"])});function T$(e){let t=String(e||"");return/^have$/i.test(t)?"has":/[a-z]y$/i.test(t)&&!/[aeiou]y$/i.test(t)?`${t.slice(0,-1)}ies`:/(?:s|x|z|ch|sh|o)$/i.test(t)?`${t}es`:`${t}s`}function nr(e){let t=String(e||"");return/^has$/i.test(t)?"have":/[a-z]ies$/i.test(t)&&!/[aeiou]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(?:ss|zz|x|ch|sh|o)es$/i.test(t)?t.slice(0,-2):/[sz]es$/i.test(t)?t.slice(0,-1):t.replace(/s$/i,"")}function Sp(e){let t=nr(e);return/[^aeiou]e$/i.test(t)&&t.length>2?`${t.slice(0,-1)}ing`:`${t}ing`}function vN(e){for(let t of $N)if(e===t||e.endsWith(t)&&e.length-t.length>=SN)return!0;return!1}function $p(e){let t=String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").split(/\s+/)[0]?.toLowerCase()??"";return t?yN.has(t)?!0:vN(t)?!1:/[a-z]s$/.test(t)&&!/ss$/.test(t):!1}function cl(e,t){if(Vs[e])return Vs[e];let n=String(e??"");if(n.startsWith("mgxneg:")){let l=cl(`mgx:${n.slice(7)}`,t);if(l==="can")return"cannot";if(l==="can be")return"cannot be";if(l==="is"||l.startsWith("is "))return`is not${l.slice(2)}`;let[u,...d]=l.split(" ");return[$p(t)?"do not":"does not",nr(u),...d].join(" ")}let s=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(n);if(s)return`is ${s[1].replace(/-/g," ")} than`;let o=new RegExp(`^mgx:(${al}|${wN})-([a-z]+)$`,"i").exec(n);if(o)return`is ${o[1].toLowerCase()} ${o[2].toLowerCase()}`;let r=/^mgx:same-([a-z]+)-as$/i.exec(n);if(r)return`has the same ${r[1].toLowerCase()} as`;let i=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(n);if(i)return`${$p(t)?i[1]:T$(i[1])}${i[2]?` ${i[2]}`:""}`;let a=/^tmct:([a-z]+)([A-Z][a-z]+)?$/.exec(n);if(a)return`${$p(t)?nr(a[1]):a[1]}${a[2]?` ${a[2].toLowerCase()}`:""}`;let c=n.indexOf(":");return c===-1?n:n.slice(c+1)}function A$(e){let t=typeof e=="string"?[e]:Array.isArray(e)?e:e?.extraction;if(!Array.isArray(t)||!t.length)return"";let n=new Set(t.map(s=>String(s)));return Object.entries(EN).filter(([s])=>n.has(s)).map(([,s])=>s).join(" ")}var Vs,al,wN,yN,$N,SN,EN,ll=L(()=>{Vs=Object.freeze({"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","owl:unionOf":"is either","owl:complementOf":"is anything that is not","owl:oneOf":"includes exactly","owl:differentFrom":"is not the same as","mgx:partOf":"is part of","mgx:memberOf":"is a member of","mgx:collectionOf":"is a collection of","mgx:hasA":"has","mgx:usedFor":"is used for","mgx:capableOf":"can","mgx:atLocation":"is found in","mgx:causes":"causes","mgx:hasProperty":"is","mgx:madeOf":"is made of","mgx:receivesAction":"can be","mgx:createdBy":"is created by","mgx:mannerOf":"is a way to","mgx:desires":"wants","mgx:locatedNear":"is typically near","mgx:motivatedByGoal":"is motivated by","mgx:obstructedBy":"can be prevented by","mgx:causesDesire":"makes you want to","mgx:hasSubevent":"involves","mgx:hasFirstSubevent":"begins with","mgx:hasLastSubevent":"ends with","mgx:hasPrerequisite":"requires","mgx:ownedBy":"is owned by","mgx:rendersAs":"renders as","mgx:nameFor":"is the name for","mgx:synonym":"means the same as","mgx:antonym":"is the opposite of","mgx:similarTo":"is similar to","mgx:relatedTo":"is related to","mgx:symbolOf":"is a symbol of","mgx:currently-in":"is in","mgx:located-in":"is in","mgx:fixed-in":"is fixed in","mgx:stands-locked-in":"stands locked in","mgx:works-in":"works in","mgx:pursues":"pursues","mgx:evades":"evades","mgx:consumes":"eats","mgx:vision-radius":"sees within","mgx:guards":"guards","mgx:attributedTo":"is attributed to"}),al="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",wN=["hit","struck","killed","injured","wounded","damaged","destroyed","devastated","banned","halted","blocked","barred","suspended","imposed","arrested","detained","jailed","charged","convicted","sentenced","deported","released","freed","elected","appointed","ousted","overthrown","signed","adopted","approved","rejected","vetoed","launched","unveiled","seized","captured","invaded","attacked","bombed","targeted","discovered","uncovered","rescued","evacuated","sparked","triggered","caused","forced","deployed","restored","expanded"].join("|");yN=new Set(["people","men","women","children","mice","geese","feet","teeth","oxen"]),$N=new Set(["news","physics","species","series","means","measles","mathematics","politics","economics"]),SN=3;EN=Object.freeze({"clause-fallback":"(read from a clause fragment)","pronoun-carry":"(subject carried from the previous sentence)","identifier-token":"(identifier token)","reported-speech":"(read from reported speech)"})});var vp,ul,aa=L(()=>{vp=new Set(["person","place","object","event","time","quantity","organization","group","animal","plant","furniture","vehicle","insect","emotion","metal","liquid","weather","planet","jewelry","cutlery","government","material","artifact","location","structure","food","drink","clothing","body","language","mind","family","meal","season","number","entity","abstraction","physical_entity","attribute","state","act","communication","cognition","measure","unit"]),ul=new Set([...vp,"property","concept","idea","content"])});var I$=L(()=>{Ve();Jc()});function kN(e){let t=dl(e?.subject);if(O$(t))return t;let n=dl(e?.object);return O$(n)?n:""}function jN(e){return!!kN(e)}function C$(e){let t=[],n=new Map;for(let o of e){if(!jN(o)){t.push(o);continue}if(o.predicate!==RN)continue;let r=dl(o.subject),i=String(o.object??"").trim();if(!r||!i)continue;let a=n.get(r);a||n.set(r,a=new Set),a.add(i)}let s=new Map;for(let[o,r]of n)s.set(o,[...r].sort());return{claims:t,speakersByClaimId:s}}var xN,dl,O$,RN,_N,jV,Ep=L(()=>{Ve();ll();aa();Ki();qn();I$();xN=/^fact:[0-9a-f]{16}$/,dl=e=>String(e??"").trim().toLowerCase(),O$=e=>xN.test(dl(e));RN="mgx:attributedTo";_N=[["free","release"]],jV=new Map(_N.flatMap(e=>e.map(t=>[t,e[0]])))});function ua(e){let t=String(e||""),n=t.indexOf(fl);return n<0?"":t.slice(n+fl.length)}function CN(e){let t=1,n=0;for(let s of e)t*=1-IN(s),n+=1;return n?ON(Math.min(1,1-t)):0}function F$(e,t,n){let s=Date.parse(e),o=Date.parse(t);return Number.isFinite(s)?Number.isFinite(o)?n(s,o)===s?String(e):String(t):String(e):Number.isFinite(o)?String(t):""}function z$(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt),o=Number.isFinite(n)?n:-1/0,r=Number.isFinite(s)?s:-1/0;return o!==r?r-o:e.id<t.id?-1:e.id>t.id?1:0}function U$(e,t="",n=""){let s=t,o=n;for(let r of e)s=D$(s,r.assertedAt),o=B$(o,r.assertedAt);return{earliest:s,latest:o}}function Rp({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let c=[...new Set(o)].filter(Boolean).sort(),l=a?CN(c.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:TN,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:createdAt",key:"createdAt",value:r},{prop:"mgx:sourceId",key:"sourceId",value:t},{prop:s,key:s===ri?"rollupSourceIds":"rollupRecordIds",value:c.join(" ")},{prop:la,key:"rollupCount",value:String(c.length)},{prop:fs,key:"rollupEarliest",value:r},{prop:ps,key:"rollupLatest",value:i},...l===void 0?[]:[{prop:ii,key:"rollupPrior",value:String(l)}]]}}function W$({groupId:e,sourceType:t,heads:n=[],existing:s=null,priorFor:o}){if(!e||!t||n.length<64||n.length<=8)return null;let i=n.slice().sort(z$).slice(8);if(!i.length)return null;let{earliest:a,latest:c}=U$(i,Vt(s,fs),Vt(s,ps));return{rollup:Rp({id:xp(e,t),sourceKey:`rollup:${t}`,template:_p(i[0].record||s),idsProp:ri,ids:[...da(s),...i.map(u=>u.sourceId)],earliest:a,latest:c,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function G$({groupId:e,sourceId:t,leaves:n=[],existing:s=null}){if(!e||!t||n.length<8||n.length<=2)return null;let o=n.slice().sort(z$),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:c}=U$(i,Vt(s,fs),Vt(s,ps));return{rollup:Rp({id:kp(e,t),sourceKey:t,template:_p(i[0].record||s),idsProp:ca,ids:[...AN(s),...i.map(u=>u.id)],earliest:a,latest:c}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function Tp(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Ks(s),r=o?ri:ca,i=a=>jp(Vt(a,r));return Rp({id:s,sourceKey:Vt(e,"mgx:sourceId")||Vt(t,"mgx:sourceId"),template:_p(Vt(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:D$(Vt(e,fs),Vt(t,fs)),latest:B$(Vt(e,ps),Vt(t,ps)),priorFor:o?n:void 0})}function V$(e,t){if(!t)return!1;for(let n of e||[])if(da(n).includes(t))return!0;return!1}var TN,N$,L$,pl,P$,ri,ca,la,fs,ps,ii,fl,M$,xp,kp,Ks,ai,hl,Vt,jp,da,AN,IN,ON,D$,B$,_p,Ap=L(()=>{TN="Fact",N$=64,L$=8,pl=8,P$=2,ri="mgx:rollupSourceIds",ca="mgx:rollupRecordIds",la="mgx:rollupCount",fs="mgx:rollupEarliest",ps="mgx:rollupLatest",ii="mgx:rollupPrior",fl="@rollup:",M$="#rollup",xp=(e,t)=>`${e}${fl}${t}`,kp=(e,t)=>`${e}@${t}${M$}`,Ks=e=>String(e||"").includes(fl),ai=e=>String(e||"").endsWith(M$),hl=e=>Ks(e)||ai(e);Vt=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",jp=e=>String(e||"").split(" ").filter(Boolean),da=e=>jp(Vt(e,ri)),AN=e=>jp(Vt(e,ca)),IN=e=>Math.max(0,Math.min(1,Number(e)||0)),ON=e=>Number(e.toFixed(6));D$=(e,t)=>F$(e,t,Math.min),B$=(e,t)=>F$(e,t,Math.max);_p=e=>({label:e?.label||"",subject:Vt(e,"rdf:subject"),predicate:Vt(e,"rdf:predicate"),object:Vt(e,"rdf:object")})});function Np(e){let t=String(e||"");return Cp(t)?t.slice(0,-wl.length):""}function K$(e,t){let n=Date.parse(e),s=Date.parse(t);return Number.isFinite(n)?Number.isFinite(s)&&s>n?String(t):String(e):Number.isFinite(s)?String(t):""}function Lp({id:e,sourceId:t,template:n,ids:s,retractedAt:o,tags:r}){let i=[...new Set(s)].filter(Boolean).sort(),a=[...new Set(r)].filter(Boolean).sort();return{id:e,label:n?.label||"",class:en,derived_from:[],mentions:[],attributes:[{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:sourceId",key:"sourceId",value:t||""},{prop:gl,key:"retractedRecordIds",value:i.join(" ")},{prop:Ip,key:"retractedCount",value:String(i.length)},{prop:bl,key:"retractedAt",value:o||""},...a.length?[{prop:fa,key:"provenance",value:a.join(" | ")}]:[]]}}function q$({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...sr(o),...n].filter(Boolean);return a.length?Lp({id:Op(e,t),sourceId:t,template:r||H$(o),ids:a,retractedAt:K$(or(o),s),tags:[...pa(Pn(o,fa)),...pa(i)]}):null}function Y$(e,t){let n=H$(Pn(e,"rdf:subject")?e:t);return Lp({id:e?.id||t?.id,sourceId:Pn(e,"mgx:sourceId")||Pn(t,"mgx:sourceId"),template:n,ids:[...sr(e),...sr(t)],retractedAt:K$(or(e),or(t)),tags:[...pa(Pn(e,fa)),...pa(Pn(t,fa))]})}function LN(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function PN(e,t,n=""){return!e||!t||!sr(e).includes(t)?!1:LN(n,or(e))}function yl(e,t,n=""){for(let s of e||[])if(PN(s,t,n))return!0;return!1}function MN(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function FN(e){let t=String(e||"").split(" ").filter(Boolean),n=t[0]||"",s=n==="-"||!Number.isFinite(Date.parse(n))?"":n,o=s||n==="-"?t.slice(1):t;return{retractedAt:s,ids:o}}function $l(e){let t=Np(e?.id);return t?{id:e.id,subject:t,predicate:ml,object:MN(or(e),sr(e)),provenance:Pn(e,fa)}:null}function Sl(e){if(!e||e.predicate!==ml)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=FN(e.object);return o.length?Lp({id:`${t}${wl}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:pa(e.provenance)}):null}var en,ml,gl,bl,Ip,wl,fa,Op,Cp,Pn,NN,pa,sr,or,H$,Pp=L(()=>{en="Retraction",ml="mgx:retracted",gl="mgx:retractedRecordIds",bl="mgx:retractedAt",Ip="mgx:retractedCount",wl="#retracted",fa="mgx:factProvenance",Op=(e,t)=>`${e}@${t}${wl}`,Cp=e=>String(e||"").endsWith(wl);Pn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",NN=e=>String(e||"").split(" ").filter(Boolean),pa=e=>String(e||"").split(" | ").filter(Boolean),sr=e=>NN(Pn(e,gl)),or=e=>Pn(e,bl);H$=e=>({label:e?.label||"",subject:Pn(e,"rdf:subject"),predicate:Pn(e,"rdf:predicate"),object:Pn(e,"rdf:object")})});function vl(e){let t=new Set;for(let n of e||[])n?.predicate===DN&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function Mp(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function El({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=Mp(t,n);if(!o.length)return[];if(typeof s!="function")return[];let r=new Map;for(let a of o){let c=s(a);r.set(a,new Set([...c||[]].map(String)))}return[...new Set((e||[]).map(String).filter(Boolean))].sort().filter(a=>o.every(c=>r.get(c).has(a)))}var DN,Fp=L(()=>{DN="mgx:invitedBy"});function hs(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function HN(e,t){(!e?.class||!BN.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function qN(e,t){for(let a of["rdf:subject","rdf:predicate","rdf:object"])ha(hs(e,a))||t.push(`a Fact needs a non-empty ${a}`);for(let a of["rdf:subject","rdf:object"]){let c=hs(e,a);c!==void 0&&GN.test(c)&&t.push(`a Fact's ${a} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(c)})`)}let n=hs(e,"mgx:factProvenance");n!==void 0&&!ha(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";VN(s)&&!X$.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=hs(e,"mgx:sourceId");o!==void 0&&!ha(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=hs(e,"mgx:observedAt");r!==void 0&&!Number.isFinite(Date.parse(r))&&t.push(`mgx:observedAt, when present, must be a parseable instant (got ${JSON.stringify(r)})`);let i=hs(e,"mgx:extractionFinding");if(i!==void 0){let a=i.split(" ").filter(Boolean);a.length||t.push("mgx:extractionFinding, when present, must name at least one finding");for(let c of a)zN.has(c)||t.push(`mgx:extractionFinding must name findings from the closed vocabulary ${xl.join(" | ")} (got ${JSON.stringify(c)})`)}for(let a of KN){let c=hs(e,a);if(c===void 0)continue;let l=c.split(" ").filter(Boolean);l.length||t.push(`${a}, when present, must name at least one record id`);for(let u of l)X$.test(u)||t.push(`${a} must name Fact record ids (got ${JSON.stringify(u)})`)}}function YN(e,t){ha(hs(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=hs(e,"mgx:ruleKind");if(!n||!UN.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${J$.join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of WN[n])ha(hs(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function XN(e){let t=[];return HN(e,t),e?.class==="Fact"&&qN(e,t),e?.class==="Rule"&&YN(e,t),{ok:t.length===0,violations:t}}function Dp(e){let t=XN(e);if(!t.ok){let n=new Error(`SHACL validation failed for ${e?.class} "${e?.id}": ${t.violations.join(" | ")}`);throw n.violations=t.violations,n}}var BN,xl,zN,J$,UN,WN,GN,X$,VN,KN,ha,Bp=L(()=>{BN=new Set(["Utterance","Fact","Session","Source","Rule"]),xl=Object.freeze(["identifier-token","clause-fallback","pronoun-carry","definitional-frame","reported-speech"]),zN=new Set(xl),J$=Object.freeze(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),UN=new Set(J$),WN={compose2:["mgx:ruleBase1","mgx:ruleBase2"],filter:["mgx:ruleBase1","mgx:ruleFilterProperty"],recursive:["mgx:ruleBaseCase","mgx:ruleRecStep"],"action-signature":["mgx:ruleActionSubjectClass","mgx:ruleActionTargetClass"],"action-precond":["mgx:ruleActionPrecondShape","mgx:ruleActionPrecondPredicate","mgx:ruleActionPrecondRole","mgx:ruleActionPrecondScope"],"action-effect":["mgx:ruleActionEffectPredicate","mgx:ruleActionEffectSubject"],"action-constraint":["mgx:ruleActionConstraintLeft","mgx:ruleActionConstraintRight","mgx:ruleActionConstraintGuard"]},GN=/[.!?]\s+\w/,X$=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,VN=e=>e.includes("@")||/#v\d/.test(e),KN=["mgx:supersedes","mgx:supersededBy"];ha=e=>typeof e=="string"&&e.trim().length>0});function eS(e,t){return t?.rowKey&&(e.rowKey=t.rowKey),t?.rowClass&&(e.rowClass=t.rowClass),t?.provenance&&(e.provenance=t.provenance),t?.status&&(e.status=t.status),e}function ga(e){let t=[];if(!e||typeof e!="object")return["not an object"];e.kind!==ci&&t.push(`kind is ${JSON.stringify(e.kind)}, expected ${JSON.stringify(ci)}`),e.contractVersion!==1&&t.push(`contractVersion is ${JSON.stringify(e.contractVersion)}, expected 1`);for(let n of JN)typeof e[n]!="function"&&t.push(`${n}() is missing`);for(let n of QN)n in e&&e[n]!=null&&typeof e[n]!="function"&&t.push(`${n} is present but not a function`);return t}function Rl(e){return ga(e).length===0}function zp(e){return new TextEncoder().encode(String(e?.json??"")).length}function _l(e){let t=[];if(!e||typeof e!="object")return["not an object"];if((typeof e.rowKey!="string"||!e.rowKey)&&t.push("rowKey must be a non-empty string"),kl.includes(e.rowClass)||t.push(`rowClass ${JSON.stringify(e.rowClass)} is outside the closed set (${kl.join(", ")})`),typeof e.term!="string"&&t.push("term must be a string, empty when the row has no term read path"),typeof e.json!="string"||!e.json)t.push("json must be a non-empty string");else{let n=zp(e);n>rr&&t.push(`json is ${n} bytes, over the ${rr}-byte cap`)}return e.expiresAt!==void 0&&!Number.isInteger(e.expiresAt)&&t.push("expiresAt must be epoch seconds as an integer when present"),t}function tS(e){return _l(e).length===0}function li(e,t={}){let n=_l(e);if(!n.length)return e;throw new Mn(`invalid memory row ${JSON.stringify(e?.rowKey??null)}: ${n.join("; ")}`,{rowKey:typeof e?.rowKey=="string"?e.rowKey:"",rowClass:e?.rowClass,...t})}var ci,jl,kl,ma,rr,Q$,Z$,Mn,ir,JN,QN,ui=L(()=>{ci="tmct-memory-row-backend",jl=1,kl=Object.freeze(["fact","source","utterance","session","rule","retraction","edge-group","bookkeeping"]),ma="bookkeeping",rr=4096,Q$="TMCT_BACKEND_REJECTED",Z$="TMCT_BACKEND_UNAVAILABLE";Mn=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendRejected",this.code=Q$,eS(this,n)}},ir=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendUnavailable",this.code=Z$,eS(this,n)}},JN=Object.freeze(["readRows","putRows","deleteRows","readMeta","putMeta","deleteAll","close"]),QN=Object.freeze(["readRowsByTerm"])});function oL(){return Up||(Up=new Map([[Ke,"fact"],[ms,"source"],[$o,"utterance"],[ar,"session"],[gs,"rule"],[en,"retraction"]])),Up}function rL(e){let t=oL().get(e?.class);if(t)return t;throw new Mn(`individual ${JSON.stringify(e?.id??null)} has class ${JSON.stringify(e?.class??null)}, which no row class covers`,{rowKey:String(e?.id||"")})}function iL(e){return(e?.attributes||[]).some(t=>t?.prop===di)?{...e,attributes:e.attributes.filter(t=>t?.prop!==di)}:e}function aL(e,t){let n=new Map,s=0;for(let o of e||[]){let r;try{r=Number(JSON.parse(o?.json??"{}").ord)}catch{r=NaN}Number.isFinite(r)&&(n.set(o.rowKey,r),r>=s&&(s=r+1))}for(let o of t?.values()||[])Number.isFinite(o)&&o>=s&&(s=o+1);return o=>{let r=n.get(o)??t?.get(o);if(r!==void 0)return r;let i=s;return s+=1,i}}function nS(e,t,{onOversizedRow:n,log:s}){let o=zp(e);if(o<=rr||n==="keep")return!0;let r=t?` (provenance: ${t})`:"",i=`${e.rowClass} row ${e.rowKey} serializes to ${o} bytes, over the ${rr}-byte cap${r}`;if(n==="drop")return s(`dropped an oversized memory row: ${i}`),!1;throw new Mn(i,{rowKey:e.rowKey,rowClass:e.rowClass,provenance:t})}function Wp(e,{priorRows:t=null,priorOrds:n=null,onOversizedRow:s="throw",log:o=cL}={}){if(!lL.has(s))throw new TypeError(`onOversizedRow must be "throw", "drop", or "keep", got ${JSON.stringify(s)}`);let r=aL(t,n),i={onOversizedRow:s,log:o},a=[];for(let c of e?.individuals||[]){if(!c?.id)continue;let l=rL(c),u={rowKey:String(c.id),rowClass:l,term:l==="fact"?V(sL(c,"subject")):"",json:JSON.stringify({ord:r(String(c.id)),individual:iL(c)})};nS(u,iS(c,tL),i)&&a.push(u)}for(let c of e?.objectProperties||[]){if(!c?.prop)continue;let l=`${ZN}${c.prop}`,u={rowKey:l,rowClass:rS,term:"",json:JSON.stringify({ord:r(l),group:c})};nS(u,"",i)&&a.push(u)}return a}function uL(e){let t=[],n=[];for(let s=0;s<e.length;s+=1)e[s]?.class===Ke&&(t.push(s),n.push(e[s]));n.sort((s,o)=>s.id<o.id?-1:s.id>o.id?1:0);for(let s=0;s<t.length;s+=1)e[t[s]]=n[s]}function Tl(e){let t="",n="",s=!1,o=!1,r=!1;for(let i of e?.attributes||[])!o&&i?.key==="prose_tokens"&&(t=i.value||"",o=!0),!r&&i?.prop===eL&&(n=i.value||"",r=!0),i?.prop===di&&(s=!0);return{proseTokens:t,supersedes:n,carriesSupersededBy:s}}function cS(e,t){t.index=e.proseIndex,Object.defineProperty(e,aS,{value:t,writable:!0,configurable:!0,enumerable:!1})}function dL(e,t){Object.defineProperty(e,Al,{value:{individuals:e.individuals,ids:t},writable:!0,configurable:!0,enumerable:!1})}function Gp(e){let t=e?.[Al];return!t||t.individuals!==e.individuals?null:t}function lS(e,t){let n=Gp(e);if(!n)return!1;let s=new Set(n.ids);for(let o of t)if(!s.has(String(o)))return!1;return!0}function uS(e,t){let n=Gp(e);if(!n)return!1;let s=new Set([...t].map(a=>String(a))),o=new Map;for(let a of e.individuals||[])a?.id&&o.set(String(a.id),a);let r=[],i=[];for(let a of n.ids){if(s.has(a))continue;let c=o.get(a);if(!c)return!1;r.push(a),i.push(c)}return e.individuals=i,n.individuals=i,n.ids=r,!0}function dS(e){e&&e[Al]&&(e[Al]=null)}function fS(e,t){let n=Gp(e);n&&n.ids.push(String(t))}function pS(e,{needSupersessions:t}={}){let n=e[aS];return!n||n.index!==e.proseIndex||!e.proseIndex||t&&!n.successorsById?null:n}function oS(e,t){let n=0,s=e.length;for(;n<s;){let o=n+s>>1;e[o]<t?n=o+1:s=o}return n}function Il(e,t,n,s){if(n!==s){for(let o of n?n.split(" "):[]){let r=e[o];if(!r)continue;let i=oS(r,t);r[i]===t&&(r.splice(i,1),r.length||delete e[o])}for(let o of s?s.split(" "):[]){let r=e[o]||(e[o]=[]);r.splice(oS(r,t),0,t)}}}function hS(e,t){let n=(e?.attributes||[]).some(o=>o?.prop===di);if(!t&&!n)return;let s=(e.attributes||[]).filter(o=>o?.prop!==di);e.attributes=t?[...s,{prop:di,key:"supersededBy",value:[...t].sort().join(" ")}]:s}function fL(e,t){let n=new Map,s=new Map,o=new Map;for(let r of t){let{proseTokens:i,supersedes:a}=Tl(r);i&&s.set(r.id,i);let c=mS(r,a);if(c){o.set(r.id,c);for(let l of c.split(" ").filter(Boolean)){let u=n.get(l)||new Set;u.add(r.id),n.set(l,u)}}}for(let r of t)hS(r,n.get(r?.id));e.proseIndex=null,e.proseIndex=Td(t),cS(e,{tokensById:s,supersedesById:o,successorsById:n})}function pL(e,t,n){let{tokensById:s,supersedesById:o,successorsById:r}=n,i=e.proseIndex,a=new Set,c=new Set,l=0,u=0,d=(f,h)=>{let m=r.get(h);m?.delete(f)&&(m.size||r.delete(h),a.add(h))},p=(f,h)=>{let m=r.get(h)||new Set;m.has(f)||(m.add(f),r.set(h,m),a.add(h))};for(let f of t){let h=f?.id,{proseTokens:m,supersedes:b,carriesSupersededBy:g}=Tl(f);g&&c.add(h),m&&(l+=1);let w=s.get(h)||"";m!==w&&(Il(i,h,w,m),m?s.set(h,m):s.delete(h));let y=mS(f,b);y&&(u+=1);let S=o.get(h)||"";if(y!==S){for(let T of S.split(" ").filter(Boolean))d(h,T);for(let T of y.split(" ").filter(Boolean))p(h,T);y?o.set(h,y):o.delete(h)}}if(s.size!==l||o.size!==u){let f=new Set(t.map(h=>h?.id));for(let[h,m]of s)f.has(h)||(Il(i,h,m,""),s.delete(h));for(let[h,m]of o)if(!f.has(h)){for(let b of m.split(" ").filter(Boolean))d(h,b);o.delete(h)}}for(let f of c)a.add(f);for(let f of r.keys())a.add(f);if(a.size)for(let f of t)a.has(f?.id)&&hS(f,r.get(f?.id))}function hL(e){let t=[ar,$o,Ke,ms,gs],n=new Map(t.map(s=>[s,{name:s,count:0,sample:[]}]));for(let s of e){let o=n.get(s?.class);o&&(o.count+=1,o.sample.length<3&&o.sample.push(s.label))}return t.map(s=>n.get(s)).filter(s=>s.count)}function mL(e){let t="";for(let n of e){if(n?.class!==$o)continue;let s=iS(n,nL);s>t&&(t=s)}return t}function Ol(e,{meta:t=null}={}){let n=bs();t?.memory!==void 0&&(n.memory=t.memory),t?.prefixes!==void 0&&(n.prefixes=t.prefixes);let s=[],o=[];for(let a of e||[]){if(!a||a.rowClass===ma)continue;let c=JSON.parse(a.json),u={ord:Number.isFinite(Number(c?.ord))?Number(c.ord):0,rowKey:String(a.rowKey||"")};a.rowClass===rS?o.push({...u,group:c?.group}):s.push({...u,individual:c?.individual})}s.sort(sS),o.sort(sS);let r=[],i=[];for(let a of s)a.individual&&(i.push(a.individual),r.push(String(a.individual.id??"")));return n.individuals=i,n.objectProperties=o.map(a=>a.group).filter(Boolean),dL(n,r),Cl(n)}function Cl(e){let t=e.individuals||[];uL(t);let n=pS(e,{needSupersessions:!0});return n?pL(e,t,n):fL(e,t),e.classes=hL(t),e.generated_at=mL(t),e}function gS(e){let t=e.individuals||[],n=pS(e);if(!n){let i=new Map;for(let a of t){let{proseTokens:c}=Tl(a);c&&i.set(a.id,c)}return e.proseIndex=null,e.proseIndex=Td(t),cS(e,{tokensById:i,supersedesById:null,successorsById:null}),e}let{tokensById:s}=n;n.supersedesById=null,n.successorsById=null;let o=e.proseIndex,r=0;for(let i of t){let{proseTokens:a}=Tl(i);a&&(r+=1);let c=s.get(i?.id)||"";a!==c&&(Il(o,i?.id,c,a),a?s.set(i.id,a):s.delete(i?.id))}if(s.size!==r){let i=new Set(t.map(a=>a?.id));for(let[a,c]of s)i.has(a)||(Il(o,a,c,""),s.delete(a))}return e}function Vp(e,t){let n=new Map((e||[]).filter(i=>i?.rowKey).map(i=>[i.rowKey,i])),s=[],o=new Set;for(let i of t||[]){if(!i?.rowKey)continue;o.add(i.rowKey);let a=n.get(i.rowKey);a&&a.json===i.json&&a.term===i.term&&a.rowClass===i.rowClass||s.push(i)}let r=[...n.keys()].filter(i=>!o.has(i));return{puts:s,deletes:r}}var rS,ZN,eL,di,tL,nL,iS,sL,Up,cL,lL,sS,aS,Al,mS,Kp=L(()=>{Ue();Ve();Kn();ui();rS="edge-group",ZN="edge-group:",eL="mgx:supersedes",di="mgx:supersededBy",tL="mgx:factProvenance",nL="mgx:utteranceTs",iS=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",sL=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Up=null;cL=e=>console.warn(e),lL=new Set(["throw","drop","keep"]);sS=(e,t)=>e.ord-t.ord||(e.rowKey<t.rowKey?-1:e.rowKey>t.rowKey?1:0);aS=Symbol("tmct.carriedDerivations");Al=Symbol("tmct.assembledRowOrder");mS=(e,t)=>e?.class===Ke?t:""});var Hp={};Nt(Hp,{access:()=>wL,appendFile:()=>SL,basename:()=>ML,copyFile:()=>_L,createInterface:()=>UL,createReadStream:()=>AL,createRequire:()=>gL,createWriteStream:()=>IL,default:()=>GL,dirname:()=>NL,existsSync:()=>OL,fileURLToPath:()=>DL,isAbsolute:()=>PL,join:()=>CL,mkdir:()=>vL,mkdtemp:()=>EL,randomBytes:()=>BL,readFile:()=>yL,readFileSync:()=>bL,readdir:()=>TL,rename:()=>xL,resolve:()=>LL,rm:()=>jL,sep:()=>FL,spawnSync:()=>zL,stat:()=>RL,tmpdir:()=>WL,unlink:()=>kL,writeFile:()=>$L});var kt,gL,bL,wL,yL,$L,SL,vL,EL,xL,kL,jL,RL,_L,TL,AL,IL,OL,CL,NL,LL,PL,ML,FL,DL,BL,zL,UL,WL,GL,qp=L(()=>{kt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},gL=kt("createRequire"),bL=kt("readFileSync"),wL=kt("access"),yL=kt("readFile"),$L=kt("writeFile"),SL=kt("appendFile"),vL=kt("mkdir"),EL=kt("mkdtemp"),xL=kt("rename"),kL=kt("unlink"),jL=kt("rm"),RL=kt("stat"),_L=kt("copyFile"),TL=kt("readdir"),AL=kt("createReadStream"),IL=kt("createWriteStream"),OL=()=>!1,CL=(...e)=>e.join("/"),NL=e=>String(e).replace(/\/[^/]*$/,""),LL=(...e)=>e.join("/"),PL=e=>String(e).startsWith("/"),ML=e=>String(e).split("/").pop(),FL="/",DL=e=>String(e),BL=kt("randomBytes"),zL=kt("spawnSync"),UL=kt("createInterface"),WL=()=>"/tmp",GL={}});var VL,ba,Yp=L(()=>{VL=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,ba=class e extends Date{#n=!1;#e=!1;#t=null;constructor(t){let n=!0,s=!0,o="Z";if(typeof t=="string"){let r=t.match(VL);r?(r[1]||(n=!1,t=`0000-01-01T${t}`),s=!!r[2],s&&t[10]===" "&&(t=t.replace(" ","T")),r[2]&&+r[2]>23?t="":(o=r[3]||null,t=t.toUpperCase(),!o&&s&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#n=n,this.#e=s,this.#t=o)}isDateTime(){return this.#n&&this.#e}isLocal(){return!this.#n||!this.#e||!this.#t}isDate(){return this.#n&&!this.#e}isTime(){return this.#e&&!this.#n}isValid(){return this.#n||this.#e}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#t===null)return t.slice(0,-1);if(this.#t==="Z")return t;let n=+this.#t.slice(1,3)*60+ +this.#t.slice(4,6);return n=this.#t[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#t}static wrapAsOffsetDateTime(t,n="Z"){let s=new e(t);return s.#t=n,s}static wrapAsLocalDateTime(t){let n=new e(t);return n.#t=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#e=!1,n.#t=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#n=!1,n.#t=null,n}}});function KL(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function HL(e,t,n){let s=e.split(/\r\n|\n|\r/g),o="",r=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let a=s[i-1];a&&(o+=i.toString().padEnd(r," "),o+=": ",o+=a,o+=`
|
|
86
86
|
`,i===t&&(o+=" ".repeat(r+n+2),o+=`^
|
|
87
|
-
`))}return o}var
|
|
87
|
+
`))}return o}var Se,cr=L(()=>{Se=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=KL(n.toml,n.ptr),r=HL(n.toml,s,o);super(`Invalid TOML document: ${t}
|
|
88
88
|
|
|
89
89
|
${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function Nl(e,t){let n=e[t++],s=n,o=n==="'",r=n===e[t]&&n===e[t+1];r&&(e[t+=2]===`
|
|
90
90
|
`?t++:e[t]==="\r"&&e[t+1]===`
|
|
91
91
|
`&&(t+=2));let i="",a=t,c=0;for(let l=t;l<e.length;l++)if(n=e[l],r&&(n===`
|
|
92
92
|
`||n==="\r"&&e[l+1]===`
|
|
93
|
-
`))c=c&&3;else{if(n<" "&&n!==" "||n==="\x7F")throw new
|
|
94
|
-
`;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new
|
|
95
|
-
`,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function
|
|
93
|
+
`))c=c&&3;else{if(n<" "&&n!==" "||n==="\x7F")throw new Se("control characters are not allowed in strings",{toml:e,ptr:l});if((!c||c===3)&&n===s&&(!r||e[l+1]===s&&e[l+2]===s))return r&&(e[l+3]===s&&l++,e[l+3]===s&&l++),[c?i:i+e.slice(a,l),l+(r?3:1)];if(!c)!o&&n==="\\"&&(i+=e.slice(a,a=l),c=1);else if(c===1)if(n==="x"||n==="u"||n==="U"){let u=0,d=n==="x"?2:n==="u"?4:8;for(let p=0;p<d;p++,l++){let f=e.charCodeAt(l+1),h=f>=48&&f<=57?f-48:f>=65&&f<=70?f-65+10:f>=97&&f<=102?f-97+10:-1;if(h<0)throw new Se("invalid non-hex character in unicode escape",{toml:e,ptr:l+1});u=u<<4|h}if(u<0||u>1114111||u>=55296&&u<=57343)throw new Se("invalid unicode escape",{toml:e,ptr:l});i+=String.fromCodePoint(u),a=l+1,c=0}else if(n===" "||n===" ")c=2;else{if(n==="b")i+="\b";else if(n==="t")i+=" ";else if(n==="n")i+=`
|
|
94
|
+
`;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new Se("unrecognized escape sequence",{toml:e,ptr:l});a=l+1,c=0}else if(n!==" "&&n!==" "){if(c===2)throw new Se("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});c=!o&&n==="\\"?1:0,a=l}}throw new Se("unfinished string",{toml:e,ptr:t})}function bS(e,t,n,s){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return s?0n:0;let o=qL.test(e);if(o||YL.test(e)){if(XL.test(e))throw new Se("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new Se("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new Se("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new ba(e);if(!r.isValid())throw new Se("invalid value",{toml:t,ptr:n});return r}var qL,YL,XL,Xp=L(()=>{Yp();cr();qL=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,YL=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,XL=/^[+-]?0[0-9_]/});function Ll(e,t=0,n=e.length){let s=e.indexOf(`
|
|
95
|
+
`,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function fi(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
|
|
96
96
|
`)return n;if(s==="\r"&&e[n+1]===`
|
|
97
|
-
`)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new
|
|
97
|
+
`)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new Se("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function ws(e,t,n,s){let o;for(;;){for(;(o=e[t])===" "||o===" "||!n&&(o===`
|
|
98
98
|
`||o==="\r"&&e[t+1]===`
|
|
99
|
-
`);)t++;if(s||o!=="#")break;t=
|
|
99
|
+
`);)t++;if(s||o!=="#")break;t=fi(e,t)}return t}function wS(e,t,n,s,o=!1){if(!s)return t=Ll(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=Ll(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
|
|
100
100
|
`||i==="\r"&&e[r+1]===`
|
|
101
|
-
`))return r}}throw new
|
|
102
|
-
`&&e[l]!=="\r")throw new
|
|
103
|
-
`&&i!=="\r"){let a,c=o,l=!1,[u,d]=Ml(e,t-1);for(let h=0;h<u.length;h++){if(h&&(c=l?c[a]:c[a]={}),a=u[h],(l=Object.hasOwn(c,a))&&(typeof c[a]!="object"||r.has(c[a])))throw new
|
|
104
|
-
`&&r!=="\r"){let i
|
|
105
|
-
`&&e[a]!=="\r")throw new
|
|
106
|
-
`)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Xt(t,r))}return s}async function RS(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await o0(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Xt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Xt(s,String(n.graph_file))),n.graph_files!==void 0){let y=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=y.map(S=>Xt(s,String(S)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},c={};a.enabled!==void 0&&(c.enabled=a.enabled),a.limit!==void 0&&(c.limit=a.limit),a.capture_unknown_context!==void 0&&(c.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(c.unknownContextLimit=a.unknown_context_limit),Object.keys(c).length&&(o.seed=c),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.news!==void 0&&(o.news=n.news),n.discourse!==void 0&&(o.discourse=n.discourse),n.recognition!==void 0&&(o.recognition=n.recognition),n.reasoning!==void 0&&(o.reasoning=n.reasoning);let l=n.index||{},u={};l.languages!==void 0&&(u.languages=l.languages),l.exclude!==void 0&&(u.exclude=l.exclude),l.secret_exclude!==void 0&&(u.secretExclude=l.secret_exclude),l.history_depth!==void 0&&(u.historyDepth=l.history_depth),l.include_text!==void 0&&(u.includeText=l.include_text),l.include_structure!==void 0&&(u.includeStructure=l.include_structure),l.respect_gitignore!==void 0&&(u.respectGitignore=l.respect_gitignore),l.markdown_sections!==void 0&&(u.markdownSections=l.markdown_sections),l.vue!==void 0&&(u.vue=l.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},p={};d.score_gap_k!==void 0&&(p.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(p.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(p.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(p.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(p.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(p.beamSearch=d.beam_search),d.beam_width!==void 0&&(p.beamWidth=d.beam_width),d.prose_layers!==void 0&&(p.proseLayers=d.prose_layers);let f=d.expansion||{},h={};f.strategy!==void 0&&(h.strategy=f.strategy),f.nodes!==void 0&&(h.nodes=f.nodes),f.q!==void 0&&(h.q=f.q),f.depth!==void 0&&(h.depth=f.depth),Object.keys(h).length&&(p.expansion=h),Object.keys(p).length&&(o.tune=p);let m=n.telemetry||{};m.enabled!==void 0&&(o.telemetry={enabled:m.enabled});let b=n.memory||{},g={};b.retention_versions!==void 0&&(g.retentionVersions=b.retention_versions),b.backend!==void 0&&(g.backend=b.backend),Object.keys(g).length&&(o.memory=g);let w=[];for(let[y,S]of r0)n[y]&&n[y][S]!==void 0&&w.push(`${y}.${S}`);return o.unwired=w,o}function Dl(e,t="",n={}){for(let[s,o]of Object.entries(e||{})){if(o==null)continue;let r=t?`${t}.${s}`:s;Array.isArray(o)||typeof o!="object"?n[r]=o:Dl(o,r,n)}return n}function _S({args:e={},toml:t=null,defaults:n={}}={}){let s=Dl(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Dl(o):{},i=Dl(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),c={},l={};for(let u of a)u in i?(c[u]=i[u],l[u]="arg"):u in r?(c[u]=r[u],l[u]="tmct.toml"):(c[u]=s[u],l[u]="default");return{effective:c,sources:l}}var Bl,r0,Sa=L(()=>{zt();Qe();Fl();Bl="tmct.toml";r0=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Qs={};Nt(Qs,{BackendRejected:()=>Dn,BackendUnavailable:()=>ir,CANONICALISED_FROM_PROP:()=>ph,CAPABLE_OF_PREDICATE:()=>V1,CHAIN_KEEP_DEPTH:()=>F$,CHAIN_ROLLUP_THRESHOLD:()=>pl,CREATED_AT_PROP:()=>dt,DEFAULT_RETENTION:()=>ih,EXTRACTION_FINDINGS:()=>xl,EXTRACTION_FINDING_PROP:()=>Vl,FACT_CLASS:()=>Ke,GROUP_ROLLUP_THRESHOLD:()=>P$,HAS_A_PREDICATE:()=>wi,IN_REPLY_TO_PROP:()=>fh,MAX_ROW_BYTES:()=>rr,MEMORY_DIR_REL:()=>mi,MEMORY_GRAPH_REL:()=>uh,MEMORY_MANIFEST_REL:()=>pv,MEMORY_SESSION_CLASS:()=>ar,MULTI_VALUED_PREDICATES:()=>K1,NODE_ID_REL:()=>Rh,OPERATOR_SOURCE_ID:()=>Wl,RETRACTED_AT_PROP:()=>bl,RETRACTED_COUNT_PROP:()=>Op,RETRACTED_RECORD_IDS_PROP:()=>gl,RETRACTION_CLASS:()=>en,RETRACTION_PREDICATE:()=>ml,ROLLUP_COUNT_PROP:()=>da,ROLLUP_EARLIEST_PROP:()=>hs,ROLLUP_KEEP_PER_TYPE:()=>M$,ROLLUP_LATEST_PROP:()=>ms,ROLLUP_PRIOR_PROP:()=>ai,ROLLUP_RECORD_IDS_PROP:()=>ua,ROLLUP_SOURCE_IDS_PROP:()=>ii,ROW_BACKEND_CONTRACT_VERSION:()=>jl,ROW_BACKEND_KIND:()=>li,ROW_CLASSES:()=>kl,RULE_CLASS:()=>ws,RULE_KIND_ACTION_CONSTRAINT:()=>Lh,RULE_KIND_ACTION_EFFECT:()=>Ia,RULE_KIND_ACTION_PRECOND:()=>ou,RULE_KIND_ACTION_SIGNATURE:()=>Nh,RULE_KIND_COMPOSE2:()=>Ta,RULE_KIND_FILTER:()=>Aa,RULE_KIND_PROP:()=>bi,RULE_KIND_RECURSIVE:()=>Ch,SAID_IN_SESSION_PROP:()=>dh,SOURCE_CLASS:()=>bs,SOURCE_RELIABILITY_PROP:()=>PS,STATED_BY_PROP:()=>gn,SYLLOGISE_STATE_REL:()=>jh,UPDATED_AT_PROP:()=>Is,UTTERANCE_CLASS:()=>So,admittedNodes:()=>vl,appendCanonicalisedFromEdges:()=>k1,appendFact:()=>T1,appendFacts:()=>es,appendRetractions:()=>z1,appendRule:()=>iu,appendUtterance:()=>x1,appendUtterances:()=>$v,applySeedPayload:()=>DS,assertValidRow:()=>ui,attachFactHeads:()=>KS,chainRollupIdFor:()=>jp,cloneMemoryPayload:()=>gh,closeSqliteMemoryStore:()=>Zl,createInMemoryStore:()=>ja,createSqliteMemoryStore:()=>bh,createSqliteRowBackend:()=>Z0,emptyMemory:()=>ys,factGroupId:()=>mt,factHeadsOf:()=>HS,factIdForTriple:()=>we,factRecordIdForTag:()=>u0,factRecordIdsFor:()=>hr,findContradictions:()=>Iv,findRuleByName:()=>Ph,findRulesByName:()=>N1,foldedFactRows:()=>_v,headRollupIdFor:()=>kp,isChainRollupId:()=>ci,isHeadRollupId:()=>Hs,isMemoryOrSqliteHandle:()=>gi,isRetractionId:()=>Np,isRollupId:()=>hl,isRowBackend:()=>Rl,isRowHandle:()=>Wn,isValidRow:()=>oS,loadMemory:()=>rt,loadNodeId:()=>l1,loadSyllogiseState:()=>a1,normFactPredicate:()=>fs,normFactTerm:()=>V,openConfiguredMemoryBackend:()=>ko,openExistingMemoryBackend:()=>C0,openMemoryBackend:()=>$h,openSqliteSeedStore:()=>y0,peersToConvince:()=>Dp,provSourceClassFor:()=>m1,provenanceTagToSource:()=>Cn,readFactRows:()=>gt,readObjectSupersessions:()=>w0,readOnlyMemorySnapshot:()=>N0,readRetractions:()=>B1,readRuleRows:()=>au,removeFacts:()=>Av,resolveMemoryGraphFile:()=>va,resolveRelationChase:()=>Mh,resolveRelationChaseReverse:()=>Rv,retirableRetractions:()=>U1,retireRetractions:()=>W1,retractedAtOf:()=>or,retractedRecordIds:()=>sr,retractionFromWire:()=>Sl,retractionIdFor:()=>Cp,retractionScopeOf:()=>Lp,retractionWireFact:()=>$l,rowBackendProblems:()=>wa,rowProblems:()=>_l,saveNodeId:()=>u1,saveSyllogiseState:()=>c1,snapshotMemory:()=>t1,sqliteSeedFactTermValues:()=>O0,stableRecordIds:()=>El,wrapRowBackend:()=>wh,wrapRowBackendOverSqliteSeed:()=>$0});function ys(){return{generated_at:"",memory:!0,prefixes:{owl:"http://www.w3.org/2002/07/owl#",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",mgx:"urn:tmct:mgx#",mgxneg:"urn:tmct:mgxneg#"},vocabulary:c0.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function va(e,t=null){if(gi(e))throw new Error("resolveMemoryGraphFile: dir is a store handle, not a file path (Backend A only)");return t===null?ne(e,uh):ne(e,mi,`graph.v${t}.json`)}function pr(e){return!!e&&typeof e=="object"&&e.backend===hh}function vs(e){return!!e&&typeof e=="object"&&e.backend===mh}function Wn(e){return!!e&&typeof e=="object"&&e.backend===FS}function gi(e){return pr(e)||vs(e)||Wn(e)}function ka(e){gi(e)&&(e.storeWrites=(e.storeWrites||0)+1)}function ja(){return{backend:hh,payload:ys()}}function DS(e,t){t&&(e.payload={...e.payload,...t},e.storeMigrationsSettled=!1,ka(e))}function gh(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function BS(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Th(Cn(t));if(n)return n}return{id:qs,type:""}}function mt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function u0(e,t){return`${e}@${zS(t).id}`}function zS(e){return Th(Cn(e))||{id:qs,type:""}}function US(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=zS(s),i=t.get(o)||{sourceId:o,sourceType:r,tags:[]};i.tags.includes(s)||i.tags.push(s),t.set(o,i)}return t.size||t.set(qs,{sourceId:qs,sourceType:"",tags:[]}),[...t.values()]}function Kl(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=Cn(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function _a(e,t="",n=Math.max){return Kl(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function d0(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt);return!Number.isFinite(n)||!Number.isFinite(s)?!1:n>s?!0:n===s&&!!e.observedAt&&!t.observedAt}function WS(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=BS(n("mgx:factProvenance")),o=n(Ra).split(" ").filter(Boolean)[0]||null,r=fa(e.id);return[e.id,mt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(dr)||s.id,r||s.type,Number(n(r?ai:Br))||0,n(dt),n(Ea)||null,o,t]}function f0(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Ke))return;let t=e.prepare(GS);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(Ke))t.run(...WS(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function p0(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function KS(e,t){return e&&t&&(e[VS]=t),e}function m0(e){let t=new Map;for(let n of e.prepare("SELECT triple_hash, trust_base, inputs_json FROM fact_heads").all())t.set(n.triple_hash,{trustBase:n.trust_base,inputs:JSON.parse(n.inputs_json)});return t}function qS(e,t,n,s){let o=e.prepare(h0),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=Ys();for(let a of n){let c=t.groups.get(a);if(!c?.length){r.run(a),s?.delete(a);continue}let l=p0(Fh(a,c,t).assertions),u=yb(l).score;o.run(a,u,JSON.stringify(l),i),s?.set(a,{trustBase:u,inputs:l})}}function g0(e){let t=e.db;if(t.prepare("SELECT triple_hash FROM fact_heads LIMIT 1").get()||!t.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Ke))return;let n=cu(Yl(e));t.exec("BEGIN IMMEDIATE");try{qS(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function b0(e,t,n){let s=e.prepare("SELECT ord, to_id FROM fact_object_supersessions WHERE subject = ? AND predicate = ? ORDER BY ord DESC LIMIT 1"),o=e.prepare("INSERT INTO fact_object_supersessions(subject, predicate, ord, from_id, to_id, recorded_at) VALUES (?, ?, ?, ?, ?, ?)"),r=Ys();for(let i of n){let[a,c]=i.split("\0");if(il(c)!==ca)continue;let l=t.groupsByPair.get(i)||[];if(l.length<2)continue;let u=l.map(f=>{let h=Fh(f,t.groups.get(f),t);return h.trust=gc(h.assertions).score,h});if(new Set(u.map(f=>f.object)).size<2)continue;let d=$p(u,ca)?.winner?.id;if(!d)continue;let p=s.get(a,c);p?.to_id!==d&&o.run(a,c,(p?.ord??-1)+1,p?.to_id||"",d,r)}}function w0(e,{subject:t,predicate:n}={}){if(!vs(e))return[];let s=t&&n?" WHERE subject = ? AND predicate = ?":"",o=s?[t,n]:[];return e.db.prepare(`SELECT subject, predicate, ord, from_id, to_id, recorded_at FROM fact_object_supersessions${s} ORDER BY subject, predicate, ord`).all(...o).map(r=>({subject:r.subject,predicate:r.predicate,ord:r.ord,fromId:r.from_id,toId:r.to_id,recordedAt:r.recorded_at}))}function XS(){if(AS)return;AS=!0;let e=process.listeners("warning").slice();process.removeAllListeners("warning"),process.on("warning",t=>{if(!(t?.name==="ExperimentalWarning"&&/sqlite/i.test(String(t?.message))))if(e.length)for(let n of e)n(t);else console.error(t.stack||String(t))})}async function bh(e){XS();let{DatabaseSync:t}=await Promise.resolve().then(()=>(Xp(),Yp)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(l0),f0(n);let s=Q0({backend:mh,db:n,dbPath:e});return g0(s),s}function Zl(e){vs(e)&&e.db.close()}async function y0(e){XS();let{DatabaseSync:t}=await Promise.resolve().then(()=>(Xp(),Yp));try{return{backend:mh,db:new t(e,{readOnly:!0}),dbPath:e,readOnly:!0}}catch(n){throw new ir(`could not open the seed store ${e} read-only: ${n.message}`,{cause:n})}}function wh(e,{basePayload:t=null,sqliteSeedStore:n=null,sqliteSeedOverlayRows:s=null,onOversizedRow:o="throw",copyOnRead:r=!0,log:i=void 0}={}){let a=wa(e);if(a.length)throw new Dn(`not a memory row backend: ${a.join("; ")}`);if(n&&!vs(n))throw new Dn("sqliteSeedStore must be an open sqlite store handle (openSqliteSeedStore)");if(n&&t)throw new Dn("a handle takes its seed either as a basePayload or as a sqliteSeedStore, never both");return{backend:FS,impl:e,cachedPayload:null,cachedIndex:null,basePayload:gh(t),sqliteSeedStore:n,sqliteSeedOverlayRows:s?[...s]:null,sqliteSeedKeyOrds:null,baseRows:null,baseKeyOrds:null,storedRows:null,onOversizedRow:o,copyOnRead:r,log:i}}function $0(e,t,{overlayRows:n=null,onOversizedRow:s="throw",copyOnRead:o=!0,log:r=void 0}={}){return wh(e,{sqliteSeedStore:t,sqliteSeedOverlayRows:n,onOversizedRow:s,copyOnRead:o,log:r})}async function S0(e){let t=await e;if(Array.isArray(t))return t;let n=[];for await(let s of t)n.push(s);return n}function tv(e,t){let n=new Map;for(let s of e)n.set(s.rowKey,s);for(let s of t)n.set(s.rowKey,s);return[...n.values()]}function v0(e){let t=new Set(e.storedRows.map(s=>s.rowKey)),n=new Set;for(let s of oh(e).keys())t.has(s)||n.add(s);return n}async function Hl(e,t,n){let s=await e.impl.readMeta(t);if(s==null)return n;try{return JSON.parse(s)}catch{return n}}async function yh(e){if(!e.cachedPayload){let t=ys(),n=await S0(e.impl.readRows());e.storedRows=n.filter(o=>o?.rowClass!==ba);let s={memory:await Hl(e,JS,OS(e,"memory",t.memory)),prefixes:await Hl(e,QS,OS(e,"prefixes",t.prefixes))};e.sqliteSeedStore?e.cachedPayload=xa(sv(e,s)):(e.baseRows=Vp(e.basePayload||t,{onOversizedRow:"keep"}),e.cachedPayload=xa(Ol(tv(e.baseRows,e.storedRows),{meta:s})))}return e.cachedPayload}async function E0(e){let t=await yh(e);return e.copyOnRead===!1?t:Bn(t)}function x0(e){return{...e,individuals:(e.individuals||[]).map(t=>({...t})),objectProperties:(e.objectProperties||[]).map(t=>({...t,examples:[...t.examples||[]]}))}}function nv(e){Wn(e)&&(ka(e),e.cachedPayload=null,e.cachedIndex=null,e.storedRows=null,e.baseRows=null,e.baseKeyOrds=null)}function oh(e){return e.sqliteSeedStore?T0(e):(e.baseKeyOrds||(e.baseKeyOrds=new Map((e.baseRows||[]).map(t=>[t.rowKey,Xl(t)]))),e.baseKeyOrds)}function IS(e){let t;try{t=JSON.parse(e)}catch{return e}let n=t?.individual;return Array.isArray(n?.attributes)?JSON.stringify({...t,individual:{...n,attributes:n.attributes.filter(s=>s?.prop!==Is)}}):e}function k0(e,t){return e?IS(e.json)!==IS(t.json):!0}async function j0(e,t){await yh(e);let n=v0(e),s=e.storedRows,o=new Map(s.map(f=>[f.rowKey,f])),r=Vp(R0(t,n),{priorRows:s,priorOrds:oh(e),onOversizedRow:e.onOversizedRow,...e.log?{log:e.log}:{}}),{puts:i,deletes:a}=Hp(s,r),c=i.filter(f=>!n.has(f.rowKey)).filter(f=>k0(o.get(f.rowKey),f)),l=a.filter(f=>!n.has(f));try{c.length&&await e.impl.putRows(c),l.length&&await e.impl.deleteRows(l),await e.impl.putMeta(JS,JSON.stringify(t.memory??ys().memory)),await e.impl.putMeta(QS,JSON.stringify(t.prefixes??ys().prefixes))}catch(f){throw nv(e),f}let u=new Set(l),d=new Map(e.storedRows.filter(f=>!u.has(f.rowKey)).map(f=>[f.rowKey,f]));for(let f of c)d.set(f.rowKey,f);e.storedRows=[...d.values()];let p={memory:t.memory,prefixes:t.prefixes};if(I0(e.cachedPayload,p,c,l,oh(e))){f1(e,c,l);return}e.cachedPayload=null,e.cachedIndex=null,e.cachedPayload=xa(e.sqliteSeedStore?sv(e,p):Ol(tv(e.baseRows,e.storedRows),{meta:p}))}function R0(e,t){return t.size?{...e,individuals:(e?.individuals||[]).filter(n=>!t.has(String(n?.id??""))),objectProperties:(e?.objectProperties||[]).filter(n=>!t.has(`${Zn}${n?.prop}`))}:e}function ql(e){return typeof e.iterate=="function"?e.iterate():e.all()}function*_0(e,t){let n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id");for(let o of ql(n)){if(t(o.id))continue;let r=Sh.get(o.class)||"";yield{rowKey:o.id,rowClass:r,term:r==="fact"?V(o.subject||""):"",json:Eh(o.ord,o.json)}}let s=e.db.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid");for(let o of e.db.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all()){if(t(`${Zn}${o.prop}`))continue;let r=[];for(let i of s.all(o.prop)){let a={subject:i.subject,object:i.object,subjectLabel:i.subject_label,objectLabel:i.object_label};i.extra&&Object.assign(a,JSON.parse(i.extra)),r.push(a)}yield eu({predicate:o.predicate,prop:o.prop,count:o.count,examples:r},o.ord)}for(let o of kh(e.db))t(o.rowKey)||(yield o)}function T0(e){if(e.sqliteSeedKeyOrds)return e.sqliteSeedKeyOrds;let t=e.sqliteSeedStore.db,n=new Map;for(let s of ql(t.prepare("SELECT id, ord FROM individuals")))n.set(s.id,s.ord);for(let s of ql(t.prepare("SELECT prop, ord FROM relations")))n.set(`${Zn}${s.prop}`,s.ord);for(let s of kh(t))n.set(s.rowKey,Xl(s));for(let s of e.sqliteSeedOverlayRows||[])n.set(s.rowKey,Xl(s));return e.sqliteSeedKeyOrds=n,n}function*A0(...e){for(let t of e)yield*t}function sv(e,t){let n=new Set(e.storedRows.map(o=>o.rowKey)),s=(e.sqliteSeedOverlayRows||[]).filter(o=>o?.rowKey&&!n.has(o.rowKey));for(let o of s)n.add(o.rowKey);return Ol(A0(_0(e.sqliteSeedStore,o=>n.has(o)),s,e.storedRows),{meta:t})}function I0(e,t,n,s,o){let r=new Set,i=new Set;for(let l of s){let u=String(l);if(o.has(u))return!1;u.startsWith(Zn)?r.add(u.slice(Zn.length)):i.add(u)}if(i.size&&!fS(e,i))return!1;if(e.memory=t.memory,e.prefixes=t.prefixes,!n.length&&!s.length)return Cl(e),!0;let a=new Map;for(let l=0;l<e.individuals.length;l+=1)a.set(e.individuals[l]?.id,l);let c=new Map;for(let l=0;l<e.objectProperties.length;l+=1)c.set(e.objectProperties[l]?.prop,l);for(let l of n){if(l.rowClass===ba)continue;let u=JSON.parse(l.json);if(l.rowClass===fr){let f=u?.group;if(!f?.prop)continue;let h=c.get(f.prop);h===void 0?(c.set(f.prop,e.objectProperties.length),e.objectProperties.push(f)):e.objectProperties[h]=f;continue}let d=u?.individual;if(!d?.id)continue;let p=a.get(d.id);p===void 0?(a.set(d.id,e.individuals.length),e.individuals.push(d),mS(e,d.id)):e.individuals[p]=d}return r.size&&(e.objectProperties=e.objectProperties.filter(l=>!r.has(l?.prop))),i.size&&!pS(e,i)?!1:(Cl(e),!0)}function*O0(e){for(let t of["subject","object"])for(let n of ql(e.db.prepare(`SELECT DISTINCT ${t} AS value FROM facts`)))n.value&&(yield n.value)}function OS(e,t,n){if(!e.sqliteSeedStore)return e.basePayload?.[t]??n;let s=e.sqliteSeedStore.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);if(!s)return n;try{return JSON.parse(s.v)}catch{return n}}async function $h(e,t){if(Wn(t))return{dir:t,close:async()=>{await t.impl.close()}};if(Rl(t)){let r=wh(t);return{dir:r,close:async()=>{await r.impl.close()}}}if(t===hh)return{dir:ja(),close:async()=>{}};let n=ne(e,".tmct","memory","graph.sqlite"),s=r=>Sd(r).then(()=>!0,()=>!1);!await s(n)&&await s(ne(e,uh))&&process.stderr.write(`found .tmct/memory/graph.json \u2014 the flat-file memory backend is retired; starting a fresh sqlite store (the old file is left untouched)
|
|
107
|
-
`),await os(Se(n),{recursive:!0});let o=await bh(n);return{dir:o,close:async()=>Zl(o)}}async function C0(e,t=""){if(!e||typeof e!="string")return null;let n=ne(e,".tmct","memory","graph.sqlite");try{await Sd(n)}catch{return null}return $h(e,t)}async function N0(e){if(!e)return null;let t=ja();return DS(t,gh(await rt(e))),t}async function ko(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Sa(),th));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return $h(e,n)}function L0(e){let t=e.db.prepare("PRAGMA data_version").get()?.data_version;return e.cachedPayload&&e.cachedDataVersion!==t&&(ka(e),e.cachedPayload=null,e.storeMigrationsSettled=!1),e.cachedPayload||(e.cachedPayload=Yl(e),e.cachedFactHeads=m0(e.db),e.cachedDataVersion=t),KS(Bn(e.cachedPayload),e.cachedFactHeads)}function Yl(e){let t=e.db,n=ys(),s=(r,i)=>{let a=t.prepare("SELECT v FROM meta WHERE k = ?").get(r);return a?JSON.parse(a.v):i},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(r=>JSON.parse(r.json));return{generated_at:s("generated_at",n.generated_at),memory:s("memory",n.memory),prefixes:s("prefixes",n.prefixes),vocabulary:s("vocabulary",n.vocabulary),classes:s("classes",n.classes),objectProperties:iv(t).map(r=>r.group),individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function P0(e,t){let n=Bn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function M0(e,t){e.individuals=e.individuals.filter(n=>!t.has(n?.id))}function F0(e,t){let n=e.objectProperties.find(s=>s?.prop===t);return n||(n={predicate:null,prop:t,count:0,examples:[]},e.objectProperties.push(n)),n}function D0(e,t,n){let s=`${t.subject}\0${t.object}`;e.examples=e.examples.filter(r=>`${r.subject}\0${r.object}`!==s);let o={subject:t.subject,object:t.object,subjectLabel:t.subjectLabel??null,objectLabel:t.objectLabel??null};n.length&&Object.assign(o,Bn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function B0(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function z0(e,t){e.objectProperties=e.objectProperties.filter(n=>!t.has(n?.prop))}function Xl(e){let t=W0.exec(e?.json||"");if(t)return Number(t[1]);try{let n=Number(JSON.parse(e.json).ord);return Number.isFinite(n)?n:0}catch{return 0}}function rv(e,t,n){let s=Sh.get(e?.class)||"";return{rowKey:String(e.id),rowClass:s,term:s==="fact"?V(Ss(e,"subject")):"",json:Eh(t,n)}}function G0(e){let t={subject:e.subject,object:e.object,subjectLabel:e.subjectLabel??null,objectLabel:e.objectLabel??null};for(let n of Object.keys(e))YS.has(n)||(t[n]=e[n]);return t}function eu(e,t){let n=(e.examples||[]).map(G0);return{rowKey:`${Zn}${e.prop}`,rowClass:fr,term:"",json:JSON.stringify({ord:t,group:{predicate:e.predicate??null,prop:e.prop,count:Number.isFinite(e.count)?e.count:n.length,examples:n}})}}function iv(e){let t=new Map;for(let n of e.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all())t.set(n.prop,{ord:n.ord,group:{predicate:n.predicate,prop:n.prop,count:n.count,examples:[]}});if(!t.size)return[];for(let n of e.prepare("SELECT prop, subject, object, subject_label, object_label, extra FROM edges ORDER BY rowid").all()){let s=t.get(n.prop);if(!s)continue;let o={subject:n.subject,object:n.object,subjectLabel:n.subject_label,objectLabel:n.object_label};n.extra&&Object.assign(o,JSON.parse(n.extra)),s.group.examples.push(o)}return[...t.values()]}function av(e){let t=[],n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id").all();for(let s of n){let o=Sh.get(s.class)||"";t.push({rowKey:s.id,rowClass:o,term:o==="fact"?V(s.subject||""):"",json:Eh(s.ord,s.json)})}for(let s of iv(e.db))t.push(eu(s.group,s.ord));return t}function V0(e,t){let n=new Map,s=0,o=0;for(let a of t){let c=Xl(a);n.set(a.rowKey,c),a.rowClass===fr?c>=o&&(o=c+1):c>=s&&(s=c+1)}let r=[],i=new Map;for(let a of e.individuals||[]){if(!a?.id)continue;let c=JSON.stringify(a),l=String(a.id),u=n.get(l)??s++;r.push(rv(a,u,c)),i.set(l,{kind:"individual",ord:u,individual:a,json:c})}for(let a of e.objectProperties||[]){if(!a?.prop)continue;let c=`${Zn}${a.prop}`,l=n.get(c)??o++,u=eu(a,l);r.push(u),i.set(c,{kind:fr,ord:l,group:JSON.parse(u.json).group})}return{rows:r,partsByKey:i}}function K0(e){if(e.expiresAt!==void 0)return null;let t;try{t=JSON.parse(e.json)}catch{return null}if(!t||typeof t!="object"||!Number.isFinite(t.ord))return null;if(e.rowClass===fr){let r=t.group;if(!r?.prop)return null;let i=eu(r,t.ord);return i.rowKey!==e.rowKey||i.term!==e.term||i.json!==e.json?null:{kind:fr,ord:t.ord,group:r}}let n=t.individual;if(!n?.id)return null;let s=JSON.stringify(n),o=rv(n,t.ord,s);return o.rowKey!==e.rowKey||o.rowClass!==e.rowClass||o.term!==e.term||o.json!==e.json?null:{kind:"individual",ord:t.ord,individual:n,json:s}}function cv(e,{cache:t=null}={}){let n=e.db;return{db:n,cache:t,touchedGroups:new Set,touchedPairs:new Set,hasUnmappedRows:!!n.prepare(vh).get(Eo),unmapped:null,upsertInd:n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),upsertFact:n.prepare(GS),deleteInd:n.prepare("DELETE FROM individuals WHERE id = ?"),deleteFact:n.prepare("DELETE FROM facts WHERE id = ?"),getFact:n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?"),upsertRel:n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),edgesForProp:n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),upsertEdge:n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),deleteEdge:n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),deleteGroupEdges:n.prepare("DELETE FROM edges WHERE prop = ?"),deleteRel:n.prepare("DELETE FROM relations WHERE prop = ?")}}function lv(e){return e.unmapped||(e.db.exec(U0),e.hasUnmappedRows=!0,e.unmapped={upsert:e.db.prepare(`INSERT OR REPLACE INTO ${Eo}(row_key, row_class, term, json, expires_at) VALUES (?, ?, ?, ?, ?)`),remove:e.db.prepare(`DELETE FROM ${Eo} WHERE row_key = ?`)}),e.unmapped}function xh(e,t){e.hasUnmappedRows&&lv(e).remove.run(t)}function H0(e,{ord:t,individual:n,json:s}){e.upsertInd.run(n.id,t,n.class??null,n.label??null,s),n.class===Ke&&(e.upsertFact.run(...WS(n,s)),e.touchedGroups.add(mt(n.id)),e.touchedPairs.add(vo(Ss(n,"subject"),Ss(n,"predicate")))),xh(e,String(n.id)),e.cache&&P0(e.cache,n)}function q0(e,{ord:t,group:n}){let s=new Map(e.edgesForProp.all(n.prop).map(a=>[`${a.subject}\0${a.object}`,a])),o=new Set,r=e.cache?F0(e.cache,n.prop):null;for(let a of n.examples||[]){let c=`${a.subject}\0${a.object}`;o.add(c);let l=Object.keys(a).filter(f=>!YS.has(f)),u=l.length?JSON.stringify(Object.fromEntries(l.map(f=>[f,a[f]]))):null,d=s.get(c);d&&(d.subject_label??null)===(a.subjectLabel??null)&&(d.object_label??null)===(a.objectLabel??null)&&(d.extra??null)===(u??null)||(e.upsertEdge.run(n.prop,a.subject,a.object,a.subjectLabel??null,a.objectLabel??null,u),r&&D0(r,a,l))}for(let a of s.keys()){if(o.has(a))continue;let[c,l]=a.split("\0");e.deleteEdge.run(n.prop,c,l)}r&&B0(r,o);let i=Number.isFinite(n.count)?n.count:(n.examples||[]).length;e.upsertRel.run(n.prop,t,n.predicate??null,i),xh(e,`${Zn}${n.prop}`),r&&(r.predicate=n.predicate??null,r.count=i)}function Y0(e,t){lv(e).upsert.run(t.rowKey,t.rowClass,t.term,t.json,t.expiresAt??null)}function uv(e,t,n=null){for(let s of t){let o=n?.get(s.rowKey)||K0(s);if(!o){Y0(e,s);continue}o.kind===fr?q0(e,o):H0(e,o)}}function dv(e,t){let n=new Set,s=new Set;for(let o of t){if(o.startsWith(Zn)){let r=o.slice(Zn.length);e.deleteGroupEdges.run(r),e.deleteRel.run(r),s.add(r)}else{let r=e.getFact.get(o);r&&(e.touchedGroups.add(r.triple_hash),e.touchedPairs.add(vo(r.subject,r.predicate))),e.deleteInd.run(o),e.deleteFact.run(o),n.add(o)}xh(e,o)}e.cache&&n.size&&M0(e.cache,n),e.cache&&s.size&&z0(e.cache,s)}function rh(e,t,n){if(!e.touchedGroups.size)return;let s=cu(t);qS(e.db,s,e.touchedGroups,n),b0(e.db,s,e.touchedPairs)}function X0(e,t){let n=e.db,s=ys(),o=e.cachedPayload||null;n.exec("BEGIN IMMEDIATE");try{let r=n.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)");r.run("generated_at",JSON.stringify(t.generated_at??s.generated_at)),r.run("memory",JSON.stringify(t.memory??s.memory)),r.run("prefixes",JSON.stringify(t.prefixes??s.prefixes)),r.run("vocabulary",JSON.stringify(t.vocabulary??s.vocabulary)),r.run("classes",JSON.stringify(t.classes??s.classes)),r.run("proseIndex",JSON.stringify(t.proseIndex??s.proseIndex)),o&&(o.generated_at=Bn(t.generated_at??s.generated_at),o.memory=Bn(t.memory??s.memory),o.prefixes=Bn(t.prefixes??s.prefixes),o.vocabulary=Bn(t.vocabulary??s.vocabulary),o.classes=Bn(t.classes??s.classes),o.proseIndex=Bn(t.proseIndex??s.proseIndex));let i=cv(e,{cache:o}),a=av(e),{rows:c,partsByKey:l}=V0(t,a),{puts:u,deletes:d}=Hp(a,c);uv(i,u,l),dv(i,d),rh(i,t,e.cachedFactHeads),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}function kh(e){if(!e.prepare(vh).get(Eo))return[];let t=Math.floor(Date.now()/1e3),n=[];for(let s of e.prepare(`SELECT row_key, row_class, term, json, expires_at FROM ${Eo}`).all()){if(s.expires_at!==null&&s.expires_at<=t)continue;let o={rowKey:s.row_key,rowClass:s.row_class,term:s.term,json:s.json};s.expires_at!==null&&(o.expiresAt=s.expires_at),n.push(o)}return n}function CS(e,t){let n=e.db;n.exec("BEGIN IMMEDIATE");try{t(cv(e)),n.exec("COMMIT")}catch(s){throw n.exec("ROLLBACK"),s}finally{e.cachedPayload=null,e.cachedFactHeads=null}}function Q0(e){return Object.assign(e,{async readRows(){return[...av(e),...kh(e.db)]},async readRowsByTerm(t){return(await e.readRows()).filter(n=>n.term===t)},async putRows(t){let n=(t||[]).map(s=>ui(s));n.length&&CS(e,s=>{uv(s,n),rh(s,Yl(e),null)})},async deleteRows(t){let n=[...t||[]];n.length&&CS(e,s=>{dv(s,n),rh(s,Yl(e),null)})},async readMeta(t){let n=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);return n?n.v:null},async putMeta(t,n){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(t,String(n)),e.cachedPayload=null,e.cachedFactHeads=null},async deleteAll(){let t=e.db;t.exec("BEGIN IMMEDIATE");try{for(let n of J0)t.exec(`DELETE FROM ${n}`);t.prepare(vh).get(Eo)&&t.exec(`DELETE FROM ${Eo}`),t.exec("COMMIT")}catch(n){throw t.exec("ROLLBACK"),n}finally{e.cachedPayload=null,e.cachedFactHeads=null}},async close(){Zl(e)}})}function Z0(e){let t=null,n=!1,s=()=>{if(n)throw new ir("this row backend was closed and can no longer be used");return t=t||bh(e),t},o=r=>async(...i)=>(await s())[r](...i);return{kind:li,contractVersion:1,readRows:o("readRows"),readRowsByTerm:o("readRowsByTerm"),putRows:o("putRows"),deleteRows:o("deleteRows"),readMeta:o("readMeta"),putMeta:o("putMeta"),deleteAll:o("deleteAll"),async close(){let r=t?await t:null;n=!0,r&&Zl(r)}}}async function fv(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await Cr(n,t),await rc(n,e)}async function tu(e,t){await fv(e,JSON.stringify(t))}async function t1(e,{retentionVersions:t}={}){if(gi(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a store handle has no on-disk graph.json to snapshot");let n=va(e),s;try{s=await Ce(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=e1(e),r;try{r=JSON.parse(await Ce(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??ih}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??ih);let i=r.version,a=va(e,i);await os(Se(a),{recursive:!0}),await fv(a,s),r.version=i+1;let c=null,l=i-r.retentionVersions;if(l>=0)try{await vd(va(e,l)),c=l}catch(u){if(u?.code!=="ENOENT")throw u}return await tu(o,r),{skipped:!1,version:i,prunedVersion:c}}async function rt(e){if(pr(e))return NS(e,e.payload);if(vs(e))return NS(e,L0(e));if(Wn(e))return E0(e);let t;try{t=await Ce(sh(e),"utf8")}catch(n){if(n?.code==="ENOENT")return ys();throw n}return xa(JSON.parse(t))}function n1(e){for(let t of e?.individuals||[])if(t?.class===Ke&&!String(t.id||"").includes("@"))return!0;return!1}function NS(e,t){return e.storeMigrationsSettled?t:n1(t)?xa(t):(e.storeMigrationsSettled=!0,t)}function o1(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==Ke||!s1.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Zo(o("subject"),o("predicate"),o("object"));r!==s.id&&(t.set(s.id,r),s.id=r)}if(!t.size)return e;hS(e);let n=s=>t.get(s)||s;for(let s of e.objectProperties||[])for(let o of s.examples||[])o&&(t.has(o.subject)&&(o.subject=t.get(o.subject)),t.has(o.object)&&(o.object=t.get(o.object)));for(let s of e.individuals){Array.isArray(s?.derived_from)&&s.derived_from.length&&(s.derived_from=s.derived_from.map(n));let o=(s?.attributes||[]).find(r=>r?.prop==="mgx:factJustification");o?.value&&(o.value=o.value.split(" | ").map(r=>r.split(" ").filter(Boolean).map(n).join(" ")).filter(Boolean).join(" | "))}return e}function r1(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(c=>c?.prop===gn),n=new Map;for(let c of t?.examples||[]){if(!c?.subject)continue;let l=n.get(c.subject);l?l.push(c):n.set(c.subject,[c])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let c of e.individuals){if(c?.class!==Ke||String(c.id||"").includes("@")){a.push(c);continue}let l=y=>(c.attributes||[]).find(S=>S?.prop===y)?.value||"",u=l("rdf:subject"),d=l("rdf:predicate"),p=l("rdf:object");if(!u||!d||!p){a.push(c);continue}let f=Zo(u,d,p),h=l(dt),m=l("mgx:factProvenance"),b=n.get(c.id)||[],g=m?US(m):[];for(let y of b)g.some(S=>S.sourceId===y.object)||g.push({sourceId:y.object,sourceType:"",tags:[]});g.length||g.push({sourceId:qs,sourceType:"",tags:[]});let w=[];for(let y of g){let S={id:`${f}@${y.sourceId}`,label:c.label,class:Ke,derived_from:Bn(c.derived_from)||[],mentions:Bn(c.mentions)||[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:u},{prop:"rdf:predicate",key:"predicate",value:d},{prop:"rdf:object",key:"object",value:p},{prop:dt,key:"createdAt",value:_a(y.tags,h,Math.min)||h||Ys()},{prop:dr,key:"sourceId",value:y.sourceId},...y.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:y.tags.join(" | ")}]:[],...l("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:l("mgx:hasProseTokens")}]:[],...l("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:l("mgx:factQuantifier")}]:[],...y.sourceType==="entailed"&&l("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:l("mgx:factJustification")}]:[]]};if(a.push(S),r.push(S),w.push(S.id),y.sourceId!==qs){let T=b.find(v=>v?.object===y.sourceId);i.push({...T||{},subject:S.id,object:y.sourceId,subjectLabel:S.label,objectLabel:Ah(y.sourceId)})}}s.add(c.id),o.set(c.id,w)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(c=>!s.has(c?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:gn,count:i.length,examples:i}));for(let c of e.objectProperties||[]){if(c?.prop===gn||!c?.examples?.length)continue;let l=[];for(let u of c.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],p=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let f of d)for(let h of p)l.push({...u,subject:f,object:h})}c.examples=l,c.count=l.length}e.individuals=a,gv(e);for(let c of r)hi(e,c);return Es(e),e}async function i1(e,t){if(ka(e),pr(e)){e.payload=t;return}if(vs(e)){X0(e,t);return}if(Wn(e)){await j0(e,t);return}await os(Se(sh(e)),{recursive:!0}),await tu(sh(e),t)}async function a1(e){if(pr(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(vs(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(hv);return t?.v?JSON.parse(t.v):null}if(Wn(e))return Hl(e,ZS,null);try{return JSON.parse(await Ce(ne(e,jh),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function c1(e,t){if(pr(e)){e.syllogiseState=structuredClone(t);return}if(vs(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(hv,JSON.stringify(t));return}if(Wn(e)){await e.impl.putMeta(ZS,JSON.stringify(t));return}let n=ne(e,jh);await os(Se(n),{recursive:!0}),await tu(n,t)}async function l1(e){if(pr(e))return e.nodeId||null;if(vs(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(mv);return t?.v&&JSON.parse(t.v).nodeId||null}if(Wn(e))return(await Hl(e,ev,null))?.nodeId||null;try{return JSON.parse(await Ce(ne(e,Rh),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function u1(e,t){if(pr(e)){e.nodeId=t;return}if(vs(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(mv,JSON.stringify({nodeId:t}));return}if(Wn(e)){await e.impl.putMeta(ev,JSON.stringify({nodeId:t}));return}let n=ne(e,Rh);await os(Se(n),{recursive:!0}),await tu(n,{nodeId:t})}function gv(e,t=null){let n=new Map,s=new Map,o=new Map,r=t?new Jl(t.factRecordsByGroup):new Map,i=t?new Jl(t.statedByBySubject):new Map;for(let a of e.individuals||[])if(a?.id&&(n.set(a.id,a),a.class===bs&&s.set(a.id,a),a.class===en&&lh(o,a),!t&&a.class===Ke)){let c=mt(a.id),l=r.get(c);l?l.push(a.id):r.set(c,[a.id])}if(!t){let a=(e.objectProperties||[]).find(c=>c?.prop===gn);for(let c of a?.examples||[]){if(!c?.subject)continue;let l=i.get(c.subject);l?l.push(c.object):i.set(c.subject,[c.object])}}return e[ah]={individualsById:n,sourcesById:s,statedByBySubject:i,factRecordsByGroup:r,retractionsByGroup:o},e[ah]}function ch(e,t,n){if(e.push){e.push(t,n);return}let s=e.get(t);s?s.includes(n)||s.push(n):e.set(t,[n])}function d1(e){let t=e.cachedPayload;if(!t)return null;let n=e.cachedIndex;if(n||(n={individuals:null,factRecordsByGroup:null,statedByExamples:null,statedByBySubject:null},e.cachedIndex=n),!n.factRecordsByGroup||n.individuals!==t.individuals){let o=new Map;for(let r of t.individuals||[]){if(!r?.id||r.class!==Ke)continue;let i=mt(r.id),a=o.get(i);a?a.push(r.id):o.set(i,[r.id])}n.factRecordsByGroup=o,n.individuals=t.individuals}let s=(t.objectProperties||[]).find(o=>o?.prop===gn)?.examples||null;if(!n.statedByBySubject||n.statedByExamples!==s){let o=new Map;for(let r of s||[]){if(!r?.subject)continue;let i=o.get(r.subject);i?i.push(r.object):o.set(r.subject,[r.object])}n.statedByBySubject=o,n.statedByExamples=s}return n}function f1(e,t,n){let s=e.cachedIndex;if(!s?.factRecordsByGroup)return;let o=s.factRecordsByGroup;for(let r of n){let i=String(r);if(i.startsWith(Zn))continue;let a=mt(i),c=(o.get(a)||[]).filter(l=>l!==i);c.length?o.set(a,c):o.delete(a)}for(let r of t){if(r.rowClass!==ov)continue;let i=String(r.rowKey);p1(o,mt(i),i)}s.individuals=e.cachedPayload.individuals}function p1(e,t,n){let s=e.get(t);if(!s){e.set(t,[n]);return}if(s.includes(n))return;let o=0;for(;o<s.length&&s[o]<n;)o+=1;s.splice(o,0,n)}function lh(e,t){let n=mt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function h1(e,t){let n=Dt(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===en&&mt(s.id)===t)}async function Js(e,t){let n=Wn(e),s=n?x0(await yh(e)):await rt(e);ka(e);try{let o=gv(s,n?d1(e):null),r=await t(s)??s;return y1(r),n&&Dt(r)!==o&&(e.cachedIndex=null),S1(r),n||yS(r),await i1(e,r),n?e.cachedPayload:r}catch(o){throw nv(e),o}}function _h(e,t){return e?.attributes?.find(n=>n?.prop===dt)?.value||t||Ys()}function Un(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Th(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Wl}:${e.sessionId}`:Wl,type:"operator"};case"teach":return{id:e.sessionId?`${nh}:${e.sessionId}`:nh,type:"teach"};case"teachNode":return{id:`${MS}:${e.nodeId}`,type:"teach"};case"provider":return{id:`src:provider:${e.name}`,type:"provider"};case"corpus":return{id:`src:corpus:${e.name}`,type:"corpus"};case"corpusWeak":return{id:`src:corpus-weak:${e.name}`,type:"corpusWeak"};case"reference":return{id:`src:reference:${e.pack}`,type:"reference"};case"referenceLive":return{id:`src:reference:${e.pack}`,type:"referenceLive"};case"extracted":return{id:`src:extracted:${e.name}`,type:"extracted"};case"optimisticExtract":return{id:`src:optimistic-extract:${e.name}`,type:"optimisticExtract"};case"web":return{id:`src:learned:web:${oa(String(e.url||""))}`,type:"web",url:String(e.url||"")};case"entailed":return{id:`src:entailed:${e.rule}`,type:"entailed",rule:String(e.rule||"")};default:return null}}function m1(e){return Ld[e]||null}function g1(e,t,n){let s=Th(t);if(!s)return null;let o=Dt(e),r=o?o.individualsById.get(s.id):e.individuals.find(l=>l?.id===s.id),i=_h(r,t?.createdAt||n),a={id:s.id,label:Ah(s.id),class:bs,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:dt,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},c=Xs(e,a);return o&&o.sourcesById.set(s.id,c),s.id}function su(e){let t=Dt(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===bs&&(n[s.id]=s);return n}function bv(e,t){let n=Dt(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===gn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function b1(e,t,n=Date.now(),s={}){let o=bv(e,t.id),r=(t.attributes||[]).find(c=>c?.prop===dt)?.value||"",{score:i,inputs:a}=wb({sourceIds:o,createdAt:r},su(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});Un(t,Br,"trustScore",String(i)),Un(t,hc,"trustInputs",JSON.stringify(a)),Un(t,Is,"updatedAt",new Date(n).toISOString())}function w1(e,t,n=Date.now(),s={}){let[o]=bv(e,t.id),r=o?su(e)[o]:null,i=(r?.attributes||[]).find(l=>l?.prop==="mgx:sourceType")?.value||"",a=mc(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let l=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*l))}let c=(t.attributes||[]).find(l=>l?.prop===dt)?.value||"";Un(t,Br,"trustScore",String(a)),Un(t,hc,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:c})),Un(t,Is,"updatedAt",new Date(n).toISOString())}function wv(e,t,n,s){t?.class===Ke?w1(e,t,n,s):b1(e,t,n,s)}function hi(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===dt)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Cn(i);if(!a)continue;let c=g1(e,a,r);c&&Ql(e,{predicate:"statedBy",prop:gn},{subject:t.id,object:c,subjectLabel:t.label,objectLabel:Ah(c)})}wv(e,t,n,s)}function y1(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===gn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==Ke||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(hi(e,r,o),s=!0);s&&Es(e)}function $1(e){let t=Dt(e);if(t){let i=!1;for(let a of t.sourcesById.keys())if(Ul(a)){i=!0;break}if(!i)return null}let n=e.objectProperties.find(i=>i?.prop===gn),s=new Set;for(let i of n?.examples||[])Ul(i?.object)&&s.add(i.subject);let o=new Set,r=new Set;for(let i of e.individuals){if(i?.class!==Ke||!(s.has(i.id)||Hs(i.id)&&pa(i).some(Ul)))continue;o.add(mt(i.id));let c=Ss(i,"subject");c&&r.add(vo(c,Ss(i,"predicate")))}return o.size?{pairs:r,scopedGroups:o}:null}function S1(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=$1(e);if(!t)return;let n=Tv(e,cu(e,t)),s=new Set;for(let c of Iv(e,{factRows:n}))for(let l of c)s.add(l.id);let o=new Map;for(let c of n)for(let l of c.sourceIds){if(!Ul(l))continue;let u=o.get(l)||{factsAsserted:0,factsContradicted:0};u.factsAsserted+=1,s.has(c.id)&&(u.factsContradicted+=1),o.set(l,u)}if(!o.size)return;let r=Dt(e);for(let[c,l]of o){let u=r?r.individualsById.get(c):e.individuals.find(d=>d?.id===c);u&&(Un(u,PS,"sourceReliability",String($b(l))),Un(u,Is,"updatedAt",new Date().toISOString()))}let i=e.objectProperties.find(c=>c?.prop===gn),a=new Set;for(let c of i?.examples||[])o.has(c?.object)&&a.add(c.subject);for(let c of a){let l=r?r.individualsById.get(c):e.individuals.find(u=>u?.id===c);l&&wv(e,l)}}function v1(e,t,n){if(!hl(n?.id))return n;let s=fa(n.id);if(!s)return Ap(t,n);let o=su(e);return Ap(t,n,{priorFor:r=>mc(s,o[r])})}function LS(e,t,n){return n?.class===en?J$(t,n):v1(e,t,n)}function Xs(e,t){let n=Dt(e);if(n){let o=n.individualsById.get(t.id);return o?(Object.assign(o,LS(e,o,t)),o.class===en&&lh(n.retractionsByGroup,o),o):(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===en&&lh(n.retractionsByGroup,t),t.class===Ke&&ch(n.factRecordsByGroup,mt(t.id),t.id),t)}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=LS(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function Ql(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(c=>c?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===gn?Dt(e):null;if(r){let c=r.statedByBySubject.get(s.subject);if(!c||!c.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||Ys()}),o.count=o.examples.length,ch(r.statedByBySubject,s.subject,s.object);return}}let a=(o.examples||[]).find(c=>c?.subject===s.subject&&c?.object===s.object)?.createdAt||s.createdAt||Ys();o.examples=(o.examples||[]).filter(c=>!(c?.subject===s.subject&&c?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r&&ch(r.statedByBySubject,s.subject,s.object)}function Es(e){let t=[ar,So,Ke,bs,ws];e.classes=(e.classes||[]).filter(n=>!t.includes(n?.name));for(let n of t){let s=e.individuals.filter(o=>o?.class===n);s.length&&e.classes.push({name:n,count:s.length,sample:s.slice(0,3).map(o=>o.label)})}}function E1(e,t,n=""){let s=`session:${t}`;return e.individuals.some(o=>o?.id===s)||e.individuals.push({id:s,label:String(t).slice(0,8),class:ar,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:dt,key:"createdAt",value:n||Ys()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function yv(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:c=""}){if(!a0.has(t))throw new Error(`utterance role must be "visitor" or "tmct", got ${JSON.stringify(t)}`);if(!o)throw new Error("utterance needs a sessionId");let l=String(s||""),u=Qn(n),d=`utt:${o}#${l}#${t}`,p=nu(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),f=pc({doc:u}),h=e.individuals.find(w=>w?.id===d),m=_h(h,c||l),b={id:d,label:p,class:So,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:utteranceRole",key:"role",value:t},{prop:"mgx:utteranceText",key:"text",value:u},{prop:"mgx:utteranceTs",key:"ts",value:l},{prop:dt,key:"createdAt",value:m},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...f.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:f.join(" ")}]:[]]};Xs(e,b);let g=E1(e,o,r);if(Ql(e,{predicate:"saidInSession",prop:dh},{subject:d,object:g,subjectLabel:p,objectLabel:String(o).slice(0,8)}),a){let w=e.individuals.find(y=>y?.id===a);w&&Ql(e,{predicate:"inReplyTo",prop:fh},{subject:d,object:a,subjectLabel:p,objectLabel:w.label})}return l&&l>String(e.generated_at||"")&&(e.generated_at=l),d}async function x1(e,t){let n;return await Js(e,s=>{n=yv(s,t),Es(s)}),{id:n}}async function $v(e,t){let n=[];return t?.length?(await Js(e,s=>{for(let o of t)n.push(yv(s,o));Es(s)}),{ids:n}):{ids:n}}async function k1(e,t){t?.length&&await Js(e,n=>{for(let s of t)for(let o of hr(n,s.factId))Ql(n,{predicate:"canonicalisedFrom",prop:ph},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function hr(e,t){let n=Dt(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===Ke&&mt(s.id)===t).map(s=>s.id)}function Sv(e,t,n,s=""){let o=US(n);if(o.length===1&&o[0].sourceId===qs&&hr(e,t).length)return[];let r=h1(e,t);if(r.length&&(o=o.filter(a=>!yl(r,`${t}@${a.sourceId}`,_a(a.tags,s))),!o.length))return o;let i=j1(e,t);return i.length?o.filter(a=>!H$(i,a.sourceId)):o}function j1(e,t){let n=Dt(e),s=n?n.factRecordsByGroup.get(t):hr(e,t),o=[];for(let r of s||[]){if(!Hs(r))continue;let i=xo(e,r);i&&o.push(i)}return o}function vv(e,t,{quantifier:n,environments:s}){let o=hr(e,t).map(i=>xo(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===Ra)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(c=>c?.prop==="mgx:factJustification"));for(let a of i.length?i:o)Un(a,"mgx:factJustification","justification",s.map(c=>c.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(Un(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function R1(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Gl)?.value||"";for(let s of n.split(" ").filter(Boolean)){let o=/#v([1-9][0-9]*)$/.exec(s);o&&(t=Math.max(t,Number(o[1])))}return t+1}function Ih(e){if(!Array.isArray(e))return[];let t=new Set;for(let n of e){let s=Qn(n);s&&t.add(s)}return[...t].sort()}function Ev(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:c,createdAt:l,observedAt:u,quantifier:d,environments:p,extraction:f=[]}=t,h=`${n}@${c.sourceId}`,m=Dt(e),b=m?m.individualsById.get(h):e.individuals.find(_=>_?.id===h),g=_=>(b?.attributes||[]).find(O=>O?.prop===_)?.value||"",w=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Kl(c.tags),observedAt:u},S=null,T=c.tags,v=y.assertedAt||l||Ys(),E=u,I=[],k=d,R=f;if(b){let _={assertedAt:Kl(w),observedAt:g(Ea)};d0(y,_)?(S={head:b,id:`${h}#v${R1(b)}`},I=[S.id]):(T=[...new Set([...w,...c.tags])],v=g(dt)||v,E=u||g(Ea),I=g(Gl).split(" ").filter(Boolean),R=Ih([...g(Vl).split(" "),...f])),k=d||g("mgx:factQuantifier")}return{candidate:{id:h,label:i,class:Ke,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:s},{prop:"rdf:predicate",key:"predicate",value:o},{prop:"rdf:object",key:"object",value:r},{prop:dt,key:"createdAt",value:v},{prop:dr,key:"sourceId",value:c.sourceId},...T.length?[{prop:"mgx:factProvenance",key:"provenance",value:T.join(" | ")}]:[],...E?[{prop:Ea,key:"observedAt",value:E}]:[],...R.length?[{prop:Vl,key:"extraction",value:R.join(" ")}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...k?[{prop:"mgx:factQuantifier",key:"quantifier",value:k}]:[],...p?[{prop:"mgx:factJustification",key:"justification",value:p.map(_=>_.join(" ")).join(" | ")}]:[],...I.length?[{prop:Gl,key:"supersedes",value:I.join(" ")}]:[]]},demote:S}}function _1(e,t){let n=`${t}@${qs}`,s=Dt(e);if((s?!s.individualsById.has(n):!e.individuals.some(r=>r?.id===n))||(e.individuals=e.individuals.filter(r=>r?.id!==n),!s))return;s.individualsById.delete(n);let o=(s.factRecordsByGroup.get(t)||[]).filter(r=>r!==n);o.length?s.factRecordsByGroup.set(t,o):s.factRecordsByGroup.delete(t)}function xv(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${qs}`)||_1(e,mt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};Un(o,Ra,"supersededBy",t.id),Xs(e,o),s.push(o.id)}return Xs(e,t),s.push(t.id),s}function xo(e,t){let n=Dt(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Oh(e,t){let n=new Set(t);if(!n.size)return;e.individuals=(e.individuals||[]).filter(o=>!n.has(o?.id));for(let o of e.objectProperties||[]){let r=o.examples||[],i=r.filter(a=>!n.has(a?.subject)&&!n.has(a?.object));i.length!==r.length&&(o.examples=i,o.count=i.length)}let s=Dt(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=mt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function kv(e,t){let n=Dt(e),s=(n?n.factRecordsByGroup.get(t):hr(e,t))||[];if(s.length<8)return[];let o=new Map,r=new Map,i=new Map,a=new Map;for(let u of s.slice()){let d=xo(e,u);if(!d)continue;let p=w=>(d.attributes||[]).find(y=>y?.prop===w)?.value||"";if(Hs(u)){i.set(fa(u),d);continue}if(ci(u)){a.set(p(dr),d);continue}let f=p("mgx:factProvenance"),h=BS(f),m=f.split(" | ").filter(Boolean),b={id:u,sourceId:p(dr)||h.id,assertedAt:_a(m,p(dt)),record:d};if(p(Ra)){let w=r.get(b.sourceId);w?w.push(b):r.set(b.sourceId,[b]);continue}if(!h.type)continue;let g=o.get(h.type);g?g.push(b):o.set(h.type,[b])}let c=su(e),l=[];for(let[u,d]of o){let p=V$({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:f=>mc(u,c[f])});if(p){Xs(e,p.rollup),l.push(...p.absorbed);for(let f of p.absorbedSourceIds){for(let m of r.get(f)||[])l.push(m.id);r.delete(f);let h=a.get(f);h&&l.push(h.id),a.delete(f)}}}for(let[u,d]of r){let p=K$({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!p)continue;Xs(e,p.rollup),l.push(...p.absorbed);let f=xo(e,p.rewire);f&&Un(f,Gl,"supersedes",p.rollup.id)}return l}async function T1(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",extraction:c,premiseTrusts:l,ruleConfidence:u}={}){let d=V(t),p=fs(n),f=V(s);if(!d||!p||!f)throw new Error("a fact needs subject, predicate and object");let h=Zo(d,p,f),m=`${d} ${p} ${f}`,b=pc({doc:m}),g=Qn(a),w=Ih(c);return await Js(e,async y=>{let S=Sv(y,h,Qn(o),r);for(let T of S.length?[]:vv(y,h,{quantifier:g}))hi(y,xo(y,T),void 0,{premiseTrusts:l,ruleConfidence:u});for(let T of S){let v=Ev(y,{groupId:h,s:d,p,o:f,label:nu(m),tokens:b,group:T,createdAt:r,observedAt:i,quantifier:g,extraction:w});await zp(v.candidate);for(let E of xv(y,v))hi(y,xo(y,E),void 0,E===v.candidate.id?{premiseTrusts:l,ruleConfidence:u}:void 0)}Oh(y,kv(y,h)),Es(y)}),{id:h}}function A1(e){if(!Array.isArray(e))return;let t=e.some(Array.isArray)?e.filter(Array.isArray):[e],n=[],s=new Set;for(let o of t){let r=o.filter(a=>typeof a=="string"&&a);if(!r.length)continue;let i=[...r].sort().join(" ");s.has(i)||(s.add(i),n.push(r))}return n.length?n:void 0}async function es(e,t){let n=[],s=0;for(let r of t||[]){let i=V(r?.subject),a=fs(r?.predicate),c=V(r?.object);if(!i||!a||!c){s+=1;continue}let l=`${i} ${a} ${c}`;n.push({id:Zo(i,a,c),s:i,p:a,o:c,text:l,tokens:pc({doc:l}),provenance:Qn(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:Qn(r?.quantifier),extraction:Ih(r?.extraction),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:A1(r?.justification)})}let o=[];return n.length?(await Js(e,r=>{let i=[],a=new Set,c=new Map;for(let u of n){let d=Sv(r,u.id,u.provenance,u.createdAt);for(let p of d.length?[]:vv(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(p)||(a.add(p),i.push(p)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(p,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let p of d){let f=Ev(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:nu(u.text),tokens:u.tokens,group:p,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments,extraction:u.extraction});for(let h of xv(r,f))a.has(h)||(a.add(h),i.push(h));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(f.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)hi(r,xo(r,u),void 0,c.get(u));let l=[];for(let u of new Set(o))l.push(...kv(r,u));Oh(r,l),Es(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function iu(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=jv[n];if(!i)throw new Error(`a rule kind must be one of ${I1.join(", ")}, got ${JSON.stringify(n)}`);let a=V(t);if(!a)throw new Error("a rule needs a name");let c=O1[n]||new Set,l=i.map(([f])=>V(s?.[f])),u=i.filter(([f],h)=>!c.has(f)&&!l[h]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([f])=>f).join(" + ")}`);if(n===Ia){let f=l[i.findIndex(([m])=>m==="objectRole")],h=l[i.findIndex(([m])=>m==="value")];if(!f&&!h)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=C1(n,a,l),p=nu(`${a} = ${n}(${l.join(", ")})`);return await Js(e,async f=>{let h=f.individuals.find(y=>y?.id===d),m=h?.attributes?.find(y=>y?.prop==="mgx:factProvenance")?.value||"",b=[...new Set([...m.split(" | "),Qn(o)].filter(Boolean))],g=_h(h,r),w={id:d,label:p,class:ws,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:ru,key:"ruleName",value:a},{prop:bi,key:"ruleKind",value:n},...i.map(([y,S],T)=>({prop:S,key:y,value:l[T],skip:!l[T]&&c.has(y)})).filter(y=>!y.skip).map(({skip:y,...S})=>S),{prop:dt,key:"createdAt",value:g},...b.length?[{prop:"mgx:factProvenance",key:"provenance",value:b.join(" | ")}]:[]]};await zp(w),Xs(f,w),hi(f,f.individuals.find(y=>y?.id===d)),Es(f)}),{id:d}}function Ph(e,t){let n=V(t);return(e?.individuals||[]).find(s=>s?.class===ws&&(s.attributes||[]).find(o=>o?.prop===ru)?.value===n)}function N1(e,t){let n=V(t),s=o=>(o.attributes||[]).find(r=>r?.prop===bi)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===ws&&(o.attributes||[]).find(r=>r?.prop===ru)?.value===n).sort((o,r)=>ur(s(o),s(r))||ur(o.id,r.id))}function au(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==ws)continue;let s=a=>(n.attributes||[]).find(c=>c?.prop===a)?.value,o=s(bi),r=jv[o];if(!r)continue;let i={};for(let[a,c]of r)i[a]=s(c)??"";t.push({id:n.id,name:s(ru)||"",kind:o,slots:i,provenance:s("mgx:factProvenance")||""})}return t.sort((n,s)=>ur(n.name,s.name)||ur(n.kind,s.kind)||ur(n.id,s.id)),t}async function Mh(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:c,byTrust:l,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:p}=o,f=String(t||"").trim().toLowerCase(),h=c(V,n),m=c(V,s),b=r(f).filter(y=>h.has(y.fact.subject)&&m.has(y.fact.object));if(b.length){let y=b.slice().sort((S,T)=>l(S.fact,T.fact))[0];return{citation:[i(y.fact),...y.aliasFacts.map(S=>`${a(S)}${S.provenance?` (source: ${S.provenance})`:""}`)]}}let g=Ph(e,f),w=g?.attributes?.find(y=>y.prop===bi)?.value;if(g&&w===Ta){let y=g.attributes.find(O=>O.prop==="mgx:ruleBase1")?.value,S=g.attributes.find(O=>O.prop==="mgx:ruleBase2")?.value,T=V(n),v=V(s);if(!y||!S||!T||!v)return null;let R=p({entity:T,hopsTaken:0},O=>O.hopsTaken===2&&O.entity===v,O=>{if(O.hopsTaken>=2)return[];let x=O.hopsTaken===0?y:S;return r(x).filter(j=>j.fact.subject===O.entity).map(j=>({action:j,nextState:{entity:j.fact.object,hopsTaken:O.hopsTaken+1}}))},{maxDepth:2,stateKey:O=>`${O.entity}#${O.hopsTaken}`});if(!R)return null;let $=new Set,_=[];for(let O of R.actions){_.push(i(O.fact));for(let x of O.aliasFacts){let j=x.id||`${x.subject}|${x.predicate}|${x.object}`;$.has(j)||($.add(j),_.push(`${a(x)}${x.provenance?` (source: ${x.provenance})`:""}`))}}return{citation:_}}if(g&&w===Aa){let y=g.attributes.find(k=>k.prop==="mgx:ruleBase1")?.value,S=g.attributes.find(k=>k.prop==="mgx:ruleFilterProperty")?.value;if(!y||!S)return null;let T=await Mh(e,y,n,s,o);if(!T)return null;let v=V(n),E=V(S),I=u.find(k=>k.predicate===d&&k.subject===v&&V(k.object)===E);return I?{citation:[...T.citation,i(I)]}:null}return null}async function Rv(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:c,rows:l,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,p=String(t||"").trim().toLowerCase(),f=a(V,n),h=o(p).filter(g=>f.has(g.fact.object));if(h.length){let g=new Map;for(let w of h)g.has(w.fact.subject)||g.set(w.fact.subject,[]),g.get(w.fact.subject).push(w);return[...g.entries()].map(([w,y])=>{let S=y.slice().sort((T,v)=>c(T.fact,v.fact))[0];return{subject:w,citation:[r(S.fact),...S.aliasFacts.map(T=>`${i(T)}${T.provenance?` (source: ${T.provenance})`:""}`)]}})}let m=Ph(e,p),b=m?.attributes?.find(g=>g.prop===bi)?.value;if(m&&b===Ta){let g=m.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,w=m.attributes.find(E=>E.prop==="mgx:ruleBase2")?.value,y=V(n);return!g||!w||!y?[]:d({entity:y,hopsTaken:0},E=>{if(E.hopsTaken>=2)return[];let I=E.hopsTaken===0?w:g;return o(I).filter(k=>k.fact.object===E.entity).map(k=>({action:k,nextState:{entity:k.fact.subject,hopsTaken:E.hopsTaken+1}}))},{maxDepth:2,stateKey:E=>`${E.entity}#${E.hopsTaken}`}).filter(E=>E.node.hopsTaken===2).map(({node:E,path:I})=>{let k=new Set,R=[];for(let $ of I.actions.slice().reverse()){R.push(r($.fact));for(let _ of $.aliasFacts){let O=_.id||`${_.subject}|${_.predicate}|${_.object}`;k.has(O)||(k.add(O),R.push(`${i(_)}${_.provenance?` (source: ${_.provenance})`:""}`))}}return{subject:E.entity,citation:R}})}if(m&&b===Aa){let g=m.attributes.find(v=>v.prop==="mgx:ruleBase1")?.value,w=m.attributes.find(v=>v.prop==="mgx:ruleFilterProperty")?.value;if(!g||!w)return[];let y=await Rv(e,g,n,s),S=V(w),T=[];for(let v of y){let E=V(v.subject),I=l.find(k=>k.predicate===u&&k.subject===E&&V(k.object)===S);I&&T.push({subject:v.subject,citation:[...v.citation,r(I)]})}return T}return[]}function gt(e,t={}){return Tv(e,cu(e),t)}async function _v(e){if(!gi(e))return gt(await rt(e));let t=e.storeWrites||0;if(e.heldFactRows&&e.heldFactRowsStamp===t)return e.heldFactRows;let n=gt(await rt(e));return(e.storeWrites||0)===t&&(e.heldFactRows=n,e.heldFactRowsStamp=t),n}function Tv(e,t,n={}){let s=HS(e),o=[];for(let[i,a]of t.groups){let c=Fh(i,a,t),l=s?.get(i);c.trust=gc(l?l.inputs:c.assertions,n).score,o.push(c)}let r=o.map(i=>({key:el(i),row:i}));return r.sort((i,a)=>i.key<a.key?-1:i.key>a.key?1:0),P1(r.map(i=>i.row))}function P1(e){let t=e.filter(s=>s.subject.startsWith(L1));if(!t.length)return e;let{speakersByClaimId:n}=L$(t);if(!n.size)return e;for(let s of e){let o=n.get(s.id);o?.length&&(s.attributedTo=o)}return e}function cu(e,{pairs:t=null,scopedGroups:n=new Set}={}){let s=e?.individuals||[],o=Dt(e),r=o?o.sourcesById:new Map(s.filter(b=>b?.class===bs).map(b=>[b.id,b])),i=o?.statedByBySubject;if(!i){let b=(e?.objectProperties||[]).find(g=>g?.prop===gn);i=new Map;for(let g of b?.examples||[])i.has(g.subject)||i.set(g.subject,[]),i.get(g.subject).push(g.object)}let a=t?new Set([...t].map(b=>b.slice(0,b.indexOf("\0")))):null,c=b=>{if(!t||n.has(mt(b.id)))return!1;let g=Ss(b,"subject");return a.has(g)?!t.has(vo(g,Ss(b,"predicate"))):!0},l=new Map,u=new Map;for(let b of s){if(b?.class===en){let y=mt(b.id),S=u.get(y);S?S.push(b):u.set(y,[b]);continue}if(b?.class!==Ke||(b.attributes||[]).some(y=>y?.prop===Ra)||ci(b.id)||c(b))continue;let g=mt(b.id),w=l.get(g);w?w.push(b):l.set(g,[b])}for(let[b,g]of u){let w=l.get(b);if(!w)continue;let y=w.filter(S=>!yl(g,S.id,_a(zn(S,"mgx:factProvenance").split(" | ").filter(Boolean),zn(S,dt))));y.length!==w.length&&(y.length?l.set(b,y):l.delete(b))}for(let b of l.values())b.sort((g,w)=>g.id<w.id?-1:g.id>w.id?1:0);let d=new Map,p=b=>{let g=d.get(b);return g===void 0&&(g=(r.get(b)?.attributes||[]).find(w=>w?.prop==="mgx:sourceType")?.value||"",d.set(b,g)),g},f=new Map,h=b=>{let g=f.get(b);return g===void 0&&(g=Kl(b.split(" | ").filter(Boolean)),f.set(b,g)),g},m=null;return{groups:l,get groupsByPair(){if(m)return m;m=new Map;for(let[b,g]of l){let w=vo(Ss(g[0],"subject"),Ss(g[0],"predicate")),y=m.get(w);y?y.push(b):m.set(w,[b])}return m},statedByRecord:i,sourceTypeOf:p,embeddedTimestampOf:h}}function M1(e){let t="",n="",s="",o="",r="",i="",a="",c="";for(let l of e?.attributes||[]){switch(l?.prop){case"mgx:factProvenance":t=l.value||"";continue;case dt:n=l.value||"";continue;case Ea:s=l.value||"";continue;case Vl:o=l.value||"";continue;case Br:r=l.value||"";continue;case dr:i=l.value||"";continue;default:break}l?.key==="quantifier"?a=l.value||"":l?.key==="justification"&&(c=l.value||"")}return{provenance:t,createdAt:n,observedAt:s,extraction:o,trustScore:r,sourceId:i,quantifier:a,justification:c}}function Fh(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=zn,i=Ss,a=[],c=[],l=[],u=new Set,d=new Set,p=[],f=new Set,h="";for(let g of t){if(Hs(g.id)){let R=fa(g.id),$=pa(g);for(let _ of $)c.includes(_)||(c.push(_),R&&l.push(R));a.push({id:g.id,sourceId:"",sourceType:R,provenance:"",createdAt:r(g,hs),ownTrust:Number(r(g,ai))||0,assertedAt:r(g,ms),rollup:{count:Number(r(g,da))||$.length,sourceIds:$,earliest:r(g,hs),latest:r(g,ms)}});continue}let w=M1(g),y=w.provenance.split(" | ").filter(Boolean);for(let R of y)u.add(R);let[S]=s.get(g.id)||[],T=S||w.sourceId,v=o(T);S&&!c.includes(S)&&(c.push(S),v&&l.push(v));let E=w.createdAt,I=w.observedAt,k=w.extraction?w.extraction.split(" ").filter(Boolean):[];for(let R of k)d.add(R);a.push({id:g.id,sourceId:T,sourceType:v,provenance:y.join(" | "),createdAt:E,...I?{observedAt:I}:{},...k.length?{extraction:k}:{},ownTrust:Number(w.trustScore)||0,assertedAt:n.embeddedTimestampOf(w.provenance)||(Number.isFinite(Date.parse(E))?E:"")}),h=h||w.quantifier;for(let R of w.justification.split(" | ")){let $=R.split(" ").filter(Boolean);if(!$.length)continue;let _=$.join(" ");f.has(_)||(f.add(_),p.push($))}}let m=[],b=new Set;for(let g of p)for(let w of g)b.has(w)||(b.add(w),m.push(w));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:h,sourceIds:c,sourceTypes:l,...d.size?{extraction:[...d].sort()}:{},environments:p,justification:m,assertions:a}}function F1(e){let t=zn(e,dr);if(t)return t;let n=String(e?.id||""),s=n.indexOf("@");if(s<0)return"";let o=n.slice(s+1),r=o.indexOf("#");return r<0?o:o.slice(0,r)}function D1(e,t){let n=new Set;for(let s of e?.individuals||[]){if(s?.class!==Ke)continue;let o=zn(s,"rdf:subject"),r=zn(s,"rdf:object");(t.has(o)||t.has(r))&&n.add(mt(s.id))}return n}async function Av(e,t,{provenance:n="",retractedAt:s=""}={}){let o=new Set((t||[]).filter(Boolean)),r=[],i=[];if(!o.size)return{removed:r,records:i};let a=s||Ys();return await Js(e,c=>{let l=new Set,u=new Set,d=new Map,p=(m,b)=>{l.add(m.id);let g=F1(m),w=`${b}\0${g}`,y=zn(m,"mgx:factProvenance"),S=d.get(w);S?(S.ids.push(m.id),y&&S.tags.push(y)):d.set(w,{groupId:b,sourceId:g,ids:[m.id],tags:y?[y]:[],template:{label:m.label||"",subject:zn(m,"rdf:subject"),predicate:zn(m,"rdf:predicate"),object:zn(m,"rdf:object")}})},f=o,h=!1;for(;f.size;){let m=new Set,b=new Set;c.individuals=(c.individuals||[]).filter(w=>{if(w?.class!==Ke)return!0;let y=mt(w.id),S=f.has(w.id)?w.id:f.has(y)?y:"";return S?(h||u.add(S),b.add(y),p(w,y),!1):(m.add(y),!0)});let g=[...b].filter(w=>!m.has(w));f=g.length?D1(c,new Set(g)):new Set,h=!0}for(let m of u)r.push(m);if(r.length){for(let m of l)i.push(m);for(let m of c.objectProperties||[]){let b=m.examples||[];m.examples=b.filter(g=>!l.has(g?.subject)&&!l.has(g?.object)),m.count=m.examples.length}for(let m of d.values()){let b=X$({groupId:m.groupId,sourceId:m.sourceId,recordIds:m.ids,retractedAt:a,template:m.template,provenance:[...m.tags,n].filter(Boolean).join(" | ")});b&&Xs(c,b)}Es(c)}}),{removed:r,records:i}}function B1(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==en)continue;let s=$l(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function z1(e,t){let n=[];for(let o of t||[]){let r=Sl(o);r&&n.push(r)}let s=[];return n.length?(await Js(e,o=>{let r=new Map;for(let a of n){let c=Xs(o,a),l=mt(c.id),u=r.get(l);u?u.push(c):r.set(l,[c])}let i=new Set;for(let[a,c]of r)for(let l of hr(o,a)){let u=xo(o,l);if(!u)continue;let d=zn(u,"mgx:factProvenance").split(" | ").filter(Boolean);yl(c,l,_a(d,zn(u,dt)))&&i.add(l)}if(i.size){Oh(o,i);for(let a of i)s.push(a)}Es(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function U1(e,{self:t="",acknowledgedBy:n=null}={}){let s=vl(gt(e)),o=[];for(let r of e?.individuals||[])r?.class===en&&r.id&&o.push(r.id);return{roster:s,retirable:El({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function W1(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Js(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==en||!n.has(a.id)?!0:(r.add(a.id),!1)),!r.size)return;for(let a of r)s.push(a);let i=Dt(o);if(i)for(let a of r){i.individualsById.delete(a);let c=mt(a),l=(i.retractionsByGroup.get(c)||[]).filter(u=>!r.has(u.id));l.length?i.retractionsByGroup.set(c,l):i.retractionsByGroup.delete(c)}Es(o)}),{retired:s}):{retired:s}}function Iv(e,{floor:t=G1,factRows:n=null}={}){let s=(n||gt(e)).filter(i=>i.trust>=t),o=new Map;for(let i of s){if(il(i.predicate)===bp)continue;let a=vo(i.subject,i.predicate);o.has(a)||o.set(a,[]),o.get(a).push(i)}let r=[];for(let i of o.values()){if(new Set(i.map(c=>c.object)).size<2)continue;let a=il(i[0].predicate);a!==wp&&!$p(i,a).contested||r.push(i.slice().sort((c,l)=>l.trust-c.trust||ur(c.object,l.object)))}return r.sort((i,a)=>ur(vo(i[0].subject,i[0].predicate),vo(a[0].subject,a[0].predicate)))}var mi,uh,So,Ke,ar,bs,ws,dh,fh,i0,gn,ph,PS,Wl,nh,MS,a0,TS,c0,sh,hh,mh,FS,l0,qs,Ea,dr,Gl,Ra,Vl,GS,zn,Ss,ur,vo,VS,HS,h0,YS,AS,JS,QS,ZS,ev,Bn,fr,Zn,ov,Sh,Eo,U0,vh,Eh,W0,J0,pv,ih,e1,xa,s1,jh,hv,Rh,mv,ah,Jl,Dt,nu,Ys,Ah,Ul,Ta,Aa,Ch,Nh,ou,Ia,Lh,I1,ru,bi,jv,O1,C1,L1,G1,wi,V1,K1,Ue=L(()=>{zt();Qe();Yn();Ve();Ve();Nn();A$();Nn();rl();tr();xp();Ip();Mp();Bp();Up();di();di();qp();Ip();Mp();Bp();Up();mi=ne(".tmct","memory"),uh=ne(mi,"graph.json"),So="Utterance",Ke="Fact",ar="Session",bs="Source",ws="Rule",dh="mgx:saidInSession",fh="mgx:inReplyTo",i0="mgx:derivedFrom",gn="mgx:statedBy",ph="mgx:canonicalisedFrom",PS="mgx:sourceReliability",Wl="src:operator-chat",nh="src:teach-chat",MS="src:teach-node",a0=new Set(["visitor","tmct"]),TS=48,c0=[{prop:"rdf:type",note:"rdf-ish typing attribute: owl:NamedIndividual (utterances/sessions) or rdf:Statement (reified facts)"},{prop:"mgx:utteranceRole",note:"who said it: visitor (an a-visitor-said item) or tmct (the response alongside it)"},{prop:"mgx:utteranceText",note:"the utterance's normalized text (capped)"},{prop:"mgx:utteranceTs",note:"when it was said, ISO-8601 (the chat turn timestamp)"},{prop:"mgx:utteranceParsed",note:"optional JSON of the parse the interpretation pipeline produced for this request"},{prop:dh,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:fh,predicate:"inReplyTo",note:"tmct Utterance \u2192 the visitor Utterance it answers (the Q/A pairing)"},{prop:"rdf:subject",note:"reified fact: the triple's subject term"},{prop:"rdf:predicate",note:"reified fact: the triple's predicate term"},{prop:"rdf:object",note:"reified fact: the triple's object term"},{prop:"mgx:factProvenance",note:"LEGACY COMPAT SHIM: the ' | '-joined provenance tag string a fact came from; the source-of-truth is now the mgx:statedBy edges derived from it"},{prop:"mgx:sourceId",note:"the assertion key a Fact record is filed under \u2014 the Source id of the ONE party asserting it, which is also the @-suffix of the record's own id. `src:none` when no tag names a Source, so every record has a key rather than a hole"},{prop:"mgx:observedAt",note:"OPTIONAL valid time: when the asserting party WITNESSED the claim, as against mgx:createdAt's transaction time (when this store recorded it). A stale article read today loses to an eyewitness report from yesterday. Stored only when a caller supplies one \u2014 never fabricated, never backfilled"},{prop:"mgx:extractionFinding",note:"OPTIONAL: the space-joined structural findings the extractor recorded about how THIS assertion's sentence was read, from the closed vocabulary identifier-token | clause-fallback | pronoun-carry | definitional-frame | reported-speech. Per assertion, never per triple: a later clean re-assertion of the same triple carries none. Absence means no findings were recorded, never that the sentence was checked and read cleanly"},{prop:"mgx:supersedes",note:"the record id(s) this one replaced when its own source re-asserted the triple with a newer embedded timestamp. A space-joined LIST; absent, never empty, until the first supersession"},{prop:"mgx:supersededBy",note:"the record id(s) that replaced this one. Its presence is what makes a record a demoted leaf rather than a live head, and the group fold skips it: a source's past belief is not a second vote for the present one. A LIST, because one source with two live replicas can fork before they sync"},{prop:"mgx:factQuantifier",note:"OPTIONAL: the quantifier word a plural class-membership teach used ('every'/'some'/'a few'), for literal recall by 'how many Xs are Ys' \u2014 never real cardinality counting"},{prop:"mgx:factJustification",note:"an entailed Fact's supporting premise fact ids: ' | '-separated environments, one space-separated premise-id list per independent derivation, capped by syllogise's maxEnvironments knob; a value with no ' | ' is a single environment"},{prop:"mgx:ruleName",note:"a taught Rule's own name (e.g. 'grandparent') \u2014 the query-dispatcher's lookup key, PLAN_TAUGHT_RELATIONS.md \xA72/\xA73"},{prop:"mgx:ruleKind",note:"a taught Rule's SHAPE tag \u2014 the closed vocabulary compose2 | filter | recursive | action-signature | action-precond | action-effect | action-constraint (structural, like 'Fact'/'Rule' themselves, never a domain word)"},{prop:"mgx:ruleBase1",note:"compose2: the first hop's base relation name; filter: the base rule/relation being filtered (same 'base relation' role in both kinds, so the name is shared)"},{prop:"mgx:ruleBase2",note:"compose2 only: the second hop's base relation name"},{prop:"mgx:ruleFilterProperty",note:"filter only: the property literal candidates are filtered by (an mgx:hasProperty-shaped Fact lookup)"},{prop:"mgx:ruleBaseCase",note:"recursive only: the base-case relation name (hop zero)"},{prop:"mgx:ruleRecStep",note:"recursive only: the self-referential recursive-step relation name"},{prop:dt,note:"when an individual was FIRST written, ISO-8601 (first-write-wins on upsert); the audit 'when', the recency input to trust, the novelty signal"},{prop:Is,note:"an audit / last-modified stamp: when an individual's OWN attributes were last mutated in place (upsertSession, recomputeFactTrust, recomputeSourceReliability) \u2014 most individuals never carry it at all. NOT transaction time: a mutable stamp cannot record when the previous version stopped being current, so tmct is not bitemporal"},{prop:i0,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:gn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:ph,predicate:"canonicalisedFrom",note:"subPropertyOf derivedFrom: a canonical Fact cleaned from a raw Block/Source, never replacing it"},{prop:"mgx:sourceType",note:"a Source's kind: operator | teach | provider | corpus | corpusWeak | reference | referenceLive | extracted | optimisticExtract | web | entailed (the trust-prior key)"},{prop:"mgx:sourceUrl",note:"a web Source's URL"},{prop:"mgx:sourceRule",note:"an entailed Source's rule id"},{prop:"mgx:sourceReliability",note:"actor-level (session-scoped) trust nudge in [0.5,1.5], neutral 1.0 when absent \u2014 materialised by recomputeSourceReliability from a session's asserted-vs-contradicted track record (memory/trust.mjs's sessionReliabilityFrom); folds into computeTrust's per-source prior"},{prop:Br,note:"materialised trust cache in [0,1] \u2014 pure function of a fact's Sources + createdAt (memory/trust.mjs); invalidated when a statedBy edge is added"},{prop:hc,note:"JSON of the inputs the trust score was computed from (source-type multiset, corroboration count, createdAt, recency) \u2014 makes the score auditable"},{prop:"mgx:hasProseTokens",note:"prose tokens (prose.mjs tokenizer) backing the payload's proseIndex"},{prop:"mgx:sessionStarted",note:"session anchor: when the session started, ISO-8601"},{prop:"rdf:predicate",prefix:tl,note:"a reified fact's predicate carries its POLARITY: mgxneg:capableOf is the negative twin of mgx:capableOf ('a penguin cannot fly'). Polarity cannot be a separate property \u2014 the fact id hashes (subject, predicate, object), so both polarities would share one id and union their statedBy edges (memory/capability.mjs)"}];sh=e=>va(e),hh="memory",mh="sqlite",FS="row";l0=`
|
|
101
|
+
`))return r}}throw new Se("cannot find end of structure",{toml:e,ptr:t})}var Pl=L(()=>{cr();});function JL(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(fi(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function wa(e,t,n,s,o){if(s===0)throw new Se("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[c,l]=r==="["?$S(e,t,s,o):yS(e,t,s,o);if(n){if(l=ws(e,l),e[l]===",")l++;else if(e[l]!==n)throw new Se("expected comma or end of structure",{toml:e,ptr:l})}return[c,l]}if(r==='"'||r==="'"){let[c,l]=Nl(e,t);if(n){if(l=ws(e,l),e[l]&&e[l]!==","&&e[l]!==n&&e[l]!==`
|
|
102
|
+
`&&e[l]!=="\r")throw new Se("unexpected character encountered",{toml:e,ptr:l});e[l]===","&&l++}return[c,l]}let i=wS(e,t,",",n),a=JL(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new Se("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=ws(e,t+a[1]),e[i]===","&&i++),[bS(a[0],e,t,o),i]}var Jp=L(()=>{Xp();Qp();Pl();cr();});function Ml(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new Se("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let i=e[t=++s];if(i!==" "&&i!==" ")if(i==='"'||i==="'"){if(i===e[t+1]&&i===e[t+2])throw new Se("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,c]=Nl(e,t);s=e.indexOf(".",c);let l=e.slice(c,s<0||s>r?r:s),u=Ll(l);if(u>-1)throw new Se("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(l.trimStart())throw new Se("found extra tokens after the string part",{toml:e,ptr:c});if(r<c&&(r=e.indexOf(n,c),r<0))throw new Se("incomplete key-value: cannot find end of key",{toml:e,ptr:t});o.push(a)}else{s=e.indexOf(".",t);let a=e.slice(t,s<0||s>r?r:s);if(!QL.test(a))throw new Se("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});o.push(a.trimEnd())}}while(s+1&&s<r);return[o,ws(e,r+1,!0,!0)]}function yS(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new Se("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=fi(e,t);else if(i!==" "&&i!==" "&&i!==`
|
|
103
|
+
`&&i!=="\r"){let a,c=o,l=!1,[u,d]=Ml(e,t-1);for(let h=0;h<u.length;h++){if(h&&(c=l?c[a]:c[a]={}),a=u[h],(l=Object.hasOwn(c,a))&&(typeof c[a]!="object"||r.has(c[a])))throw new Se("trying to redefine an already defined value",{toml:e,ptr:t});!l&&a==="__proto__"&&Object.defineProperty(c,a,{enumerable:!0,configurable:!0,writable:!0})}if(l)throw new Se("trying to redefine an already defined value",{toml:e,ptr:t});let[p,f]=wa(e,d,"}",n-1,s);r.add(p),c[a]=p,t=f}}if(!i)throw new Se("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function $S(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new Se("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=fi(e,t);else if(r!==" "&&r!==" "&&r!==`
|
|
104
|
+
`&&r!=="\r"){let i=wa(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new Se("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var QL,Qp=L(()=>{Xp();Jp();Pl();cr();QL=/^[a-zA-Z0-9-_]+[ \t]*$/});function SS(e,t,n,s){let o=t,r=n,i,a=!1,c;for(let l=0;l<e.length;l++){if(l){if(o=a?o[i]:o[i]={},r=(c=r[i]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],r=r[u].c}}if(i=e[l],(a=Object.hasOwn(o,i))&&r[i]?.t===0&&r[i]?.d)return null;a||(i==="__proto__"&&(Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(r,i,{enumerable:!0,configurable:!0,writable:!0})),r[i]={t:l<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(c=r[i],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[i]=[]),o[i].push(o={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}),c.d))return null;if(c.d=!0,s===1)o=a?o[i]:o[i]={};else if(s===0&&a)return null;return[i,o,c.c]}function lr(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=ws(e,0);a<e.length;){if(e[a]==="["){let c=e[++a]==="[",l=Ml(e,a+=+c,"]");if(c){if(e[l[1]-1]!=="]")throw new Se("expected end of table declaration",{toml:e,ptr:l[1]-1});l[1]++}let u=SS(l[0],s,o,c?2:1);if(!u)throw new Se("trying to redefine an already defined table or value",{toml:e,ptr:a});i=u[2],r=u[1],a=l[1]}else{let c=Ml(e,a),l=SS(c[0],r,i,0);if(!l)throw new Se("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=wa(e,c[1],void 0,t,n);l[1][l[0]]=u[0],a=u[1]}if(a=ws(e,a,!0),e[a]&&e[a]!==`
|
|
105
|
+
`&&e[a]!=="\r")throw new Se("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=ws(e,a)}return s}var vS=L(()=>{Qp();Jp();Pl();cr();});var ES=L(()=>{});var Fl=L(()=>{vS();ES();Yp();cr();});var Zp={};Nt(Zp,{CONFIG_FILE:()=>Bl,loadTomlConfig:()=>zl,mergeEffective:()=>kS,normalizeConfig:()=>xS});async function zl(e,{file:t}={}){let n=t||ne(e,Bl),s;try{s=await Ne(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return lr(s)}catch(o){throw new Error(`Invalid ${Bl} at ${n}: ${o&&o.message?o.message:o}`)}}async function ZL(e,t){let n;if(Array.isArray(e))n=e;else{let o=Xt(t,String(e));n=(await Ne(o,"utf8")).split(`
|
|
106
|
+
`)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Xt(t,r))}return s}async function xS(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await ZL(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Xt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Xt(s,String(n.graph_file))),n.graph_files!==void 0){let y=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=y.map(S=>Xt(s,String(S)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},c={};a.enabled!==void 0&&(c.enabled=a.enabled),a.limit!==void 0&&(c.limit=a.limit),a.capture_unknown_context!==void 0&&(c.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(c.unknownContextLimit=a.unknown_context_limit),Object.keys(c).length&&(o.seed=c),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.news!==void 0&&(o.news=n.news),n.discourse!==void 0&&(o.discourse=n.discourse),n.recognition!==void 0&&(o.recognition=n.recognition),n.reasoning!==void 0&&(o.reasoning=n.reasoning);let l=n.index||{},u={};l.languages!==void 0&&(u.languages=l.languages),l.exclude!==void 0&&(u.exclude=l.exclude),l.secret_exclude!==void 0&&(u.secretExclude=l.secret_exclude),l.history_depth!==void 0&&(u.historyDepth=l.history_depth),l.include_text!==void 0&&(u.includeText=l.include_text),l.include_structure!==void 0&&(u.includeStructure=l.include_structure),l.respect_gitignore!==void 0&&(u.respectGitignore=l.respect_gitignore),l.markdown_sections!==void 0&&(u.markdownSections=l.markdown_sections),l.vue!==void 0&&(u.vue=l.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},p={};d.score_gap_k!==void 0&&(p.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(p.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(p.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(p.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(p.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(p.beamSearch=d.beam_search),d.beam_width!==void 0&&(p.beamWidth=d.beam_width),d.prose_layers!==void 0&&(p.proseLayers=d.prose_layers);let f=d.expansion||{},h={};f.strategy!==void 0&&(h.strategy=f.strategy),f.nodes!==void 0&&(h.nodes=f.nodes),f.q!==void 0&&(h.q=f.q),f.depth!==void 0&&(h.depth=f.depth),Object.keys(h).length&&(p.expansion=h),Object.keys(p).length&&(o.tune=p);let m=n.telemetry||{};m.enabled!==void 0&&(o.telemetry={enabled:m.enabled});let b=n.memory||{},g={};b.retention_versions!==void 0&&(g.retentionVersions=b.retention_versions),b.backend!==void 0&&(g.backend=b.backend),Object.keys(g).length&&(o.memory=g);let w=[];for(let[y,S]of e0)n[y]&&n[y][S]!==void 0&&w.push(`${y}.${S}`);return o.unwired=w,o}function Dl(e,t="",n={}){for(let[s,o]of Object.entries(e||{})){if(o==null)continue;let r=t?`${t}.${s}`:s;Array.isArray(o)||typeof o!="object"?n[r]=o:Dl(o,r,n)}return n}function kS({args:e={},toml:t=null,defaults:n={}}={}){let s=Dl(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Dl(o):{},i=Dl(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),c={},l={};for(let u of a)u in i?(c[u]=i[u],l[u]="arg"):u in r?(c[u]=r[u],l[u]="tmct.toml"):(c[u]=s[u],l[u]="default");return{effective:c,sources:l}}var Bl,e0,ya=L(()=>{zt();Qe();Fl();Bl="tmct.toml";e0=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Js={};Nt(Js,{BackendRejected:()=>Mn,BackendUnavailable:()=>ir,CANONICALISED_FROM_PROP:()=>fh,CAPABLE_OF_PREDICATE:()=>B1,CHAIN_KEEP_DEPTH:()=>P$,CHAIN_ROLLUP_THRESHOLD:()=>pl,CREATED_AT_PROP:()=>dt,DEFAULT_RETENTION:()=>rh,EXTRACTION_FINDINGS:()=>xl,EXTRACTION_FINDING_PROP:()=>Kl,FACT_CLASS:()=>Ke,GROUP_ROLLUP_THRESHOLD:()=>N$,HAS_A_PREDICATE:()=>gi,IN_REPLY_TO_PROP:()=>dh,MAX_ROW_BYTES:()=>rr,MEMORY_DIR_REL:()=>Ea,MEMORY_GRAPH_REL:()=>lh,MEMORY_MANIFEST_REL:()=>dv,MEMORY_SESSION_CLASS:()=>ar,MULTI_VALUED_PREDICATES:()=>z1,OPERATOR_SOURCE_ID:()=>Gl,RETRACTED_AT_PROP:()=>bl,RETRACTED_COUNT_PROP:()=>Ip,RETRACTED_RECORD_IDS_PROP:()=>gl,RETRACTION_CLASS:()=>en,RETRACTION_PREDICATE:()=>ml,ROLLUP_COUNT_PROP:()=>la,ROLLUP_EARLIEST_PROP:()=>fs,ROLLUP_KEEP_PER_TYPE:()=>L$,ROLLUP_LATEST_PROP:()=>ps,ROLLUP_PRIOR_PROP:()=>ii,ROLLUP_RECORD_IDS_PROP:()=>ca,ROLLUP_SOURCE_IDS_PROP:()=>ri,ROW_BACKEND_CONTRACT_VERSION:()=>jl,ROW_BACKEND_KIND:()=>ci,ROW_CLASSES:()=>kl,RULE_CLASS:()=>gs,RULE_KIND_ACTION_CONSTRAINT:()=>Nh,RULE_KIND_ACTION_EFFECT:()=>Ia,RULE_KIND_ACTION_PRECOND:()=>su,RULE_KIND_ACTION_SIGNATURE:()=>Ch,RULE_KIND_COMPOSE2:()=>Ta,RULE_KIND_FILTER:()=>Aa,RULE_KIND_PROP:()=>mi,RULE_KIND_RECURSIVE:()=>Oh,SAID_IN_SESSION_PROP:()=>uh,SOURCE_CLASS:()=>ms,SOURCE_RELIABILITY_PROP:()=>NS,STATED_BY_PROP:()=>gn,SYLLOGISE_STATE_REL:()=>jh,UPDATED_AT_PROP:()=>As,UTTERANCE_CLASS:()=>$o,admittedNodes:()=>vl,appendCanonicalisedFromEdges:()=>$1,appendFact:()=>x1,appendFacts:()=>Zn,appendRetractions:()=>P1,appendRule:()=>ru,appendUtterance:()=>y1,appendUtterances:()=>bv,applySeedPayload:()=>MS,assertValidRow:()=>li,attachFactHeads:()=>GS,chainRollupIdFor:()=>kp,cloneMemoryPayload:()=>mh,closeSqliteMemoryStore:()=>Zl,createInMemoryStore:()=>ja,createSqliteMemoryStore:()=>gh,createSqliteRowBackend:()=>X0,emptyMemory:()=>bs,factGroupId:()=>mt,factHeadsOf:()=>VS,factIdForTriple:()=>we,factRecordIdForTag:()=>r0,factRecordIdsFor:()=>pr,findContradictions:()=>_v,findRuleByName:()=>Lh,findRulesByName:()=>T1,foldedFactRows:()=>kv,headRollupIdFor:()=>xp,isChainRollupId:()=>ai,isHeadRollupId:()=>Ks,isMemoryOrSqliteHandle:()=>hi,isRetractionId:()=>Cp,isRollupId:()=>hl,isRowBackend:()=>Rl,isRowHandle:()=>$s,isValidRow:()=>tS,loadMemory:()=>rt,loadSyllogiseState:()=>o1,normFactPredicate:()=>us,normFactTerm:()=>V,openConfiguredMemoryBackend:()=>ko,openExistingMemoryBackend:()=>_0,openMemoryBackend:()=>yh,openSqliteSeedStore:()=>h0,peersToConvince:()=>Mp,provSourceClassFor:()=>u1,provenanceTagToSource:()=>Hn,readFactRows:()=>gt,readObjectSupersessions:()=>p0,readOnlyMemorySnapshot:()=>T0,readRetractions:()=>L1,readRuleRows:()=>iu,removeFacts:()=>Rv,resolveMemoryGraphFile:()=>$a,resolveRelationChase:()=>Ph,resolveRelationChaseReverse:()=>xv,retirableRetractions:()=>M1,retireRetractions:()=>F1,retractedAtOf:()=>or,retractedRecordIds:()=>sr,retractionFromWire:()=>Sl,retractionIdFor:()=>Op,retractionScopeOf:()=>Np,retractionWireFact:()=>$l,rowBackendProblems:()=>ga,rowProblems:()=>_l,saveSyllogiseState:()=>r1,snapshotMemory:()=>Q0,sqliteSeedFactTermValues:()=>R0,stableRecordIds:()=>El,wrapRowBackend:()=>bh,wrapRowBackendOverSqliteSeed:()=>m0});function bs(){return{generated_at:"",memory:!0,prefixes:{owl:"http://www.w3.org/2002/07/owl#",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",mgx:"urn:tmct:mgx#",mgxneg:"urn:tmct:mgxneg#"},vocabulary:s0.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function $a(e,t=null){if(hi(e))throw new Error("resolveMemoryGraphFile: dir is a store handle, not a file path (Backend A only)");return t===null?ne(e,lh):ne(e,Ea,`graph.v${t}.json`)}function xa(e){return!!e&&typeof e=="object"&&e.backend===ph}function xo(e){return!!e&&typeof e=="object"&&e.backend===hh}function $s(e){return!!e&&typeof e=="object"&&e.backend===PS}function hi(e){return xa(e)||xo(e)||$s(e)}function ka(e){hi(e)&&(e.storeWrites=(e.storeWrites||0)+1)}function ja(){return{backend:ph,payload:bs()}}function MS(e,t){t&&(e.payload={...e.payload,...t},e.storeMigrationsSettled=!1,ka(e))}function mh(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function FS(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=_h(Hn(t));if(n)return n}return{id:Hs,type:""}}function mt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function r0(e,t){return`${e}@${DS(t).id}`}function DS(e){return _h(Hn(e))||{id:Hs,type:""}}function BS(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=DS(s),i=t.get(o)||{sourceId:o,sourceType:r,tags:[]};i.tags.includes(s)||i.tags.push(s),t.set(o,i)}return t.size||t.set(Hs,{sourceId:Hs,sourceType:"",tags:[]}),[...t.values()]}function Hl(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=Hn(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function _a(e,t="",n=Math.max){return Hl(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function i0(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt);return!Number.isFinite(n)||!Number.isFinite(s)?!1:n>s?!0:n===s&&!!e.observedAt&&!t.observedAt}function zS(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=FS(n("mgx:factProvenance")),o=n(Ra).split(" ").filter(Boolean)[0]||null,r=ua(e.id);return[e.id,mt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(dr)||s.id,r||s.type,Number(n(r?ii:Dr))||0,n(dt),n(Sa)||null,o,t]}function a0(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Ke))return;let t=e.prepare(US);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(Ke))t.run(...zS(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function c0(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function GS(e,t){return e&&t&&(e[WS]=t),e}function u0(e){let t=new Map;for(let n of e.prepare("SELECT triple_hash, trust_base, inputs_json FROM fact_heads").all())t.set(n.triple_hash,{trustBase:n.trust_base,inputs:JSON.parse(n.inputs_json)});return t}function KS(e,t,n,s){let o=e.prepare(l0),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=qs();for(let a of n){let c=t.groups.get(a);if(!c?.length){r.run(a),s?.delete(a);continue}let l=c0(Mh(a,c,t).assertions),u=bb(l).score;o.run(a,u,JSON.stringify(l),i),s?.set(a,{trustBase:u,inputs:l})}}function d0(e){let t=e.db;if(t.prepare("SELECT triple_hash FROM fact_heads LIMIT 1").get()||!t.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Ke))return;let n=au(Yl(e));t.exec("BEGIN IMMEDIATE");try{KS(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function f0(e,t,n){let s=e.prepare("SELECT ord, to_id FROM fact_object_supersessions WHERE subject = ? AND predicate = ? ORDER BY ord DESC LIMIT 1"),o=e.prepare("INSERT INTO fact_object_supersessions(subject, predicate, ord, from_id, to_id, recorded_at) VALUES (?, ?, ?, ?, ?, ?)"),r=qs();for(let i of n){let[a,c]=i.split("\0");if(il(c)!==ia)continue;let l=t.groupsByPair.get(i)||[];if(l.length<2)continue;let u=l.map(f=>{let h=Mh(f,t.groups.get(f),t);return h.trust=gc(h.assertions).score,h});if(new Set(u.map(f=>f.object)).size<2)continue;let d=yp(u,ia)?.winner?.id;if(!d)continue;let p=s.get(a,c);p?.to_id!==d&&o.run(a,c,(p?.ord??-1)+1,p?.to_id||"",d,r)}}function p0(e,{subject:t,predicate:n}={}){if(!xo(e))return[];let s=t&&n?" WHERE subject = ? AND predicate = ?":"",o=s?[t,n]:[];return e.db.prepare(`SELECT subject, predicate, ord, from_id, to_id, recorded_at FROM fact_object_supersessions${s} ORDER BY subject, predicate, ord`).all(...o).map(r=>({subject:r.subject,predicate:r.predicate,ord:r.ord,fromId:r.from_id,toId:r.to_id,recordedAt:r.recorded_at}))}function qS(){if(RS)return;RS=!0;let e=process.listeners("warning").slice();process.removeAllListeners("warning"),process.on("warning",t=>{if(!(t?.name==="ExperimentalWarning"&&/sqlite/i.test(String(t?.message))))if(e.length)for(let n of e)n(t);else console.error(t.stack||String(t))})}async function gh(e){qS();let{DatabaseSync:t}=await Promise.resolve().then(()=>(qp(),Hp)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(o0),a0(n);let s=Y0({backend:hh,db:n,dbPath:e});return d0(s),s}function Zl(e){xo(e)&&e.db.close()}async function h0(e){qS();let{DatabaseSync:t}=await Promise.resolve().then(()=>(qp(),Hp));try{return{backend:hh,db:new t(e,{readOnly:!0}),dbPath:e,readOnly:!0}}catch(n){throw new ir(`could not open the seed store ${e} read-only: ${n.message}`,{cause:n})}}function bh(e,{basePayload:t=null,sqliteSeedStore:n=null,sqliteSeedOverlayRows:s=null,onOversizedRow:o="throw",copyOnRead:r=!0,log:i=void 0}={}){let a=ga(e);if(a.length)throw new Mn(`not a memory row backend: ${a.join("; ")}`);if(n&&!xo(n))throw new Mn("sqliteSeedStore must be an open sqlite store handle (openSqliteSeedStore)");if(n&&t)throw new Mn("a handle takes its seed either as a basePayload or as a sqliteSeedStore, never both");return{backend:PS,impl:e,cachedPayload:null,cachedIndex:null,basePayload:mh(t),sqliteSeedStore:n,sqliteSeedOverlayRows:s?[...s]:null,sqliteSeedKeyOrds:null,baseRows:null,baseKeyOrds:null,storedRows:null,onOversizedRow:o,copyOnRead:r,log:i}}function m0(e,t,{overlayRows:n=null,onOversizedRow:s="throw",copyOnRead:o=!0,log:r=void 0}={}){return bh(e,{sqliteSeedStore:t,sqliteSeedOverlayRows:n,onOversizedRow:s,copyOnRead:o,log:r})}async function g0(e){let t=await e;if(Array.isArray(t))return t;let n=[];for await(let s of t)n.push(s);return n}function QS(e,t){let n=new Map;for(let s of e)n.set(s.rowKey,s);for(let s of t)n.set(s.rowKey,s);return[...n.values()]}function b0(e){let t=new Set(e.storedRows.map(s=>s.rowKey)),n=new Set;for(let s of sh(e).keys())t.has(s)||n.add(s);return n}async function nh(e,t,n){let s=await e.impl.readMeta(t);if(s==null)return n;try{return JSON.parse(s)}catch{return n}}async function wh(e){if(!e.cachedPayload){let t=bs(),n=await g0(e.impl.readRows());e.storedRows=n.filter(o=>o?.rowClass!==ma);let s={memory:await nh(e,YS,TS(e,"memory",t.memory)),prefixes:await nh(e,XS,TS(e,"prefixes",t.prefixes))};e.sqliteSeedStore?e.cachedPayload=va(ev(e,s)):(e.baseRows=Wp(e.basePayload||t,{onOversizedRow:"keep"}),e.cachedPayload=va(Ol(QS(e.baseRows,e.storedRows),{meta:s})))}return e.cachedPayload}async function w0(e){let t=await wh(e);return e.copyOnRead===!1?t:Fn(t)}function y0(e){return{...e,individuals:(e.individuals||[]).map(t=>({...t})),objectProperties:(e.objectProperties||[]).map(t=>({...t,examples:[...t.examples||[]]}))}}function ZS(e){$s(e)&&(ka(e),e.cachedPayload=null,e.cachedIndex=null,e.storedRows=null,e.baseRows=null,e.baseKeyOrds=null)}function sh(e){return e.sqliteSeedStore?x0(e):(e.baseKeyOrds||(e.baseKeyOrds=new Map((e.baseRows||[]).map(t=>[t.rowKey,Xl(t)]))),e.baseKeyOrds)}function _S(e){let t;try{t=JSON.parse(e)}catch{return e}let n=t?.individual;return Array.isArray(n?.attributes)?JSON.stringify({...t,individual:{...n,attributes:n.attributes.filter(s=>s?.prop!==As)}}):e}function $0(e,t){return e?_S(e.json)!==_S(t.json):!0}async function S0(e,t){await wh(e);let n=b0(e),s=e.storedRows,o=new Map(s.map(f=>[f.rowKey,f])),r=Wp(v0(t,n),{priorRows:s,priorOrds:sh(e),onOversizedRow:e.onOversizedRow,...e.log?{log:e.log}:{}}),{puts:i,deletes:a}=Vp(s,r),c=i.filter(f=>!n.has(f.rowKey)).filter(f=>$0(o.get(f.rowKey),f)),l=a.filter(f=>!n.has(f));try{c.length&&await e.impl.putRows(c),l.length&&await e.impl.deleteRows(l),await e.impl.putMeta(YS,JSON.stringify(t.memory??bs().memory)),await e.impl.putMeta(XS,JSON.stringify(t.prefixes??bs().prefixes))}catch(f){throw ZS(e),f}let u=new Set(l),d=new Map(e.storedRows.filter(f=>!u.has(f.rowKey)).map(f=>[f.rowKey,f]));for(let f of c)d.set(f.rowKey,f);e.storedRows=[...d.values()];let p={memory:t.memory,prefixes:t.prefixes};if(j0(e.cachedPayload,p,c,l,sh(e))){a1(e,c,l);return}e.cachedPayload=null,e.cachedIndex=null,e.cachedPayload=va(e.sqliteSeedStore?ev(e,p):Ol(QS(e.baseRows,e.storedRows),{meta:p}))}function v0(e,t){return t.size?{...e,individuals:(e?.individuals||[]).filter(n=>!t.has(String(n?.id??""))),objectProperties:(e?.objectProperties||[]).filter(n=>!t.has(`${Qn}${n?.prop}`))}:e}function ql(e){return typeof e.iterate=="function"?e.iterate():e.all()}function*E0(e,t){let n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id");for(let o of ql(n)){if(t(o.id))continue;let r=$h.get(o.class)||"";yield{rowKey:o.id,rowClass:r,term:r==="fact"?V(o.subject||""):"",json:vh(o.ord,o.json)}}let s=e.db.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid");for(let o of e.db.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all()){if(t(`${Qn}${o.prop}`))continue;let r=[];for(let i of s.all(o.prop)){let a={subject:i.subject,object:i.object,subjectLabel:i.subject_label,objectLabel:i.object_label};i.extra&&Object.assign(a,JSON.parse(i.extra)),r.push(a)}yield eu({predicate:o.predicate,prop:o.prop,count:o.count,examples:r},o.ord)}for(let o of xh(e.db))t(o.rowKey)||(yield o)}function x0(e){if(e.sqliteSeedKeyOrds)return e.sqliteSeedKeyOrds;let t=e.sqliteSeedStore.db,n=new Map;for(let s of ql(t.prepare("SELECT id, ord FROM individuals")))n.set(s.id,s.ord);for(let s of ql(t.prepare("SELECT prop, ord FROM relations")))n.set(`${Qn}${s.prop}`,s.ord);for(let s of xh(t))n.set(s.rowKey,Xl(s));for(let s of e.sqliteSeedOverlayRows||[])n.set(s.rowKey,Xl(s));return e.sqliteSeedKeyOrds=n,n}function*k0(...e){for(let t of e)yield*t}function ev(e,t){let n=new Set(e.storedRows.map(o=>o.rowKey)),s=(e.sqliteSeedOverlayRows||[]).filter(o=>o?.rowKey&&!n.has(o.rowKey));for(let o of s)n.add(o.rowKey);return Ol(k0(E0(e.sqliteSeedStore,o=>n.has(o)),s,e.storedRows),{meta:t})}function j0(e,t,n,s,o){let r=new Set,i=new Set;for(let l of s){let u=String(l);if(o.has(u))return!1;u.startsWith(Qn)?r.add(u.slice(Qn.length)):i.add(u)}if(i.size&&!lS(e,i))return!1;if(e.memory=t.memory,e.prefixes=t.prefixes,!n.length&&!s.length)return Cl(e),!0;let a=new Map;for(let l=0;l<e.individuals.length;l+=1)a.set(e.individuals[l]?.id,l);let c=new Map;for(let l=0;l<e.objectProperties.length;l+=1)c.set(e.objectProperties[l]?.prop,l);for(let l of n){if(l.rowClass===ma)continue;let u=JSON.parse(l.json);if(l.rowClass===fr){let f=u?.group;if(!f?.prop)continue;let h=c.get(f.prop);h===void 0?(c.set(f.prop,e.objectProperties.length),e.objectProperties.push(f)):e.objectProperties[h]=f;continue}let d=u?.individual;if(!d?.id)continue;let p=a.get(d.id);p===void 0?(a.set(d.id,e.individuals.length),e.individuals.push(d),fS(e,d.id)):e.individuals[p]=d}return r.size&&(e.objectProperties=e.objectProperties.filter(l=>!r.has(l?.prop))),i.size&&!uS(e,i)?!1:(Cl(e),!0)}function*R0(e){for(let t of["subject","object"])for(let n of ql(e.db.prepare(`SELECT DISTINCT ${t} AS value FROM facts`)))n.value&&(yield n.value)}function TS(e,t,n){if(!e.sqliteSeedStore)return e.basePayload?.[t]??n;let s=e.sqliteSeedStore.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);if(!s)return n;try{return JSON.parse(s.v)}catch{return n}}async function yh(e,t){if($s(t))return{dir:t,close:async()=>{await t.impl.close()}};if(Rl(t)){let r=bh(t);return{dir:r,close:async()=>{await r.impl.close()}}}if(t===ph)return{dir:ja(),close:async()=>{}};let n=ne(e,".tmct","memory","graph.sqlite"),s=r=>$d(r).then(()=>!0,()=>!1);!await s(n)&&await s(ne(e,lh))&&process.stderr.write(`found .tmct/memory/graph.json \u2014 the flat-file memory backend is retired; starting a fresh sqlite store (the old file is left untouched)
|
|
107
|
+
`),await _s(ve(n),{recursive:!0});let o=await gh(n);return{dir:o,close:async()=>Zl(o)}}async function _0(e,t=""){if(!e||typeof e!="string")return null;let n=ne(e,".tmct","memory","graph.sqlite");try{await $d(n)}catch{return null}return yh(e,t)}async function T0(e){if(!e)return null;let t=ja();return MS(t,mh(await rt(e))),t}async function ko(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(ya(),Zp));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return yh(e,n)}function A0(e){let t=e.db.prepare("PRAGMA data_version").get()?.data_version;return e.cachedPayload&&e.cachedDataVersion!==t&&(ka(e),e.cachedPayload=null,e.storeMigrationsSettled=!1),e.cachedPayload||(e.cachedPayload=Yl(e),e.cachedFactHeads=u0(e.db),e.cachedDataVersion=t),GS(Fn(e.cachedPayload),e.cachedFactHeads)}function Yl(e){let t=e.db,n=bs(),s=(r,i)=>{let a=t.prepare("SELECT v FROM meta WHERE k = ?").get(r);return a?JSON.parse(a.v):i},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(r=>JSON.parse(r.json));return{generated_at:s("generated_at",n.generated_at),memory:s("memory",n.memory),prefixes:s("prefixes",n.prefixes),vocabulary:s("vocabulary",n.vocabulary),classes:s("classes",n.classes),objectProperties:ov(t).map(r=>r.group),individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function tv(e,t,n){let s=AS.get(e);if(s&&s.array===t)return s.byKey;let o=new Map;for(let r=0;r<t.length;r+=1){let i=n(t[r]);o.has(i)||o.set(i,r)}return AS.set(e,{array:t,byKey:o}),o}function O0(e,t){let n=Fn(t),s=tv(e,e.individuals,I0),o=s.get(t.id);if(o!==void 0){e.individuals[o]=n;return}s.set(t.id,e.individuals.length),e.individuals.push(n)}function C0(e,t){e.individuals=e.individuals.filter(n=>!t.has(n?.id))}function N0(e,t){let n=e.objectProperties.find(s=>s?.prop===t);return n||(n={predicate:null,prop:t,count:0,examples:[]},e.objectProperties.push(n)),n}function L0(e,t,n){let s=Ul(t),o=tv(e,e.examples,Ul),r={subject:t.subject,object:t.object,subjectLabel:t.subjectLabel??null,objectLabel:t.objectLabel??null};if(n.length&&Object.assign(r,Fn(Object.fromEntries(n.map(i=>[i,t[i]])))),o.has(s)){e.examples=e.examples.filter(i=>Ul(i)!==s),e.examples.push(r);return}o.set(s,e.examples.length),e.examples.push(r)}function P0(e,t){e.examples=e.examples.filter(n=>t.has(Ul(n)))}function M0(e,t){e.objectProperties=e.objectProperties.filter(n=>!t.has(n?.prop))}function Xl(e){let t=D0.exec(e?.json||"");if(t)return Number(t[1]);try{let n=Number(JSON.parse(e.json).ord);return Number.isFinite(n)?n:0}catch{return 0}}function sv(e,t,n){let s=$h.get(e?.class)||"";return{rowKey:String(e.id),rowClass:s,term:s==="fact"?V(ys(e,"subject")):"",json:vh(t,n)}}function B0(e){let t={subject:e.subject,object:e.object,subjectLabel:e.subjectLabel??null,objectLabel:e.objectLabel??null};for(let n of Object.keys(e))HS.has(n)||(t[n]=e[n]);return t}function eu(e,t){let n=(e.examples||[]).map(B0);return{rowKey:`${Qn}${e.prop}`,rowClass:fr,term:"",json:JSON.stringify({ord:t,group:{predicate:e.predicate??null,prop:e.prop,count:Number.isFinite(e.count)?e.count:n.length,examples:n}})}}function ov(e){let t=new Map;for(let n of e.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all())t.set(n.prop,{ord:n.ord,group:{predicate:n.predicate,prop:n.prop,count:n.count,examples:[]}});if(!t.size)return[];for(let n of e.prepare("SELECT prop, subject, object, subject_label, object_label, extra FROM edges ORDER BY rowid").all()){let s=t.get(n.prop);if(!s)continue;let o={subject:n.subject,object:n.object,subjectLabel:n.subject_label,objectLabel:n.object_label};n.extra&&Object.assign(o,JSON.parse(n.extra)),s.group.examples.push(o)}return[...t.values()]}function rv(e){let t=[],n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id").all();for(let s of n){let o=$h.get(s.class)||"";t.push({rowKey:s.id,rowClass:o,term:o==="fact"?V(s.subject||""):"",json:vh(s.ord,s.json)})}for(let s of ov(e.db))t.push(eu(s.group,s.ord));return t}function z0(e,t){let n=new Map,s=0,o=0;for(let a of t){let c=Xl(a);n.set(a.rowKey,c),a.rowClass===fr?c>=o&&(o=c+1):c>=s&&(s=c+1)}let r=[],i=new Map;for(let a of e.individuals||[]){if(!a?.id)continue;let c=JSON.stringify(a),l=String(a.id),u=n.get(l)??s++;r.push(sv(a,u,c)),i.set(l,{kind:"individual",ord:u,individual:a,json:c})}for(let a of e.objectProperties||[]){if(!a?.prop)continue;let c=`${Qn}${a.prop}`,l=n.get(c)??o++,u=eu(a,l);r.push(u),i.set(c,{kind:fr,ord:l,group:JSON.parse(u.json).group})}return{rows:r,partsByKey:i}}function U0(e){if(e.expiresAt!==void 0)return null;let t;try{t=JSON.parse(e.json)}catch{return null}if(!t||typeof t!="object"||!Number.isFinite(t.ord))return null;if(e.rowClass===fr){let r=t.group;if(!r?.prop)return null;let i=eu(r,t.ord);return i.rowKey!==e.rowKey||i.term!==e.term||i.json!==e.json?null:{kind:fr,ord:t.ord,group:r}}let n=t.individual;if(!n?.id)return null;let s=JSON.stringify(n),o=sv(n,t.ord,s);return o.rowKey!==e.rowKey||o.rowClass!==e.rowClass||o.term!==e.term||o.json!==e.json?null:{kind:"individual",ord:t.ord,individual:n,json:s}}function iv(e,{cache:t=null}={}){let n=e.db;return{db:n,cache:t,touchedGroups:new Set,touchedPairs:new Set,hasUnmappedRows:!!n.prepare(Sh).get(vo),unmapped:null,upsertInd:n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),upsertFact:n.prepare(US),deleteInd:n.prepare("DELETE FROM individuals WHERE id = ?"),deleteFact:n.prepare("DELETE FROM facts WHERE id = ?"),getFact:n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?"),upsertRel:n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),edgesForProp:n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),upsertEdge:n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),deleteEdge:n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),deleteGroupEdges:n.prepare("DELETE FROM edges WHERE prop = ?"),deleteRel:n.prepare("DELETE FROM relations WHERE prop = ?")}}function av(e){return e.unmapped||(e.db.exec(F0),e.hasUnmappedRows=!0,e.unmapped={upsert:e.db.prepare(`INSERT OR REPLACE INTO ${vo}(row_key, row_class, term, json, expires_at) VALUES (?, ?, ?, ?, ?)`),remove:e.db.prepare(`DELETE FROM ${vo} WHERE row_key = ?`)}),e.unmapped}function Eh(e,t){e.hasUnmappedRows&&av(e).remove.run(t)}function W0(e,{ord:t,individual:n,json:s}){e.upsertInd.run(n.id,t,n.class??null,n.label??null,s),n.class===Ke&&(e.upsertFact.run(...zS(n,s)),e.touchedGroups.add(mt(n.id)),e.touchedPairs.add(So(ys(n,"subject"),ys(n,"predicate")))),Eh(e,String(n.id)),e.cache&&O0(e.cache,n)}function G0(e,{ord:t,group:n}){let s=new Map(e.edgesForProp.all(n.prop).map(a=>[`${a.subject}\0${a.object}`,a])),o=new Set,r=e.cache?N0(e.cache,n.prop):null;for(let a of n.examples||[]){let c=`${a.subject}\0${a.object}`;o.add(c);let l=Object.keys(a).filter(f=>!HS.has(f)),u=l.length?JSON.stringify(Object.fromEntries(l.map(f=>[f,a[f]]))):null,d=s.get(c);d&&(d.subject_label??null)===(a.subjectLabel??null)&&(d.object_label??null)===(a.objectLabel??null)&&(d.extra??null)===(u??null)||(e.upsertEdge.run(n.prop,a.subject,a.object,a.subjectLabel??null,a.objectLabel??null,u),r&&L0(r,a,l))}for(let a of s.keys()){if(o.has(a))continue;let[c,l]=a.split("\0");e.deleteEdge.run(n.prop,c,l)}r&&P0(r,o);let i=Number.isFinite(n.count)?n.count:(n.examples||[]).length;e.upsertRel.run(n.prop,t,n.predicate??null,i),Eh(e,`${Qn}${n.prop}`),r&&(r.predicate=n.predicate??null,r.count=i)}function V0(e,t){av(e).upsert.run(t.rowKey,t.rowClass,t.term,t.json,t.expiresAt??null)}function cv(e,t,n=null){for(let s of t){let o=n?.get(s.rowKey)||U0(s);if(!o){V0(e,s);continue}o.kind===fr?G0(e,o):W0(e,o)}}function lv(e,t){let n=new Set,s=new Set;for(let o of t){if(o.startsWith(Qn)){let r=o.slice(Qn.length);e.deleteGroupEdges.run(r),e.deleteRel.run(r),s.add(r)}else{let r=e.getFact.get(o);r&&(e.touchedGroups.add(r.triple_hash),e.touchedPairs.add(So(r.subject,r.predicate))),e.deleteInd.run(o),e.deleteFact.run(o),n.add(o)}Eh(e,o)}e.cache&&n.size&&C0(e.cache,n),e.cache&&s.size&&M0(e.cache,s)}function oh(e,t,n){if(!e.touchedGroups.size)return;let s=au(t);KS(e.db,s,e.touchedGroups,n),f0(e.db,s,e.touchedPairs)}function H0(e,t){let n=e.db,s=bs();n.exec("BEGIN IMMEDIATE");try{let o=rv(e),{rows:r,partsByKey:i}=z0(t,o),{puts:a,deletes:c}=Vp(o,r),l=a.length+c.length<=K0,u=l&&e.cachedPayload||null,d=n.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)");d.run("generated_at",JSON.stringify(t.generated_at??s.generated_at)),d.run("memory",JSON.stringify(t.memory??s.memory)),d.run("prefixes",JSON.stringify(t.prefixes??s.prefixes)),d.run("vocabulary",JSON.stringify(t.vocabulary??s.vocabulary)),d.run("classes",JSON.stringify(t.classes??s.classes)),d.run("proseIndex",JSON.stringify(t.proseIndex??s.proseIndex)),u&&(u.generated_at=Fn(t.generated_at??s.generated_at),u.memory=Fn(t.memory??s.memory),u.prefixes=Fn(t.prefixes??s.prefixes),u.vocabulary=Fn(t.vocabulary??s.vocabulary),u.classes=Fn(t.classes??s.classes),u.proseIndex=Fn(t.proseIndex??s.proseIndex));let p=iv(e,{cache:u});cv(p,a,i),lv(p,c),oh(p,t,e.cachedFactHeads),n.exec("COMMIT"),l||(e.cachedPayload=null,e.cachedFactHeads=null)}catch(o){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,o}}function xh(e){if(!e.prepare(Sh).get(vo))return[];let t=Math.floor(Date.now()/1e3),n=[];for(let s of e.prepare(`SELECT row_key, row_class, term, json, expires_at FROM ${vo}`).all()){if(s.expires_at!==null&&s.expires_at<=t)continue;let o={rowKey:s.row_key,rowClass:s.row_class,term:s.term,json:s.json};s.expires_at!==null&&(o.expiresAt=s.expires_at),n.push(o)}return n}function IS(e,t){let n=e.db;n.exec("BEGIN IMMEDIATE");try{t(iv(e)),n.exec("COMMIT")}catch(s){throw n.exec("ROLLBACK"),s}finally{e.cachedPayload=null,e.cachedFactHeads=null}}function Y0(e){return Object.assign(e,{async readRows(){return[...rv(e),...xh(e.db)]},async readRowsByTerm(t){return(await e.readRows()).filter(n=>n.term===t)},async putRows(t){let n=(t||[]).map(s=>li(s));n.length&&IS(e,s=>{cv(s,n),oh(s,Yl(e),null)})},async deleteRows(t){let n=[...t||[]];n.length&&IS(e,s=>{lv(s,n),oh(s,Yl(e),null)})},async readMeta(t){let n=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);return n?n.v:null},async putMeta(t,n){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(t,String(n)),e.cachedPayload=null,e.cachedFactHeads=null},async deleteAll(){let t=e.db;t.exec("BEGIN IMMEDIATE");try{for(let n of q0)t.exec(`DELETE FROM ${n}`);t.prepare(Sh).get(vo)&&t.exec(`DELETE FROM ${vo}`),t.exec("COMMIT")}catch(n){throw t.exec("ROLLBACK"),n}finally{e.cachedPayload=null,e.cachedFactHeads=null}},async close(){Zl(e)}})}function X0(e){let t=null,n=!1,s=()=>{if(n)throw new ir("this row backend was closed and can no longer be used");return t=t||gh(e),t},o=r=>async(...i)=>(await s())[r](...i);return{kind:ci,contractVersion:1,readRows:o("readRows"),readRowsByTerm:o("readRowsByTerm"),putRows:o("putRows"),deleteRows:o("deleteRows"),readMeta:o("readMeta"),putMeta:o("putMeta"),deleteAll:o("deleteAll"),async close(){let r=t?await t:null;n=!0,r&&Zl(r)}}}async function uv(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await Or(n,t),await rc(n,e)}async function kh(e,t){await uv(e,JSON.stringify(t))}async function Q0(e,{retentionVersions:t}={}){if(hi(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a store handle has no on-disk graph.json to snapshot");let n=$a(e),s;try{s=await Ne(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=J0(e),r;try{r=JSON.parse(await Ne(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??rh}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??rh);let i=r.version,a=$a(e,i);await _s(ve(a),{recursive:!0}),await uv(a,s),r.version=i+1;let c=null,l=i-r.retentionVersions;if(l>=0)try{await Sd($a(e,l)),c=l}catch(u){if(u?.code!=="ENOENT")throw u}return await kh(o,r),{skipped:!1,version:i,prunedVersion:c}}async function rt(e){if(xa(e))return OS(e,e.payload);if(xo(e))return OS(e,A0(e));if($s(e))return w0(e);let t;try{t=await Ne(th(e),"utf8")}catch(n){if(n?.code==="ENOENT")return bs();throw n}return va(JSON.parse(t))}function Z0(e){for(let t of e?.individuals||[])if(t?.class===Ke&&!String(t.id||"").includes("@"))return!0;return!1}function OS(e,t){return e.storeMigrationsSettled?t:Z0(t)?va(t):(e.storeMigrationsSettled=!0,t)}function t1(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==Ke||!e1.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Zo(o("subject"),o("predicate"),o("object"));r!==s.id&&(t.set(s.id,r),s.id=r)}if(!t.size)return e;dS(e);let n=s=>t.get(s)||s;for(let s of e.objectProperties||[])for(let o of s.examples||[])o&&(t.has(o.subject)&&(o.subject=t.get(o.subject)),t.has(o.object)&&(o.object=t.get(o.object)));for(let s of e.individuals){Array.isArray(s?.derived_from)&&s.derived_from.length&&(s.derived_from=s.derived_from.map(n));let o=(s?.attributes||[]).find(r=>r?.prop==="mgx:factJustification");o?.value&&(o.value=o.value.split(" | ").map(r=>r.split(" ").filter(Boolean).map(n).join(" ")).filter(Boolean).join(" | "))}return e}function n1(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(c=>c?.prop===gn),n=new Map;for(let c of t?.examples||[]){if(!c?.subject)continue;let l=n.get(c.subject);l?l.push(c):n.set(c.subject,[c])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let c of e.individuals){if(c?.class!==Ke||String(c.id||"").includes("@")){a.push(c);continue}let l=y=>(c.attributes||[]).find(S=>S?.prop===y)?.value||"",u=l("rdf:subject"),d=l("rdf:predicate"),p=l("rdf:object");if(!u||!d||!p){a.push(c);continue}let f=Zo(u,d,p),h=l(dt),m=l("mgx:factProvenance"),b=n.get(c.id)||[],g=m?BS(m):[];for(let y of b)g.some(S=>S.sourceId===y.object)||g.push({sourceId:y.object,sourceType:"",tags:[]});g.length||g.push({sourceId:Hs,sourceType:"",tags:[]});let w=[];for(let y of g){let S={id:`${f}@${y.sourceId}`,label:c.label,class:Ke,derived_from:Fn(c.derived_from)||[],mentions:Fn(c.mentions)||[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:u},{prop:"rdf:predicate",key:"predicate",value:d},{prop:"rdf:object",key:"object",value:p},{prop:dt,key:"createdAt",value:_a(y.tags,h,Math.min)||h||qs()},{prop:dr,key:"sourceId",value:y.sourceId},...y.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:y.tags.join(" | ")}]:[],...l("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:l("mgx:hasProseTokens")}]:[],...l("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:l("mgx:factQuantifier")}]:[],...y.sourceType==="entailed"&&l("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:l("mgx:factJustification")}]:[]]};if(a.push(S),r.push(S),w.push(S.id),y.sourceId!==Hs){let T=b.find(v=>v?.object===y.sourceId);i.push({...T||{},subject:S.id,object:y.sourceId,subjectLabel:S.label,objectLabel:Th(y.sourceId)})}}s.add(c.id),o.set(c.id,w)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(c=>!s.has(c?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:gn,count:i.length,examples:i}));for(let c of e.objectProperties||[]){if(c?.prop===gn||!c?.examples?.length)continue;let l=[];for(let u of c.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],p=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let f of d)for(let h of p)l.push({...u,subject:f,object:h})}c.examples=l,c.count=l.length}e.individuals=a,pv(e);for(let c of r)pi(e,c);return Ss(e),e}async function s1(e,t){if(ka(e),xa(e)){e.payload=t;return}if(xo(e)){H0(e,t);return}if($s(e)){await S0(e,t);return}await _s(ve(th(e)),{recursive:!0}),await kh(th(e),t)}async function o1(e){if(xa(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(xo(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(fv);return t?.v?JSON.parse(t.v):null}if($s(e))return nh(e,JS,null);try{return JSON.parse(await Ne(ne(e,jh),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function r1(e,t){if(xa(e)){e.syllogiseState=structuredClone(t);return}if(xo(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(fv,JSON.stringify(t));return}if($s(e)){await e.impl.putMeta(JS,JSON.stringify(t));return}let n=ne(e,jh);await _s(ve(n),{recursive:!0}),await kh(n,t)}function pv(e,t=null){let n=new Map,s=new Map,o=new Map,r=t?new Jl(t.factRecordsByGroup):new Map,i=t?new Jl(t.statedByBySubject):new Map;for(let a of e.individuals||[])if(a?.id&&(n.set(a.id,a),a.class===ms&&s.set(a.id,a),a.class===en&&ch(o,a),!t&&a.class===Ke)){let c=mt(a.id),l=r.get(c);l?l.push(a.id):r.set(c,[a.id])}if(!t){let a=(e.objectProperties||[]).find(c=>c?.prop===gn);for(let c of a?.examples||[]){if(!c?.subject)continue;let l=i.get(c.subject);l?l.push(c.object):i.set(c.subject,[c.object])}}return e[ih]={individualsById:n,sourcesById:s,statedByBySubject:i,factRecordsByGroup:r,retractionsByGroup:o},e[ih]}function ah(e,t,n){if(e.push){e.push(t,n);return}let s=e.get(t);s?s.includes(n)||s.push(n):e.set(t,[n])}function i1(e){let t=e.cachedPayload;if(!t)return null;let n=e.cachedIndex;if(n||(n={individuals:null,factRecordsByGroup:null,statedByExamples:null,statedByBySubject:null},e.cachedIndex=n),!n.factRecordsByGroup||n.individuals!==t.individuals){let o=new Map;for(let r of t.individuals||[]){if(!r?.id||r.class!==Ke)continue;let i=mt(r.id),a=o.get(i);a?a.push(r.id):o.set(i,[r.id])}n.factRecordsByGroup=o,n.individuals=t.individuals}let s=(t.objectProperties||[]).find(o=>o?.prop===gn)?.examples||null;if(!n.statedByBySubject||n.statedByExamples!==s){let o=new Map;for(let r of s||[]){if(!r?.subject)continue;let i=o.get(r.subject);i?i.push(r.object):o.set(r.subject,[r.object])}n.statedByBySubject=o,n.statedByExamples=s}return n}function a1(e,t,n){let s=e.cachedIndex;if(!s?.factRecordsByGroup)return;let o=s.factRecordsByGroup;for(let r of n){let i=String(r);if(i.startsWith(Qn))continue;let a=mt(i),c=(o.get(a)||[]).filter(l=>l!==i);c.length?o.set(a,c):o.delete(a)}for(let r of t){if(r.rowClass!==nv)continue;let i=String(r.rowKey);c1(o,mt(i),i)}s.individuals=e.cachedPayload.individuals}function c1(e,t,n){let s=e.get(t);if(!s){e.set(t,[n]);return}if(s.includes(n))return;let o=0;for(;o<s.length&&s[o]<n;)o+=1;s.splice(o,0,n)}function ch(e,t){let n=mt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function l1(e,t){let n=Dt(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===en&&mt(s.id)===t)}async function Xs(e,t){let n=$s(e),s=n?y0(await wh(e)):await rt(e);ka(e);try{let o=pv(s,n?i1(e):null),r=await t(s)??s;return h1(r),n&&Dt(r)!==o&&(e.cachedIndex=null),g1(r),n||gS(r),await s1(e,r),n?e.cachedPayload:r}catch(o){throw ZS(e),o}}function Rh(e,t){return e?.attributes?.find(n=>n?.prop===dt)?.value||t||qs()}function Bn(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function _h(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Gl}:${e.sessionId}`:Gl,type:"operator"};case"teach":return{id:e.sessionId?`${eh}:${e.sessionId}`:eh,type:"teach"};case"teachNode":return{id:`${LS}:${e.nodeId}`,type:"teach"};case"provider":return{id:`src:provider:${e.name}`,type:"provider"};case"corpus":return{id:`src:corpus:${e.name}`,type:"corpus"};case"corpusWeak":return{id:`src:corpus-weak:${e.name}`,type:"corpusWeak"};case"reference":return{id:`src:reference:${e.pack}`,type:"reference"};case"referenceLive":return{id:`src:reference:${e.pack}`,type:"referenceLive"};case"extracted":return{id:`src:extracted:${e.name}`,type:"extracted"};case"optimisticExtract":return{id:`src:optimistic-extract:${e.name}`,type:"optimisticExtract"};case"web":return{id:`src:learned:web:${na(String(e.url||""))}`,type:"web",url:String(e.url||"")};case"entailed":return{id:`src:entailed:${e.rule}`,type:"entailed",rule:String(e.rule||"")};default:return null}}function u1(e){return Nd[e]||null}function d1(e,t,n){let s=_h(t);if(!s)return null;let o=Dt(e),r=o?o.individualsById.get(s.id):e.individuals.find(l=>l?.id===s.id),i=Rh(r,t?.createdAt||n),a={id:s.id,label:Th(s.id),class:ms,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:dt,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},c=Ys(e,a);return o&&o.sourcesById.set(s.id,c),s.id}function nu(e){let t=Dt(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===ms&&(n[s.id]=s);return n}function hv(e,t){let n=Dt(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===gn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function f1(e,t,n=Date.now(),s={}){let o=hv(e,t.id),r=(t.attributes||[]).find(c=>c?.prop===dt)?.value||"",{score:i,inputs:a}=gb({sourceIds:o,createdAt:r},nu(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});Bn(t,Dr,"trustScore",String(i)),Bn(t,hc,"trustInputs",JSON.stringify(a)),Bn(t,As,"updatedAt",new Date(n).toISOString())}function p1(e,t,n=Date.now(),s={}){let[o]=hv(e,t.id),r=o?nu(e)[o]:null,i=(r?.attributes||[]).find(l=>l?.prop==="mgx:sourceType")?.value||"",a=mc(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let l=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*l))}let c=(t.attributes||[]).find(l=>l?.prop===dt)?.value||"";Bn(t,Dr,"trustScore",String(a)),Bn(t,hc,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:c})),Bn(t,As,"updatedAt",new Date(n).toISOString())}function mv(e,t,n,s){t?.class===Ke?p1(e,t,n,s):f1(e,t,n,s)}function pi(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===dt)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Hn(i);if(!a)continue;let c=d1(e,a,r);c&&Ql(e,{predicate:"statedBy",prop:gn},{subject:t.id,object:c,subjectLabel:t.label,objectLabel:Th(c)})}mv(e,t,n,s)}function h1(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===gn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==Ke||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(pi(e,r,o),s=!0);s&&Ss(e)}function m1(e){let t=Dt(e);if(t){let i=!1;for(let a of t.sourcesById.keys())if(Wl(a)){i=!0;break}if(!i)return null}let n=e.objectProperties.find(i=>i?.prop===gn),s=new Set;for(let i of n?.examples||[])Wl(i?.object)&&s.add(i.subject);let o=new Set,r=new Set;for(let i of e.individuals){if(i?.class!==Ke||!(s.has(i.id)||Ks(i.id)&&da(i).some(Wl)))continue;o.add(mt(i.id));let c=ys(i,"subject");c&&r.add(So(c,ys(i,"predicate")))}return o.size?{pairs:r,scopedGroups:o}:null}function g1(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=m1(e);if(!t)return;let n=jv(e,au(e,t)),s=new Set;for(let c of _v(e,{factRows:n}))for(let l of c)s.add(l.id);let o=new Map;for(let c of n)for(let l of c.sourceIds){if(!Wl(l))continue;let u=o.get(l)||{factsAsserted:0,factsContradicted:0};u.factsAsserted+=1,s.has(c.id)&&(u.factsContradicted+=1),o.set(l,u)}if(!o.size)return;let r=Dt(e);for(let[c,l]of o){let u=r?r.individualsById.get(c):e.individuals.find(d=>d?.id===c);u&&(Bn(u,NS,"sourceReliability",String(wb(l))),Bn(u,As,"updatedAt",new Date().toISOString()))}let i=e.objectProperties.find(c=>c?.prop===gn),a=new Set;for(let c of i?.examples||[])o.has(c?.object)&&a.add(c.subject);for(let c of a){let l=r?r.individualsById.get(c):e.individuals.find(u=>u?.id===c);l&&mv(e,l)}}function b1(e,t,n){if(!hl(n?.id))return n;let s=ua(n.id);if(!s)return Tp(t,n);let o=nu(e);return Tp(t,n,{priorFor:r=>mc(s,o[r])})}function CS(e,t,n){return n?.class===en?Y$(t,n):b1(e,t,n)}function Ys(e,t){let n=Dt(e);if(n){let o=n.individualsById.get(t.id);return o?(Object.assign(o,CS(e,o,t)),o.class===en&&ch(n.retractionsByGroup,o),o):(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===en&&ch(n.retractionsByGroup,t),t.class===Ke&&ah(n.factRecordsByGroup,mt(t.id),t.id),t)}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=CS(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function Ql(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(c=>c?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===gn?Dt(e):null;if(r){let c=r.statedByBySubject.get(s.subject);if(!c||!c.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||qs()}),o.count=o.examples.length,ah(r.statedByBySubject,s.subject,s.object);return}}let a=(o.examples||[]).find(c=>c?.subject===s.subject&&c?.object===s.object)?.createdAt||s.createdAt||qs();o.examples=(o.examples||[]).filter(c=>!(c?.subject===s.subject&&c?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r&&ah(r.statedByBySubject,s.subject,s.object)}function Ss(e){let t=[ar,$o,Ke,ms,gs];e.classes=(e.classes||[]).filter(n=>!t.includes(n?.name));for(let n of t){let s=e.individuals.filter(o=>o?.class===n);s.length&&e.classes.push({name:n,count:s.length,sample:s.slice(0,3).map(o=>o.label)})}}function w1(e,t,n=""){let s=`session:${t}`;return e.individuals.some(o=>o?.id===s)||e.individuals.push({id:s,label:String(t).slice(0,8),class:ar,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:dt,key:"createdAt",value:n||qs()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function gv(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:c=""}){if(!n0.has(t))throw new Error(`utterance role must be "visitor" or "tmct", got ${JSON.stringify(t)}`);if(!o)throw new Error("utterance needs a sessionId");let l=String(s||""),u=Jn(n),d=`utt:${o}#${l}#${t}`,p=tu(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),f=pc({doc:u}),h=e.individuals.find(w=>w?.id===d),m=Rh(h,c||l),b={id:d,label:p,class:$o,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:utteranceRole",key:"role",value:t},{prop:"mgx:utteranceText",key:"text",value:u},{prop:"mgx:utteranceTs",key:"ts",value:l},{prop:dt,key:"createdAt",value:m},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...f.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:f.join(" ")}]:[]]};Ys(e,b);let g=w1(e,o,r);if(Ql(e,{predicate:"saidInSession",prop:uh},{subject:d,object:g,subjectLabel:p,objectLabel:String(o).slice(0,8)}),a){let w=e.individuals.find(y=>y?.id===a);w&&Ql(e,{predicate:"inReplyTo",prop:dh},{subject:d,object:a,subjectLabel:p,objectLabel:w.label})}return l&&l>String(e.generated_at||"")&&(e.generated_at=l),d}async function y1(e,t){let n;return await Xs(e,s=>{n=gv(s,t),Ss(s)}),{id:n}}async function bv(e,t){let n=[];return t?.length?(await Xs(e,s=>{for(let o of t)n.push(gv(s,o));Ss(s)}),{ids:n}):{ids:n}}async function $1(e,t){t?.length&&await Xs(e,n=>{for(let s of t)for(let o of pr(n,s.factId))Ql(n,{predicate:"canonicalisedFrom",prop:fh},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function pr(e,t){let n=Dt(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===Ke&&mt(s.id)===t).map(s=>s.id)}function wv(e,t,n,s=""){let o=BS(n);if(o.length===1&&o[0].sourceId===Hs&&pr(e,t).length)return[];let r=l1(e,t);if(r.length&&(o=o.filter(a=>!yl(r,`${t}@${a.sourceId}`,_a(a.tags,s))),!o.length))return o;let i=S1(e,t);return i.length?o.filter(a=>!V$(i,a.sourceId)):o}function S1(e,t){let n=Dt(e),s=n?n.factRecordsByGroup.get(t):pr(e,t),o=[];for(let r of s||[]){if(!Ks(r))continue;let i=Eo(e,r);i&&o.push(i)}return o}function yv(e,t,{quantifier:n,environments:s}){let o=pr(e,t).map(i=>Eo(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===Ra)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(c=>c?.prop==="mgx:factJustification"));for(let a of i.length?i:o)Bn(a,"mgx:factJustification","justification",s.map(c=>c.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(Bn(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function v1(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Vl)?.value||"";for(let s of n.split(" ").filter(Boolean)){let o=/#v([1-9][0-9]*)$/.exec(s);o&&(t=Math.max(t,Number(o[1])))}return t+1}function Ah(e){if(!Array.isArray(e))return[];let t=new Set;for(let n of e){let s=Jn(n);s&&t.add(s)}return[...t].sort()}function $v(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:c,createdAt:l,observedAt:u,quantifier:d,environments:p,extraction:f=[]}=t,h=`${n}@${c.sourceId}`,m=Dt(e),b=m?m.individualsById.get(h):e.individuals.find(_=>_?.id===h),g=_=>(b?.attributes||[]).find(O=>O?.prop===_)?.value||"",w=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Hl(c.tags),observedAt:u},S=null,T=c.tags,v=y.assertedAt||l||qs(),E=u,I=[],k=d,R=f;if(b){let _={assertedAt:Hl(w),observedAt:g(Sa)};i0(y,_)?(S={head:b,id:`${h}#v${v1(b)}`},I=[S.id]):(T=[...new Set([...w,...c.tags])],v=g(dt)||v,E=u||g(Sa),I=g(Vl).split(" ").filter(Boolean),R=Ah([...g(Kl).split(" "),...f])),k=d||g("mgx:factQuantifier")}return{candidate:{id:h,label:i,class:Ke,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:s},{prop:"rdf:predicate",key:"predicate",value:o},{prop:"rdf:object",key:"object",value:r},{prop:dt,key:"createdAt",value:v},{prop:dr,key:"sourceId",value:c.sourceId},...T.length?[{prop:"mgx:factProvenance",key:"provenance",value:T.join(" | ")}]:[],...E?[{prop:Sa,key:"observedAt",value:E}]:[],...R.length?[{prop:Kl,key:"extraction",value:R.join(" ")}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...k?[{prop:"mgx:factQuantifier",key:"quantifier",value:k}]:[],...p?[{prop:"mgx:factJustification",key:"justification",value:p.map(_=>_.join(" ")).join(" | ")}]:[],...I.length?[{prop:Vl,key:"supersedes",value:I.join(" ")}]:[]]},demote:S}}function E1(e,t){let n=`${t}@${Hs}`,s=Dt(e);if((s?!s.individualsById.has(n):!e.individuals.some(r=>r?.id===n))||(e.individuals=e.individuals.filter(r=>r?.id!==n),!s))return;s.individualsById.delete(n);let o=(s.factRecordsByGroup.get(t)||[]).filter(r=>r!==n);o.length?s.factRecordsByGroup.set(t,o):s.factRecordsByGroup.delete(t)}function Sv(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${Hs}`)||E1(e,mt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};Bn(o,Ra,"supersededBy",t.id),Ys(e,o),s.push(o.id)}return Ys(e,t),s.push(t.id),s}function Eo(e,t){let n=Dt(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Ih(e,t){let n=new Set(t);if(!n.size)return;e.individuals=(e.individuals||[]).filter(o=>!n.has(o?.id));for(let o of e.objectProperties||[]){let r=o.examples||[],i=r.filter(a=>!n.has(a?.subject)&&!n.has(a?.object));i.length!==r.length&&(o.examples=i,o.count=i.length)}let s=Dt(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=mt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function vv(e,t){let n=Dt(e),s=(n?n.factRecordsByGroup.get(t):pr(e,t))||[];if(s.length<8)return[];let o=new Map,r=new Map,i=new Map,a=new Map;for(let u of s.slice()){let d=Eo(e,u);if(!d)continue;let p=w=>(d.attributes||[]).find(y=>y?.prop===w)?.value||"";if(Ks(u)){i.set(ua(u),d);continue}if(ai(u)){a.set(p(dr),d);continue}let f=p("mgx:factProvenance"),h=FS(f),m=f.split(" | ").filter(Boolean),b={id:u,sourceId:p(dr)||h.id,assertedAt:_a(m,p(dt)),record:d};if(p(Ra)){let w=r.get(b.sourceId);w?w.push(b):r.set(b.sourceId,[b]);continue}if(!h.type)continue;let g=o.get(h.type);g?g.push(b):o.set(h.type,[b])}let c=nu(e),l=[];for(let[u,d]of o){let p=W$({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:f=>mc(u,c[f])});if(p){Ys(e,p.rollup),l.push(...p.absorbed);for(let f of p.absorbedSourceIds){for(let m of r.get(f)||[])l.push(m.id);r.delete(f);let h=a.get(f);h&&l.push(h.id),a.delete(f)}}}for(let[u,d]of r){let p=G$({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!p)continue;Ys(e,p.rollup),l.push(...p.absorbed);let f=Eo(e,p.rewire);f&&Bn(f,Vl,"supersedes",p.rollup.id)}return l}async function x1(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",extraction:c,premiseTrusts:l,ruleConfidence:u}={}){let d=V(t),p=us(n),f=V(s);if(!d||!p||!f)throw new Error("a fact needs subject, predicate and object");let h=Zo(d,p,f),m=`${d} ${p} ${f}`,b=pc({doc:m}),g=Jn(a),w=Ah(c);return await Xs(e,async y=>{let S=wv(y,h,Jn(o),r);for(let T of S.length?[]:yv(y,h,{quantifier:g}))pi(y,Eo(y,T),void 0,{premiseTrusts:l,ruleConfidence:u});for(let T of S){let v=$v(y,{groupId:h,s:d,p,o:f,label:tu(m),tokens:b,group:T,createdAt:r,observedAt:i,quantifier:g,extraction:w});await Dp(v.candidate);for(let E of Sv(y,v))pi(y,Eo(y,E),void 0,E===v.candidate.id?{premiseTrusts:l,ruleConfidence:u}:void 0)}Ih(y,vv(y,h)),Ss(y)}),{id:h}}function k1(e){if(!Array.isArray(e))return;let t=e.some(Array.isArray)?e.filter(Array.isArray):[e],n=[],s=new Set;for(let o of t){let r=o.filter(a=>typeof a=="string"&&a);if(!r.length)continue;let i=[...r].sort().join(" ");s.has(i)||(s.add(i),n.push(r))}return n.length?n:void 0}async function Zn(e,t){let n=[],s=0;for(let r of t||[]){let i=V(r?.subject),a=us(r?.predicate),c=V(r?.object);if(!i||!a||!c){s+=1;continue}let l=`${i} ${a} ${c}`;n.push({id:Zo(i,a,c),s:i,p:a,o:c,text:l,tokens:pc({doc:l}),provenance:Jn(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:Jn(r?.quantifier),extraction:Ah(r?.extraction),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:k1(r?.justification)})}let o=[];return n.length?(await Xs(e,r=>{let i=[],a=new Set,c=new Map;for(let u of n){let d=wv(r,u.id,u.provenance,u.createdAt);for(let p of d.length?[]:yv(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(p)||(a.add(p),i.push(p)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(p,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let p of d){let f=$v(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:tu(u.text),tokens:u.tokens,group:p,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments,extraction:u.extraction});for(let h of Sv(r,f))a.has(h)||(a.add(h),i.push(h));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(f.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)pi(r,Eo(r,u),void 0,c.get(u));let l=[];for(let u of new Set(o))l.push(...vv(r,u));Ih(r,l),Ss(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function ru(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=Ev[n];if(!i)throw new Error(`a rule kind must be one of ${j1.join(", ")}, got ${JSON.stringify(n)}`);let a=V(t);if(!a)throw new Error("a rule needs a name");let c=R1[n]||new Set,l=i.map(([f])=>V(s?.[f])),u=i.filter(([f],h)=>!c.has(f)&&!l[h]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([f])=>f).join(" + ")}`);if(n===Ia){let f=l[i.findIndex(([m])=>m==="objectRole")],h=l[i.findIndex(([m])=>m==="value")];if(!f&&!h)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=_1(n,a,l),p=tu(`${a} = ${n}(${l.join(", ")})`);return await Xs(e,async f=>{let h=f.individuals.find(y=>y?.id===d),m=h?.attributes?.find(y=>y?.prop==="mgx:factProvenance")?.value||"",b=[...new Set([...m.split(" | "),Jn(o)].filter(Boolean))],g=Rh(h,r),w={id:d,label:p,class:gs,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:ou,key:"ruleName",value:a},{prop:mi,key:"ruleKind",value:n},...i.map(([y,S],T)=>({prop:S,key:y,value:l[T],skip:!l[T]&&c.has(y)})).filter(y=>!y.skip).map(({skip:y,...S})=>S),{prop:dt,key:"createdAt",value:g},...b.length?[{prop:"mgx:factProvenance",key:"provenance",value:b.join(" | ")}]:[]]};await Dp(w),Ys(f,w),pi(f,f.individuals.find(y=>y?.id===d)),Ss(f)}),{id:d}}function Lh(e,t){let n=V(t);return(e?.individuals||[]).find(s=>s?.class===gs&&(s.attributes||[]).find(o=>o?.prop===ou)?.value===n)}function T1(e,t){let n=V(t),s=o=>(o.attributes||[]).find(r=>r?.prop===mi)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===gs&&(o.attributes||[]).find(r=>r?.prop===ou)?.value===n).sort((o,r)=>ur(s(o),s(r))||ur(o.id,r.id))}function iu(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==gs)continue;let s=a=>(n.attributes||[]).find(c=>c?.prop===a)?.value,o=s(mi),r=Ev[o];if(!r)continue;let i={};for(let[a,c]of r)i[a]=s(c)??"";t.push({id:n.id,name:s(ou)||"",kind:o,slots:i,provenance:s("mgx:factProvenance")||""})}return t.sort((n,s)=>ur(n.name,s.name)||ur(n.kind,s.kind)||ur(n.id,s.id)),t}async function Ph(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:c,byTrust:l,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:p}=o,f=String(t||"").trim().toLowerCase(),h=c(V,n),m=c(V,s),b=r(f).filter(y=>h.has(y.fact.subject)&&m.has(y.fact.object));if(b.length){let y=b.slice().sort((S,T)=>l(S.fact,T.fact))[0];return{citation:[i(y.fact),...y.aliasFacts.map(S=>`${a(S)}${S.provenance?` (source: ${S.provenance})`:""}`)]}}let g=Lh(e,f),w=g?.attributes?.find(y=>y.prop===mi)?.value;if(g&&w===Ta){let y=g.attributes.find(O=>O.prop==="mgx:ruleBase1")?.value,S=g.attributes.find(O=>O.prop==="mgx:ruleBase2")?.value,T=V(n),v=V(s);if(!y||!S||!T||!v)return null;let R=p({entity:T,hopsTaken:0},O=>O.hopsTaken===2&&O.entity===v,O=>{if(O.hopsTaken>=2)return[];let x=O.hopsTaken===0?y:S;return r(x).filter(j=>j.fact.subject===O.entity).map(j=>({action:j,nextState:{entity:j.fact.object,hopsTaken:O.hopsTaken+1}}))},{maxDepth:2,stateKey:O=>`${O.entity}#${O.hopsTaken}`});if(!R)return null;let $=new Set,_=[];for(let O of R.actions){_.push(i(O.fact));for(let x of O.aliasFacts){let j=x.id||`${x.subject}|${x.predicate}|${x.object}`;$.has(j)||($.add(j),_.push(`${a(x)}${x.provenance?` (source: ${x.provenance})`:""}`))}}return{citation:_}}if(g&&w===Aa){let y=g.attributes.find(k=>k.prop==="mgx:ruleBase1")?.value,S=g.attributes.find(k=>k.prop==="mgx:ruleFilterProperty")?.value;if(!y||!S)return null;let T=await Ph(e,y,n,s,o);if(!T)return null;let v=V(n),E=V(S),I=u.find(k=>k.predicate===d&&k.subject===v&&V(k.object)===E);return I?{citation:[...T.citation,i(I)]}:null}return null}async function xv(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:c,rows:l,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,p=String(t||"").trim().toLowerCase(),f=a(V,n),h=o(p).filter(g=>f.has(g.fact.object));if(h.length){let g=new Map;for(let w of h)g.has(w.fact.subject)||g.set(w.fact.subject,[]),g.get(w.fact.subject).push(w);return[...g.entries()].map(([w,y])=>{let S=y.slice().sort((T,v)=>c(T.fact,v.fact))[0];return{subject:w,citation:[r(S.fact),...S.aliasFacts.map(T=>`${i(T)}${T.provenance?` (source: ${T.provenance})`:""}`)]}})}let m=Lh(e,p),b=m?.attributes?.find(g=>g.prop===mi)?.value;if(m&&b===Ta){let g=m.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,w=m.attributes.find(E=>E.prop==="mgx:ruleBase2")?.value,y=V(n);return!g||!w||!y?[]:d({entity:y,hopsTaken:0},E=>{if(E.hopsTaken>=2)return[];let I=E.hopsTaken===0?w:g;return o(I).filter(k=>k.fact.object===E.entity).map(k=>({action:k,nextState:{entity:k.fact.subject,hopsTaken:E.hopsTaken+1}}))},{maxDepth:2,stateKey:E=>`${E.entity}#${E.hopsTaken}`}).filter(E=>E.node.hopsTaken===2).map(({node:E,path:I})=>{let k=new Set,R=[];for(let $ of I.actions.slice().reverse()){R.push(r($.fact));for(let _ of $.aliasFacts){let O=_.id||`${_.subject}|${_.predicate}|${_.object}`;k.has(O)||(k.add(O),R.push(`${i(_)}${_.provenance?` (source: ${_.provenance})`:""}`))}}return{subject:E.entity,citation:R}})}if(m&&b===Aa){let g=m.attributes.find(v=>v.prop==="mgx:ruleBase1")?.value,w=m.attributes.find(v=>v.prop==="mgx:ruleFilterProperty")?.value;if(!g||!w)return[];let y=await xv(e,g,n,s),S=V(w),T=[];for(let v of y){let E=V(v.subject),I=l.find(k=>k.predicate===u&&k.subject===E&&V(k.object)===S);I&&T.push({subject:v.subject,citation:[...v.citation,r(I)]})}return T}return[]}function gt(e,t={}){return jv(e,au(e),t)}async function kv(e){if(!hi(e))return gt(await rt(e));let t=e.storeWrites||0;if(e.heldFactRows&&e.heldFactRowsStamp===t)return e.heldFactRows;let n=gt(await rt(e));return(e.storeWrites||0)===t&&(e.heldFactRows=n,e.heldFactRowsStamp=t),n}function jv(e,t,n={}){let s=VS(e),o=[];for(let[i,a]of t.groups){let c=Mh(i,a,t),l=s?.get(i);c.trust=gc(l?l.inputs:c.assertions,n).score,o.push(c)}let r=o.map(i=>({key:el(i),row:i}));return r.sort((i,a)=>i.key<a.key?-1:i.key>a.key?1:0),I1(r.map(i=>i.row))}function I1(e){let t=e.filter(s=>s.subject.startsWith(A1));if(!t.length)return e;let{speakersByClaimId:n}=C$(t);if(!n.size)return e;for(let s of e){let o=n.get(s.id);o?.length&&(s.attributedTo=o)}return e}function au(e,{pairs:t=null,scopedGroups:n=new Set}={}){let s=e?.individuals||[],o=Dt(e),r=o?o.sourcesById:new Map(s.filter(b=>b?.class===ms).map(b=>[b.id,b])),i=o?.statedByBySubject;if(!i){let b=(e?.objectProperties||[]).find(g=>g?.prop===gn);i=new Map;for(let g of b?.examples||[])i.has(g.subject)||i.set(g.subject,[]),i.get(g.subject).push(g.object)}let a=t?new Set([...t].map(b=>b.slice(0,b.indexOf("\0")))):null,c=b=>{if(!t||n.has(mt(b.id)))return!1;let g=ys(b,"subject");return a.has(g)?!t.has(So(g,ys(b,"predicate"))):!0},l=new Map,u=new Map;for(let b of s){if(b?.class===en){let y=mt(b.id),S=u.get(y);S?S.push(b):u.set(y,[b]);continue}if(b?.class!==Ke||(b.attributes||[]).some(y=>y?.prop===Ra)||ai(b.id)||c(b))continue;let g=mt(b.id),w=l.get(g);w?w.push(b):l.set(g,[b])}for(let[b,g]of u){let w=l.get(b);if(!w)continue;let y=w.filter(S=>!yl(g,S.id,_a(Dn(S,"mgx:factProvenance").split(" | ").filter(Boolean),Dn(S,dt))));y.length!==w.length&&(y.length?l.set(b,y):l.delete(b))}for(let b of l.values())b.sort((g,w)=>g.id<w.id?-1:g.id>w.id?1:0);let d=new Map,p=b=>{let g=d.get(b);return g===void 0&&(g=(r.get(b)?.attributes||[]).find(w=>w?.prop==="mgx:sourceType")?.value||"",d.set(b,g)),g},f=new Map,h=b=>{let g=f.get(b);return g===void 0&&(g=Hl(b.split(" | ").filter(Boolean)),f.set(b,g)),g},m=null;return{groups:l,get groupsByPair(){if(m)return m;m=new Map;for(let[b,g]of l){let w=So(ys(g[0],"subject"),ys(g[0],"predicate")),y=m.get(w);y?y.push(b):m.set(w,[b])}return m},statedByRecord:i,sourceTypeOf:p,embeddedTimestampOf:h}}function O1(e){let t="",n="",s="",o="",r="",i="",a="",c="";for(let l of e?.attributes||[]){switch(l?.prop){case"mgx:factProvenance":t=l.value||"";continue;case dt:n=l.value||"";continue;case Sa:s=l.value||"";continue;case Kl:o=l.value||"";continue;case Dr:r=l.value||"";continue;case dr:i=l.value||"";continue;default:break}l?.key==="quantifier"?a=l.value||"":l?.key==="justification"&&(c=l.value||"")}return{provenance:t,createdAt:n,observedAt:s,extraction:o,trustScore:r,sourceId:i,quantifier:a,justification:c}}function Mh(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=Dn,i=ys,a=[],c=[],l=[],u=new Set,d=new Set,p=[],f=new Set,h="";for(let g of t){if(Ks(g.id)){let R=ua(g.id),$=da(g);for(let _ of $)c.includes(_)||(c.push(_),R&&l.push(R));a.push({id:g.id,sourceId:"",sourceType:R,provenance:"",createdAt:r(g,fs),ownTrust:Number(r(g,ii))||0,assertedAt:r(g,ps),rollup:{count:Number(r(g,la))||$.length,sourceIds:$,earliest:r(g,fs),latest:r(g,ps)}});continue}let w=O1(g),y=w.provenance.split(" | ").filter(Boolean);for(let R of y)u.add(R);let[S]=s.get(g.id)||[],T=S||w.sourceId,v=o(T);S&&!c.includes(S)&&(c.push(S),v&&l.push(v));let E=w.createdAt,I=w.observedAt,k=w.extraction?w.extraction.split(" ").filter(Boolean):[];for(let R of k)d.add(R);a.push({id:g.id,sourceId:T,sourceType:v,provenance:y.join(" | "),createdAt:E,...I?{observedAt:I}:{},...k.length?{extraction:k}:{},ownTrust:Number(w.trustScore)||0,assertedAt:n.embeddedTimestampOf(w.provenance)||(Number.isFinite(Date.parse(E))?E:"")}),h=h||w.quantifier;for(let R of w.justification.split(" | ")){let $=R.split(" ").filter(Boolean);if(!$.length)continue;let _=$.join(" ");f.has(_)||(f.add(_),p.push($))}}let m=[],b=new Set;for(let g of p)for(let w of g)b.has(w)||(b.add(w),m.push(w));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:h,sourceIds:c,sourceTypes:l,...d.size?{extraction:[...d].sort()}:{},environments:p,justification:m,assertions:a}}function C1(e){let t=Dn(e,dr);if(t)return t;let n=String(e?.id||""),s=n.indexOf("@");if(s<0)return"";let o=n.slice(s+1),r=o.indexOf("#");return r<0?o:o.slice(0,r)}function N1(e,t){let n=new Set;for(let s of e?.individuals||[]){if(s?.class!==Ke)continue;let o=Dn(s,"rdf:subject"),r=Dn(s,"rdf:object");(t.has(o)||t.has(r))&&n.add(mt(s.id))}return n}async function Rv(e,t,{provenance:n="",retractedAt:s=""}={}){let o=new Set((t||[]).filter(Boolean)),r=[],i=[];if(!o.size)return{removed:r,records:i};let a=s||qs();return await Xs(e,c=>{let l=new Set,u=new Set,d=new Map,p=(m,b)=>{l.add(m.id);let g=C1(m),w=`${b}\0${g}`,y=Dn(m,"mgx:factProvenance"),S=d.get(w);S?(S.ids.push(m.id),y&&S.tags.push(y)):d.set(w,{groupId:b,sourceId:g,ids:[m.id],tags:y?[y]:[],template:{label:m.label||"",subject:Dn(m,"rdf:subject"),predicate:Dn(m,"rdf:predicate"),object:Dn(m,"rdf:object")}})},f=o,h=!1;for(;f.size;){let m=new Set,b=new Set;c.individuals=(c.individuals||[]).filter(w=>{if(w?.class!==Ke)return!0;let y=mt(w.id),S=f.has(w.id)?w.id:f.has(y)?y:"";return S?(h||u.add(S),b.add(y),p(w,y),!1):(m.add(y),!0)});let g=[...b].filter(w=>!m.has(w));f=g.length?N1(c,new Set(g)):new Set,h=!0}for(let m of u)r.push(m);if(r.length){for(let m of l)i.push(m);for(let m of c.objectProperties||[]){let b=m.examples||[];m.examples=b.filter(g=>!l.has(g?.subject)&&!l.has(g?.object)),m.count=m.examples.length}for(let m of d.values()){let b=q$({groupId:m.groupId,sourceId:m.sourceId,recordIds:m.ids,retractedAt:a,template:m.template,provenance:[...m.tags,n].filter(Boolean).join(" | ")});b&&Ys(c,b)}Ss(c)}}),{removed:r,records:i}}function L1(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==en)continue;let s=$l(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function P1(e,t){let n=[];for(let o of t||[]){let r=Sl(o);r&&n.push(r)}let s=[];return n.length?(await Xs(e,o=>{let r=new Map;for(let a of n){let c=Ys(o,a),l=mt(c.id),u=r.get(l);u?u.push(c):r.set(l,[c])}let i=new Set;for(let[a,c]of r)for(let l of pr(o,a)){let u=Eo(o,l);if(!u)continue;let d=Dn(u,"mgx:factProvenance").split(" | ").filter(Boolean);yl(c,l,_a(d,Dn(u,dt)))&&i.add(l)}if(i.size){Ih(o,i);for(let a of i)s.push(a)}Ss(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function M1(e,{self:t="",acknowledgedBy:n=null}={}){let s=vl(gt(e)),o=[];for(let r of e?.individuals||[])r?.class===en&&r.id&&o.push(r.id);return{roster:s,retirable:El({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function F1(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Xs(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==en||!n.has(a.id)?!0:(r.add(a.id),!1)),!r.size)return;for(let a of r)s.push(a);let i=Dt(o);if(i)for(let a of r){i.individualsById.delete(a);let c=mt(a),l=(i.retractionsByGroup.get(c)||[]).filter(u=>!r.has(u.id));l.length?i.retractionsByGroup.set(c,l):i.retractionsByGroup.delete(c)}Ss(o)}),{retired:s}):{retired:s}}function _v(e,{floor:t=D1,factRows:n=null}={}){let s=(n||gt(e)).filter(i=>i.trust>=t),o=new Map;for(let i of s){if(il(i.predicate)===gp)continue;let a=So(i.subject,i.predicate);o.has(a)||o.set(a,[]),o.get(a).push(i)}let r=[];for(let i of o.values()){if(new Set(i.map(c=>c.object)).size<2)continue;let a=il(i[0].predicate);a!==bp&&!yp(i,a).contested||r.push(i.slice().sort((c,l)=>l.trust-c.trust||ur(c.object,l.object)))}return r.sort((i,a)=>ur(So(i[0].subject,i[0].predicate),So(a[0].subject,a[0].predicate)))}var Ea,lh,$o,Ke,ar,ms,gs,uh,dh,t0,gn,fh,NS,Gl,eh,LS,n0,jS,s0,th,ph,hh,PS,o0,Hs,Sa,dr,Vl,Ra,Kl,US,Dn,ys,ur,So,WS,VS,l0,HS,RS,YS,XS,JS,Fn,AS,I0,Ul,fr,Qn,nv,$h,vo,F0,Sh,vh,D0,K0,q0,dv,rh,J0,va,e1,jh,fv,ih,Jl,Dt,tu,qs,Th,Wl,Ta,Aa,Oh,Ch,su,Ia,Nh,j1,ou,mi,Ev,R1,_1,A1,D1,gi,B1,z1,Ue=L(()=>{zt();Qe();Kn();Ve();Ve();qn();_$();qn();rl();tr();Ep();Ap();Pp();Fp();Bp();ui();ui();Kp();Ap();Pp();Fp();Bp();Ea=ne(".tmct","memory"),lh=ne(Ea,"graph.json"),$o="Utterance",Ke="Fact",ar="Session",ms="Source",gs="Rule",uh="mgx:saidInSession",dh="mgx:inReplyTo",t0="mgx:derivedFrom",gn="mgx:statedBy",fh="mgx:canonicalisedFrom",NS="mgx:sourceReliability",Gl="src:operator-chat",eh="src:teach-chat",LS="src:teach-node",n0=new Set(["visitor","tmct"]),jS=48,s0=[{prop:"rdf:type",note:"rdf-ish typing attribute: owl:NamedIndividual (utterances/sessions) or rdf:Statement (reified facts)"},{prop:"mgx:utteranceRole",note:"who said it: visitor (an a-visitor-said item) or tmct (the response alongside it)"},{prop:"mgx:utteranceText",note:"the utterance's normalized text (capped)"},{prop:"mgx:utteranceTs",note:"when it was said, ISO-8601 (the chat turn timestamp)"},{prop:"mgx:utteranceParsed",note:"optional JSON of the parse the interpretation pipeline produced for this request"},{prop:uh,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:dh,predicate:"inReplyTo",note:"tmct Utterance \u2192 the visitor Utterance it answers (the Q/A pairing)"},{prop:"rdf:subject",note:"reified fact: the triple's subject term"},{prop:"rdf:predicate",note:"reified fact: the triple's predicate term"},{prop:"rdf:object",note:"reified fact: the triple's object term"},{prop:"mgx:factProvenance",note:"LEGACY COMPAT SHIM: the ' | '-joined provenance tag string a fact came from; the source-of-truth is now the mgx:statedBy edges derived from it"},{prop:"mgx:sourceId",note:"the assertion key a Fact record is filed under \u2014 the Source id of the ONE party asserting it, which is also the @-suffix of the record's own id. `src:none` when no tag names a Source, so every record has a key rather than a hole"},{prop:"mgx:observedAt",note:"OPTIONAL valid time: when the asserting party WITNESSED the claim, as against mgx:createdAt's transaction time (when this store recorded it). A stale article read today loses to an eyewitness report from yesterday. Stored only when a caller supplies one \u2014 never fabricated, never backfilled"},{prop:"mgx:extractionFinding",note:"OPTIONAL: the space-joined structural findings the extractor recorded about how THIS assertion's sentence was read, from the closed vocabulary identifier-token | clause-fallback | pronoun-carry | definitional-frame | reported-speech. Per assertion, never per triple: a later clean re-assertion of the same triple carries none. Absence means no findings were recorded, never that the sentence was checked and read cleanly"},{prop:"mgx:supersedes",note:"the record id(s) this one replaced when its own source re-asserted the triple with a newer embedded timestamp. A space-joined LIST; absent, never empty, until the first supersession"},{prop:"mgx:supersededBy",note:"the record id(s) that replaced this one. Its presence is what makes a record a demoted leaf rather than a live head, and the group fold skips it: a source's past belief is not a second vote for the present one. A LIST, because one source with two live replicas can fork before they sync"},{prop:"mgx:factQuantifier",note:"OPTIONAL: the quantifier word a plural class-membership teach used ('every'/'some'/'a few'), for literal recall by 'how many Xs are Ys' \u2014 never real cardinality counting"},{prop:"mgx:factJustification",note:"an entailed Fact's supporting premise fact ids: ' | '-separated environments, one space-separated premise-id list per independent derivation, capped by syllogise's maxEnvironments knob; a value with no ' | ' is a single environment"},{prop:"mgx:ruleName",note:"a taught Rule's own name (e.g. 'grandparent') \u2014 the query-dispatcher's lookup key, PLAN_TAUGHT_RELATIONS.md \xA72/\xA73"},{prop:"mgx:ruleKind",note:"a taught Rule's SHAPE tag \u2014 the closed vocabulary compose2 | filter | recursive | action-signature | action-precond | action-effect | action-constraint (structural, like 'Fact'/'Rule' themselves, never a domain word)"},{prop:"mgx:ruleBase1",note:"compose2: the first hop's base relation name; filter: the base rule/relation being filtered (same 'base relation' role in both kinds, so the name is shared)"},{prop:"mgx:ruleBase2",note:"compose2 only: the second hop's base relation name"},{prop:"mgx:ruleFilterProperty",note:"filter only: the property literal candidates are filtered by (an mgx:hasProperty-shaped Fact lookup)"},{prop:"mgx:ruleBaseCase",note:"recursive only: the base-case relation name (hop zero)"},{prop:"mgx:ruleRecStep",note:"recursive only: the self-referential recursive-step relation name"},{prop:dt,note:"when an individual was FIRST written, ISO-8601 (first-write-wins on upsert); the audit 'when', the recency input to trust, the novelty signal"},{prop:As,note:"an audit / last-modified stamp: when an individual's OWN attributes were last mutated in place (upsertSession, recomputeFactTrust, recomputeSourceReliability) \u2014 most individuals never carry it at all. NOT transaction time: a mutable stamp cannot record when the previous version stopped being current, so tmct is not bitemporal"},{prop:t0,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:gn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:fh,predicate:"canonicalisedFrom",note:"subPropertyOf derivedFrom: a canonical Fact cleaned from a raw Block/Source, never replacing it"},{prop:"mgx:sourceType",note:"a Source's kind: operator | teach | provider | corpus | corpusWeak | reference | referenceLive | extracted | optimisticExtract | web | entailed (the trust-prior key)"},{prop:"mgx:sourceUrl",note:"a web Source's URL"},{prop:"mgx:sourceRule",note:"an entailed Source's rule id"},{prop:"mgx:sourceReliability",note:"actor-level (session-scoped) trust nudge in [0.5,1.5], neutral 1.0 when absent \u2014 materialised by recomputeSourceReliability from a session's asserted-vs-contradicted track record (memory/trust.mjs's sessionReliabilityFrom); folds into computeTrust's per-source prior"},{prop:Dr,note:"materialised trust cache in [0,1] \u2014 pure function of a fact's Sources + createdAt (memory/trust.mjs); invalidated when a statedBy edge is added"},{prop:hc,note:"JSON of the inputs the trust score was computed from (source-type multiset, corroboration count, createdAt, recency) \u2014 makes the score auditable"},{prop:"mgx:hasProseTokens",note:"prose tokens (prose.mjs tokenizer) backing the payload's proseIndex"},{prop:"mgx:sessionStarted",note:"session anchor: when the session started, ISO-8601"},{prop:"rdf:predicate",prefix:tl,note:"a reified fact's predicate carries its POLARITY: mgxneg:capableOf is the negative twin of mgx:capableOf ('a penguin cannot fly'). Polarity cannot be a separate property \u2014 the fact id hashes (subject, predicate, object), so both polarities would share one id and union their statedBy edges (memory/capability.mjs)"}];th=e=>$a(e),ph="memory",hh="sqlite",PS="row";o0=`
|
|
108
108
|
CREATE TABLE IF NOT EXISTS meta (k TEXT PRIMARY KEY, v TEXT NOT NULL);
|
|
109
109
|
CREATE TABLE IF NOT EXISTS individuals (id TEXT PRIMARY KEY, ord INTEGER NOT NULL, class TEXT, label TEXT, json TEXT NOT NULL);
|
|
110
110
|
CREATE TABLE IF NOT EXISTS relations (prop TEXT PRIMARY KEY, ord INTEGER NOT NULL, predicate TEXT, count INTEGER);
|
|
@@ -143,94 +143,94 @@ CREATE TABLE IF NOT EXISTS fact_object_supersessions (
|
|
|
143
143
|
recorded_at TEXT NOT NULL,
|
|
144
144
|
PRIMARY KEY (subject, predicate, ord)
|
|
145
145
|
);
|
|
146
|
-
`,
|
|
146
|
+
`,Hs="src:none",Sa="mgx:observedAt",dr="mgx:sourceId",Vl="mgx:supersedes",Ra="mgx:supersededBy",Kl="mgx:extractionFinding";US="INSERT OR REPLACE INTO facts(id, triple_hash, subject, predicate, object, source_id, source_type, trust_score, created_at, observed_at, superseded_by, json) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";Dn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",ys=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",ur=(e,t)=>{let n=String(e??""),s=String(t??"");return n<s?-1:n>s?1:0},So=(e,t)=>`${e}\0${t}`;WS=Symbol("materialised fact_heads index");VS=e=>e?.[WS]||null,l0="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";HS=new Set(["subject","object","subjectLabel","objectLabel"]),RS=!1;YS="memory",XS="prefixes",JS="syllogiseState";Fn=e=>e===void 0?e:structuredClone(e);AS=new WeakMap;I0=e=>e?.id,Ul=e=>`${e?.subject}\0${e?.object}`;fr="edge-group",Qn="edge-group:",nv="fact",$h=new Map([[Ke,nv],[ms,"source"],[$o,"utterance"],[ar,"session"],[gs,"rule"],[en,"retraction"]]),vo="unmapped_rows",F0=`CREATE TABLE IF NOT EXISTS ${vo} (
|
|
147
147
|
row_key TEXT PRIMARY KEY, row_class TEXT NOT NULL, term TEXT NOT NULL, json TEXT NOT NULL, expires_at INTEGER
|
|
148
|
-
)`,
|
|
149
|
-
\u2026+${o.length-
|
|
148
|
+
)`,Sh="SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?",vh=(e,t)=>`{"ord":${e},"individual":${t}}`,D0=/^\{"ord":(-?\d+),/;K0=2e3;q0=Object.freeze(["meta","individuals","relations","edges","facts","fact_heads","fact_object_supersessions"]);dv=ne(Ea,"manifest.json"),rh=5,J0=e=>ne(e,dv);va=e=>n1(t1(e));e1=/^fact:[0-9a-f]{8}$/;jh=ne(Ea,"syllogise-state.json"),fv="syllogiseState";ih=Symbol("mutateMemory lookup index");Jl=class{#n;#e=new Map;constructor(t){this.#n=t}get(t){let n=this.#e.get(t);return n!==void 0?n===null?void 0:n:this.#n.get(t)}set(t,n){this.#e.set(t,n)}delete(t){this.#e.set(t,null)}push(t,n){let s=this.get(t);s?s.includes(n)||this.#e.set(t,[...s,n]):this.#e.set(t,[n])}};Dt=e=>e?.[ih]||null;tu=e=>e.length>jS?e.slice(0,jS-1)+"\u2026":e,qs=()=>new Date().toISOString();Th=e=>String(e).replace(/^src:/,"");Wl=e=>typeof e=="string"&&(e.startsWith(`${Gl}:`)||e.startsWith(`${eh}:`)||e.startsWith(`${LS}:`));Ta="compose2",Aa="filter",Oh="recursive",Ch="action-signature",su="action-precond",Ia="action-effect",Nh="action-constraint",j1=Object.freeze([Ta,Aa,Oh,Ch,su,Ia,Nh]),ou="mgx:ruleName",mi="mgx:ruleKind",Ev={[Ta]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[Aa]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Oh]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[Ch]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[su]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[Ia]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[Nh]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},R1={[su]:new Set(["value","negate"]),[Ia]:new Set(["objectRole","value"])},_1=(e,t,n)=>`rule:${na([e,t,...n].join("\0"))}`;A1="fact:";D1=.5,gi="mgx:hasA",B1="mgx:capableOf",z1=wp});async function zn(e,t=null){try{if(t)return gt(await rt(t));let{dir:n,close:s}=await ko(ve(ve(e.graphFile)));try{return gt(await rt(n))}finally{await s()}}catch{return[]}}function Av(e){let t=[...new Set(e.map(s=>s.provenance).filter(Boolean))];return t.length?`provenance: ${t.slice(0,2).join("; ")}${t.length>2?`, +${t.length-2} more source(s)`:""}`:"provenance: memory/corpus facts"}function cu(e,t){let n=V(t),s=e.filter(a=>Tv.has(a.predicate)&&a.object===n);if(!s.length)return null;let o=[...new Set(s.map(a=>a.subject))].sort(),r=o.slice(0,hr),i=o.length>hr?`
|
|
149
|
+
\u2026+${o.length-hr} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
|
|
150
150
|
${r.join(`
|
|
151
151
|
`)}${i}
|
|
152
|
-
(${
|
|
153
|
-
`)}var
|
|
154
|
-
\u2026 (truncated to ${
|
|
155
|
-
(other matches: ${i.map(b=>b.label).join(", ")})`:"",m=
|
|
152
|
+
(${Av(s)})`}function lu(e,t){let n=V(t),s=e.filter(a=>Tv.has(a.predicate)&&(a.subject===n||a.object===n));if(!s.length)return null;let o=[...new Set(s.filter(a=>a.subject===n).map(a=>a.object))],r=[...new Set(s.filter(a=>a.object===n).map(a=>a.subject))].sort(),i=[`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts.`];if(o.length&&i.push(`is a: ${o.slice(0,hr).join(", ")}`),r.length){let a=r.length>hr?`, +${r.length-hr} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,hr).join(", ")}${a}`)}return i.push(`(${Av(s)})`),i.join(`
|
|
153
|
+
`)}var Tv,hr,mr=L(()=>{Qe();Ue();Tv=new Set(["rdfs:subClassOf","rdf:type"]),hr=40});async function Iv(e,{graph:t,svc:n,config:s}){let o=ht(e,"symbol"),{match:r,candidates:i}=kn(n.graph,o);if(r)return Gd(t,r,{candidates:i});let a=lu(await zn(s),o);if(a)return a;Wt(n,o,"symbol")}var Ov=L(()=>{Fe();mr();ot()});async function Cv(e,{graph:t,svc:n,repoRoot:s}){let o=ht(e,"symbol"),{match:r,candidates:i}=Wt(n,o,"symbol"),a=Jt(r);if(!a)throw new Le(`"${r.label}" (${r.class||"Entity"}) has no source span in the graph \u2014 it is likely a module. Use tmct_describe for its contents, then tmct_snippet one of the functions/classes it defines.`);let c;try{c=await Us({readFile:Ne,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:ta})}catch(b){throw b instanceof Le?b:new Le(`could not read ${a.path} (${b?.code||b?.message||b})`)}let{text:l,truncated:u}=c,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,p=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,f=u?`
|
|
154
|
+
\u2026 (truncated to ${ta} lines; full span ${d})`:"",h=i.length?`
|
|
155
|
+
(other matches: ${i.map(b=>b.label).join(", ")})`:"",m=Hd(t,r);return`${p}
|
|
156
156
|
${l}${f}${m?`
|
|
157
|
-
${m}`:""}${h}`}var
|
|
158
|
-
`),data:o})}var Yv=L(()=>{sn();du();gr();ot();Bh.ownsGraphLoad=!0});function cP(e,t){let n=[];for(let s of t||[])s?.predicate===Y1&&V(s.subject)===e&&n.push(V(s.object));return n}function fu(e,t){let n=V(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of cP(i,t))s.has(a)||o.push(a)}}return r}var Y1,X1,J1,Q1,Z1,eP,tP,nP,sP,oP,rP,iP,aP,Xv,zh=L(()=>{Ve();Y1="rdfs:subClassOf",X1='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="10" r="3.4" fill="currentColor"/><circle cx="12" cy="15.6" r="4.6" fill="currentColor"/><g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round"><path d="M9 8 L2 4"/><path d="M9 10 L1.5 9"/><path d="M9 12.5 L2 14"/><path d="M9 15.5 L3 19"/><path d="M15 8 L22 4"/><path d="M15 10 L22.5 9"/><path d="M15 12.5 L22 14"/><path d="M15 15.5 L21 19"/></g></svg>',J1='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13.2" rx="3.2" ry="5" fill="currentColor"/><circle cx="12" cy="7" r="2.6" fill="currentColor"/><g fill="currentColor" opacity="0.55"><path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/><path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/></g></svg>',Q1='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/></svg>',Z1='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/><circle cx="7" cy="8.5" r="4" fill="currentColor"/><g fill="currentColor"><circle cx="4" cy="6" r="1.6"/><circle cx="7" cy="4.2" r="1.7"/><circle cx="10" cy="6" r="1.6"/></g><rect x="18.5" y="14" width="2.2" height="6" rx="1.1" fill="currentColor"/><circle cx="19.6" cy="13" r="1.5" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19.5" x2="9" y2="22"/><line x1="17" y1="19.5" x2="17" y2="22"/></g></svg>',eP='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.2" fill="currentColor"/><circle cx="7" cy="9" r="3.6" fill="currentColor"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="currentColor"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>',tP='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13" rx="7" ry="4.4" fill="currentColor"/><circle cx="12" cy="7" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="7" y1="17" x2="7" y2="21"/><line x1="17" y1="17" x2="17" y2="21"/></g></svg>',nP='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/></svg>',sP='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="3" rx="1" fill="currentColor"/><rect x="4" y="8" width="3" height="12" fill="currentColor"/><rect x="17" y="8" width="3" height="12" fill="currentColor"/></svg>',oP='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/><path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor" opacity="0.28"/></svg>',rP='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/></svg>',iP='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/><rect x="15.5" y="13.5" width="4.5" height="5" rx="1" fill="currentColor" opacity="0.6"/></svg>',aP='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/><path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor" opacity="0.7"/><rect x="10.6" y="9.4" width="2.8" height="2.2" rx="0.4" fill="currentColor" opacity="0.35"/></svg>',Xv=Object.freeze({spider:X1,fly:J1,egg:Q1,poodle:Z1,dog:eP,animal:tP,room:nP,furniture:sP,portable:oP,person:rP,adventurer:iP,container:aP})});function lP(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function Jv(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of lP(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var Qv=L(()=>{});function uP(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function dP(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function nE(e){return dP(e).filter(t=>t?.property&&t.value!==void 0)}function fP(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function pP(e,t){let n=null,s=0;for(let o of e){let r=nE(o);r.length<=s||fP(r,t)&&(n=o,s=r.length)}return n}function hP(e,t,n){if(typeof n=="string"&&t.placeholder)return e.split(t.placeholder).join(n);if(n&&typeof n=="object"&&t.placeholders){let s=e;for(let[o,r]of Object.entries(t.placeholders)){if(!Object.prototype.hasOwnProperty.call(n,o))return null;s=s.split(r).join(n[o])}return s}return null}function Zv(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(c=>c.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,c.object));if(!i)continue;let a=hP(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function mP(e){let t=[];for(let n of Object.values(e.parameters||{})){n?.placeholder&&t.push(n.placeholder);for(let s of Object.values(n?.placeholders||{}))t.push(s)}return t}function eE(e,t){let n=t;for(let s of mP(e))n=n.split(s).join("");return n}function tE(e,t,n){let s=uP(e,n),o=pP(s,t);if(o&&!o.parameters)return o.svg;if(o)return eE(o,Zv(o,t)||o.svg);for(let a of s){if(a.match||!a.parameters)continue;let c=Zv(a,t);if(c)return c}let r=s.find(a=>!a.match&&!a.parameters);if(r)return r.svg;let i=s.find(a=>!a.match&&a.parameters);return i?eE(i,i.svg):null}function gP(e,t,n,s,o,r){for(let a of fu(e,t)){let c=tE(a,n,s);if(c)return c;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=tE(r,n,s);return i||o[r]}function sE(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=gP(e,t,n,s,o,r);return i?Jv(a,i):a}var GH,VH,Uh=L(()=>{zh();Qv();GH=Object.freeze(["left","half-left","half-right","right"]),VH=Object.freeze(["moving"])});function Oa(e){for(let t of e||[])if(t?.predicate===bP&&Object.prototype.hasOwnProperty.call(oE,t.object))return oE[t.object];return 1}var bP,oE,Wh=L(()=>{bP="mgx:hasProperty",oE=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function rE(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},c=a.resolveSpriteAsset;if(typeof c!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let l=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],p=a.rootFallback||"animal",f=a.classAncestorChain,h=a.sizeScaleFor,m=a.expressionPalette,b=[];r&&b.push({predicate:n,object:r}),i&&b.push({predicate:s,object:i});let g={rootFallback:p};a.instanceKey&&(g.instanceKey=a.instanceKey);let w=c(o,d,b,l,u,g),y=R=>c(R,[],b,l,{},{rootFallback:R}),S=R=>Object.prototype.hasOwnProperty.call(u,R),T=(R,$)=>{let _=l.filter(j=>j&&Array.isArray(j.classes)&&j.classes.indexOf(R)>=0),x=_.find(j=>j.svg===$)||_.find(j=>!j.match&&j.parameters)||null;return x?{classes:x.classes.slice(),parameters:Object.keys(x.parameters||{}).sort(),match:x.match||null}:null},v=null,E=null;if(typeof f=="function"){v=[];for(let R of f(o,d)){let $=y(R);if(v.push({term:R,template:!!$,registry:S(R)}),$){E={term:R,via:"template",hops:v.length-1,root:!1,template:T(R,$)};break}if(S(R)){E={term:R,via:"registry",hops:v.length-1,root:!1,template:null};break}}if(!E){let R=y(p);v.push({term:p,template:!!R,registry:S(p),root:!0}),E={term:p,via:R?"template":"registry",hops:v.length-1,root:!0,template:R?T(p,R):null}}}let I=a.instanceKey?c(o,d,b,l,u,{rootFallback:p}):w,k=r?c(o,d,b.filter(R=>R.predicate!==n),l,u,{rootFallback:p}):null;return{class:o,expression:r||null,size:i||null,svg:w,scale:typeof h=="function"?h(b):1,sizeKnown:i&&typeof h=="function"?h([{predicate:s,object:i}])!==1:null,expressionKnown:r&&m?Object.prototype.hasOwnProperty.call(m,r):null,expressionApplied:r?I!==k:null,rootFallback:p,fellBackToRoot:E?!!E.root:null,chain:v,matched:E}}var iE=L(()=>{});var aE,cE,wP,XH,lE=L(()=>{Uh();aE="icon tier",cE="sprite tier",wP=Object.freeze({takeParameter:Object.freeze({predicate:"mgx:take-parameter",comment:"sprite class -> parameter name: a parameter that class's own templates declare."}),offerVariant:Object.freeze({predicate:"mgx:offer-variant",comment:"sprite class -> variant value: a hand-authored [match] constraint that class's templates offer."})}),XH=Object.freeze(Object.values(wP).map(e=>e.predicate))});var uE,dE=L(()=>{uE=()=>[]});var fE,pE=L(()=>{fE=()=>[]});function vP(){let e=fE();return e.length?{templates:e,tier:cE}:{templates:uE(),tier:aE}}function hE(e){return e.map(t=>t.term).join(" -> ")}async function Gh(e,{config:t,memoryBackend:n=null}){let s=ht(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(co,o))throw new Le(`"${o}" is not a sprite expression. The palette holds: ${$P().join(", ")}.`);if(r&&!SP(r))throw new Le(`"${r}" is not a size the sprite scale recognises \u2014 it reads a taught mgx:hasProperty size word off the individual, and has no entry for this one.`);let{templates:i,tier:a}=vP(),c=await Gn(t,n),l=rE({class:s,expression:o,size:r},{factRows:c,templates:i,spriteRegistry:Xv,resolveSpriteAsset:sE,classAncestorChain:fu,sizeScaleFor:Oa,expressionPalette:co});if(!l.svg||l.fellBackToRoot)throw new Le(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${hE(l.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!l.expressionApplied)throw new Le(`the ${a} draws "${s}" (matched at "${l.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,l.matched.hops===0?`matched at "${l.matched.term}", the class itself, via its own ${l.matched.via}`:`matched at "${l.matched.term}", ${l.matched.hops} hop(s) up the ancestor chain, via its ${l.matched.via}`,`ancestor chain walked: ${hE(l.chain)}`];return l.matched.template?.parameters.length&&d.push(`template parameters: ${l.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${l.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${l.svg.length} characters of SVG markup`),yo({content:d.join(`
|
|
159
|
-
`),data:{class:l.class,expression:l.expression,size:l.size,tier:a,scale:l.scale,svg:l.svg,chain:l.chain,matched:l.matched,expressionApplied:l.expressionApplied}})}var
|
|
157
|
+
${m}`:""}${h}`}var Nv=L(()=>{zt();sn();Gc();Fe();ot()});var Lv,Pv=L(()=>{Fe();ot();Lv=yt(Kb)});function Mv(e,{graph:t,svc:n}){let{match:s}=Wt(n,ht(e,"module"),"module");return Lb(t,s)}var Fv=L(()=>{Fe();ot()});async function Dv(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Le("query is required");let r=Gb(t,s,{kind:o,decorator:String(e?.decorator||"").trim(),name:String(e?.name||"").trim(),toolNamePrefix:n?.toolNamePrefix});if(!o&&/^no module matches/.test(r)){let i=lu(await zn(n),s);if(i)return i}return r}var Bv=L(()=>{sn();Fe();mr()});async function zv(e,{graph:t,svc:n,config:s}){let o=ht(e,"class"),{match:r}=kn(n.graph,o);if(r)return Vb(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=cu(await zn(s),o);if(i)return i;Wt(n,o,"class")}var Uv=L(()=>{Fe();mr();ot()});async function Wv(e,{graph:t,svc:n,config:s}){let o=ht(e,"class"),{match:r}=kn(n.graph,o);if(r)return Hb(t,r);let i=cu(await zn(s),o);if(i)return i;Wt(n,o,"class")}var Gv=L(()=>{Fe();mr();ot()});function Vv(e,{conceptBase:t="concept:",relationMap:n=W1}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=b=>{r.has(b)||r.set(b,b)},a=b=>{let g=b;for(;r.get(g)!==g;)g=r.get(g);for(;r.get(b)!==g;){let w=r.get(b);r.set(b,g),b=w}return g},c=(b,g)=>{let w=a(b),y=a(g);w!==y&&(w<y?r.set(y,w):r.set(w,y))},l=[];for(let b of e){let g=b.predicate;if(!s.has(g)&&!o.has(g))continue;let w=V(b.subject),y=V(b.object);!w||!y||(i(w),i(y),s.has(g)?c(w,y):l.push({s:w,o:y}))}let u=b=>t+b.replace(/ /g,"_"),d=new Map;for(let b of r.keys()){let g=a(b);d.has(g)||d.set(g,new Set),d.get(g).add(b)}let p=[];for(let[b,g]of d){let w=[...g].sort();p.push({id:u(b),prefLabel:b,altLabels:w.filter(y=>y!==b)})}p.sort((b,g)=>b.id<g.id?-1:b.id>g.id?1:0);let f=new Set,h=[];for(let{s:b,o:g}of l){let w=u(a(b)),y=u(a(g));if(w===y)continue;let S=w<y?`${w}\0${y}`:`${y}\0${w}`;f.has(S)||(f.add(S),h.push({subject:w,object:y}))}return h.sort((b,g)=>`${b.subject}${b.object}`<`${g.subject}${g.object}`?-1:1),{concepts:p,related:h,conceptIdForTerm:b=>{let g=V(b);return r.has(g)?u(a(g)):null},namespace:U1}}function Fh(e,t,n={}){let s=Vv(e,n),o=s.conceptIdForTerm(t);if(!o)return null;let r=new Map(s.concepts.map(u=>[u.id,u])),i=r.get(o),a=V(t),c=[i.prefLabel,...i.altLabels].filter(u=>u!==a),l=s.related.filter(u=>u.subject===o||u.object===o).map(u=>r.get(u.subject===o?u.object:u.subject)).filter(Boolean);return{conceptId:o,prefLabel:i.prefLabel,altLabels:i.altLabels,synonyms:c,related:l}}var U1,W1,uu=L(()=>{Ve();U1="http://www.w3.org/2004/02/skos/core#",W1={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function Dh(e,{config:t,memoryBackend:n=null}){let s=ht(e,"term"),o=Fh(await zn(t,n),s);if(!o)throw new Le(`no synonym or related facts for "${s}" in the memory graph. This view answers where the store holds mgx:synonym / mgx:relatedTo facts (a corpus import seeds them).`);let r=[`${o.prefLabel} [${o.conceptId}]`];return o.synonyms.length&&r.push(`synonyms (skos:altLabel): ${o.synonyms.join(", ")}`),o.related.length&&r.push(`related (skos:related): ${o.related.map(i=>i.prefLabel).join(", ")}`),r.push("(from the memory graph's mgx:synonym / mgx:relatedTo / mgx:similarTo facts)"),wo({content:r.join(`
|
|
158
|
+
`),data:o})}var Kv=L(()=>{sn();uu();mr();ot();Dh.ownsGraphLoad=!0});function sP(e,t){let n=[];for(let s of t||[])s?.predicate===G1&&V(s.subject)===e&&n.push(V(s.object));return n}function du(e,t){let n=V(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of sP(i,t))s.has(a)||o.push(a)}}return r}var G1,V1,K1,H1,q1,Y1,X1,J1,Q1,Z1,eP,tP,nP,Hv,Bh=L(()=>{Ve();G1="rdfs:subClassOf",V1='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="10" r="3.4" fill="currentColor"/><circle cx="12" cy="15.6" r="4.6" fill="currentColor"/><g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round"><path d="M9 8 L2 4"/><path d="M9 10 L1.5 9"/><path d="M9 12.5 L2 14"/><path d="M9 15.5 L3 19"/><path d="M15 8 L22 4"/><path d="M15 10 L22.5 9"/><path d="M15 12.5 L22 14"/><path d="M15 15.5 L21 19"/></g></svg>',K1='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13.2" rx="3.2" ry="5" fill="currentColor"/><circle cx="12" cy="7" r="2.6" fill="currentColor"/><g fill="currentColor" opacity="0.55"><path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/><path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/></g></svg>',H1='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/></svg>',q1='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/><circle cx="7" cy="8.5" r="4" fill="currentColor"/><g fill="currentColor"><circle cx="4" cy="6" r="1.6"/><circle cx="7" cy="4.2" r="1.7"/><circle cx="10" cy="6" r="1.6"/></g><rect x="18.5" y="14" width="2.2" height="6" rx="1.1" fill="currentColor"/><circle cx="19.6" cy="13" r="1.5" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19.5" x2="9" y2="22"/><line x1="17" y1="19.5" x2="17" y2="22"/></g></svg>',Y1='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.2" fill="currentColor"/><circle cx="7" cy="9" r="3.6" fill="currentColor"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="currentColor"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>',X1='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13" rx="7" ry="4.4" fill="currentColor"/><circle cx="12" cy="7" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="7" y1="17" x2="7" y2="21"/><line x1="17" y1="17" x2="17" y2="21"/></g></svg>',J1='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/></svg>',Q1='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="3" rx="1" fill="currentColor"/><rect x="4" y="8" width="3" height="12" fill="currentColor"/><rect x="17" y="8" width="3" height="12" fill="currentColor"/></svg>',Z1='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/><path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor" opacity="0.28"/></svg>',eP='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/></svg>',tP='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/><rect x="15.5" y="13.5" width="4.5" height="5" rx="1" fill="currentColor" opacity="0.6"/></svg>',nP='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/><path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor" opacity="0.7"/><rect x="10.6" y="9.4" width="2.8" height="2.2" rx="0.4" fill="currentColor" opacity="0.35"/></svg>',Hv=Object.freeze({spider:V1,fly:K1,egg:H1,poodle:q1,dog:Y1,animal:X1,room:J1,furniture:Q1,portable:Z1,person:eP,adventurer:tP,container:nP})});function oP(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function qv(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of oP(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var Yv=L(()=>{});function rP(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function iP(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function Zv(e){return iP(e).filter(t=>t?.property&&t.value!==void 0)}function aP(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function cP(e,t){let n=null,s=0;for(let o of e){let r=Zv(o);r.length<=s||aP(r,t)&&(n=o,s=r.length)}return n}function lP(e,t,n){if(typeof n=="string"&&t.placeholder)return e.split(t.placeholder).join(n);if(n&&typeof n=="object"&&t.placeholders){let s=e;for(let[o,r]of Object.entries(t.placeholders)){if(!Object.prototype.hasOwnProperty.call(n,o))return null;s=s.split(r).join(n[o])}return s}return null}function Xv(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(c=>c.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,c.object));if(!i)continue;let a=lP(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function uP(e){let t=[];for(let n of Object.values(e.parameters||{})){n?.placeholder&&t.push(n.placeholder);for(let s of Object.values(n?.placeholders||{}))t.push(s)}return t}function Jv(e,t){let n=t;for(let s of uP(e))n=n.split(s).join("");return n}function Qv(e,t,n){let s=rP(e,n),o=cP(s,t);if(o&&!o.parameters)return o.svg;if(o)return Jv(o,Xv(o,t)||o.svg);for(let a of s){if(a.match||!a.parameters)continue;let c=Xv(a,t);if(c)return c}let r=s.find(a=>!a.match&&!a.parameters);if(r)return r.svg;let i=s.find(a=>!a.match&&a.parameters);return i?Jv(i,i.svg):null}function dP(e,t,n,s,o,r){for(let a of du(e,t)){let c=Qv(a,n,s);if(c)return c;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=Qv(r,n,s);return i||o[r]}function eE(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=dP(e,t,n,s,o,r);return i?qv(a,i):a}var TH,AH,zh=L(()=>{Bh();Yv();TH=Object.freeze(["left","half-left","half-right","right"]),AH=Object.freeze(["moving"])});function Oa(e){for(let t of e||[])if(t?.predicate===fP&&Object.prototype.hasOwnProperty.call(tE,t.object))return tE[t.object];return 1}var fP,tE,Uh=L(()=>{fP="mgx:hasProperty",tE=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function nE(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},c=a.resolveSpriteAsset;if(typeof c!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let l=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],p=a.rootFallback||"animal",f=a.classAncestorChain,h=a.sizeScaleFor,m=a.expressionPalette,b=[];r&&b.push({predicate:n,object:r}),i&&b.push({predicate:s,object:i});let g={rootFallback:p};a.instanceKey&&(g.instanceKey=a.instanceKey);let w=c(o,d,b,l,u,g),y=R=>c(R,[],b,l,{},{rootFallback:R}),S=R=>Object.prototype.hasOwnProperty.call(u,R),T=(R,$)=>{let _=l.filter(j=>j&&Array.isArray(j.classes)&&j.classes.indexOf(R)>=0),x=_.find(j=>j.svg===$)||_.find(j=>!j.match&&j.parameters)||null;return x?{classes:x.classes.slice(),parameters:Object.keys(x.parameters||{}).sort(),match:x.match||null}:null},v=null,E=null;if(typeof f=="function"){v=[];for(let R of f(o,d)){let $=y(R);if(v.push({term:R,template:!!$,registry:S(R)}),$){E={term:R,via:"template",hops:v.length-1,root:!1,template:T(R,$)};break}if(S(R)){E={term:R,via:"registry",hops:v.length-1,root:!1,template:null};break}}if(!E){let R=y(p);v.push({term:p,template:!!R,registry:S(p),root:!0}),E={term:p,via:R?"template":"registry",hops:v.length-1,root:!0,template:R?T(p,R):null}}}let I=a.instanceKey?c(o,d,b,l,u,{rootFallback:p}):w,k=r?c(o,d,b.filter(R=>R.predicate!==n),l,u,{rootFallback:p}):null;return{class:o,expression:r||null,size:i||null,svg:w,scale:typeof h=="function"?h(b):1,sizeKnown:i&&typeof h=="function"?h([{predicate:s,object:i}])!==1:null,expressionKnown:r&&m?Object.prototype.hasOwnProperty.call(m,r):null,expressionApplied:r?I!==k:null,rootFallback:p,fellBackToRoot:E?!!E.root:null,chain:v,matched:E}}var sE=L(()=>{});var oE,rE,pP,LH,iE=L(()=>{zh();oE="icon tier",rE="sprite tier",pP=Object.freeze({takeParameter:Object.freeze({predicate:"mgx:take-parameter",comment:"sprite class -> parameter name: a parameter that class's own templates declare."}),offerVariant:Object.freeze({predicate:"mgx:offer-variant",comment:"sprite class -> variant value: a hand-authored [match] constraint that class's templates offer."})}),LH=Object.freeze(Object.values(pP).map(e=>e.predicate))});var aE,cE=L(()=>{aE=()=>[]});var lE,uE=L(()=>{lE=()=>[]});function bP(){let e=lE();return e.length?{templates:e,tier:rE}:{templates:aE(),tier:oE}}function dE(e){return e.map(t=>t.term).join(" -> ")}async function Wh(e,{config:t,memoryBackend:n=null}){let s=ht(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(ao,o))throw new Le(`"${o}" is not a sprite expression. The palette holds: ${mP().join(", ")}.`);if(r&&!gP(r))throw new Le(`"${r}" is not a size the sprite scale recognises \u2014 it reads a taught mgx:hasProperty size word off the individual, and has no entry for this one.`);let{templates:i,tier:a}=bP(),c=await zn(t,n),l=nE({class:s,expression:o,size:r},{factRows:c,templates:i,spriteRegistry:Hv,resolveSpriteAsset:eE,classAncestorChain:du,sizeScaleFor:Oa,expressionPalette:ao});if(!l.svg||l.fellBackToRoot)throw new Le(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${dE(l.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!l.expressionApplied)throw new Le(`the ${a} draws "${s}" (matched at "${l.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,l.matched.hops===0?`matched at "${l.matched.term}", the class itself, via its own ${l.matched.via}`:`matched at "${l.matched.term}", ${l.matched.hops} hop(s) up the ancestor chain, via its ${l.matched.via}`,`ancestor chain walked: ${dE(l.chain)}`];return l.matched.template?.parameters.length&&d.push(`template parameters: ${l.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${l.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${l.svg.length} characters of SVG markup`),wo({content:d.join(`
|
|
159
|
+
`),data:{class:l.class,expression:l.expression,size:l.size,tier:a,scale:l.scale,svg:l.svg,chain:l.chain,matched:l.matched,expressionApplied:l.expressionApplied}})}var hP,mP,gP,fE=L(()=>{sn();Bh();zh();uc();Uh();sE();iE();cE();uE();mr();ot();hP="mgx:hasProperty",mP=()=>Object.keys(ao).sort(),gP=e=>!!e&&Oa([{predicate:hP,object:String(e)}])!==1;Wh.ownsGraphLoad=!0});function pE(e,{graph:t}){return qb(t,{pkg:String(e?.package||"").trim()})}var hE=L(()=>{Fe()});function mE(e,{graph:t,svc:n}){let{match:s}=Wt(n,ht(e,"module"),"module");return mw(t,s)}var gE=L(()=>{Fe();ot()});function bE(e,{graph:t,codeDomainActive:n=null}){return Jb(t,{codeDomainActive:n})}var wE=L(()=>{Fe()});function $E(e,t){return wo({content:e,data:t,text:`${e}${yE}${JSON.stringify(t,null,2)}`})}function SE(e,{graph:t}){let{content:n,tmct_ask:s}=go(t,ht(e,"query"));return $E(n,s)}var yE,fu=L(()=>{cs();ot();yE=`
|
|
160
160
|
|
|
161
161
|
---tmct_ask---
|
|
162
|
-
`});var
|
|
162
|
+
`});var vE,EE=L(()=>{Fe();ot();vE=yt(Xb)});var xE,kE=L(()=>{Fe();ot();xE=yt(Qb)});var jE,RE=L(()=>{Fe();ot();jE=yt(rw)});var _E,TE=L(()=>{Fe();ot();_E=yt(aw)});var AE,IE=L(()=>{Fe();ot();AE=yt(cw)});var OE,CE=L(()=>{Fe();ot();OE=yt(ew)});var NE,LE=L(()=>{Fe();ot();NE=yt(tw)});var PE,ME=L(()=>{Fe();ot();PE=yt(sw)});var FE,DE=L(()=>{Fe();ot();FE=yt(hw)});function wP(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function yP(e){let t=(e||[]).map(wP);return t.map(n=>JSON.stringify(n)).join(`
|
|
163
163
|
`)+(t.length?`
|
|
164
|
-
`:"")}function
|
|
164
|
+
`:"")}function BE(e){return yP(gt(e))}var zE=L(()=>{Ue()});async function Gh(e,{config:t,memoryBackend:n=null}){let s=n?null:await ko(ve(ve(t.graphFile))),o=n||s.dir;try{return BE(await rt(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var UE=L(()=>{zE();Qe();Ue();Gh.ownsGraphLoad=!0});async function Vh(e,{config:t,ingest:n}){let s=String(e?.text??"");if(!s.trim())return"(nothing to ingest \u2014 pass some text)";if(typeof n!="function")return"(ingest isn't wired into this context \u2014 invoke tmct_ingest through the CLI `cli` route or the chat surface)";let o=e?.optimistic===!0,{dir:r,close:i}=await ko(ve(ve(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0,findings:!0}),c=a.extracted.length+a.optimistic.length,l=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${c} fact(s) grounded.`;return wo({content:c?`${l}
|
|
165
165
|
${a.canonical.join(`
|
|
166
|
-
`)}`:l,data:{...a,grounded:c}})}finally{await i()}}var
|
|
167
|
-
`);for(let o=0;o<s.length;o+=1){let r=s[o].trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(c){throw new Error(`${e}:${o+1}: not valid JSON: ${c.message}`)}for(let c of["id","class","template","register"])if(typeof i[c]!="string"||!i[c])throw new Error(`${e}:${o+1}: missing/empty "${c}"`);if(!
|
|
168
|
-
`);for(let r=0;r<o.length;r+=1){let i=o[r].trim();if(!(!i||i.startsWith("#"))){if(i.startsWith("~")){let a=i.slice(1).split(",").map(c=>c.trim().toLowerCase()).filter(Boolean);if(a.length<2)throw new Error(`${e}:${r+1}: a synonym family needs at least 2 entries`);s.push(a);continue}n.push({pattern:i,slots:Jh(i)})}}return{patterns:n,synonyms:s}}var AP,XE,JE,QE,jP,ZE,Xh,RP,Ca,bu=L(()=>{zt();jo();Qe();AP={},XE=ne(Se(tn(AP.url)),"..","..",".."),JE=ne(XE,"data","templates","responses.jsonl"),QE=ne(XE,"data","phrasebook","software-phrases.txt"),jP=new Set(["terse","friendly","technical"]),ZE=/\{([A-Za-z][A-Za-z0-9]*)\}/g,Xh=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]));RP={count:"number",when:"number",location:"path",commit:"path",provenance:"provenance"};Ca=null});function OP(e,t={}){let n=IP.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function CP(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>OP(s,t))):1}function lt(e,t={}){return(Array.isArray(e)?e:[]).map(s=>({row:s,bias:CP(s,t)})).sort((s,o)=>o.bias-s.bias||(o.row?.trust??0)-(s.row?.trust??0)||Zt(s.row,o.row)).map(s=>s.row)}var IP,ox=L(()=>{tr();IP=/^src:corpus:(.+)$/});var Rt,T3,Zs,A3,I3,O3,C3,N3,L3,P3,M3,F3,D3,B3,z3,rx,NP,U3,W3,G3,Ro=L(()=>{Rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},T3=Rt("createRequire"),Zs=Rt("readFileSync"),A3=Rt("access"),I3=Rt("readFile"),O3=Rt("writeFile"),C3=Rt("appendFile"),N3=Rt("mkdir"),L3=Rt("mkdtemp"),P3=Rt("rename"),M3=Rt("unlink"),F3=Rt("rm"),D3=Rt("stat"),B3=Rt("copyFile"),z3=Rt("readdir"),rx=Rt("createReadStream"),NP=Rt("createWriteStream"),U3=Rt("randomBytes"),W3=Rt("spawnSync"),G3=Rt("createInterface")});function em(e,t){let n=String(e).toLowerCase().replace(/^[^a-z]+/,"");if(!n)return null;for(let o of t.vowel_sound_consonants||[])if(n.startsWith(o))return!0;for(let o of t.consonant_sound_vowels||[])if(n.startsWith(o))return!1;let s=n[0];return"aeiou".includes(s)?!0:/[a-z]/.test(s)?!1:null}function FP(e=PP){let t=lr(Zs(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function yu(){if(wu===null)try{wu=FP()}catch{wu=[]}return wu}var DP,LP,PP,MP,J3,wu,$u=L(()=>{Ro();jo();Qe();Fl();bu();DP={},LP=Se(tn(DP.url)),PP=ne(LP,"..","..","data","templates","grammar-rules.toml"),MP=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),J3=Object.freeze(new Set(MP.filter(e=>e!=="prose")));wu=null});function BP(){if(Na!==void 0)return Na;try{let e=ix?ix():zP();Na=e&&e.winkNLP&&e.model?e:null}catch{Na=null}return Na}function zP(){let e=process.getBuiltinModule("node:module").createRequire(UP.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function Su(){if(yi!==void 0)return yi;let e=BP();if(!e)return yi=null,null;try{yi=e.winkNLP(e.model)}catch{yi=null}return yi}var UP,ix,Na,yi,vu=L(()=>{UP={}});var tm=L(()=>{vu()});var cx,ax=L(()=>{cx={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},rodent:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},yellow:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},terrestrial:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to",predicate:"mgx:partOf"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});var hx={};Nt(hx,{CODE_REF_SHAPE:()=>xu,DETERMINERS:()=>sm,OF_CLASSIFIER_HEADS:()=>rm,OF_PARTITIVE_HEADS:()=>im,QUANTIFIERS:()=>om,classify:()=>am,loadLexicon:()=>an,lookupAdjective:()=>Ma,lookupNoun:()=>bn,lookupProperName:()=>$i,lookupVerb:()=>Pa,numberOf:()=>La,predicateOf:()=>Eu,readsAsIndividualName:()=>ku,thirdPerson:()=>dx,withProperNames:()=>px});function La(e){let t=String(e??"").trim().toLowerCase();return/^\d+$/.test(t)?Number(t):GP[t]??null}function dx(e){let t=String(e);return t==="have"?"has":/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/.test(t)?`${t}es`:`${t}s`}function Eu(e,t=ux){if(e.predicate)return e.predicate;let n=e.prep?e.prep[0].toUpperCase()+e.prep.slice(1):"";return`${t}${dx(e.lemma)}${n}`}function fx(e){let t=String(e),n=[t];return t.length>4&&/[a-z]ies$/.test(t)&&n.push(`${t.slice(0,-3)}y`),/(ses|xes|zes|ches|shes)$/.test(t)&&n.push(t.slice(0,-2)),/[a-z]s$/.test(t)&&!/ss$/.test(t)&&n.push(t.slice(0,-1)),t==="has"&&n.push("have"),n}function lx(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!VP.has(o.property))throw new Error(`lexicon noun "${n}": property must be "data" or "object", got ${JSON.stringify(o.property)}`);e.nouns.set(n,o),o.plural&&e.nounPlurals.set(o.plural,n)}for(let[n,s]of Object.entries(t.verbs||{}))e.verbs.set(n,{lemma:n,...s||{}});for(let[n,s]of Object.entries(t.adjectives||{})){let o={lemma:n,...s||{}};if(!KP.has(o.type))throw new Error(`lexicon adjective "${n}": type must be "subclass" or "data", got ${JSON.stringify(o.type)}`);e.adjectives.set(n,o)}for(let n of t.properNames||[])e.properNames.set(String(n).toLowerCase(),String(n))}function an(e,t=ux){if(!e&&nm.has(t))return nm.get(t);let n=cx,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return lx(s,n),e?(lx(s,e),s):(nm.set(t,s),s)}function px(e,t){let n=new Map(e.properNames);for(let s of t)n.set(String(s).toLowerCase(),String(s));return{...e,properNames:n}}function bn(e,t,n={}){return HP(e,t,n)[0]??null}function HP(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,c=l=>{l&&!a.has(l.lemma)&&(a.add(l.lemma),i.push(l))};if(r){let l=e.nouns.get(r)??null;return n.singularOnly&&o?(c(o),c(l)):(c(l),c(o)),i}for(let l of fx(s))c(e.nouns.get(l));return i}function Pa(e,t){return qP(e,t)[0]??null}function qP(e,t){let n=String(t??"").toLowerCase(),s=[],o=new Set;for(let r of fx(n)){let i=e.verbs.get(r);i&&!o.has(i.lemma)&&(o.add(i.lemma),s.push(i))}return s}function Ma(e,t){return e.adjectives.get(String(t??"").toLowerCase())??null}function $i(e,t){return e.properNames.get(String(t??"").toLowerCase())??null}function ku(e,t){let n=String(e??"");if(!n)return!1;if($i(t,n)||xu.test(n)||/^[a-z][\w]*(?:-[\w]+)+$/i.test(n)||/^[A-Z]/.test(n))return!0;let s=bn(t,n);return s?s.lemma.toLowerCase()!==n.toLowerCase():!0}function am(e,t=an()){let n=String(e??"").trim();if(!n)return null;let s=n.toLowerCase();if(sm[s])return{pos:"determiner",type:sm[s]};if(om[s])return{pos:"quantifier",type:om[s]};let o=La(s);if(o!=null)return{pos:"number",type:"cardinal",value:o};let r=$i(t,n);if(r)return{pos:"properName",type:"individual",canonical:r};let i=bn(t,s);if(i)return i.property?{pos:"noun",type:`${i.property}-property`,lemma:i.lemma,property:i.property}:{pos:"noun",type:"class",lemma:i.lemma};let a=Pa(t,s);if(a)return{pos:"verb",type:"objectProperty",lemma:a.lemma,predicate:Eu(a,t.ns),...a.prep?{prep:a.prep}:{}};let c=Ma(t,s);return c?{pos:"adjective",type:c.type,lemma:c.lemma}:null}var ux,sm,om,rm,im,GP,VP,KP,nm,xu,ts=L(()=>{ax();ux="tmct:",sm=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),om=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),rm=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),im=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),GP=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});VP=new Set(["data","object"]),KP=new Set(["subclass","data"]);nm=new Map;xu=/[./\\#:@]/});var iX,aX,cX,YP,lX,uX,dX,mx=L(()=>{us();Fe();iX=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),aX=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),cX=Object.freeze({Class:[e=>`which classes inherit from ${e}`,e=>`what does ${e} contain`,e=>`where is ${e} defined`],Module:[e=>`what does ${e} import`,e=>`which modules import ${e}`,e=>`where is ${e} defined`],Function:[e=>`what calls ${e}`,e=>`what does ${e} call`,e=>`where is ${e} defined`],Method:[e=>`which class contains ${e}`,e=>`what calls ${e}`,e=>`where is ${e} defined`],Attribute:[e=>`which class contains ${e}`,e=>`where is ${e} defined`],GlobalVariable:[e=>`where is ${e} defined`,e=>`where is ${e} mentioned`],Commit:[e=>`what did commit ${e} touch`,e=>`when did ${e} change`]}),YP=Object.freeze({import:"imports",imports:"imports",importing:"imports",imported:"imports",call:"calls",calls:"calls",calling:"calls",called:"calls",invoke:"calls",invokes:"calls",invoking:"calls",contain:"contains",contains:"contains",containing:"contains",containment:"contains",member:"contains",members:"contains",inherit:"inherits",inherits:"inherits",inheriting:"inherits",inheritance:"inherits",extend:"inherits",extends:"inherits",extending:"inherits",subclass:"inherits",subclasses:"inherits",subclassing:"inherits",test:"tests",tests:"tests",testing:"tests",tested:"tests",coverage:"tests",define:"defines",defines:"defines",defining:"defines",defined:"defines",definition:"defines",definitions:"defines",declaration:"defines",touch:"touches",touches:"touches",touching:"touches",touched:"touches",cochange:"cochange","co-change":"cochange","change-coupling":"cochange",coupled:"cochange",export:"reexports",exports:"reexports",exporting:"reexports",exported:"reexports",reexport:"reexports",reexports:"reexports",reexporting:"reexports","re-export":"reexports","re-exports":"reexports","re-exporting":"reexports",serve:"serves",serves:"serves",serving:"serves",served:"serves",denote:"denotes",denotes:"denotes",denoting:"denotes",denoted:"denotes"}),lX=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"],serves:["serves"],denotes:["denotes"]}),uX=Object.freeze({imports:{verb:"imports",edgeNoun:"import"},calls:{verb:"calls",edgeNoun:"call"},contains:{verb:"contains",edgeNoun:"containment"},inherits:{verb:"inherits from",edgeNoun:"inheritance"},tests:{verb:"tests",edgeNoun:"test"},defines:{verb:"defines",edgeNoun:"definition"},touches:{verb:"touches",edgeNoun:"touch"},cochange:{verb:"changes together with",edgeNoun:"change-coupling"},reexports:{verb:"re-exports",edgeNoun:"re-export"},serves:{verb:"serves",edgeNoun:"service"},denotes:{verb:"denotes",edgeNoun:"denotation"}}),dX=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});function wx(e){return!!e&&typeof e=="object"&&typeof e.s=="string"&&XP.test(e.s)&&typeof e.t=="string"&&e.t.length>0&&Number.isInteger(e.r)&&e.r>0}function _o(e){if(!e||typeof e!="object")return!1;for(let t of["term","title","text","summary","url"])if(typeof e[t]!="string"||!e[t])return!1;if(!Number.isInteger(e.revid)||e.revid<=0)return!1;for(let t of["isa","source","licence"])if(e[t]!==void 0&&(typeof e[t]!="string"||!e[t]))return!1;return!0}function Ru(e,t){let n=String(e??"").split(/(?<=[.!?])\s+/),s="";for(let o of n){let r=s?`${s} ${o}`:o;if(r.length>t)break;s=r}return s||String(e??"").slice(0,t)}function QP(e){let t=e,n;do n=t,t=t.replace(/\s*\([^()]*\)/g,"");while(t!==n);return t}function bx(e,t){let n=bn(t,e);return n?V(n.lemma):e}function yx(e,t){let n=QP(String(e??"")).match(JP);if(!n)return null;let s=!n[1],o=[];for(let u of n[2].trim().split(/\s+/))if(ZP.has(u)||(o.push(u),o.length>=6))break;let r=o;for(let u=r.indexOf("of");u>0;u=r.indexOf("of")){let d=r[u-1]?.split("-").pop(),p=d&&bx(d,t);if(p&&(tM.has(p)||nM.has(p))){r=r.slice(u+1);continue}r=r.slice(0,u);break}for(;r.length&&eM.has(r[0]);)r=r.slice(1);if(!r.length)return null;let i=r[r.length-1].split("-").pop();if(!i)return null;let a=bx(i,t);if(gx.has(i)||gx.has(a))return null;let c=bn(t,i);if(!c)return null;let l=V(c.lemma);return s&&(!/s$/.test(i)||V(i)===l)?null:l}var XP,ju,JP,ZP,gx,eM,tM,nM,br=L(()=>{Ve();ts();mx();XP=/^ref-[0-3][0-9a-f]$/;ju=400;JP=/^[A-Z][^.!?]*? (?:is|are) (?:(a|an|the) )?([a-z][a-z -]{1,60})/;ZP=new Set(["that","which","where","who","whose","whom","when","used","found","made","with","in","on","for","from","by","to","and","or","about","around","roughly","approximately"]),gx=new Set(["type","kind","sort","form","class","variety","group","part","piece","member","way","term","name","word","thing","example","family","genus","species","unit","series","set","list","number","amount","body","mass"]),eM=new Set(["a","an","the"]),tM=new Set(["type","kind","sort","form","class","variety","species","breed","genus","group","part","parts","piece","bunch","bit","name","set","way","unit","family","ability","color","series","mammal","practice","list","amount","mass","reworking","blockage","goddess","aura","development","consisting","announcement","messengers","subset","carrying","photograph","adding","use","science","songbird","symptom","accumulation","number","suborder","falling","management","evaluation","superorder","activity","interlacing","introduction"]),nM=new Set(["either","one","each","both","any"])});var wr,Fa=L(()=>{wr=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});function $x(e=process.env){return e?.TMCT_REFERENCE_PACK_DIR||ne(sM,"corpus","reference")}function Sx(e){try{return wr(Zs(e))}catch{return null}}function um(e){if(cm.has(e))return cm.get(e);let t=null,n=Sx(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return cm.set(e,t),t}function oM(e,t){let n=`${e}\0${t}`;if(lm.has(n))return lm.get(n);let s=null,o=Sx(ne(e,"shards",`${t}.jsonl.gz`));if(o){s=new Map;for(let r of o.toString("utf8").split(`
|
|
169
|
-
`))if(r.trim())try{let i=JSON.parse(r);_o(i)&&s.set(i.term,i)}catch{}}return lm.set(n,s),s}function dm(e,t){let n=um(e);if(!n)return null;let s=n[String(t??"")];return wx(s)?oM(e,s.s)?.get(s.t)??null:null}var rM,sM,cm,lm,fm=L(()=>{Ro();Fa();jo();Qe();br();rM={},sM=ne(Se(tn(rM.url)),"..","..","..");cm=new Map,lm=new Map});function aM(e){if(!e||typeof e!="object")return!1;for(let t of["subject","predicate","object","provenance"])if(typeof e[t]!="string"||!e[t])return!1;return iM.includes(e.predicate)}function vx(e){return _o(e)?e.facts===void 0?!0:Array.isArray(e.facts)&&e.facts.length>0&&e.facts.every(aM):!1}function yr(e,t){return`research:${e}:${V(t).replace(/ /g,"_")}`}function Si(e){if(!e||typeof e.name!="string"||!e.name||typeof e.create!="function")throw new Error("registerResearchSource: expected { name, create(options) }");cM.set(e.name,{name:e.name,create:e.create})}var iM,cM,jX,RX,$r=L(()=>{Ve();br();iM=Object.freeze(["rdf:type","rdfs:subClassOf","mgx:partOf","mgx:hasA","mgx:usedFor","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:madeOf","mgx:createdBy","mgx:locatedNear","mgx:hasProperty"]);cM=new Map;jX=Object.freeze(["wikipedia","wikidata","simple-wikipedia","simple-wikipedia-pack","wiktionary","dbpedia"]),RX=Object.freeze({wikipedia:"simple-wikipedia",wikidata:"wikidata","simple-wikipedia":"simple-wikipedia","simple-wikipedia-pack":"simple-wikipedia-pack",wiktionary:"wiktionary",dbpedia:"dbpedia-lookup"})});function Ex(e){let t=Number(e);return Number.isFinite(t)?t===408||t===429||t>=500:!1}var TX,_u=L(()=>{TX=Object.freeze({failureThreshold:5,windowMs:6e4,cooldownMs:6e4})});function Ba({fetchImpl:e,timeoutMs:t=vi,minIntervalMs:n=nn,retryAfterFloorMs:s=lM,maxFetchesPerTurn:o=uM,userAgent:r,waitForSlot:i=!1,validators:a=null}={}){let c=e??((...x)=>globalThis.fetch(...x)),l=new Map,u=0,d=0,p=!1,f=0,h=0,m=0,b=!1,g=!1,w=()=>{if(!r)return null;let x={"Api-User-Agent":r};return typeof document>"u"&&(x["User-Agent"]=r),x};function y(x){let j=Number(x)*1e3;d=Date.now()+Math.max(j||0,s)}function S(x){let j=a?.get(x);if(!j)return null;let M={};return j.etag&&(M["If-None-Match"]=j.etag),j.lastModified&&(M["If-Modified-Since"]=j.lastModified),Object.keys(M).length?M:null}function T(x,j){if(!a)return;let M=j.headers?.get?.("etag")??"",D=j.headers?.get?.("last-modified")??"";if(!M&&!D)return;let H=a.get(x)??{};a.set(x,{etag:M||H.etag||"",lastModified:D||H.lastModified||""})}async function v(x,{asJson:j}){if(b&&m>=o)return g=!0,null;f+=1,m+=1;let M=typeof AbortController=="function"?new AbortController:null,D=M?setTimeout(()=>M.abort(),t):null;try{let H={};M&&(H.signal=M.signal);let Y={...w()??{},...S(x)??{}};Object.keys(Y).length&&(H.headers=Y);let Z;try{Z=await c(x,H)}catch{return h+=1,null}if(Z.status===429)return y(Z.headers?.get?.("retry-after")),h+=1,null;if(Z.status===304)return a?{notModified:!0}:null;if(!Z.ok)return Ex(Z.status)&&(h+=1),null;if(T(x,Z),j){let P=await Z.json();return P?.error?.code==="maxlag"?(y(Z.headers?.get?.("retry-after")),h+=1,null):P}return await Z.text()}catch{return M?.signal?.aborted&&(h+=1),null}finally{D!==null&&clearTimeout(D)}}async function E(x){return v(x,{asJson:!0})}async function I(x){return v(x,{asJson:!1})}let k=()=>Math.max(d,u+n);async function R(){for(;;){let x=Date.now();if(!p&&x>=k())return u=x,p=!0,!0;if(!i)return!1;await new Promise(j=>setTimeout(j,Math.max(k()-x,25)))}}async function $(x,j,{remember:M=!0}={}){if(l.has(x))return l.get(x);if(!await R())return null;let D=null;try{D=await j()}catch{D=null}finally{p=!1}return M&&l.set(x,D),D}function _(){b=!0,m=0,g=!1}function O(){return{fetches:f,systemicFailures:h,fetchesThisTurn:m,budgetExhausted:g}}return{fetchJson:E,fetchText:I,cachedFetch:$,beginTurn:_,stats:O}}var vi,nn,lM,uM,Da,za=L(()=>{_u();vi=4e3,nn=2e3,lM=5e3,uM=6,Da=5});function bM({fetchImpl:e,origin:t=dM,timeoutMs:n=vi,minIntervalMs:s=nn,lexicon:o=null,userAgent:r=gM,waitForSlot:i=!1,sourceName:a=pM,label:c=hM}={}){let l=Ba({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:r,waitForSlot:i});function u(f,h){let m=Array.isArray(h?.[1])?h[1]:[];for(let b of m){let g=V(b);if(g===f||g.startsWith(f))return String(b)}return null}async function d(f,h){let m=await l.fetchJson(`${t}/api/rest_v1/page/summary/${encodeURIComponent(h.replace(/ /g,"_"))}`);if(!m)return null;let b=String(m.extract??""),g=Number(m.revision),w={term:f,title:String(m.title??h),text:b,summary:Ru(b,ju),url:String(m.content_urls?.desktop?.page??`${t}/wiki/${encodeURIComponent(h.replace(/ /g,"_"))}`),revid:g},y=o;if(!y)try{y=an()}catch{y=null}let S=y?yx(b,y):null;return S&&(w.isa=S),_o(w)?w:null}async function p(f){let h=await l.fetchJson(`${t}/w/api.php?action=opensearch&format=json&origin=*&maxlag=${Da}&search=${encodeURIComponent(f)}&limit=3`),m=h?u(f,h):null;return m?d(f,m):null}return{name:a,origin:t,label:c,beginTurn(){l.beginTurn()},stats(){return l.stats()},provenanceTag(f){return yr(a,f)},async lookup(f){let h=String(f??"");return h?l.cachedFetch(h,()=>p(h)):null},async pageByTitle(f){let h=String(f??"").trim();return h?l.cachedFetch(`title\0${V(h)}`,()=>d(V(h),h)):null},async linkedTitles(f,{limit:h=25}={}){let m=String(f??"").trim();if(!m)return null;let b=await l.cachedFetch(`links\0${V(m)}`,async()=>{let w=(await l.fetchJson(`${t}/w/api.php?action=parse&format=json&formatversion=2&origin=*&maxlag=${Da}&prop=links&redirects=1&page=${encodeURIComponent(m)}§ion=0`))?.parse?.links;if(!Array.isArray(w))return null;let y=new Set,S=[];for(let T of w){if(!T||T.ns!==0||T.exists===!1)continue;let v=String(T.title??T["*"]??"").trim(),E=V(v);!v||!E||y.has(E)||(y.add(E),S.push(v))}return S});return Array.isArray(b)?b.slice(0,Math.max(0,h)):null}}}function wM(e={}){return bM({origin:fM,sourceName:kx,label:mM,waitForSlot:!0,...e})}var dM,fM,pM,kx,hM,mM,gM,jx=L(()=>{Ve();ts();br();$r();za();dM="https://en.wikipedia.org",fM="https://simple.wikipedia.org",pM="wikipedia-live",kx="simple-wikipedia",hM="Wikipedia",mM="Simple English Wikipedia",gM="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)";Si({name:kx,create:wM})});function RM(e,t){let n=Array.isArray(t?.search)?t.search:[],s=[],o=[];for(let r of n){let i=String(r?.id??"");if(!Tx.test(i))continue;let a=V(r?.label??"");a===e?s.push(i):a.startsWith(e)&&o.push(i)}return[...s,...o]}function _M(e){let t=[];for(let[n,s]of Object.entries(vM)){let o=e?.claims?.[n];if(!Array.isArray(o))continue;let r=0;for(let i of o){if(t.length>=jM)return t;if(r>=kM)break;let a=i?.mainsnak;if(a?.snaktype!=="value")continue;let c=String(a?.datavalue?.value?.id??"");Tx.test(c)&&(t.push({property:n,predicate:s,id:c}),r+=1)}}return t}function TM(e,t,n){for(let s of EM)for(let o of e){if(o.property!==s)continue;let r=t.get(o.id);if(r&&r!==n)return r}return null}function AM({fetchImpl:e,origin:t=yM,timeoutMs:n=vi,minIntervalMs:s=nn,userAgent:o=SM,waitForSlot:r=!1,sourceName:i=_x}={}){let a=Ba({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:o,waitForSlot:r}),c=d=>`${t}/w/api.php?${new URLSearchParams({format:"json",origin:"*",maxlag:String(Da),...d})}`;async function l(d){let p=new Map;if(!d.length)return p;let f=await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels",ids:d.join("|")}));for(let[h,m]of Object.entries(f?.entities??{})){let b=V(m?.labels?.en?.value??"");b&&p.set(h,b)}return p}async function u(d){let p=await a.fetchJson(c({action:"wbsearchentities",language:"en",uselang:"en",type:"item",limit:"5",search:d})),f=p?RM(d,p):[];for(let h of f){let b=(await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels|descriptions|claims|info",ids:h})))?.entities?.[h];if(!b)continue;let g=_M(b),w=await l(g.map(k=>k.id)),y=TM(g,w,d);if(y&&xM.has(y))continue;let S=yr(i,d),T=[],v=new Set;for(let k of g){let R=w.get(k.id);!R||R===d||v.has(`${k.predicate}\0${R}`)||(v.add(`${k.predicate}\0${R}`),T.push({subject:d,predicate:k.predicate,object:R,provenance:S}))}let E=String(b.descriptions?.en?.value??""),I={term:d,title:String(b.labels?.en?.value??""),text:E,summary:Ru(E,ju),url:`${t}/wiki/${h}`,revid:Number(b.lastrevid),source:Rx,licence:$M};if(y&&(I.isa=y),T.length&&(I.facts=T),vx(I))return I}return null}return{name:i,origin:t,label:Rx,beginTurn(){a.beginTurn()},stats(){return a.stats()},provenanceTag(d){return yr(i,d)},async lookup(d){let p=V(d??"");return p?a.cachedFetch(p,()=>u(p)):null}}}function IM(e={}){return AM({waitForSlot:!0,...e})}var yM,_x,Rx,$M,SM,vM,EM,xM,kM,jM,Tx,Ax=L(()=>{Ve();br();$r();za();yM="https://www.wikidata.org",_x="wikidata",Rx="Wikidata",$M="CC0 1.0",SM="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)",vM=Object.freeze({P31:"rdf:type",P279:"rdfs:subClassOf",P361:"mgx:partOf",P527:"mgx:hasA",P186:"mgx:madeOf",P366:"mgx:usedFor",P276:"mgx:atLocation",P1542:"mgx:causes",P170:"mgx:createdBy",P2670:"mgx:hasA"}),EM=["P279","P31"],xM=new Set(["scholarly article","album","song","single","film","television series","television series episode","band","musical group","video game","book","novel"]),kM=3,jM=12,Tx=/^Q[1-9][0-9]*$/;Si({name:_x,create:IM})});function LM(e,t){let n=bn(t,e);return n?V(n.lemma):V(e)}function MM(e,t,n,s,o,r){if(!s||r<=0)return[];let i=new Set([n]),a=[];for(let c of String(t??"").matchAll(CM)){if(a.length>=r)break;let l=LM(c[0],o);!l||!ib(l)||i.has(l)||!s[l]||(i.add(l),dm(e,l)&&a.push(PM(l)))}return a}function FM({dir:e,lexicon:t=null,sourceName:n=Ix}={}){let s=e||$x(),o=t;function r(){if(o)return o;try{o=an()}catch{o=null}return o}function i(a){let c=V(a??"");if(!c)return null;let l=dm(s,c);if(!l)return null;let u={...l,term:c};return _o(u)?u:null}return{name:n,origin:OM,provenanceTag(a){return yr(n,a)},async lookup(a){return i(a)},async pageByTitle(a){return i(a)},async linkedTitles(a,{limit:c=NM}={}){let l=i(a);if(!l)return null;let u=um(s);return MM(s,l.text,l.term,u,r(),Math.max(0,c))}}}var OM,Ix,CM,NM,PM,Ox=L(()=>{Ve();ts();Yn();br();fm();$r();OM="https://simple.wikipedia.org",Ix="simple-wikipedia-pack",CM=/[A-Za-z][A-Za-z'-]*/g,NM=25;PM=e=>e.charAt(0).toUpperCase()+e.slice(1);Si({name:Ix,create:FM})});var DM,BM,s4,pm=L(()=>{Ve();ts();Hr();$r();DM=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3,source:"wikipedia"}),BM=["this","is","about","the"],s4=BM.length});var Cx=L(()=>{zt();Qe();qp();Ve();Ue()});var Nx=L(()=>{Ve()});var Tu=L(()=>{Ln();Gr()});var Lx=L(()=>{Ve()});var zM,Px,Mx,Fx,T4,Dx=L(()=>{Lx();za();zM=250,Px=Object.freeze([{id:"wikimedia-featured",name:"Wikimedia featured feed",kind:"contemporary",format:"wikimedia-feed",url:"https://api.wikimedia.org/feed/v1/wikipedia/en/featured",homepage:"https://www.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"hacker-news",name:"Hacker News",kind:"contemporary",format:"hn",url:"https://hacker-news.firebaseio.com/v0",homepage:"https://news.ycombinator.com/",licence:"user-submitted, discussion linked",browserVerified:"2026-08-08",minIntervalMs:zM,enabledByDefault:!0},{id:"usgs-quakes",name:"USGS earthquakes",kind:"contemporary",format:"usgs",url:"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson",homepage:"https://earthquake.usgs.gov/",licence:"US public domain",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"nyt-world",name:"NYT World News",kind:"contemporary",format:"rss",url:"https://rss.nytimes.com/services/xml/rss/nyt/World.xml",homepage:"https://www.nytimes.com/section/world",licence:"personal use with attribution",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"wikinews-published",name:"Wikinews",kind:"contemporary",format:"mediawiki",url:"https://en.wikinews.org/w/api.php",homepage:"https://en.wikinews.org/",licence:"CC BY 2.5",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"simple-wikipedia",name:"Simple English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://simple.wikipedia.org",homepage:"https://simple.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"wikidata",name:"Wikidata",kind:"kb",format:"wikidata",url:"https://www.wikidata.org",homepage:"https://www.wikidata.org/",licence:"CC0 1.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"wiktionary",name:"Wiktionary",kind:"kb",format:"wiktionary",url:"https://en.wiktionary.org",homepage:"https://en.wiktionary.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"dbpedia-lookup",name:"DBpedia Lookup",kind:"kb",format:"dbpedia-lookup",url:"https://lookup.dbpedia.org",homepage:"https://www.dbpedia.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!1},{id:"english-wikipedia",name:"English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://en.wikipedia.org",homepage:"https://en.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!1}]),Mx=Object.freeze(["wikimedia-featured","hacker-news","usgs-quakes","nyt-world","wikinews-published"]),Fx=Object.freeze(["simple-wikipedia","wikidata","wiktionary"]),T4=new Map(Px.map(e=>[e.id,e]))});var C4,N4,Bx=L(()=>{Ve();di();C4=Object.freeze(["wordnet-complete"]),N4=Object.freeze({"wordnet-complete":Object.freeze({license:"CC-BY-4.0",notice:"corpus/wordnet/LICENSE-NOTICE"})})});var _t,P4,M4,F4,D4,B4,z4,U4,W4,G4,V4,K4,H4,q4,Y4,X4,J4,Q4,Z4,e5,hm=L(()=>{_t=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},P4=_t("createRequire"),M4=_t("readFileSync"),F4=_t("access"),D4=_t("readFile"),B4=_t("writeFile"),z4=_t("appendFile"),U4=_t("mkdir"),W4=_t("mkdtemp"),G4=_t("rename"),V4=_t("unlink"),K4=_t("rm"),H4=_t("stat"),q4=_t("copyFile"),Y4=_t("readdir"),X4=_t("createReadStream"),J4=_t("createWriteStream"),Q4=_t("randomBytes"),Z4=_t("spawnSync"),e5=_t("createInterface")});var zx=L(()=>{});var VM,S5,Ux,v5,E5,Wx=L(()=>{zt();hm();Qe();Ua();$u();tm();Ue();sn();zx();Nn();Ve();Yn();ll();vu();ts();VM=new Set(["VERB","AUX","ADP","SCONJ","CCONJ"]),S5=new Set([...VM,"PRON"]),Ux="said|says|told|reported|reports|announced|announces|stated|states|confirmed|confirms|added|wrote|writes",v5=new RegExp(`,\\s*["'\u201C\u201D\u2018\u2019]?\\s*([\\w.'\u2019-]+(?:\\s+[\\w.'\u2019-]+){0,3})\\s+(?:${Ux})\\s*[.!?]?\\s*$`,"i"),E5=new RegExp(`^\\s*([\\w.'\u2019-]+(?:\\s+[\\w.'\u2019-]+){0,4})\\s+(?:has\\s+|had\\s+|have\\s+)?(?:${Ux})\\s+(?:that\\s+)?(\\S.*)$`,"i")});var l8,u8,d8,f8,gm=L(()=>{Ve();xp();Nx();Ft();ts();Tu();Nn();Dx();za();$r();Bx();_u();Wx();l8=Object.freeze({sources:Mx,kbSources:Fx,extraSources:Object.freeze([]),pollMinutes:15,enrichMinutes:10,enrichTermsPerCycle:3,negativeCacheTtlHours:24,syllogismsPerIngest:12,itemCap:30,newsFactCap:4e3,feedTop:3,windowHours:48,minIntervalMs:0}),u8=6*36e5,d8=Object.freeze({"simple-wikipedia":"simple-wikipedia",wikidata:"wikidata",wiktionary:"wiktionary","dbpedia-lookup":"dbpedia"}),f8=Os.teach});function YM(e){if(!e||typeof e!="object")return!1;for(let t of["subject","predicate","object"])if(typeof e[t]!="string"||!e[t])return!1;return!(e.weight!==void 0&&!(typeof e.weight=="number"&&Number.isFinite(e.weight)&&e.weight>0))}function bm(e){if(!e||typeof e!="object"||typeof e.term!="string"||!e.term||!Array.isArray(e.facts)||e.facts.length===0)return!1;for(let t of e.facts)if(!YM(t)||V(t.subject)!==e.term&&V(t.object)!==e.term)return!1;return!0}var Gx,Au=L(()=>{Ve();Gx=32});var XM,E8,Vx=L(()=>{Ro();Fa();jo();Qe();Au();Ve();XM={},E8=ne(Se(tn(XM.url)),"..","..","..")});var k8,j8,R8,Kx=L(()=>{k8=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),j8=Object.freeze({propositionalQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question about whether a proposition holds ('does X import Y?')"}),checkQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question whose asker already expects the answer yes ('..., right?')"}),setQuestion:Object.freeze({dimension:"task",gloss:"a wh-question asking for the members of a set ('what does X import?')"}),choiceQuestion:Object.freeze({dimension:"task",gloss:"a question asking which of the listed alternatives holds ('is X a module or a class?')"}),inform:Object.freeze({dimension:"task",gloss:"a declarative telling the addressee something (a teach turn; also tmct explaining its own function)"}),answer:Object.freeze({dimension:"task",gloss:"an inform that discharges a question just asked (an answer grounded in the graph)"}),confirm:Object.freeze({dimension:"task",gloss:"an answer 'yes' to a check question"}),disconfirm:Object.freeze({dimension:"task",gloss:"an answer 'no' to a check question"}),agreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be true"}),disagreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be false"}),correction:Object.freeze({dimension:"task",gloss:"a disagreement that also supplies the replacement ('no, I meant Y')"}),request:Object.freeze({dimension:"task",gloss:"asks the addressee to perform an action ('solve it' \u2014 a goal turn)"}),instruct:Object.freeze({dimension:"task",gloss:"a request the addressee is expected to carry out without negotiation (a bare imperative)"}),suggestion:Object.freeze({dimension:"task",gloss:"puts an action forward as advisable without claiming authority over the addressee"}),offer:Object.freeze({dimension:"task",gloss:"commits the speaker to an action, conditional on the addressee wanting it"}),autoPositive:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn succeeded (an acknowledgement)"}),autoNegative:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn failed \u2014 tmct's honest miss"}),initialGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"opens an exchange of greetings ('hi')"}),returnGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"answers a greeting with a greeting"}),thanking:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses gratitude for something the addressee did"}),apology:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses regret for something the speaker did"})}),R8=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion","ask-choice":"choiceQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});var C8,QM,ZM,Hx,N8,L8,P8,M8,F8,qx=L(()=>{Ln();Tu();C8=Object.freeze({inline:"inline",enumerated:"enumerated"}),QM=new Set(["in","on","at","for","with","from","of","into","onto"]),ZM=new Set(["you","i","it","he","she","they","we","there","someone","something","one","him","her","them","who","himself","herself","itself","themselves","myself","yourself"]),Hx=new Set([...QM,"to","behind","before","near","next","along","alongside","under","over","between","among","during","without","about","by","as","like","that","if","when","while","being","because","since","until","so","and","but","or","immediately","likely","usually","normally","currently","is","are","was","were","do","does","did","has","have","had","will","would","could","should","might","must","can"]),N8=new Set([...Hx,"be","been"]),L8=new RegExp("^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:(?:what|which)\\s+[a-z][\\w'-]*|where|when|why|how|who)\\s+(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\s+(.+?)[?.!]*$","i"),P8=new RegExp("^(.*?)\\b(?:what|who|which|where|when|why|how)\\s+(?:i|you|he|she|it|we|they)?\\s*(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\b","i"),M8=Object.freeze([{family:"AtLocation",predicates:Object.freeze(["mgx:atLocation","mgx:locatedNear"]),cue:/\b(where|located|location)\b/i},{family:"IsA/Synonym/HasProperty",predicates:Object.freeze(["rdfs:subClassOf","mgx:synonym","mgx:hasProperty"]),cue:/\b(kind of|type of|another word for|same as|synonym)\b/i},{family:"HasPrerequisite/HasSubevent",predicates:Object.freeze(["mgx:hasPrerequisite","mgx:hasSubevent","mgx:hasFirstSubevent","mgx:hasLastSubevent"]),cue:/\b(before|after|first|next|then|once you|in order to)\b/i},{family:"Desires/MotivatedByGoal",predicates:Object.freeze(["mgx:desires","mgx:motivatedByGoal","mgx:causesDesire"]),cue:/\b(want\w*|desire\w*|motivat\w*)\b/i},{family:"Causes",predicates:Object.freeze(["mgx:causes","mgx:causesDesire"]),cue:/\b(cause\w*|result(?:s|ed)? in|leads? to|led to)\b/i},{family:"PartOf/HasA/MadeOf",predicates:Object.freeze(["mgx:partOf","mgx:hasA","mgx:madeOf"]),cue:/\b(part of|made of|has a|have a)\b/i},{family:"CapableOf",predicates:Object.freeze(["mgx:capableOf","mgxneg:capableOf"]),cue:/\b(capable of|able to)\b/i},{family:"UsedFor",predicates:Object.freeze(["mgx:usedFor"]),cue:/\b(used for|used to|use for)\b/i}]),F8=new Set([...ZM,...Hx,"a","an","the","some","any","few","many","several","more","most","my","your","his","its","our","their","what","which","where","when","why","how","find","found","put","get","keep","store","place","buy","locate","hide","wear","carry","use","take","open","cross","need","want"])});function Wa(e){let t=new Map;for(let[n,s]of e||[])!n||!s||n===s||(t.has(n)||t.set(n,new Set),t.get(n).add(s));return t}function Iu(e,t,{cap:n=6,stopAt:s=null,toward:o=null}={}){let r=[e],i=new Set([e]),a=e;for(;r.length<n&&!(o&&a===o);){let c=[...t.get(a)||[]].filter(d=>!i.has(d)).sort(Yx);if(!c.length)break;let l=o?c.filter(d=>d===o||ym(d,t).has(o)):[];a=(l.length?l:c)[0];let u=s&&s.has(a);if(u&&r.length>1||(i.add(a),r.push(a),u))break}return r}function ym(e,t,{cap:n=64}={}){let s=new Set([e]),o=[e];for(;o.length&&s.size<n;){let r=o.shift();for(let i of t.get(r)||[])s.has(i)||(s.add(i),o.push(i))}return s}function $m(e,t,n,s){if(n.has(e))return n.get(e);if(s.has(e))return 1;s.add(e);let o=t.get(e),r=1;if(o&&o.size){let i=0;for(let a of o)i=Math.max(i,$m(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function eF(e){let t=new Map;for(let[n,s]of e||[])!n||!s||(t.has(n)||t.set(n,new Set),t.get(n).add(s),t.has(s)||t.set(s,new Set),t.get(s).add(n));return t}function tF(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let c=ym(e,n),l=ym(t,n);if(c.has(t)||l.has(e))return{distinct:!1,reason:"subsumes",lcs:c.has(t)?t:e};if(s.size)for(let m of c){let b=s.get(m);if(b){for(let g of l)if(b.has(g))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...c].filter(m=>l.has(m));if(!u.length)return c.size<2||l.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=m=>$m(m,n,o,new Set),p=u[0],f=d(p);for(let m of u){let b=d(m);(b>f||b===f&&m<p)&&(p=m,f=b)}if(f<=i)return{distinct:!0,reason:"root-subsumer",lcs:p};if(a){let m=a.get(p);return typeof m=="number"&&m<r?{distinct:!0,reason:"low-ic",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}return 2*f/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}function Ou(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],c=n||Wa(t),l=eF(s),u=new Map,d=new Map(a.map(w=>[w,w])),p=w=>{for(;d.get(w)!==w;)d.set(w,d.get(d.get(w))),w=d.get(w);return w},f=(w,y)=>{let S=p(w),T=p(y);S!==T&&d.set(S<T?T:S,S<T?S:T)},h=[];for(let w=0;w<a.length;w+=1)for(let y=w+1;y<a.length;y+=1){let S=tF(a[w],a[y],c,l,u,{threshold:o,rootDepth:r,icByTerm:i});h.push({a:a[w],b:a[y],...S}),S.distinct||f(a[w],a[y])}let m=new Map;for(let w of a){let y=p(w);m.has(y)||m.set(y,[]),m.get(y).push(w)}let b=w=>$m(w,c,u,new Set),g=[...m.values()].map(w=>{let y=[...w].sort(),S=y[0],T=b(S);for(let v of y){let E=b(v);E>T&&(T=E,S=v)}return{objects:y,label:S}}).sort((w,y)=>Yx(w.label,y.label));return{split:g.length>1,clusters:g,pairs:h}}var Yx,Cu=L(()=>{Ft();la();Yx=(e,t)=>e<t?-1:e>t?1:0});var Xx=L(()=>{});function Jx(e,{pending:t=null}={}){return t?!0:String(e??"").split(`
|
|
170
|
-
`).filter(n=>n.trim()!=="").length>1}var Nu,H8,Qx=L(()=>{Xx();Nu=Object.freeze({MEMORY_COUNT:"memory-count",MEMORY_CLASS:"memory-class",LETTER_WORDS:"letter-words",COLLECTION_CONTENTS:"collection-contents",TAUGHT_CLASS_COUNT:"taught-class-count",MEMBERSHIP_LIST:"membership-list",MEMBERSHIP_EXAMPLE:"membership-example",SKOS_NEIGHBOURHOOD:"skos-neighbourhood",WHAT_ELSE:"what-else",FACT_SET:"fact-set",FACT_READBACK:"fact-readback"}),H8=Object.freeze(Object.values(Nu))});function Sm(e){return typeof e=="string"&&nF.test(e)}function Zx(e){return!!e&&typeof e=="object"&&Sr(e.s)}function vm(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Sm(e.world)&&Sr(e.subject)&&Sr(e.predicate)&&Sr(e.object)}function Em(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Sm(e.world)||!Sr(e.name)||!oF.has(e.ruleKind)||!e.slots||typeof e.slots!="object"||Array.isArray(e.slots))return!1;let t=Object.values(e.slots);return t.length>0&&t.every(Sr)}function xm(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Sm(e.world)&&Sr(e.opening)}function ek(e){return vm(e)||Em(e)||xm(e)}function tk(e){let t=e||[],n=t.filter(l=>l.predicate===rF).sort((l,u)=>iF(`${l.subject}\0${l.object}`,`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(l=>l.predicate==="rdf:type").map(l=>l.subject)),o=new Map;for(let l of t)l.predicate==="mgx:located-in"&&o.set(l.subject,l.object);let r=(l,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===l&&o.get(d.subject)===u),i=t.find(l=>typeof l.world=="string"&&l.kind==="fact"),a=(l,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:l,predicate:u,object:d}),c=[];for(let l of n){let u=l.subject,d=l.object;if(r(d,u))continue;let p=d,f=1;for(;s.has(p);)f+=1,p=`${d}-${f}`;s.add(p),c.push(a(p,"rdf:type",d)),c.push(a(p,"rdf:type","portable")),c.push(a(p,"mgx:located-in",u))}return c.length?[...t,...c]:t}var nF,sF,oF,Sr,rF,iF,vr=L(()=>{nF=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,sF=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),oF=new Set(sF),Sr=e=>typeof e=="string"&&e.trim()!=="";rF="mgx:default-contains",iF=(e,t)=>e<t?-1:e>t?1:0});var aF,cF,X8,Ga=L(()=>{aF=Object.freeze(["mgx:consumes","mgx:display-name","mgx:evades","mgx:guards","mgx:hasMass","mgx:is-predator","mgx:mass-drain-per-turn","mgx:model","mgx:pursues","mgx:vision-radius"]),cF=Object.freeze(new Set(["mgx:consumes","mgx:evades","mgx:guards","mgx:pursues"])),X8=Object.freeze(["mgx:consumes","mgx:evades","mgx:pursues"])});var Ei=L(()=>{});var lF,uF,dF,fF,pF,hF,mF,gF,bF,wF,yF,$F,SF,vF,EF,xF,kF,jF,RF,t6,_F,nk,n6,s6,sk=L(()=>{ts();Gr();lF="subClassOf",uF="typeAssertion",dF="relation",fF="someValuesFrom",pF="cardinality",hF="disjointWith",mF="possessive",gF="adjective",bF="capability",wF="union",yF="complement",$F="negativeType",SF="enumeration",vF="differentFrom",EF="bareExistential",xF="transitiveRole",kF="inverseRole",jF="universal",RF="subPropertyOf",t6=Object.freeze([lF,uF,dF,fF,pF,hF,mF,gF,bF,wF,yF,$F,SF,vF,EF,xF,kF,jF,RF]),_F=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),nk=new Map([["pick up","take"],["pick","take"],["grab","take"],["put down","drop"],["set down","drop"],["leave","drop"],["talk to","talk"],["speak to","talk"],["speak with","talk"],["talk","talk"],["speak","talk"],["chat with","talk"],["converse with","talk"],["look at","examine"],["examine","examine"],["inspect","examine"],["have a look at","examine"],["take a look at","examine"],["check out","examine"],["shut","close"]]),n6=Math.max(...[...nk.keys()].map(e=>e.split(" ").length)),s6=[...new Set([..._F,...[...nk.keys()].map(e=>e.split(" ")[0])])]});var Er=L(()=>{});var km=L(()=>{Fe();us();Er()});function Ht({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:To.Capability,name:e,label:t,question:n,readOnly:!0,parameters:Object.freeze(s),preconditions:Object.freeze(o),effects:Object.freeze({add:Object.freeze(r),del:Object.freeze(i)})})}var TF,To,je,AF,xr,bt,cn,wn,IF,ok,Kt,OF,CF,rk,u6,d6,f6,xi=L(()=>{TF=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),To=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),je=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),AF=Object.freeze([je.MemoryTerm]),xr=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),bt=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:To.Parameter,name:e,kind:t,arg:n,required:s,note:o}),cn=()=>Object.freeze({type:To.Precondition,pred:xr.graphLoaded}),wn=(e,t)=>Object.freeze({type:To.Precondition,pred:xr.resolves,param:e,as:t}),IF=e=>Object.freeze({type:To.Precondition,pred:xr.anyPresent,params:Object.freeze([...e])}),ok=()=>Object.freeze({type:To.Precondition,pred:xr.memoryFacts}),Kt=(e,t=null)=>Object.freeze({type:To.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});OF=Object.freeze([Ht({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[bt("query",je.Query,{required:!1,note:"required unless a kind filter is given"}),bt("kind",je.Kind,{required:!1}),bt("name",je.Query,{required:!1}),bt("decorator",je.Query,{required:!1})],preconditions:[cn(),IF(["query","kind"])],add:[Kt("matches","query")]}),Ht({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("description","symbol")]}),Ht({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("signature","symbol")]}),Ht({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[bt("module",je.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[cn(),wn("module",je.Symbol)],add:[Kt("impact","module")]}),Ht({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[bt("class",je.Class,{arg:"class"})],preconditions:[cn(),wn("class",je.Class)],add:[Kt("members","class")]}),Ht({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[bt("class",je.Class,{arg:"class"})],preconditions:[cn(),wn("class",je.Class)],add:[Kt("subclasses","class")]}),Ht({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[bt("module",je.Module)],preconditions:[cn(),wn("module",je.Module)],add:[Kt("exports","module")]}),Ht({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("callers","symbol")]}),Ht({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("callees","symbol")]}),Ht({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("calls","symbol")]}),Ht({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("tests","symbol")]}),Ht({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[cn()],add:[Kt("untested",null)]}),Ht({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("history","symbol")]}),Ht({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("cochanges","symbol")]}),Ht({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[bt("package",je.Package,{required:!1})],preconditions:[cn()],add:[Kt("architecture","package")]}),Ht({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[bt("term",je.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[ok(),wn("term",je.MemoryTerm)],add:[Kt("related","term")]}),Ht({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[bt("class",je.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),bt("expression",je.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),bt("size",je.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[ok(),wn("class",je.MemoryTerm)],add:[Kt("sprite","class")]})]),CF=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),rk=OF,u6=CF(rk),d6=Object.freeze({tmct_context:"unbounded edit-context bundle (multi-file); needs a size/budget precondition",tmct_context_more:"unbounded context continuation; same as tmct_context",tmct_snippet:"raw source-file read (reads the filesystem); needs a file-read + span precondition",tmct_ask:"the plain-English question entry point itself \u2014 calls ask.mjs directly and bypasses the capability planner; not one of the planner's operators",tmct_export:"reads the memory store's whole fact set with no discriminating param and no resolver goal frame; needs NL-reachability wiring before it can join",tmct_ingest:"writes into the memory store (grounds facts); capability() only models read-only operators, so a write path needs its own precondition/effect design first",tmct_file_history:"a module-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_method_history:"a method-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_class_history:"a class-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet"}),f6=Object.freeze({prefixes:TF,vocab:To,kinds:je,precond:xr,get capabilities(){return rk}})});var jm=L(()=>{xi()});var Lu=L(()=>{Nn()});var Rm=L(()=>{xi()});function FF(e){let t={};for(let n of String(e).toLowerCase().match(/[a-z]+/g)||[])!t.expression&&Object.hasOwn(co,n)&&(t.expression=n),!t.size&&Oa([{predicate:MF,object:n}])!==1&&(t.size=n);return t}var N6,L6,P6,M6,MF,F6,_m=L(()=>{us();as();du();Ve();Fe();uc();Wh();xi();Rm();N6=new RegExp(`\\b(?:${Object.keys(rs).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s+")).join("|")})\\b`,"i"),L6=Object.freeze({"reverse:calls":{topic:"callers",arg:"symbol"},"forward:calls":{topic:"callees",arg:"symbol"},"reverse:tests":{topic:"tests",arg:"symbol"},"forward:tests":{topic:"tests",arg:"symbol"},"reverse:inherits":{topic:"subclasses",arg:"class"},"forward:reexports":{topic:"exports",arg:"module"},"forward:contains":{topic:"members",arg:"class"},"when:touches":{topic:"history",arg:"symbol"},"forward:cochange":{topic:"cochanges",arg:"symbol"},"reverse:cochange":{topic:"cochanges",arg:"symbol"}}),P6=Object.freeze({imports:"no importer/imports query tool in the registry (there is no tmct_imports); refusing beats mis-routing to calls",uses:"a query-side UNION (imports+calls+callsSymbol) with no single capability; a router that must emit ONE call cannot honour it \u2014 refuse",defines:"Module->symbol `defines` has no dedicated capability (tmct_members is Class-scoped `contains`); refuse rather than answer a different grain",serves:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool",denotes:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool"}),M6=Object.freeze({}),MF="mgx:hasProperty";F6=Object.freeze([{re:/\buntested\b|\bwithout\s+(?:a\s+)?tests?\b|\bhas\s+no\s+tests?\b|\bneeds?\s+(?:a\s+)?tests?\b/i,topic:"untested",noArg:!0,skipIfSuperlative:!0},{re:/\bblast\s*radius\b|\bimpacts?\b|\bimpacted\b|what\s+(?:a\s+)?change.*(?:reach|affect|touch)|what\s+(?:depends?\s+on|dependents?)\b/i,topic:"impact",arg:"module"},{re:/\bcall[\s-]*edges?\b|\bcall[\s-]*graph\b|\boutgoing\s+calls?\b|\bcall[\s-]*sites?\s+(?:of|in|out|from)\b/i,topic:"calls",arg:"symbol"},{re:/\bcallees?\b|wh(?:at|o)\s+does\s+\S+\s+call\b/i,topic:"callees",arg:"symbol"},{re:/\bcallers?\b|who\s+calls\b|what\s+calls\b/i,topic:"callers",arg:"symbol"},{re:/\btests?\b.*\b(?:for|cover|covering|of)\b|which\s+tests?\b|covers?\b|covered\b|test\s+coverage\b/i,topic:"tests",arg:"symbol"},{re:/\bcochang|change[- ]coupl/i,topic:"cochanges",arg:"symbol"},{re:/\bexports?\b|\bpublic\s+api\b/i,topic:"exports",arg:"module"},{re:/\bsubclasses?\b|children\s+of\b|\bextends?\b/i,topic:"subclasses",arg:"class"},{re:/\bmembers?\b|\bmethods?\s+of\b|\battributes?\s+of\b/i,topic:"members",arg:"class"},{re:/\bhistory\b|who\s+changed\b|commits?\s+(?:that\s+)?touch/i,topic:"history",arg:"symbol"},{re:/\bsignature\b/i,topic:"signature",arg:"symbol"},{re:/\bsynonyms?\b|\banother\s+word\s+for\b|\brelated\s+(?:words?|concepts?|to)\b/i,topic:"related",arg:"term"},{re:/\bsprite\b|\bicon\b|\bavatar\b|\bpicture\s+of\b|\bwhat\s+does\s+.+\s+look\s+like\b/i,topic:"sprite",arg:"class",slots:FF},{re:/\bdescribe\b|\bexplain\b|what\s+is\b|tell\s+me\s+about\b|definition\s+of\b/i,topic:"description",arg:"symbol"},{re:/\bsearch\b|\bfind\b|look\s+for\b/i,topic:"matches",arg:"query"}])});var ck=L(()=>{});var BF,lk=L(()=>{_m();xi();Rm();ck();us();BF=Object.freeze([Object.freeze({id:"coverage-invariant",kind:"maintenance",invariant:"an impactful module must be tested",focusClass:"Module",modes:Object.freeze(["scoped","global"]),subGoals:Object.freeze(["impact","untested"]),priorityTopic:"impact",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"untested"}),b:Object.freeze({topic:"impact",of:"focus",withFocus:!0}),names:"the change's untested footprint",empty:"no coverage gap"}),achieves:"coverage-gap"}),Object.freeze({id:"cochange-risk-invariant",kind:"maintenance",invariant:"a module change-coupled with the focus must be tested",focusClass:"Module",modes:Object.freeze(["scoped"]),subGoals:Object.freeze(["cochanges","untested"]),priorityTopic:"cochanges",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"cochanges",of:"focus"}),b:Object.freeze({topic:"untested"}),names:"the change-coupled untested set",empty:"every change-coupled module is tested"}),achieves:"cochange-risk"})])});var Pu=L(()=>{Ei();Lu();_m();lk();xi();jm()});function WF(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||ne(UF,"corpus","worlds")}function uk(e){try{return wr(Zs(e))}catch{return null}}function dk(e){if(Am.has(e))return Am.get(e);let t=null,n=uk(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Am.set(e,t),t}function GF(e,t){let n=dk(e);if(!n)return null;let s=n[String(t??"")];if(!Zx(s))return null;let o=`${e}\0${t}`;if(Im.has(o))return Im.get(o);let r=null,i=uk(ne(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],c=[],l=null;for(let u of i.toString("utf8").split(`
|
|
171
|
-
`))if(u.trim())try{let d=JSON.parse(u);if(!
|
|
172
|
-
:root { color-scheme: light dark; ${
|
|
173
|
-
@media (prefers-color-scheme: dark) { :root { ${
|
|
174
|
-
:root[data-theme="dark"] { ${
|
|
175
|
-
:root[data-theme="light"] { ${
|
|
176
|
-
`});var $k=L(()=>{Ei();Cm()});var Sk=L(()=>{Ei();Cm()});var Ek=L(()=>{Ue();vr();Ln();ji()});var kk=L(()=>{Cs();Ue();Ei();Pu();ji()});var Nm,oD,rD,iD,aD,cD,lD,lQ,uQ,ji=L(()=>{vr();Ga();Ei();sk();ts();mu();km();jm();Pu();Lu();Mu();Ue();yk();$k();Sk();Ek();kk();Nm="mgx:world-epoch",oD=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),rD=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),iD="mgx:is-open",aD="mgx:hasMass",cD="mgx:knows-about",lD="mgx:display-name",lQ=new Set([...oD,...rD,iD,aD,cD,lD,"rdf:type",Nm]),uQ=new RegExp("^(?:what\\s+foods?\\s+(?:do\\s+you\\s+know(?:\\s+about)?|have\\s+you\\s+(?:found|seen|heard\\s+(?:about|of))|do\\s+you\\s+know\\s+of)|what\\s+do\\s+you\\s+know\\s+about\\s+(?:any\\s+)?foods?|do\\s+you\\s+know\\s+(?:about|of)\\s+(?:any\\s+)?foods?|where\\s+is\\s+(?:the\\s+)?food)[?.!\\s]*$","i")});var Ri,fQ,pQ,hQ,mQ,gQ,bQ,Ao=L(()=>{Ri=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),mudiii:Object.freeze({predatorInitialMass:20,predatorMassDecrementPerTurn:.08,predatorVisionRadius:4,preyInitialMass:8,preyMassDecrementPerTurn:.06,preyVisionRadius:3,preySpawnIntervalTurns:5,foodSpawnIntervalTurns:3,spawnedFoodMass:2,placedFoodMass:2,maxPreyPopulation:6,maxFoodItems:8,foodVisionGated:!0,blendPreyDecision:!1,preyThreatWeight:.5,teach:!1}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),adventure:Object.freeze({teach:!1}),planning:Object.freeze({maxDepth:300})}),fQ=Object.freeze({spider_initial_mass:"spiderInitialMass",spider_mass_decrement_per_turn:"spiderMassDecrementPerTurn",fly_initial_mass:"flyInitialMass",fly_mass_decrement_per_turn:"flyMassDecrementPerTurn",spider_vision_radius:"spiderVisionRadius",fly_vision_radius:"flyVisionRadius",egg_hatch_delay_turns:"eggHatchDelayTurns",fly_spawn_interval_turns:"flySpawnIntervalTurns",egg_lay_mass_threshold:"eggLayMassThreshold",egg_hatch_count:"eggHatchCount",min_hatchling_mass:"minHatchlingMass",web_duration_turns:"webDurationTurns"}),pQ=Object.freeze({mole_initial_mass:"moleInitialMass",mole_mass_decrement_per_turn:"moleMassDecrementPerTurn",mole_speed:"moleSpeed",mole_dig_reach:"moleDigReach",vole_initial_mass:"voleInitialMass",vole_mass_decrement_per_turn:"voleMassDecrementPerTurn",vole_speed:"voleSpeed",vole_dig_reach:"voleDigReach",badger_initial_mass:"badgerInitialMass",badger_mass_decrement_per_turn:"badgerMassDecrementPerTurn",badger_speed:"badgerSpeed",badger_dig_reach:"badgerDigReach",groundhog_initial_mass:"groundhogInitialMass",groundhog_mass_decrement_per_turn:"groundhogMassDecrementPerTurn",groundhog_speed:"groundhogSpeed",groundhog_dig_reach:"groundhogDigReach",meerkat_initial_mass:"meerkatInitialMass",meerkat_mass_decrement_per_turn:"meerkatMassDecrementPerTurn",meerkat_speed:"meerkatSpeed",meerkat_dig_reach:"meerkatDigReach"}),hQ=Object.freeze({predator_initial_mass:"predatorInitialMass",predator_mass_decrement_per_turn:"predatorMassDecrementPerTurn",predator_vision_radius:"predatorVisionRadius",prey_initial_mass:"preyInitialMass",prey_mass_decrement_per_turn:"preyMassDecrementPerTurn",prey_vision_radius:"preyVisionRadius",prey_spawn_interval_turns:"preySpawnIntervalTurns",food_spawn_interval_turns:"foodSpawnIntervalTurns",spawned_food_mass:"spawnedFoodMass",placed_food_mass:"placedFoodMass",max_prey_population:"maxPreyPopulation",max_food_items:"maxFoodItems",food_vision_gated:"foodVisionGated",blend_prey_decision:"blendPreyDecision",prey_threat_weight:"preyThreatWeight",teach:"teach"}),mQ=Object.freeze({teach:"teach"}),gQ=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),bQ=Object.freeze({max_depth:"maxDepth"})});var _k,uD,zu,dD,fD,Tk,Ak,pD,hD,$Q,mD,gD,Ik=L(()=>{Ao();_k="spider-fly",uD=10,zu=Object.freeze({x:2,y:2}),dD=1,fD=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider",hunts:"prey"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly",hunts:null}),food:null}),Tk=(e,t)=>`cell-${e}-${t}`,Ak=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),pD=(e,t)=>Ak(e,t,zu.x,zu.y)<=dD,hD=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),$Q=Object.freeze([Object.freeze(["poodle","dog"]),Object.freeze(["sheepdog","dog"]),Object.freeze(["dog","animal"]),Object.freeze(["spider","arachnid"]),Object.freeze(["arachnid","animal"]),Object.freeze(["fly","insect"]),Object.freeze(["insect","animal"])]),mD="a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move. Watch, or address one by name in chat.",gD=Object.freeze({name:_k,gridSize:uD,opening:mD,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:pD,webHomeCell:Tk(zu.x,zu.y)})});var Ok,Pk,EQ,xQ,kQ,Lm,Ck,Nk,Lk,Pm,jQ,RQ,Uu=L(()=>{Ao();Ok=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),Pk=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),EQ=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),xQ=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),kQ=Object.freeze([Ok.spawnedFood,Ok.placedFood]),Lm=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),Ck=Lm({name:"town-square",gridSize:12,opening:"a fox prowls the town square; goblins pick over the stalls for scraps. Neither is yours to move. Watch, or address one by name in chat.",cast:{predators:1,prey:3},props:[{id:"house-1",model:"house-1",cell:"cell-8-1",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-8-2",rotation:"180"},{id:"house-3",model:"house-3",cell:"cell-8-3",rotation:"180"},{id:"well-1",model:"well",cell:"cell-6-7",rotation:"0"},{id:"stall-1",model:"market-stall-1",cell:"cell-3-9",rotation:"90"},{id:"inn-1",model:"inn",cell:"cell-11-10",rotation:"270"}]}),Nk=Lm({name:"town-square-market",gridSize:10,opening:"market day in the town square: two rows of stalls, goblins working the lanes between them, and a fox somewhere among the crowd.",cast:{predators:1,prey:4},props:[{id:"stall-1",model:"market-stall-1",cell:"cell-2-4",rotation:"0"},{id:"stall-2",model:"market-stall-2",cell:"cell-3-4",rotation:"0"},{id:"stall-3",model:"market-stall-1",cell:"cell-4-4",rotation:"0"},{id:"stall-4",model:"market-stall-2",cell:"cell-6-4",rotation:"0"},{id:"stall-5",model:"market-stall-1",cell:"cell-7-4",rotation:"0"},{id:"stall-6",model:"market-stall-2",cell:"cell-8-4",rotation:"0"},{id:"stall-7",model:"market-stall-2",cell:"cell-2-7",rotation:"180"},{id:"stall-8",model:"market-stall-1",cell:"cell-3-7",rotation:"180"},{id:"stall-9",model:"market-stall-2",cell:"cell-4-7",rotation:"180"},{id:"stall-10",model:"market-stall-1",cell:"cell-6-7",rotation:"180"},{id:"stall-11",model:"market-stall-2",cell:"cell-7-7",rotation:"180"},{id:"stall-12",model:"market-stall-1",cell:"cell-8-7",rotation:"180"},{id:"well-1",model:"well",cell:"cell-5-5",rotation:"0"},{id:"blacksmith-1",model:"blacksmith",cell:"cell-10-5",rotation:"270"},{id:"cart-1",model:"cart",cell:"cell-1-1",rotation:"90"},{id:"cart-2",model:"cart",cell:"cell-10-10",rotation:"270"},{id:"bush-1",model:"bush",cell:"cell-10-1",rotation:"0"},{id:"bush-2",model:"bush",cell:"cell-1-10",rotation:"0"}]}),Lk=Lm({name:"town-square-chapel",gridSize:14,opening:"the chapel corner of the town square, fenced to the south and shaded by three oaks. Two foxes hunt here, and two goblins know it.",cast:{predators:2,prey:2},props:[{id:"inn-1",model:"inn",cell:"cell-2-2",rotation:"180"},{id:"house-1",model:"house-1",cell:"cell-3-2",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-2-3",rotation:"90"},{id:"fence-1",model:"fence",cell:"cell-7-11",rotation:"0"},{id:"fence-2",model:"fence",cell:"cell-8-11",rotation:"0"},{id:"fence-3",model:"fence",cell:"cell-9-11",rotation:"0"},{id:"oak-1",model:"oak-tree",cell:"cell-12-4",rotation:"0"},{id:"oak-2",model:"oak-tree",cell:"cell-12-12",rotation:"90"},{id:"oak-3",model:"oak-tree",cell:"cell-5-8",rotation:"180"}]}),Pm=Object.freeze({[Ck.name]:Ck,[Nk.name]:Nk,[Lk.name]:Lk}),jQ=Object.freeze(Object.keys(Pm)),RQ=Object.freeze([Object.freeze(["fox","canine"]),Object.freeze(["canine","animal"]),Object.freeze(["goblin","humanoid"]),Object.freeze(["humanoid","creature"]),Object.freeze(["creature","animal"]),Object.freeze(["crumb","food"]),Object.freeze(["morsel","food"]),Object.freeze(["food","thing"]),Object.freeze(["prop","thing"])])});var Mm=L(()=>{});var Mk=L(()=>{});var Ha,ZQ,kD,jD,RD,_D,TD,AD,ID,OD,CD,ND,LD,PD,MD,FD,DD,BD,zD,e7,Fm=L(()=>{Uu();Mm();Cs();Ue();vr();Mk();Ve();Ao();Ga();ji();Ha=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox",hunts:"prey"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin",hunts:null},food:{spawnedKind:"crumb",placedKind:"morsel"}}),ZQ=Object.freeze(["predator","prey"]),kD="mgx:currently-in",jD="mgx:hasMass",RD="mgx:feels",_D="mgx:facing",TD="mgx:driven-facing",AD="mgx:eaten-by",ID="mgx:starved",OD="mgx:placed-by",CD="mgx:model",ND="mgx:rotation",LD="mgx:carrying",PD="mgx:prey-eaten",MD="mgx:web-built-at-turn",FD="mgx:laid-at-turn",DD="mgx:hatched-into",BD="mgx:turn-played",zD=new Set([kD,jD,RD,_D,TD,AD,ID,OD,CD,ND,BD,LD,PD,MD,FD,DD,"rdf:type",Nm]),e7=Object.freeze([...zD].sort())});var w7,y7,Dk=L(()=>{Ik();Uu();Fm();vr();Mu();Ue();Ao();w7=new RegExp("^@(spider|fly)(?:-(\\d+))?[,:]?\\s+the\\s+(spider|fly)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),y7=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var Y7,X7,J7,Q7,Z7,eZ,tZ,VD,KD,HD,qD,Bk,zk,YD,nZ,sZ,Uk=L(()=>{Uu();Fm();ji();Ln();vr();Mu();Ue();Ao();Ga();Mm();Lu();Cs();Y7=Ha.predator.kind,X7=Ha.prey.kind,J7=Ha.food.spawnedKind,Q7=Ha.food.placedKind,Z7=Object.freeze(new Set(["river-crossing"])),eZ=new RegExp("^@(fox|goblin)(?:-(\\d+))?[,:]?\\s+the\\s+(fox|goblin|crumb|morsel)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),tZ=new RegExp("^who\\s+(?:put|placed|dropped)\\s+(?:(?:the\\s+)?(morsel|crumb)(?:-(\\d+))?|(?:(?:the\\s+)?(?:food|morsel|crumb|that|it)\\s+)?(?:at|on)\\s+(cell-\\d+-\\d+))(?:\\s+there)?[?.!\\s]*$","i"),VD="mgx:currently-in",KD="mgx:hasMass",HD="mgx:feels",qD="mgx:facing",Bk="(fox|goblin|crumb|morsel)(?:-(\\d+))?",zk="(fox|goblin)(?:-(\\d+))?",YD="(crumb|morsel)(?:-(\\d+))?",nZ=[{kind:"placement",predicate:VD,re:new RegExp(`^(?:the\\s+)?${Bk}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:KD,re:new RegExp(`^(?:the\\s+)?${Bk}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:HD,re:new RegExp(`^(?:the\\s+)?${zk}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:qD,re:new RegExp(`^(?:the\\s+)?${zk}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],sZ=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${YD}\\s+there[.!\\s]*$`,"i")});var Wk=L(()=>{Ga()});var Tt,uZ,dZ,fZ,pZ,hZ,mZ,gZ,bZ,wZ,yZ,$Z,SZ,vZ,EZ,xZ,kZ,jZ,RZ,XD,Gk=L(()=>{Tt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},uZ=Tt("createRequire"),dZ=Tt("readFileSync"),fZ=Tt("access"),pZ=Tt("readFile"),hZ=Tt("writeFile"),mZ=Tt("appendFile"),gZ=Tt("mkdir"),bZ=Tt("mkdtemp"),wZ=Tt("rename"),yZ=Tt("unlink"),$Z=Tt("rm"),SZ=Tt("stat"),vZ=Tt("copyFile"),EZ=Tt("readdir"),xZ=Tt("createReadStream"),kZ=Tt("createWriteStream"),jZ=Tt("randomBytes"),RZ=Tt("spawnSync"),XD=Tt("createInterface")});var At,TZ,AZ,IZ,OZ,CZ,NZ,LZ,PZ,MZ,FZ,DZ,BZ,zZ,UZ,WZ,GZ,VZ,Vk,KZ,Dm=L(()=>{At=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},TZ=At("createRequire"),AZ=At("readFileSync"),IZ=At("access"),OZ=At("readFile"),CZ=At("writeFile"),NZ=At("appendFile"),LZ=At("mkdir"),PZ=At("mkdtemp"),MZ=At("rename"),FZ=At("unlink"),DZ=At("rm"),BZ=At("stat"),zZ=At("copyFile"),UZ=At("readdir"),WZ=At("createReadStream"),GZ=At("createWriteStream"),VZ=At("randomBytes"),Vk=At("spawnSync"),KZ=At("createInterface")});var Kk=L(()=>{Dm();Qe();zt();Qe();Sa();sn()});var Hk=L(()=>{});var JD,qk=L(()=>{zt();Qe();Ue();Hk();JD=ne(".tmct","sessions")});var Yk=L(()=>{zt();Qe();gu()});var Xk,fee,Jk=L(()=>{Xk=Object.freeze({countNouns:{class:"Class",classes:"Class",function:"Function",functions:"Function",func:"Function",funcs:"Function",module:"Module",modules:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",method:"Method",methods:"Method",attribute:"Attribute",attributes:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",commit:"Commit",commits:"Commit",session:"Session",sessions:"Session"},classLabels:{Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},helpRows:[["/find <query>","lexical search across the graph"],["/search <query>","alias of /find"],["/context <symbol>","the sized edit bundle for a symbol (start here to change code)"],["/snippet <symbol>","exact source of one function/class/method"],["/describe <symbol>","a symbol's definition, kind and relations"],["/signature <symbol>","a symbol's signature only"],["/members <class>","the methods/attributes of a class"],["/subclasses <class>","the subclasses of a class"],["/impact <module>","what a change to this module or symbol reaches (impact closure)"],["/callers <symbol>","functions that call this symbol"],["/callees <symbol>","functions this symbol calls"],["/tests <symbol>","the tests covering this symbol"],["/untested","symbols with no covering test"],["/history <symbol>","the commit history of this symbol"],["/exports <module>","a module's public exports"],["/arch [package]","the architecture overview (optional package filter)"]],missRecoveryPointer:"for code structure, index this repo with `tmct index`, or point me at a .tmct/graph.json with --repo <path> (or try `npm run example:mini`)."}),fee=Object.freeze({countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""})});var It,hee,mee,gee,bee,wee,yee,$ee,See,vee,Eee,xee,kee,jee,Ree,_ee,Tee,Aee,Iee,Qk,Zk=L(()=>{It=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},hee=It("createRequire"),mee=It("readFileSync"),gee=It("access"),bee=It("readFile"),wee=It("writeFile"),yee=It("appendFile"),$ee=It("mkdir"),See=It("mkdtemp"),vee=It("rename"),Eee=It("unlink"),xee=It("rm"),kee=It("stat"),jee=It("copyFile"),Ree=It("readdir"),_ee=It("createReadStream"),Tee=It("createWriteStream"),Aee=It("randomBytes"),Iee=It("spawnSync"),Qk=It("createInterface")});var oj={};Nt(oj,{CONTEXT_PASSAGE_PREDICATE:()=>tj,CO_OCCURS_PREDICATE:()=>Wu,ingestUnknownFromAssertions:()=>eB,knownTermsFrom:()=>nj,passageFor:()=>sj});function nj(e,t){let n=new Set;for(let s of e?.individuals||[]){if(s?.class!==Ke)continue;let o=a=>(s.attributes||[]).find(c=>c?.key===a)?.value,r=o("subject"),i=o("object");r&&n.add(V(r)),i&&n.add(V(i))}for(let s of t||[])s?.subject&&n.add(V(s.subject)),s?.object&&n.add(V(s.object));return n}function sj(e,t){let n=e?.surfaceText;if(typeof n=="string"&&n.trim())return n.replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\s+/g," ").trim();let s=Io(e?.start),o=Io(e?.end);return t?.surface&&s&&o?t.surface.replace("{start}",s).replace("{end}",o):null}function ZD(e,t,n){let s=String(e||"").toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(Boolean),o=[],r=new Set;for(let i=0;i<s.length&&o.length<ej;i+=1){let a=[s[i]];i+1<s.length&&a.push(`${s[i]} ${s[i+1]}`);for(let c of a)if(!(QD.has(c)||r.has(c)||n.has(c))&&t.has(c)&&(o.push(c),r.add(c),o.length>=ej))break}return o}async function eB(e,{assertions:t,map:n,mappedFacts:s=[],memory:o,provenancePrefix:r="corpus:unknown",limit:i=500}={}){if(!Array.isArray(t)||!n)return{captured:0,linked:0,appended:0,skipped:0};let a=o||await rt(e),c=nj(a,s),l=new Set,u=[];for(let f of t){if(l.size>=i)break;let h=n.get(f.rel);if(!h||h.ace!=="none")continue;let m=Io(f.start),b=Io(f.end);if(!m||!b)continue;let g=V(m),w=V(b),y=!c.has(g),S=!c.has(w);if(!y&&!S)continue;let T=sj(f,h);if(!T)continue;let v=[[m,b,y],[b,m,S]];for(let[E,I,k]of v){if(!k||l.size>=i)continue;let R=V(E);if(l.has(R))continue;let $=`${r} ${f.rel}`;u.push({subject:E,predicate:tj,object:T,provenance:$}),u.push({subject:E,predicate:Wu,object:I,provenance:$});let _=ZD(T,c,new Set([g,w]));for(let O of _)u.push({subject:E,predicate:Wu,object:O,provenance:$});l.add(R),c.add(R)}}if(!u.length)return{captured:0,linked:0,appended:0,skipped:0};let d=await es(e,u),p=u.filter(f=>f.predicate===Wu).length;return{captured:l.size,linked:p,appended:d.appended,skipped:d.skipped}}var tj,Wu,QD,ej,rj=L(()=>{Ue();qa();tj="mgx:contextPassage",Wu="mgx:coOccursWith",QD=new Set(["a","an","the","is","are","was","were","be","being","been","to","of","for","in","on","at","with","by","as","and","or","that","this","it","its","you","your","related","kind","used"]),ej=3});var aj={};Nt(aj,{MAP_FILE:()=>Xa,SEON_CONCEPTS_FILE:()=>Gu,SEON_DEFINITIONS_FILE:()=>tB,SLICE_FILE:()=>Ya,TIER2_DIR:()=>kr,TIER2_MANIFEST_FILE:()=>nB,WORDNET_DIR:()=>Ja,appendNewFacts:()=>Yu,loadMap:()=>Ku,loadSlice:()=>Vu,preferThenLimit:()=>qu,seedMemory:()=>oB,termText:()=>Io,toFacts:()=>Hu});async function Vu(e=Ya){let t=Qk({input:rx(e,"utf8"),crlfDelay:1/0}),n=[],s=0;for await(let o of t){s+=1;let r=o.trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(a){throw new Error(`${e}:${s}: not valid JSON: ${a.message}`)}for(let a of["start","rel","end"])if(typeof i[a]!="string"||!i[a])throw new Error(`${e}:${s}: assertion missing "${a}"`);n.push(i)}return n}async function Ku(e=Xa){let n=lr(await Ce(e,"utf8")).relation||[],s=new Map;for(let o of n){if(!o.rel)throw new Error(`${e}: a [[relation]] row is missing "rel"`);if(s.has(o.rel))throw new Error(`${e}: duplicate mapping for ${o.rel}`);if(!sB.has(o.ace))throw new Error(`${e}: ${o.rel} has unknown ace pattern ${JSON.stringify(o.ace)}`);if(o.ace!=="none"&&!o.predicate)throw new Error(`${e}: ${o.rel} maps to ${o.ace} but names no predicate URI`);s.set(o.rel,o)}return s}function Hu(e,t,n="corpus:conceptnet"){let s=[];for(let o of e){let r=t.get(o.rel);if(!r)throw new Error(`slice/map drift: relation ${o.rel} has no row in conceptnet-map.toml`);if(r.ace==="none")continue;let i=Io(o.start),a=Io(o.end);if(!i||!a)continue;let c=r.predicate==="mgx:relatedTo"?n.replace(/^corpus:/,"corpus-weak:"):n;s.push({subject:i,predicate:r.predicate,object:a,provenance:`${c} ${o.rel}`})}return s}function qu(e,t,n){let s=e;if(Array.isArray(t)&&t.length){let o=new Map(t.map((r,i)=>[r,i]));s=s.slice().sort((r,i)=>(o.get(r.predicate)??t.length)-(o.get(i.predicate)??t.length))}return n===void 0?s:s.slice(0,n)}async function Yu(e,t,n){let s=n??await rt(e),o=new Set;for(let c of s.individuals||[]){if(c?.class!=="Fact")continue;let l=u=>(c.attributes||[]).find(d=>d.key===u)?.value;o.add(ij(l("subject"),l("predicate"),l("object")))}let r=0,i=[];for(let c of t){let l=ij(c.subject,c.predicate,c.object);if(o.has(l)){r+=1;continue}o.add(l),i.push(c)}let a=await es(e,i);return{appended:a.appended,skipped:r+a.skipped}}async function oB(e,{limit:t,slicePath:n=Ya,mapPath:s=Xa,prefer:o,provenancePrefix:r,captureUnknownContext:i=!1,unknownContextLimit:a}={}){let[c,l]=await Promise.all([Vu(n),Ku(s)]),u=qu(Hu(c,l,r),o,t),d=await rt(e),{appended:p,skipped:f}=await Yu(e,u,d),h;if(i){let{ingestUnknownFromAssertions:m}=await Promise.resolve().then(()=>(rj(),oj));h=await m(e,{assertions:c,map:l,mappedFacts:u,memory:d,provenancePrefix:r?`${r}-unknown`:void 0,limit:a})}return{appended:p,skipped:f,total:u.length,...h?{unknown:h}:{}}}var rB,_i,Ya,Xa,Gu,tB,kr,nB,Ja,Uee,sB,Io,ij,qa=L(()=>{Ro();zt();Zk();jo();Qe();Fl();Ue();rB={},_i=ne(Se(tn(rB.url)),"..","..",".."),Ya=ne(_i,"corpus","conceptnet","slice.jsonl"),Xa=ne(_i,"src","adapters","corpus","conceptnet-map.toml"),Gu=ne(_i,"corpus","domains","code","concepts.jsonl"),tB=ne(_i,"corpus","domains","code","definitions.jsonl"),kr=ne(_i,"corpus","tier2"),nB=ne(kr,"manifest.json"),Ja=ne(_i,"corpus","wordnet"),Uee=ne(Ja,"manifest.json"),sB=new Set(["subClassOf","type","ObjectProperty","someValuesFrom","disjointWith","property","none"]);Io=e=>{let t=/^\/c\/en\/([^/]+)/.exec(String(e||""));return t?t[1].replace(/_/g," "):null};ij=(e,t,n)=>`${V(e)} ${t} ${V(n)}`});var lj={};Nt(lj,{loadChildPackFacts:()=>cj,seedChildPack:()=>aB});function iB(){return Array.from({length:Gx},(e,t)=>`child-${t.toString(16).padStart(2,"0")}`)}function cj(e,t="corpus:child"){let n=[],s=new Set;for(let o of iB()){let r;try{r=wr(Zs(ne(e,"shards",`${o}.jsonl.gz`))).toString("utf8")}catch{continue}for(let i of r.split(`
|
|
177
|
-
`)){if(!i.trim())continue;let a;try{a=JSON.parse(i)}catch{continue}if(bm(a))for(let c of a.facts){let l=`${c.subject} ${c.predicate} ${c.object}`;s.has(l)||(s.add(l),n.push({subject:c.subject,predicate:c.predicate,object:c.object,provenance:`${t} ${a.term}`}))}}}return n}async function aB(e,{packDir:t,provenancePrefix:n,limit:s,prefer:o}={}){let r=qu(cj(t,n),o,s),{appended:i,skipped:a}=await Yu(e,r);return{appended:i,skipped:a,total:r.length}}var uj=L(()=>{Ro();Fa();Qe();Au();qa()});var bj={};Nt(bj,{BUILTIN_EXTENSIONS:()=>fB,EXTENSION_KINDS:()=>Xu,activeDomainPacks:()=>Wm,defaultCodeDomainPacks:()=>gj,defaultCodeLaneVocab:()=>mj,isSeedableEntry:()=>pj,mergedLaneVocab:()=>Um,mergedLexiconExtra:()=>hj,resolveExtensions:()=>fj,seedActiveCorpusEntries:()=>mB,validateExtensionEntry:()=>dj,validateExtensionPack:()=>bB});function Ju(){return{seon:{kind:"corpus",active:!1,corpusPath:Gu,provenancePrefix:"corpus:seon"},code:{kind:"pack",active:!1,corpusPath:Gu,provenancePrefix:"corpus:seon",vocabPath:uB,vocabData:Xk,groundingKind:"extraction",groundingAdapter:"tmct index (the graphPaths provider seam)"},conceptnet:{kind:"corpus",active:!1,corpusPath:Ya,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:dB},human:{kind:"corpus",active:!0,corpusPath:ne(kr,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:ne(kr,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:ne(kr,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-general":{kind:"corpus",active:!1,corpusPath:ne(kr,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:ne(Ja,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:ne(Ja,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:ne(cB,"namenet.jsonl"),provenancePrefix:"corpus:namenet"},child:{kind:"corpus",active:!1,shardPackPath:lB,provenancePrefix:"corpus:child"}}}function dj(e,t){if(!t||typeof t!="object")throw new Error(`extension "${e}": entry must be an object`);if(!Xu.includes(t.kind))throw new Error(`extension "${e}": unknown kind ${JSON.stringify(t.kind)} (must be one of ${Xu.join(", ")})`);if(t.active!==void 0&&typeof t.active!="boolean")throw new Error(`extension "${e}": "active" must be a boolean`);if(t.kind==="corpus"&&!t.corpusPath&&!t.shardPackPath)throw new Error(`extension "${e}": a "corpus" entry needs corpus_path or shard_pack_path`);if(t.kind==="ontology"&&!t.corpusPath)throw new Error(`extension "${e}": an "ontology" entry needs ontology_path`);if(t.kind==="lexicon"&&!t.lexiconPath)throw new Error(`extension "${e}": a "lexicon" entry needs lexicon_path`);if(t.kind==="templates"&&!t.templatesPath)throw new Error(`extension "${e}": a "templates" entry needs templates_path`);if(t.kind==="pack"&&!t.corpusPath&&!t.shardPackPath&&!t.lexiconPath&&!t.templatesPath&&!t.phrasebookPath)throw new Error(`extension "${e}": a "pack" entry needs at least one of corpus_path/shard_pack_path/lexicon_path/templates_path/phrasebook_path`);if(t.limit!==void 0&&!Number.isFinite(t.limit))throw new Error(`extension "${e}": "limit" must be a finite number`);if(t.prefer!==void 0&&!Array.isArray(t.prefer))throw new Error(`extension "${e}": "prefer" must be an array of predicate URIs`)}function hB(e,t,n,s){if(!t&&n.kind===void 0)throw new Error(`extension "${e}": an unrecognized extension needs a "kind" (one of ${Xu.join(", ")})`);let o={kind:n.kind!==void 0?n.kind:t?.kind,active:n.active!==void 0?!!n.active:!!t?.active},r=[["corpus_path","corpusPath"],["ontology_path","corpusPath"],["shard_pack_path","shardPackPath"],["lexicon_path","lexiconPath"],["templates_path","templatesPath"],["phrasebook_path","phrasebookPath"],["map_path","mapPath"],["vocab_path","vocabPath"]];for(let[i,a]of r)n[i]!==void 0?o[a]=pB(s,n[i]):t?.[a]!==void 0&&(o[a]=t[a]);return o.provenancePrefix=n.provenance_prefix!==void 0?String(n.provenance_prefix):t?.provenancePrefix??`corpus:${e}`,n.limit!==void 0?o.limit=Number(n.limit):t?.limit!==void 0&&(o.limit=t.limit),n.prefer!==void 0?o.prefer=n.prefer:t?.prefer!==void 0&&(o.prefer=t.prefer),n.grounding_kind!==void 0?o.groundingKind=String(n.grounding_kind):t?.groundingKind!==void 0&&(o.groundingKind=t.groundingKind),n.grounding_adapter!==void 0?o.groundingAdapter=String(n.grounding_adapter):t?.groundingAdapter!==void 0&&(o.groundingAdapter=t.groundingAdapter),o}async function fj(e,{configFile:t}={}){let n=e?await zl(e,t?{file:t}:{}):null,s=Ju(),o=n&&n.extensions&&typeof n.extensions=="object"?n.extensions:{},r=n&&n.bias&&typeof n.bias=="object"?n.bias:{},i=new Set([...Object.keys(s),...Object.keys(o)]),a=new Map;for(let p of i){let f=hB(p,s[p]||null,o[p]||{},e||process.cwd());dj(p,f),a.set(p,f)}let c={};for(let[p,f]of Object.entries(r)){if(typeof f!="number"||!Number.isFinite(f))throw new Error(`[bias] "${p}": bias must be a finite number, got ${JSON.stringify(f)}`);c[p]=f}let u=["seon","conceptnet",...[...a.keys()].filter(p=>p!=="seon"&&p!=="conceptnet").sort()].filter(p=>a.has(p));return{entries:new Map(u.map(p=>[p,a.get(p)])),biasByBundle:c}}function pj(e){return e?e.kind==="corpus"||e.kind==="ontology"?!0:e.kind==="pack"&&!!(e.corpusPath||e.shardPackPath):!1}async function mB(e,t,n={}){let{seedMemory:s}=await Promise.resolve().then(()=>(qa(),aj)),{captureUnknownContext:o,unknownContextLimit:r}=n,i={},a=0,c=0,l=0;for(let[u,d]of t instanceof Map?t:new Map)if(d.active&&pj(d))try{let p=d.shardPackPath?await(await Promise.resolve().then(()=>(uj(),lj))).seedChildPack(e,{packDir:d.shardPackPath,provenancePrefix:d.provenancePrefix,limit:d.limit,prefer:d.prefer}):await s(e,{slicePath:d.corpusPath,mapPath:d.mapPath,provenancePrefix:d.provenancePrefix,limit:d.limit,prefer:d.prefer,captureUnknownContext:o,unknownContextLimit:r});i[u]={appended:p.appended,skipped:p.skipped,total:p.total},a+=p.appended,c+=p.skipped,l+=p.total}catch(p){i[u]={appended:0,skipped:0,total:0,error:p&&p.message?p.message:String(p)}}return{appended:a,skipped:c,total:l,perBundle:i}}async function hj(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&(r.kind!=="lexicon"&&r.kind!=="pack"||r.lexiconPath&&n.push({name:o,path:r.lexiconPath,bias:t[o]??1}));if(!n.length)return null;n.sort((o,r)=>o.bias-r.bias);let s={nouns:{},verbs:{},adjectives:{},properNames:[]};for(let o of n){let r;try{r=JSON.parse(await Ce(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": lexicon file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}if(Object.assign(s.nouns,r.nouns||{}),Object.assign(s.verbs,r.verbs||{}),Object.assign(s.adjectives,r.adjectives||{}),Array.isArray(r.properNames))for(let i of r.properNames)s.properNames.includes(i)||s.properNames.push(i)}return s}async function Um(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&(!r.vocabPath&&!r.vocabData||n.push({name:o,path:r.vocabPath,data:r.vocabData,bias:t[o]??1}));let s={countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""};if(!n.length)return s;n.sort((o,r)=>o.bias-r.bias);for(let o of n){let r;if(o.data)r=o.data;else try{r=JSON.parse(await Ce(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": vocab file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}Object.assign(s.countNouns,r.countNouns||{}),Object.assign(s.classLabels,r.classLabels||{}),Array.isArray(r.helpRows)&&s.helpRows.push(...r.helpRows),r.missRecoveryPointer&&(s.missRecoveryPointer=r.missRecoveryPointer)}return s}function mj(){if(!Bm){let e={...Ju().code,active:!0};Bm=Um(new Map([["code",e]]),{})}return Bm}async function gB(e,t){let n={name:e,groundingKind:t.groundingKind||"",groundingAdapter:t.groundingAdapter||"",commandCount:0,countNounCount:0};if(!t.vocabPath)return n;try{let s=JSON.parse(await Ce(t.vocabPath,"utf8"));n.commandCount=Array.isArray(s.helpRows)?s.helpRows.length:0,n.countNounCount=Object.keys(s.countNouns||{}).length}catch{}return n}async function Wm(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&n.push({name:o,entry:r,bias:t[o]??1});n.sort((o,r)=>o.bias-r.bias||o.name.localeCompare(r.name));let s=[];for(let o of n)s.push(await gB(o.name,o.entry));return s}function gj(){if(!zm){let e={...Ju().code,active:!0};zm=Wm(new Map([["code",e]]),{})}return zm}async function bB(e,t){let n=[],s=o=>o&&($d(o)?o:Xt(e,o));if(t.corpusPath){let o=s(t.corpusPath);try{let r=await Vu(o),i=await Ku(s(t.mapPath)||Xa),a=Hu(r,i,t.provenancePrefix||"corpus:pack");n.push({kind:"corpus",path:o,ok:!0,counts:{assertions:r.length,facts:a.length}})}catch(r){n.push({kind:"corpus",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.lexiconPath){let o=s(t.lexiconPath);try{let{loadLexicon:r}=await Promise.resolve().then(()=>(ts(),hx)),i=JSON.parse(await Ce(o,"utf8")),a=r(i);n.push({kind:"lexicon",path:o,ok:!0,counts:{nouns:a.nouns.size,verbs:a.verbs.size,adjectives:a.adjectives.size,properNames:a.properNames.size}})}catch(r){n.push({kind:"lexicon",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.templatesPath){let o=s(t.templatesPath);try{let{loadTemplates:r}=await Promise.resolve().then(()=>(bu(),sx)),i=await r(o),a=[...i.keys()].filter(c=>!c.includes(":"));if(a.length)throw new Error(`template id${a.length>1?"s":""} not namespaced "<packname>:<id>": ${a.join(", ")}`);n.push({kind:"templates",path:o,ok:!0,counts:{templates:i.size}})}catch(r){n.push({kind:"templates",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.vocabPath){let o=s(t.vocabPath);try{let r=JSON.parse(await Ce(o,"utf8")),i=r.countNouns&&typeof r.countNouns=="object"?Object.keys(r.countNouns).length:0,a=r.classLabels&&typeof r.classLabels=="object"?Object.keys(r.classLabels).length:0,c=Array.isArray(r.helpRows)?r.helpRows.length:0;n.push({kind:"vocab",path:o,ok:!0,counts:{countNouns:i,classLabels:a,helpRows:c}})}catch(r){n.push({kind:"vocab",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.kind==="pack"){let o=t.groundingKind;o!=="extraction"&&o!=="taught-only"?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:`a "pack" entry needs "grounding_kind" of "extraction" or "taught-only" (got ${JSON.stringify(o??null)})`}):o==="extraction"&&!t.groundingAdapter?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:'grounding_kind "extraction" needs "grounding_adapter" naming the adapter'}):n.push({kind:"grounding",path:"(pack manifest)",ok:!0,counts:o==="extraction"?{channel:o,adapter:t.groundingAdapter}:{channel:o}})}return{ok:n.length>0&&n.every(o=>o.ok),results:n}}var Gm,cB,lB,uB,Xu,dB,fB,pB,Bm,zm,Vm=L(()=>{Qe();zt();jo();Jk();Sa();qa();Gm={},cB=ne(Se(tn(Gm.url)),"..","..","corpus","namenet"),lB=ne(Se(tn(Gm.url)),"..","..","corpus","child"),uB=ne(Se(tn(Gm.url)),"..","..","corpus","domains","code","vocab.json"),Xu=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),dB=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:desires","mgx:motivatedByGoal","mgx:hasSubevent"];fB=Object.freeze(Ju());pB=(e,t)=>{if(t==null)return;let n=String(t);return $d(n)?n:Xt(e,n)};Bm=null;zm=null});var wj=L(()=>{});var yj=L(()=>{Qe();Ro();zt();hm();Gk();Dm();sn();Kk();Fe();qk();gu();Yk();Pi();Vm();Ua();Ao();mu();Pu();pm();gm();$r();wj()});var $j={};Nt($j,{proseLemma:()=>$B});function $B(){if(jr!==void 0)return jr;try{let e=Su();if(!e)return jr=null,jr;let t=e.its,n=new Map;jr=s=>{let o=String(s||"");if(n.has(o))return n.get(o);let r;try{r=String(e.readDoc(o).tokens().out(t.lemma)[0]||o).toLowerCase()}catch{r=o.toLowerCase()}return n.set(o,r),r}}catch{jr=null}return jr}var jr,Sj=L(()=>{vu()});var vj={};Nt(vj,{digestTermFromRows:()=>EB,loadDigestStructureTable:()=>vB,readDigestStructures:()=>SB});var SB,vB,EB,Ej=L(()=>{SB=()=>null,vB=()=>null,EB=()=>null});var Zm={};Nt(Zm,{DEFAULT_MODULE_HOPS:()=>Ym,DEFAULT_PROVE_BRANCHES:()=>Oj,DEFAULT_PROVE_NODES:()=>Cj,DEFAULT_PROVE_STEPS:()=>Ij,MAX_PROVEN_CASES:()=>Lj,MAX_ROLE_ASSERTIONS:()=>Nj,TABLEAU_RULE_CONFIDENCE:()=>TB,buildTableauKb:()=>QB,canonicalKey:()=>He,extractTableauModule:()=>tz,findTableauViolations:()=>ez,isSatisfiable:()=>Jm,moduleHasDlShape:()=>sz,proveEntailment:()=>qB,proveSubsumption:()=>YB,proveSubsumptionOfNegation:()=>XB,toNNF:()=>ln});function He(e){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("canonicalKey: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return"top";case"bot":return"bot";case"atom":return`atom(${e.name})`;case"nom":return`nom(${e.ind})`;case"not":return`not(${He(e.c)})`;case"and":return`and(${e.cs.map(He).sort().join(",")})`;case"or":return`or(${e.cs.map(He).sort().join(",")})`;case"some":return`some(${e.r},${He(e.c)})`;case"all":return`all(${e.r},${He(e.c)})`;case"atLeast":return`atLeast(${e.n},${e.r},${He(e.c)})`;case"atMost":return`atMost(${e.n},${e.r},${He(e.c)})`;default:throw new TypeError(`canonicalKey: unknown expression tag "${e.t}"`)}}function Qa(e,t){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("toNNF: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return t?{t:"bot"}:{t:"top"};case"bot":return t?{t:"top"}:{t:"bot"};case"atom":return t?{t:"not",c:{t:"atom",name:e.name}}:{t:"atom",name:e.name};case"nom":return t?{t:"not",c:{t:"nom",ind:e.ind}}:{t:"nom",ind:e.ind};case"not":return Qa(e.c,!t);case"and":case"or":{let n=e.t==="and"?"or":"and",s=e.cs.map(o=>Qa(o,t));return s.sort((o,r)=>Ot(He(o),He(r))),{t:t?n:e.t,cs:s}}case"some":case"all":{let n=e.t==="some"?"all":"some",s=Qa(e.c,t);return{t:t?n:e.t,r:e.r,c:s}}case"atLeast":case"atMost":{let n=Qa(e.c,!1);return t?e.t==="atLeast"?{t:"atMost",n:e.n-1,r:e.r,c:n}:{t:"atLeast",n:e.n+1,r:e.r,c:n}:{t:e.t,n:e.n,r:e.r,c:n}}default:throw new TypeError(`toNNF: unknown expression tag "${e.t}"`)}}function ln(e){return Qa(e,!1)}function qt(e){return[...new Set((Array.isArray(e)?e:[]).filter(Boolean))].sort()}function Hm(e,t){let n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):t}function jB(e,t){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.floor(n):t}function Aj(e,t){let n=new Set(e),s=!0;for(;s;){s=!1;for(let o of t)n.has(o.subject)&&!n.has(o.object)&&(n.add(o.object),s=!0),n.has(o.object)&&!n.has(o.subject)&&(n.add(o.subject),s=!0)}return n}function RB(e){let t=new Map;for(let[s,o]of e||[])!s||!o||s===o||(t.has(s)||t.set(s,new Set),t.get(s).add(o));let n=new Map;return s=>{if(n.has(s))return n.get(s);let o=new Set,r=[...t.get(s)||[]];for(;r.length;){let i=r.pop();if(!o.has(i)){o.add(i);for(let a of t.get(i)||[])o.has(a)||r.push(a)}}return n.set(s,o),o}}function _B(e,t){let n=(e||[]).map(([r,i])=>[js(r),js(i)]),s=RB(n.map(([r,i])=>[i,r])),o=new Map;for(let r of t){let i=js(r);o.set(i,new Set([i,...s(i)]))}return o}function xj(e,t,n){let s=js(t),o=js(n);if(s===o)return!0;let r=e&&e.roleClosure?e.roleClosure.get(o):null;return r?r.has(s):!1}function ed(e,t,n,s){let o=[];for(let r of e.edges)if(r.from===n&&xj(t,r.r,s))o.push({to:r.to,fromFacts:r.fromFacts});else if(r.to===n){let i=t&&t.inverseOf?t.inverseOf.get(js(r.r)):null;i&&xj(t,i,s)&&o.push({to:r.from,fromFacts:r.fromFacts})}return o}function Qu(e,t){return t==="fresh-0"?!1:e&&e.namedIndividuals&&e.namedIndividuals.has(t)?!0:!AB.test(t)}function Za(e,t){return e<t?`${e}\u241F${t}`:`${t}\u241F${e}`}function IB(e,t,n,s){if(t===n)return;let o=Za(t,n),r=e.inequalityFrom.get(o);e.inequalityFrom.set(o,qt(r?[...r,...s]:s))}function Pj(e,t,n,s){return n===s?!1:Qu(t,n)&&Qu(t,s)?!0:e.inequalityFrom.has(Za(n,s))}function Mj(e,t,n){let s=e.inequalityFrom.get(Za(t,n));return s?s.slice():[]}function OB(e,t,n){let s=Qu(e,t),o=Qu(e,n);return s&&!o?[t,n]:o&&!s?[n,t]:t<n?[t,n]:[n,t]}function Fj(e,t,n,s){if(n===s)return n;let[o,r]=OB(t,n,s),i=e.nodes.get(o),a=e.nodes.get(r);if(!i||!a)return o;for(let[d,{expr:p,from:f}]of a.labels){let h=i.labels.get(d);i.labels.set(d,{expr:p,from:h?qt([...h.from,...f]):f.slice()})}let c=[],l=new Map;for(let d of e.edges){let p=d.from===r?o:d.from,f=d.to===r?o:d.to,h=`${p}\u241F${d.r}\u241F${f}`,m=l.get(h);if(m)m.fromFacts=qt([...m.fromFacts,...d.fromFacts]);else{let b={from:p,r:d.r,to:f,fromFacts:d.fromFacts.slice()};l.set(h,b),c.push(b)}}e.edges=c;for(let d of e.nodes.values())d.parent===r&&(d.parent=o);let u=new Map;for(let[d,p]of e.inequalityFrom){let[f,h]=d.split("\u241F"),m=f===r?o:f,b=h===r?o:h;if(m===b)continue;let g=Za(m,b),w=u.get(g);u.set(g,w?qt([...w,...p]):p)}return e.inequalityFrom=u,e.nodes.delete(r),o}function Xm(e,t){return{id:e,labels:new Map,parent:t??null,branchedOn:new Set,appliedAxioms:new Set,successorCount:0}}function ns(e,t,n){let s=He(t);return e.labels.has(s)?!1:(e.labels.set(s,{expr:t,from:qt(n)}),!0)}function Ti(e){return[...e.labels.entries()].sort((t,n)=>Ot(t[0],n[0]))}function Zu(e){if(e.labels.has("bot"))return{nodeId:e.id,keyA:"bot",keyB:"bot",premises:e.labels.get("bot").from.slice()};let t=[...e.labels.keys()].sort();for(let n of t){let{expr:s,from:o}=e.labels.get(n),r=He(ln(ks(s)));if(r<=n)continue;let i=e.labels.get(r);if(i)return{nodeId:e.id,keyA:n,keyB:r,premises:qt([...o,...i.from])}}return null}function kj(e,t){let n=new Set;for(let s of e.edges)s.to===t&&n.add(s.r);return n}function Dj(e,t,n){let s=[...e.labels.keys()],o=!!(n&&n.inverseOf&&n.inverseOf.size>0),r=o?kj(t,e.id):null,i=e.parent;for(;i;){let a=t.nodes.get(i);if(!a)break;if(s.length===a.labels.size&&s.every(c=>a.labels.has(c))){if(!o)return!0;let c=kj(t,a.id);if(r.size===c.size&&[...r].every(l=>c.has(l)))return!0}i=a.parent}return!1}function jj(e){let t=new Map;for(let[n,s]of e.nodes)t.set(n,{id:s.id,labels:new Map(s.labels),parent:s.parent,branchedOn:new Set(s.branchedOn),appliedAxioms:new Set(s.appliedAxioms),successorCount:s.successorCount});return{nodes:t,edges:e.edges.slice(),closed:!1,clash:null,inequalityFrom:new Map(e.inequalityFrom),choices:(e.choices||[]).slice()}}function CB(e){for(let t of e.nodes.values())for(let[,{expr:n,from:s}]of Ti(t)){if(n.t!=="and")continue;let o=!1;for(let r of n.cs)ns(t,r,s)&&(o=!0);if(o)return{applied:!0,touched:[t.id]}}return{applied:!1,touched:[]}}function NB(e,t){let n=new Map;for(let o of e.nodes.values())for(let r of o.labels.keys())r.startsWith("nom(")&&(n.has(r)||n.set(r,[]),n.get(r).push(o.id));let s=[...n.keys()].sort();for(let o of s){let r=[...new Set(n.get(o))].sort();if(r.length<2)continue;let[i,a]=r;if(Pj(e,t,i,a)){let c=e.nodes.get(i).labels.get(o)?.from||[],l=e.nodes.get(a).labels.get(o)?.from||[];return{kind:"clash",clash:{nodeId:i,keyA:o,keyB:`merge(${i},${a})`,premises:qt([...c,...l,...Mj(e,i,a)])}}}return{kind:"merge",a:i,b:a}}return{kind:"none"}}function LB(e,t){let n=t&&t.transitiveRoles instanceof Set?t.transitiveRoles:null;for(let s of e.nodes.values())for(let[,{expr:o,from:r}]of Ti(s)){if(o.t!=="all")continue;let i=[];for(let{to:a,fromFacts:c}of ed(e,t,s.id,o.r)){let l=e.nodes.get(a);if(!l)continue;let u=[...r,...c];ns(l,o.c,u)&&i.push(l.id),n&&n.has(o.r)&&ns(l,o,u)&&i.push(l.id)}if(i.length)return{applied:!0,touched:i}}return{applied:!1,touched:[]}}function PB(e,t){for(let n of e.nodes.values())for(let s=0;s<t.axioms.length;s+=1){if(n.appliedAxioms.has(s))continue;let o=t.axioms[s];if(n.appliedAxioms.add(s),ns(n,o.disjunction,o.from))return{applied:!0,touched:[n.id]}}return{applied:!1,touched:[]}}function MB(e,t){if(He(t)==="bot")return[];let n=He(ln(ks(t))),s=e.labels.get(n);return s?s.from:null}function FB(e,t,n){return n.some(s=>e.unionOrOneOfIds&&e.unionOrOneOfIds.has(s))&&t.every(s=>s.t==="atom"||s.t==="nom")}function DB(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of Ti(n)){if(o.t!=="or"||n.branchedOn.has(s))continue;let i=[...o.cs].sort((d,p)=>Ot(He(d),He(p)));if(i.some(d=>n.labels.has(He(d)))){n.branchedOn.add(s);continue}let a=i.map(d=>({c:d,clashFrom:MB(n,d)})),c=a.filter(d=>d.clashFrom===null).map(d=>d.c),l=a.filter(d=>d.clashFrom!==null).flatMap(d=>d.clashFrom),u=FB(t,i,r)?{cs:i,from:r}:null;return c.length===0?{kind:"clash",clash:{nodeId:n.id,keyA:He(i[0]),keyB:He(ln(ks(i[0]))),premises:qt([...r,...l])},choice:u}:c.length===1?(n.branchedOn.add(s),ns(n,c[0],[...r,...l]),{kind:"applied",touched:[n.id],choice:u}):(n.branchedOn.add(s),{kind:"split",node:n,from:r,disjuncts:c,choice:u})}return{kind:"none"}}function BB(e,t){for(let n of e.nodes.values())if(!Dj(n,e,t))for(let[,{expr:s,from:o}]of Ti(n)){if(s.t!=="some")continue;let r=He(s.c);if(ed(e,t,n.id,s.r).some(c=>e.nodes.get(c.to)?.labels.has(r)))continue;n.successorCount+=1;let a=Xm(`${n.id}.${n.successorCount}`,n.id);return ns(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()}),{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function zB(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of Ti(n)){if(o.t!=="atMost")continue;let i=He(o.c),a=[...new Set(ed(e,t,n.id,o.r).map(u=>u.to))].filter(u=>e.nodes.get(u)?.labels.has(i)).sort();if(a.length<=o.n)continue;let c=[];for(let u=0;u<a.length;u+=1)for(let d=u+1;d<a.length;d+=1)c.push([a[u],a[d]]);if(c.length===0){let u=e.nodes.get(a[0])?.labels.get(i)?.from||[];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`witness(${a[0]})`,premises:qt([...r,...u])}}}let l=c.filter(([u,d])=>!Pj(e,t,u,d));if(l.length===0){let[u,d]=c[0];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`merge(${u},${d})`,premises:qt([...r,...Mj(e,u,d)])}}}return{kind:"split-merge",pairs:l}}return{kind:"none"}}function UB(e,t){for(let n of e.nodes.values())if(!Dj(n,e,t))for(let[,{expr:s,from:o}]of Ti(n)){if(s.t!=="atLeast")continue;let r=He(s.c),i=[...new Set(ed(e,t,n.id,s.r).map(c=>c.to))].filter(c=>e.nodes.get(c)?.labels.has(r)).sort();if(i.length>=s.n)continue;n.successorCount+=1;let a=Xm(`${n.id}.${n.successorCount}`,n.id);ns(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()});for(let c of i)IB(e,a.id,c,o);return{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function WB(e,t){for(let n of t){let s=e.nodes.get(n),o=s&&Zu(s);if(o)return o}return null}function Rr(e,t){let n=WB(e,t);return n?{kind:"clash",clash:n}:{kind:"applied"}}function GB(e,t){let n=CB(e);if(n.applied)return Rr(e,n.touched);let s=LB(e,t);if(s.applied)return Rr(e,s.touched);let o=NB(e,t);if(o.kind==="clash")return o;if(o.kind==="merge"){let u=Fj(e,t,o.a,o.b);return Rr(e,[u])}let r=PB(e,t);if(r.applied)return Rr(e,r.touched);let i=DB(e,t);if(i.kind==="clash")return i;if(i.kind==="applied")return i.choice&&e.choices.push(i.choice),Rr(e,i.touched);if(i.kind==="split")return i;let a=zB(e,t);if(a.kind==="clash"||a.kind==="split-merge")return a;let c=UB(e,t);if(c.applied)return Rr(e,c.touched);let l=BB(e,t);return l.applied?Rr(e,l.touched):{kind:"done"}}function VB(e){let t=[...e.nodes.values()].map(s=>({id:s.id,parent:s.parent,labels:[...s.labels.entries()].sort((o,r)=>Ot(o[0],r[0])).map(([,{expr:o,from:r}])=>({expr:o,from:r}))})),n=e.edges.map(({from:s,r:o,to:r,fromFacts:i})=>({from:s,r:o,to:r,fromFacts:i.slice()}));return{nodes:t,edges:n}}function KB(e,t,n){let s=Hm(n.maxSteps,Ij),o=Hm(n.maxBranches,Oj),r=Hm(n.maxNodes,Cj),i=[e],a=0,c=1,l=[];for(;i.length;){let u=i.pop();if(u.closed){l.push(u.clash);continue}if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};for(;;){let d=GB(u,t);if(d.kind==="clash"){let p=d.choice?[...u.choices,d.choice]:u.choices.slice();l.push({...d.clash,choices:p});break}if(d.kind==="applied"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};continue}if(d.kind==="split"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.disjuncts.map(f=>{let h=jj(u);d.choice&&h.choices.push(d.choice);let m=h.nodes.get(d.node.id);ns(m,f,d.from);let b=Zu(m);return b&&(h.closed=!0,h.clash={...b,choices:h.choices.slice()}),h});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}if(d.kind==="split-merge"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.pairs.map(([f,h])=>{let m=jj(u),b=Fj(m,t,f,h),g=m.nodes.get(b),w=g&&Zu(g);return w&&(m.closed=!0,m.clash={...w,choices:m.choices.slice()}),m});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}return{status:"satisfiable",model:VB(u),steps:a,branches:c}}if(c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c}}return{status:"unsatisfiable",clashes:l,steps:a,branches:c}}function HB(e,t){let n=new Map,s=i=>(n.has(i)||n.set(i,Xm(i,null)),n.get(i));for(let i of e.individuals||[])s(i);for(let i of e.assertions||[])ns(s(i.ind),i.expr,i.from);for(let i of t||[])!i||!i.ind||!i.expr||ns(s(i.ind),ln(i.expr),i.from||[]);for(let[i,a]of e.nominalIndividuals||[])ns(s(i),{t:"nom",ind:i},a);let o=new Map;for(let i of e.differentFrom||[]){if(!i||!i.a||!i.b||i.a===i.b)continue;let a=Za(i.a,i.b),c=o.get(a);o.set(a,qt(c?[...c,...i.from]:i.from))}let r=[];for(let i of e.roleAssertions||[])s(i.a),s(i.b),r.push({from:i.a,r:i.r,to:i.b,fromFacts:i.from.slice()});return{nodes:n,edges:r,closed:!1,clash:null,inequalityFrom:o,choices:[]}}function Jm(e,t=[],n={}){let s=HB(e,t);for(let r of s.nodes.values()){let i=Zu(r);if(i){s.closed=!0,s.clash={...i,choices:[]};break}}let o=KB(s,e,n);return o.status==="exhausted"?{satisfiable:null,exhausted:o.reason,steps:o.steps,branches:o.branches}:o.status==="satisfiable"?{satisfiable:!0,model:o.model,steps:o.steps,branches:o.branches}:{satisfiable:!1,closedClashes:o.clashes,steps:o.steps,branches:o.branches}}function Qm(e,t,n){let s=Jm(e,t,n);if(s.satisfiable===null)return{status:"exhausted",reason:s.exhausted,steps:s.steps,branches:s.branches};if(s.satisfiable===!1){let o=qt(s.closedClashes.flatMap(l=>l?.premises||[])),r=new Map;for(let l of s.closedClashes)for(let u of l?.choices||[])for(let d of u.cs)r.set(He(d),d);let i=[...r.keys()].sort(),a=i.slice(0,Lj).map(l=>r.get(l)),c=i.length;return{status:"proved",premises:o,cases:a,casesTotal:c,steps:s.steps,branches:s.branches}}return{status:"disproved",model:s.model,steps:s.steps,branches:s.branches}}function qB(e,t,n,s={}){return Qm(e,[{ind:t,expr:ln(ks(n)),from:[]}],s)}function YB(e,t,n,s={}){let o=ln(_j([De(t),ks(De(n))]));return Qm(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function XB(e,t,n,s={}){let o=ln(_j([De(t),De(n)]));return Qm(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function JB(e){return e?e.keyA==="bot"?"bottom":`complement:${e.keyA}~${e.keyB}`:"unsatisfiable"}function QB(e){let t=Array.isArray(e)?e.filter(P=>P&&P.subject&&P.predicate):[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=[],d=[],p=[],f=[],h=new Set,m=[],b=[],g=[],w=[],y=(P,K,W)=>{P.has(K)||P.set(K,[]),P.get(K).push(W)};for(let P of t){let K=String(P.predicate).trim().toLowerCase();K==="owl:onproperty"?n.set(P.subject,{object:P.object,id:P.id}):K==="owl:somevaluesfrom"?s.set(P.subject,{object:P.object,id:P.id}):K==="owl:allvaluesfrom"?o.set(P.subject,{object:P.object,id:P.id}):K==="owl:onclass"?r.set(P.subject,{object:P.object,id:P.id}):K==="owl:mincardinality"?i.set(P.subject,{kind:"min",n:Number(P.object),id:P.id}):K==="owl:maxcardinality"?i.set(P.subject,{kind:"max",n:Number(P.object),id:P.id}):K==="owl:cardinality"?i.set(P.subject,{kind:"exact",n:Number(P.object),id:P.id}):K==="rdfs:subclassof"?u.push(P):K==="owl:disjointwith"?d.push(P):K==="rdf:type"?(p.push(P),String(P.object||"").toLowerCase()==="transitiveproperty"&&h.add(P.subject)):K==="mgxneg:subclassof"?f.push(P):K==="owl:unionof"?y(a,P.subject,P):K==="owl:complementof"?c.set(P.subject,P):K==="rdfs:subpropertyof"?m.push(P):K==="owl:differentfrom"?b.push(P):K==="owl:oneof"?y(l,P.subject,P):K==="owl:inverseof"?g.push(P):w.push(P)}let S=new Set;for(let P of p){let K=String(P.object||"").toLowerCase();qm.has(K)||S.add(P.subject)}let T=Aj(S,w),v=P=>T.has(P)||Tj.test(P),E=w.filter(P=>v(P.subject)&&v(P.object)).sort((P,K)=>Ot(P.subject,K.subject)||Ot(P.predicate,K.predicate)||Ot(P.object,K.object)).slice(0,Nj).map(P=>({a:P.subject,r:P.predicate,b:P.object,from:[P.id]})),I=(P,K,W)=>({sub:P,sup:K,from:qt(W),disjunction:ln(Km([ks(P),K]))}),k=[],R=[];for(let P of u){let K=P.object;if(!n.has(K)){k.push(I(De(P.subject),De(K),[P.id]));continue}let W=n.get(K),C=s.get(K);if(C){k.push(I(De(P.subject),xB(W.object,De(C.object)),[P.id,W.id,C.id]));continue}let F=o.get(K);if(F){k.push(I(De(P.subject),kB(W.object,De(F.object)),[P.id,W.id,F.id]));continue}let N=i.get(K),B=r.get(K);if(N&&B){let z=[P.id,W.id,B.id,N.id];N.kind==="min"?k.push(I(De(P.subject),{t:"atLeast",n:N.n,r:W.object,c:De(B.object)},z)):N.kind==="max"?k.push(I(De(P.subject),{t:"atMost",n:N.n,r:W.object,c:De(B.object)},z)):N.kind==="exact"&&(k.push(I(De(P.subject),{t:"atLeast",n:N.n,r:W.object,c:De(B.object)},z)),k.push(I(De(P.subject),{t:"atMost",n:N.n,r:W.object,c:De(B.object)},z)))}}for(let P of d)v(P.subject)?R.push({ind:P.subject,expr:ln(ks(De(P.object))),from:[P.id]}):k.push(I(De(P.subject),ln(ks(De(P.object))),[P.id]));for(let P of p)qm.has(String(P.object||"").toLowerCase())||R.push({ind:P.subject,expr:De(P.object),from:[P.id]});for(let P of f)R.push({ind:P.subject,expr:ln(ks(De(P.object))),from:[P.id]});for(let[P,K]of a){let W=[...K].sort((B,z)=>Ot(String(B.object),String(z.object))),C=W.map(B=>De(B.object)),F=W.map(B=>B.id),N=ln(Km(C));k.push(I(De(P),N,F)),k.push(I(N,De(P),F))}for(let[P,K]of c){let W=ln(ks(De(K.object)));k.push(I(De(P),W,[K.id])),k.push(I(W,De(P),[K.id]))}let $=new Map;for(let[P,K]of l){let W=[...K].sort((N,B)=>Ot(String(N.object),String(B.object))),C=W.map(N=>({t:"nom",ind:N.object})),F=W.map(N=>N.id);k.push(I(De(P),ln(Km(C)),F));for(let N of W){k.push(I({t:"nom",ind:N.object},De(P),[N.id]));let B=$.get(N.object);$.set(N.object,B?qt([...B,N.id]):[N.id])}}let _=b.map(P=>({a:P.subject,b:P.object,from:[P.id]})).sort((P,K)=>Ot(P.a,K.a)||Ot(P.b,K.b)),O=new Map;for(let P of g)O.set(P.subject,P.object),O.has(P.object)||O.set(P.object,P.subject);let x=new Set;for(let{object:P}of n.values())x.add(P);for(let P of E)x.add(P.r);let j=m.map(P=>[P.subject,P.object]).sort((P,K)=>Ot(P[0],K[0])||Ot(P[1],K[1])),M=new Set([...x,...j.flat(),...O.keys(),...O.values()]),D=_B(j,M);k.sort((P,K)=>Ot(He(P.sub),He(K.sub))||Ot(He(P.sup),He(K.sup))||Ot(P.from.join(","),K.from.join(","))),R.sort((P,K)=>Ot(P.ind,K.ind)||Ot(He(P.expr),He(K.expr)));let H=[...new Set([...R.map(P=>P.ind),...E.flatMap(P=>[P.a,P.b])])].sort(),Y=new Set(H),Z=new Set([...[...a.values()].flatMap(P=>P.map(K=>K.id)),...[...l.values()].flatMap(P=>P.map(K=>K.id))]);return{axioms:k,assertions:R,roles:[...x].sort(),individuals:H,transitiveRoles:h,roleClosure:D,namedIndividuals:Y,nominalIndividuals:$,differentFrom:_,inverseOf:O,roleAssertions:E,unionOrOneOfIds:Z}}function ZB(e,t){return{axioms:e.axioms,assertions:(e.assertions||[]).filter(n=>n.ind===t),roles:e.roles,individuals:[t],transitiveRoles:e.transitiveRoles,roleAssertions:e.roleAssertions,roleClosure:e.roleClosure,namedIndividuals:e.namedIndividuals,nominalIndividuals:e.nominalIndividuals,differentFrom:e.differentFrom,inverseOf:e.inverseOf,unionOrOneOfIds:e.unionOrOneOfIds}}function ez(e,t=null,n={}){let s=[...new Set(Array.isArray(t)&&t.length?t:e.individuals||[])].sort(),o=[];for(let r of s){let i=ZB(e,r);if(!i.assertions.length)continue;let a=Jm(i,[],n);if(a.satisfiable===null||a.satisfiable===!0)continue;let c=qt(a.closedClashes.flatMap(l=>l?.premises||[]));o.push({subject:r,premises:c,kind:JB(a.closedClashes[0])})}return o.sort((r,i)=>Ot(r.subject,i.subject)),o}function xs(e,t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)}function tz(e,t,{hops:n=Ym}={}){let s=Array.isArray(e)?e.filter(j=>j&&j.subject&&j.predicate):[],o=jB(n,Ym),r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,h=new Map,m=new Map,b=[],g=new Map,w=new Set;for(let j of s){if(String(j.predicate).trim().toLowerCase()!=="rdf:type")continue;let M=String(j.object||"").toLowerCase();qm.has(M)||w.add(j.subject)}let y=s.filter(j=>!Rj.has(String(j.predicate).trim().toLowerCase())),S=Aj(w,y),T=j=>S.has(j)||Tj.test(j);for(let j of s){let M=String(j.predicate).trim().toLowerCase();M==="rdfs:subclassof"?(xs(r,j.subject,j.object),xs(i,j.object,j.subject)):M==="owl:onproperty"?a.set(j.subject,j.object):M==="owl:somevaluesfrom"||M==="owl:allvaluesfrom"||M==="owl:onclass"?(c.set(j.subject,j.object),xs(l,j.object,j.subject)):M==="owl:unionof"?(xs(u,j.subject,j.object),xs(d,j.object,j.subject)):M==="owl:complementof"?(p.set(j.subject,j.object),xs(f,j.object,j.subject)):M==="owl:oneof"?(xs(h,j.subject,j.object),xs(m,j.object,j.subject)):!Rj.has(M)&&T(j.subject)&&T(j.object)&&(b.push(j),xs(g,j.subject,j.object),xs(g,j.object,j.subject))}let v=new Map;function E(j){let M=v.get(j);if(M)return M;let D=new Set,H=[...r.get(j)||[],...i.get(j)||[]];for(;H.length;){let Y=H.pop();if(!D.has(Y)){D.add(Y);for(let Z of r.get(Y)||[])D.has(Z)||H.push(Z);for(let Z of i.get(Y)||[])D.has(Z)||H.push(Z)}}v.set(j,D);for(let Y of D)v.has(Y)||v.set(Y,D);return D}let I=new Set,k=new Map,R=[];function $(j,M){if(!j)return;let D=k.get(j);D!==void 0&&D>=M||(k.set(j,M),R.push({term:j,hopsLeft:M}))}let _=[...new Set((Array.isArray(t)?t:[]).map(j=>V(j)).filter(Boolean))];for(let j of _)$(j,o);let O=0;for(;O<R.length;){let{term:j,hopsLeft:M}=R[O];if(O+=1,k.get(j)===M){I.add(j);for(let D of E(j))I.add(D),$(D,M);if(!(M<=0)){c.has(j)&&$(c.get(j),o);for(let D of l.get(j)||[])$(D,o);for(let D of u.get(j)||[])$(D,M-1);for(let D of d.get(j)||[])$(D,M-1);p.has(j)&&$(p.get(j),M-1);for(let D of f.get(j)||[])$(D,M-1);for(let D of h.get(j)||[])$(D,M-1);for(let D of m.get(j)||[])$(D,M-1);for(let D of g.get(j)||[])$(D,o)}}}let x=new Set;for(let[j,M]of a)I.has(j)&&x.add(js(M));for(let j of b)(I.has(j.subject)||I.has(j.object))&&x.add(js(j.predicate));return s.filter(j=>{if(I.has(j.subject)||I.has(j.object))return!0;let M=String(j.predicate).trim().toLowerCase();return M==="rdfs:subpropertyof"||M==="owl:inverseof"||M==="rdf:type"&&String(j.object).toLowerCase()==="transitiveproperty"?x.has(js(j.subject)):!1})}function sz(e){return(Array.isArray(e)?e:[]).some(n=>{let s=String(n?.predicate||"").trim().toLowerCase();return nz.has(s)?!0:s==="rdf:type"&&String(n?.object||"").toLowerCase()==="transitiveproperty"})}var Ot,De,ks,_j,Km,xB,kB,Tj,js,qm,Ij,Oj,Cj,TB,Ym,Nj,Lj,AB,Rj,nz,eg=L(()=>{Ve();Ot=(e,t)=>e<t?-1:e>t?1:0,De=e=>({t:"atom",name:e}),ks=e=>({t:"not",c:e}),_j=e=>({t:"and",cs:e}),Km=e=>({t:"or",cs:e}),xB=(e,t)=>({t:"some",r:e,c:t}),kB=(e,t)=>({t:"all",r:e,c:t});Tj=/[./\\#:@]/;js=e=>V(e);qm=new Set(["restriction","transitiveproperty","class"]),Ij=5e3,Oj=256,Cj=512,TB=.95,Ym=4,Nj=256,Lj=6,AB=/\.\d+$/;Rj=new Set(["owl:onproperty","owl:somevaluesfrom","owl:allvaluesfrom","owl:onclass","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subclassof","owl:disjointwith","rdf:type","mgxneg:subclassof","owl:unionof","owl:complementof","rdfs:subpropertyof","owl:differentfrom","owl:oneof","owl:inverseof"]);nz=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"])});var Vj={};Nt(Vj,{BOT:()=>yn,DEFAULT_EL_BUDGET:()=>rg,DEFAULT_EL_ROUNDS:()=>ig,EL_RESTRICTION_RULE:()=>og,EL_RULE_CONFIDENCE:()=>tg,EL_SUBSUMPTION_RULE:()=>sg,ENTAILED_EL_PROVENANCE:()=>Wj,ENTAILED_EL_RESTRICTION_PROVENANCE:()=>tc,TOP:()=>Oo,classifyEl:()=>yz,elGoalAxioms:()=>zj,elGoalFor:()=>Uj,elUnsatisfiableClasses:()=>wz,normalizeElTBox:()=>ng,proveElSubsumption:()=>bz,saturateEl:()=>td});function rz(e,t,n){for(let s of t)if(typeof e?.[s]!="function")throw new TypeError(`${n} needs a store option carrying { ${t.join(", ")} } (memory/core.mjs's read/write functions) \u2014 missing ${s}`);return e}function iz(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function ng(e,{budget:t=500}={}){let s=[...(Array.isArray(e)?e:[]).filter($=>$&&$.id&&$.subject&&$.predicate&&$.object!==void 0&&$.object!==null)].sort(oz),o=s.length>t,r=o?s.slice(0,t):s,i=new Set,a=new Set,c=$=>{$&&$!==Oo&&$!==yn&&i.add($)},l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,h=new Map,m=[],b=[],g=new Map,w=[];for(let $ of r){if($.subject===Oo||$.subject===yn||$.object===Oo||$.object===yn)continue;let _=$.predicate;lz(_)?(l.set($.subject,$),c($.subject)):uz(_)?(u.set($.subject,$),c($.subject),c($.object)):dz(_)?d.set($.subject,$):fz(_)?(p.set($.subject,$),c($.subject),c($.object)):gz(_)?(f.set($.subject,$),c($.subject)):pz(_)?(h.has($.subject)||h.set($.subject,[]),h.get($.subject).push($),c($.subject),c($.object)):Bj(_)?(m.push($),c($.subject),c($.object)):cz(_)?(b.push($),c($.subject),c($.object)):az(_)&&$.object==="transitiveproperty"?(g.has($.subject)||g.set($.subject,$),a.add($.subject)):hz(_)&&(w.push($),a.add($.subject),a.add($.object))}let y=new Set([...l.keys()].filter($=>u.has($))),S=new Set([...l.keys()].filter($=>d.has($)));for(let $ of S)i.delete($);let T=new Map;for(let $ of y)T.set($,{role:l.get($).object,filler:u.get($).object});let v=new Map;for(let $ of lp(r))$.kind!=="min"&&$.kind!=="exactly"||$.n>=1&&(y.has($.restriction)||!l.has($.restriction)||!p.has($.restriction)||!f.has($.restriction)||(v.set($.restriction,$.onClass),T.set($.restriction,{role:"has",filler:$.onClass})));let E=new Set(h.keys()),I=[],k=new Map;for(let $ of m){let _=$.subject,O=$.object;if(E.has(_)){k.has(_)||k.set(_,$);continue}if(y.has(O)){let{role:x,filler:j}=T.get(O),M=l.get(O),D=u.get(O);I.push({form:"someRight",sub:_,role:x,filler:j,from:[$.id,M.id,D.id]}),I.push({form:"someLeft",role:x,filler:j,sup:O,from:[M.id,D.id]});continue}if(v.has(O)){let x=v.get(O),j=l.get(O),M=p.get(O),D=f.get(O);I.push({form:"someRight",sub:_,role:"has",filler:x,from:[$.id,j.id,M.id,D.id]}),I.push({form:"someLeft",role:"has",filler:x,sup:O,from:[j.id,M.id,D.id]});continue}S.has(O)||I.push({form:"sub",sub:_,sup:O,from:[$.id]})}for(let[$,_]of h){let O=k.get($);if(!O)continue;let x=new Map;for(let H of _)x.has(H.object)||x.set(H.object,H);let j=[...x.keys()].sort();if(j.length<2)continue;let M=j[0],D=[x.get(j[0]).id];for(let H=1;H<j.length;H+=1){let Y=j[H],Z=H===j.length-1,P=Z?O.object:`${M}-and-${Y}`,K=[M,Y].sort(),W=x.get(Y).id,C=Z?[...D,W,O.id]:[...D,W];I.push({form:"and",subs:K,sup:P,from:C}),D=[...D,W],M=P}}for(let $ of b)I.push({form:"and",subs:[$.subject,$.object].sort(),sup:yn,from:[$.id]});let R=[];for(let $ of[...g.keys()].sort())R.push({kind:"transitive",role:$,from:[g.get($).id]});for(let $ of[...w].sort(Zt))R.push({kind:"sub",sub:$.subject,sup:$.object,from:[$.id]});return{axioms:I,roleAxioms:R,concepts:i,roles:a,restrictionOf:T,truncated:o}}function td(e,{budget:t=2e3,rounds:n=64,focus:s=null}={}){let o=e?.axioms||[],r=e?.roleAxioms||[],i=[...e?.concepts||[]].sort(),a=s instanceof Set?s.size?s:null:iz(s),c=(...$)=>!a||$.some(_=>a.has(_)),l=new Map,u=new Map,d=new Map,p=new Map;for(let $ of o)if($.form==="sub")l.has($.sub)||l.set($.sub,[]),l.get($.sub).push({sup:$.sup,from:$.from});else if($.form==="and"){let[_,O]=$.subs;for(let[x,j]of[[_,O],[O,_]])u.has(x)||u.set(x,[]),u.get(x).push({other:j,sup:$.sup,from:$.from})}else if($.form==="someRight")d.has($.sub)||d.set($.sub,[]),d.get($.sub).push({role:$.role,filler:$.filler,from:$.from});else if($.form==="someLeft"){let _=`${$.role}${ue}${$.filler}`;p.has(_)||p.set(_,[]),p.get(_).push({sup:$.sup,from:$.from})}let f=new Map,h=new Set,m=new Map;for(let $ of r)$.kind==="sub"?(f.has($.sub)||f.set($.sub,[]),f.get($.sub).push({sup:$.sup,from:$.from})):$.kind==="transitive"&&(h.add($.role),m.has($.role)||m.set($.role,$.from));let b=new Map;for(let $ of i)b.set($,new Set([$,Oo]));let g=new Map,w=new Map,y=new Map,S=($,_)=>$===_?[]:w.get(`${$}${ue}${_}`)||[],T=($,_)=>y.get(`${$}${ue}${_}`)||[],v=(...$)=>{let _=new Set,O=[];for(let x of $)for(let j of x||[])!j||_.has(j)||(_.add(j),O.push(j));return O},E=0,I=!1,k=0;for(let $=0;$<n;$+=1){k+=1;let _=[];for(let[x,j]of b)for(let M of j)for(let{sup:D,from:H}of l.get(M)||[])j.has(D)||c(x,M,D)&&_.push({kind:"sub",A:x,X:D,from:v(S(x,M),H),sortKey:`1${ue}${x}${ue}${D}${ue}${M}`});for(let[x,j]of b)for(let M of j)for(let{other:D,sup:H,from:Y}of u.get(M)||[])j.has(D)&&(j.has(H)||c(x,M,D,H)&&_.push({kind:"sub",A:x,X:H,from:v(S(x,M),S(x,D),Y),sortKey:`2${ue}${x}${ue}${H}${ue}${[M,D].sort().join(ue)}`}));for(let[x,j]of b)for(let M of j)for(let{role:D,filler:H,from:Y}of d.get(M)||[]){let Z=`${x}${ue}${H}`;(g.get(D)||ec).has(Z)||c(x,M,H)&&_.push({kind:"role",role:D,A:x,B:H,from:v(S(x,M),Y),sortKey:`3${ue}${D}${ue}${x}${ue}${H}${ue}${M}`})}for(let[x,j]of g)for(let M of j){let[D,H]=M.split(ue),Y=b.get(H)||ec;for(let Z of Y)for(let{sup:P,from:K}of p.get(`${x}${ue}${Z}`)||[]){let W=b.get(D);!W||W.has(P)||c(D,H,Z,P)&&_.push({kind:"sub",A:D,X:P,from:v(T(x,M),S(H,Z),K),sortKey:`4${ue}${D}${ue}${P}${ue}${x}${ue}${H}${ue}${Z}`})}}for(let[x,j]of g)for(let M of j){let[D,H]=M.split(ue);if(!(b.get(H)||ec).has(yn))continue;let Y=b.get(D);!Y||Y.has(yn)||c(D,H)&&_.push({kind:"sub",A:D,X:yn,from:v(T(x,M),S(H,yn)),sortKey:`5${ue}${D}${ue}${x}${ue}${H}`})}for(let[x,j]of g)for(let{sup:M,from:D}of f.get(x)||[])for(let H of j){if((g.get(M)||ec).has(H))continue;let[Y,Z]=H.split(ue);c(Y,Z)&&_.push({kind:"role",role:M,A:Y,B:Z,from:v(T(x,H),D),sortKey:`6${ue}${M}${ue}${Y}${ue}${Z}${ue}${x}`})}for(let x of[...h].sort()){let j=g.get(x);if(j)for(let M of j){let[D,H]=M.split(ue);for(let Y of j){let[Z,P]=Y.split(ue);if(Z!==H)continue;let K=`${D}${ue}${P}`;j.has(K)||c(D,H,P)&&_.push({kind:"role",role:x,A:D,B:P,from:v(T(x,M),T(x,Y),m.get(x)),sortKey:`7${ue}${x}${ue}${D}${ue}${P}${ue}${H}`})}}}if(!_.length){I=!0;break}_.sort((x,j)=>x.sortKey<j.sortKey?-1:x.sortKey>j.sortKey?1:0);let O=!1;for(let x of _){if(E>=t)break;if(x.kind==="sub"){let j=b.get(x.A);if(!j||j.has(x.X))continue;j.add(x.X),w.set(`${x.A}${ue}${x.X}`,x.from),E+=1,O=!0}else{g.has(x.role)||g.set(x.role,new Set);let j=g.get(x.role),M=`${x.A}${ue}${x.B}`;if(j.has(M))continue;j.add(M),y.set(`${x.role}${ue}${M}`,x.from),E+=1,O=!0}}if(E>=t)break;if(!O){I=!0;break}}let R=[...b.entries()].filter(([,$])=>$.has(yn)).map(([$])=>$).sort();return{subsumers:b,roleEdges:g,unsatisfiable:R,derivationOf:w,rounds:k,truncated:!I}}function zj(e,t,{budget:n=200}={}){let o=[...(e?.axioms||[]).filter(a=>a.form==="someRight")].sort((a,c)=>{let l=`${a.role}${ue}${a.filler}${ue}${a.sub}`,u=`${c.role}${ue}${c.filler}${ue}${c.sub}`;return l<u?-1:l>u?1:0}),r=[],i=new Set;for(let a of o){let l=[...t?.get(a.filler)||new Set([a.filler,Oo])].filter(u=>u!==Oo&&u!==yn).sort();for(let u of l){let d=`some-${a.role}-${u}`;if(!i.has(d)&&(i.add(d),r.push({form:"someLeft",role:a.role,filler:u,sup:d,from:[]}),r.length>=n))return r}}return r}function Uj(e,t){let n=V(e),s=V(t),o=`some-${n}-${s}`;return{axiom:{form:"someLeft",role:n,filler:s,sup:o,from:[]},name:o}}function bz(e,t,{role:n,filler:s},{budget:o=2e3,rounds:r=64}={}){let i=V(t),a=ng(e,{budget:o}),{axiom:c,name:l}=Uj(n,s),u=new Set(a.concepts);u.add(i),u.add(c.filler);let d={...a,axioms:[...a.axioms,c],concepts:u},p=td(d,{budget:o,rounds:r});return(p.subsumers.get(i)||ec).has(l)?{proved:!0,premises:p.derivationOf.get(`${i}${ue}${l}`)||[]}:{proved:!1,exhausted:p.truncated}}function Gj(e,{budget:t=rg,rounds:n=ig,focus:s=null}={}){let o=ng(e,{budget:t}),r=td(o,{budget:t,rounds:n,focus:s}),i=zj(o,r.subsumers),a=new Map(i.map(d=>[d.sup,{role:d.role,filler:d.filler}])),c={...o,axioms:[...o.axioms,...i]},l=td(c,{budget:t,rounds:n,focus:s}),u=o.truncated||r.truncated||l.truncated;return{normalized:o,goals:i,goalInfo:a,finalPass:l,truncated:u}}function wz(e,t={}){let{finalPass:n,truncated:s}=Gj(e,t);return{unsatisfiable:n.unsatisfiable,premisesOf:o=>n.derivationOf.get(`${o}${ue}${yn}`)||[],truncated:s}}async function yz(e,{budget:t=rg,rounds:n=ig,focus:s=null,maxEnvironments:o=ni,store:r}={}){let{loadMemory:i,readFactRows:a,appendFacts:c}=rz(r,["loadMemory","readFactRows","appendFacts"],"classifyEl"),l=await i(e),u=a(l),{normalized:d,goals:p,goalInfo:f,finalPass:h,truncated:m}=Gj(u,{budget:t,rounds:n,focus:s}),b=new Map;for(let R of u)b.set(`${R.subject}${ue}${R.predicate}${ue}${R.object}`,R.trust);let g=new Map(u.map(R=>[R.id,R])),w=R=>(R||[]).map($=>g.get($)?.trust).filter($=>typeof $=="number"),y=new Set(u.filter(R=>Bj(R.predicate)).map(R=>`${R.subject}${ue}${R.object}`)),S=[],T=[],v=new Set,E=[...h.subsumers.keys()].sort();for(let R of E){let $=h.subsumers.get(R);if($.has(yn))continue;let _=[...$].filter(O=>O!==R&&O!==Oo&&O!==yn).sort();for(let O of _){let x=`${R}${ue}${O}`;if(y.has(x))continue;let j=h.derivationOf.get(x)||[],M=f.get(O);if(M){v.has(O)||(v.add(O),S.push({subject:O,predicate:Gt,object:"owl:Restriction",provenance:tc,justification:[j]}),S.push({subject:O,predicate:Pn,object:M.role,provenance:tc,justification:[j]}),S.push({subject:O,predicate:Mn,object:M.filler,provenance:tc,justification:[j]}));let D=w(j),H=S.length;S.push({subject:R,predicate:Be,object:O,provenance:tc,justification:[j],...D.length?{premiseTrusts:D,ruleConfidence:tg}:{}}),T.push({toWriteIndex:H,subject:R,object:O,rule:og})}else if(d.concepts.has(O)){let D=w(j),H=S.length;S.push({subject:R,predicate:Be,object:O,provenance:Wj,justification:[j],...D.length?{premiseTrusts:D,ruleConfidence:tg}:{}}),T.push({toWriteIndex:H,subject:R,object:O,rule:sg})}}}let{ids:I}=await c(e,S),k=T.map(R=>({id:I[R.toWriteIndex],subject:R.subject,object:R.object,rule:R.rule}));return{derived:k,count:k.length,budget:t,rounds:n,truncated:m,unsatisfiable:h.unsatisfiable,goalCount:p.length}}var ue,oz,Oo,yn,Rs,Bj,az,cz,lz,uz,dz,fz,pz,hz,mz,gz,ec,sg,Wj,og,tc,tg,rg,ig,Kj=L(()=>{Ve();Ft();tr();ue="\u241F",oz=(e,t)=>{let n=String(e.id),s=String(t.id);return n<s?-1:n>s?1:0},Oo="top",yn="bot";Rs=e=>String(e||"").trim().toLowerCase(),Bj=e=>Rs(e)==="rdfs:subclassof",az=e=>Rs(e)==="rdf:type",cz=e=>Rs(e)==="owl:disjointwith",lz=e=>Rs(e)==="owl:onproperty",uz=e=>Rs(e)==="owl:somevaluesfrom",dz=e=>Rs(e)==="owl:allvaluesfrom",fz=e=>Rs(e)==="owl:onclass",pz=e=>Rs(e)==="owl:intersectionof",hz=e=>Rs(e)==="rdfs:subpropertyof",mz=new Set(["owl:cardinality","owl:mincardinality","owl:maxcardinality"]),gz=e=>mz.has(Rs(e));ec=new Set;sg="elSubsumption",Wj=`entailed:${sg}`,og="elRestriction",tc=`entailed:${og}`,tg=.95,rg=2e3,ig=64});var Hj={};Nt(Hj,{DEFAULT_REASONING_CONFIG:()=>nd,resolveReasoningConfig:()=>xz});function vz(e,t){let n=Number(e);return Number.isInteger(n)&&n>0?n:t}function Ez(e,t){return typeof e=="boolean"?e:t}function xz(e){let t=e?.reasoning||{},n={...nd};for(let[s,o]of Object.entries($z))t[s]!==void 0&&(n[o]=vz(t[s],nd[o]));for(let[s,o]of Object.entries(Sz))t[s]!==void 0&&(n[o]=Ez(t[s],nd[o]));return n}var nd,$z,Sz,qj=L(()=>{nd=Object.freeze({syllogiseBudget:50,syllogiseDepth:32,classifyBudget:2e3,classifyRounds:64,maxEnvironments:4,proveSteps:5e3,proveBranches:256,proveNodes:512,askProveFallback:!0,askProveSteps:1e3,askProveBranches:64,askProveNodes:128}),$z=Object.freeze({syllogise_budget:"syllogiseBudget",syllogise_depth:"syllogiseDepth",classify_budget:"classifyBudget",classify_rounds:"classifyRounds",max_environments:"maxEnvironments",prove_steps:"proveSteps",prove_branches:"proveBranches",prove_nodes:"proveNodes",ask_prove_steps:"askProveSteps",ask_prove_branches:"askProveBranches",ask_prove_nodes:"askProveNodes"}),Sz=Object.freeze({ask_prove_fallback:"askProveFallback"})});function bg(e){if(!e)return null;let{node:t,shape:n,kind:s}=e;if(t==="find")return`locate a specific named entity ("${e.term}")`;if(t==="count")return`get a count of ${sd(e.entityType)}`;if(t==="list")return`list/enumerate ${sd(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${sd(e.entityType)} by ${e.metricNoun||e.metric||"a metric"}`;if(t==="anaphora")return"follow up on the previous answer's result set (discourse anaphora)";if(t==="membership")return`understand "${e.term||"an entity"}"'s membership/relationship`;if(t==="clause")return bg(e.clause);if(t==="miss")return null;if(t==="boolean"||t==="qualifier"||t==="reverseSet"||t==="forwardSet"||t==="allOfClass"||t==="temporal"){let o=s||e.inner?.kind;return o&&Vn[o]?Vn[o]:`filter/traverse ${sd(e.entityType)} by a relationship`}return n==="meta"?`understand a vocabulary/definition term ("${e.object}")`:n==="where"?`locate where something is defined ("${e.object}")`:n==="when"?"understand when something last changed (history)":n==="whoLast"?"find who most recently touched something (history)":n==="mentions"?`find where something is mentioned in prose ("${e.object}")`:n==="ask"?s&&Vn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?Vn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function xg(e){let t=new Map;for(let n of e)t.has(Xj(n))||t.set(Xj(n),n);return t}function cg(e,t=No){let n=[],s=[];for(let c of e)c.predicate===t&&(s.push([c.subject,c.object]),_r(c)&&n.push([c.subject,c.object]));let o=new Map,r=new Map,i=new Set,a=(c,l,u)=>{!l||!u||l===u||(c.has(l)||c.set(l,new Set),c.get(l).add(u))};for(let[c,l]of s)a(r,c,l),l&&i.add(l);for(let[c,l]of n)a(o,c,l);return{strictEdges:n,broadEdges:s,strictSucc:o,broadSucc:r,reachableHeads:i}}function lg(e,t,n,s,o){let r=s.reachableHeads,i=!1;for(let a of n)if(r.has(a)){i=!0;break}return i?e(t,n,[],s.strictSucc,o)||e(t,n,[],s.broadSucc,o):null}function Iz(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function Oz(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(Sj(),$j)),s=n();return s?Iz(t,s(t)):t}catch{return t}}function jg(e){let t=String(e||"").trim();if(/[a-z]ies$/i.test(t))return`${t.slice(0,-3)}y`;if(/[a-z]ses$/i.test(t)){let n=t.slice(0,-2);return/ss$/i.test(n)||Cz.has(n.toLowerCase())?n:t.slice(0,-1)}return/(xes|zes|ches|shes)$/i.test(t)?t.slice(0,-2):/[a-z]s$/i.test(t)&&!/(?:ss|ous)$/i.test(t)?t.slice(0,-1):t}async function ld(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return wi;if(t==="can")return"mgx:capableOf";try{let n=await Oz(t);return n==="have"?wi:fs(`mgx:${n}`)}catch{return fs(`mgx:${t}`)}}function Bz(e,t){let n=String(t||"").match(Dz);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function nc(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(us(),e$)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function Zj(e){return e.predicate===vR&&e.object==="transitiveproperty"||e.predicate===ER}function pg(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function Hz(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of Kz)if(n!==s&&n.endsWith(` ${s}`)){let r=t.slice(0,t.length-s.length).trim();if(r)return{subject:r,predicate:o}}return{subject:t,predicate:null}}function wg(e){return e.replace(/#node:[0-9a-f]+/g,"")}function _g(e){let t=O$(e),n=e.provenance?` (source: ${wg(e.provenance)})`:"";return`${t?` ${t}`:""}${qz(e)}${n}`}function qz(e){let t=[...new Set((Array.isArray(e?.attributedTo)?e.attributedTo:[]).filter(Boolean))].sort();return t.length?` (${t.length===1?t[0]:`${t.slice(0,-1).join(", ")} and ${t[t.length-1]}`} said)`:""}function Lo(e){return`${to(e)}${_g(e)}`}function se(e){let t=_g(e);return e.predicate===ER?`${vp(e.subject)} implies ${vp(e.object)}${t}`:e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${to(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${to(e)}${t}`:e.provenance.includes("corpus:")?`${to(e)}${t}`:e.provenance.includes("reference:")?`${to(e)}${t}`:`i learned: ${to(e)}${t}`}function Tg(e,t=null){if(t?.senseScreen?.rows===e)return t.senseScreen.gate;let n=[],s=[];for(let r of e||[])String(r.provenance||"").includes("entailed:")||(r.predicate===No?n.push([r.subject,r.object]):r.predicate===vR&&s.push([r.subject,r.object]));let o=ra({subClassEdges:n,typeEdges:s});return t&&(t.senseScreen={rows:e,gate:o}),o}function TR(e,t,n){for(let s of n)if(e.declines(t,s))return!0;return!1}function tR(e,t,n,{toward:s=null,screen:o=null}={}){let r=se(e);if(!$n.has(e.predicate)||!n.has(e.subject))return r;let i=Iu(e.object,t,{cap:6,stopAt:ul,toward:s});if(o){let l=i.findIndex((u,d)=>d>0&&o.declines(e.object,u));l>0&&(i=i.slice(0,l))}if(i.length<=1)return r;let a=` \u2192 ${i.slice(1).join(" \u2192 ")}`,c=_g(e);return!c||!r.endsWith(c)?r+a:r.slice(0,r.length-c.length)+a+c}function nR(e,t,n,{indent:s="",cache:o=null}={}){let r=t.filter(E=>E.predicate===No).map(E=>[E.subject,E.object]),i=Wa(r),a=Tg(t,o),c=e.map(E=>`${s}${tR(E,i,n,{screen:a})}`),l=e.filter(E=>$n.has(E.predicate)&&n.has(E.subject)),u=[...new Set(l.map(E=>E.object))];if(u.length<2)return{lines:c,grouped:null};let d=t.filter(E=>E.predicate==="owl:disjointWith").map(E=>[E.subject,E.object]),{split:p,clusters:f}=Ou(u,{parents:i,disjointEdges:d});if(!p)return{lines:c,grouped:null};let h=l[0].subject,m=new Map;for(let E of f)for(let I of E.objects)m.set(I,E);let b=e.filter(E=>!($n.has(E.predicate)&&n.has(E.subject))),g=[],w=[],y=0,S=E=>{let I=tR(E,i,n,{screen:a});return y<_e?(y+=1,`${s}${I}`):(w.push(I),null)};for(let E of f){let I=l.filter(k=>m.get(k.object)===E).map(S).filter(Boolean);I.length&&g.push(`${s}${h}, the ${E.label}:
|
|
166
|
+
`)}`:l,data:{...a,grounded:c}})}finally{await i()}}var WE=L(()=>{Qe();Ue();ot();Vh.ownsGraphLoad=!0});var $P,GE=L(()=>{Jf();o$();Ov();Nv();Pv();Fv();Bv();Uv();Gv();Kv();fE();hE();gE();wE();fu();EE();kE();RE();TE();IE();CE();LE();ME();DE();UE();WE();$P=Object.freeze({tmct_context:Xf,tmct_context_more:s$,tmct_describe:Iv,tmct_snippet:Cv,tmct_signature:Lv,tmct_impact:Mv,tmct_search:Dv,tmct_members:zv,tmct_subclasses:Wv,tmct_related:Dh,tmct_sprite:Wh,tmct_architecture:pE,tmct_exports:mE,tmct_untested:bE,tmct_ask:SE,tmct_tests_for:vE,tmct_history:xE,tmct_file_history:jE,tmct_method_history:_E,tmct_class_history:AE,tmct_callers:OE,tmct_callees:NE,tmct_calls:PE,tmct_cochanges:FE,tmct_export:Gh,tmct_ingest:Vh})});var Kh=L(()=>{});var pu,Hh=L(()=>{pu=()=>({relations:[],constructions:[]})});var VE,KE=L(()=>{zt();Qe();Qg();sn();Ni();cs();Hc();qc();GE();fu();ot();Kr();Oc();Kh();Hh();qc();Jf();fu();Cc(void 0);Ic(pu);VE=Jg.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var FY,DY,BY,hu=L(()=>{FY=Object.freeze(["entity","set","event","measure"]),DY=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),BY=Object.freeze({it:Object.freeze(["entity","event","measure"]),this:Object.freeze(["entity","event","measure"]),that:Object.freeze(["entity","event","measure"]),"this one":Object.freeze(["entity","event","measure"]),"that one":Object.freeze(["entity","event","measure"]),those:Object.freeze(["set"]),them:Object.freeze(["set"]),these:Object.freeze(["set"]),here:Object.freeze(["entity"])})});var mu=L(()=>{});var jt,WY,GY,VY,KY,HY,qY,YY,XY,JY,QY,ZY,e3,t3,n3,s3,o3,tn,r3,i3,a3,jo=L(()=>{jt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},WY=jt("createRequire"),GY=jt("readFileSync"),VY=jt("access"),KY=jt("readFile"),HY=jt("writeFile"),qY=jt("appendFile"),YY=jt("mkdir"),XY=jt("mkdtemp"),JY=jt("rename"),QY=jt("unlink"),ZY=jt("rm"),e3=jt("stat"),t3=jt("copyFile"),n3=jt("readdir"),s3=jt("createReadStream"),o3=jt("createWriteStream"),tn=e=>String(e),r3=jt("randomBytes"),i3=jt("spawnSync"),a3=jt("createInterface")});var ex={};Nt(ex,{PHRASEBOOK_FILE:()=>YE,TECHNICAL_SLOTS:()=>Yh,TEMPLATES_FILE:()=>qE,flatten:()=>Jh,loadPhrasebook:()=>xP,loadTemplates:()=>Qh,loadTemplatesMerged:()=>EP,render:()=>ZE,renderSegments:()=>QE,slotKind:()=>JE,slotsOf:()=>Xh});function Xh(e){let t=[];for(let n of String(e).matchAll(XE))t.includes(n[1])||t.push(n[1]);return t}function JE(e){return vP[e]||"entity"}function Jh(e){let t="";for(let n of e)t+=n.text;return t}function QE(e,t={},n=Ca){if(!n)throw new Error("renderSegments() before loadTemplates() \u2014 load the template library first");let s=n.get(e);if(!s)throw new Error(`unknown template id "${e}"`);let o=s.slots.filter(u=>t[u]===void 0||t[u]===null);if(o.length)throw new Error(`template "${e}" missing slot${o.length>1?"s":""}: ${o.join(", ")}`);let r=s.template,i=new RegExp(XE.source,"g"),a=[],c=0,l;for(;(l=i.exec(r))!==null;)l.index>c&&a.push({type:"prose",text:r.slice(c,l.index)}),a.push({type:JE(l[1]),text:String(t[l[1]])}),c=l.index+l[0].length;return c<r.length&&a.push({type:"prose",text:r.slice(c)}),a}async function Qh(e=qE){let t=await Ne(e,"utf8"),n=new Map,s=t.split(`
|
|
167
|
+
`);for(let o=0;o<s.length;o+=1){let r=s[o].trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(c){throw new Error(`${e}:${o+1}: not valid JSON: ${c.message}`)}for(let c of["id","class","template","register"])if(typeof i[c]!="string"||!i[c])throw new Error(`${e}:${o+1}: missing/empty "${c}"`);if(!SP.has(i.register))throw new Error(`${e}:${o+1}: register must be terse|friendly|technical, got "${i.register}"`);if(n.has(i.id))throw new Error(`${e}:${o+1}: duplicate template id "${i.id}"`);let a=Xh(i.template);if(i.register==="technical"){let c=a.filter(l=>!Yh.has(l));if(c.length)throw new Error(`${e}:${o+1}: technical template "${i.id}" uses non-mechanical slot${c.length>1?"s":""}: ${c.join(", ")} (allowed: ${[...Yh].join(", ")})`);if(!a.includes("provenance"))throw new Error(`${e}:${o+1}: technical template "${i.id}" must carry a {provenance} fill (an advanced claim always shows its source)`)}n.set(i.id,{...i,slots:a})}return Ca=n,n}async function EP(e=[]){let t=Ca,n=new Map;try{for(let s of e){let o=await Qh(s);for(let[r,i]of o){if(!r.includes(":"))throw new Error(`${s}: extension-pack template id "${r}" is not namespaced ("<packname>:<id>")`);if(n.has(r))throw new Error(`${s}: duplicate template id "${r}" already loaded from an earlier path`);n.set(r,i)}}}finally{Ca=t}return n}function ZE(e,t={},n=Ca){if(!n)throw new Error("render() before loadTemplates() \u2014 load the template library first");return Jh(QE(e,t,n))}async function xP(e=YE){let t=await Ne(e,"utf8"),n=[],s=[],o=t.split(`
|
|
168
|
+
`);for(let r=0;r<o.length;r+=1){let i=o[r].trim();if(!(!i||i.startsWith("#"))){if(i.startsWith("~")){let a=i.slice(1).split(",").map(c=>c.trim().toLowerCase()).filter(Boolean);if(a.length<2)throw new Error(`${e}:${r+1}: a synonym family needs at least 2 entries`);s.push(a);continue}n.push({pattern:i,slots:Xh(i)})}}return{patterns:n,synonyms:s}}var kP,HE,qE,YE,SP,XE,Yh,vP,Ca,gu=L(()=>{zt();jo();Qe();kP={},HE=ne(ve(tn(kP.url)),"..","..",".."),qE=ne(HE,"data","templates","responses.jsonl"),YE=ne(HE,"data","phrasebook","software-phrases.txt"),SP=new Set(["terse","friendly","technical"]),XE=/\{([A-Za-z][A-Za-z0-9]*)\}/g,Yh=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]));vP={count:"number",when:"number",location:"path",commit:"path",provenance:"provenance"};Ca=null});function RP(e,t={}){let n=jP.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function _P(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>RP(s,t))):1}function lt(e,t={}){return(Array.isArray(e)?e:[]).map(s=>({row:s,bias:_P(s,t)})).sort((s,o)=>o.bias-s.bias||(o.row?.trust??0)-(s.row?.trust??0)||Zt(s.row,o.row)).map(s=>s.row)}var jP,tx=L(()=>{tr();jP=/^src:corpus:(.+)$/});var Rt,h3,Qs,m3,g3,b3,w3,y3,$3,S3,v3,E3,x3,k3,j3,nx,TP,R3,_3,T3,Ro=L(()=>{Rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},h3=Rt("createRequire"),Qs=Rt("readFileSync"),m3=Rt("access"),g3=Rt("readFile"),b3=Rt("writeFile"),w3=Rt("appendFile"),y3=Rt("mkdir"),$3=Rt("mkdtemp"),S3=Rt("rename"),v3=Rt("unlink"),E3=Rt("rm"),x3=Rt("stat"),k3=Rt("copyFile"),j3=Rt("readdir"),nx=Rt("createReadStream"),TP=Rt("createWriteStream"),R3=Rt("randomBytes"),_3=Rt("spawnSync"),T3=Rt("createInterface")});function Zh(e,t){let n=String(e).toLowerCase().replace(/^[^a-z]+/,"");if(!n)return null;for(let o of t.vowel_sound_consonants||[])if(n.startsWith(o))return!0;for(let o of t.consonant_sound_vowels||[])if(n.startsWith(o))return!1;let s=n[0];return"aeiou".includes(s)?!0:/[a-z]/.test(s)?!1:null}function CP(e=IP){let t=lr(Qs(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function wu(){if(bu===null)try{bu=CP()}catch{bu=[]}return bu}var NP,AP,IP,OP,P3,bu,yu=L(()=>{Ro();jo();Qe();Fl();gu();NP={},AP=ve(tn(NP.url)),IP=ne(AP,"..","..","data","templates","grammar-rules.toml"),OP=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),P3=Object.freeze(new Set(OP.filter(e=>e!=="prose")));bu=null});function LP(){if(Na!==void 0)return Na;try{let e=sx?sx():PP();Na=e&&e.winkNLP&&e.model?e:null}catch{Na=null}return Na}function PP(){let e=process.getBuiltinModule("node:module").createRequire(MP.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function $u(){if(bi!==void 0)return bi;let e=LP();if(!e)return bi=null,null;try{bi=e.winkNLP(e.model)}catch{bi=null}return bi}var MP,sx,Na,bi,Su=L(()=>{MP={}});var em=L(()=>{Su()});var rx,ox=L(()=>{rx={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},rodent:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},yellow:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},terrestrial:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to",predicate:"mgx:partOf"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});var dx={};Nt(dx,{CODE_REF_SHAPE:()=>Eu,DETERMINERS:()=>nm,OF_CLASSIFIER_HEADS:()=>om,OF_PARTITIVE_HEADS:()=>rm,QUANTIFIERS:()=>sm,classify:()=>im,loadLexicon:()=>an,lookupAdjective:()=>Ma,lookupNoun:()=>bn,lookupProperName:()=>wi,lookupVerb:()=>Pa,numberOf:()=>La,predicateOf:()=>vu,readsAsIndividualName:()=>xu,thirdPerson:()=>cx,withProperNames:()=>ux});function La(e){let t=String(e??"").trim().toLowerCase();return/^\d+$/.test(t)?Number(t):DP[t]??null}function cx(e){let t=String(e);return t==="have"?"has":/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/.test(t)?`${t}es`:`${t}s`}function vu(e,t=ax){if(e.predicate)return e.predicate;let n=e.prep?e.prep[0].toUpperCase()+e.prep.slice(1):"";return`${t}${cx(e.lemma)}${n}`}function lx(e){let t=String(e),n=[t];return t.length>4&&/[a-z]ies$/.test(t)&&n.push(`${t.slice(0,-3)}y`),/(ses|xes|zes|ches|shes)$/.test(t)&&n.push(t.slice(0,-2)),/[a-z]s$/.test(t)&&!/ss$/.test(t)&&n.push(t.slice(0,-1)),t==="has"&&n.push("have"),n}function ix(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!BP.has(o.property))throw new Error(`lexicon noun "${n}": property must be "data" or "object", got ${JSON.stringify(o.property)}`);e.nouns.set(n,o),o.plural&&e.nounPlurals.set(o.plural,n)}for(let[n,s]of Object.entries(t.verbs||{}))e.verbs.set(n,{lemma:n,...s||{}});for(let[n,s]of Object.entries(t.adjectives||{})){let o={lemma:n,...s||{}};if(!zP.has(o.type))throw new Error(`lexicon adjective "${n}": type must be "subclass" or "data", got ${JSON.stringify(o.type)}`);e.adjectives.set(n,o)}for(let n of t.properNames||[])e.properNames.set(String(n).toLowerCase(),String(n))}function an(e,t=ax){if(!e&&tm.has(t))return tm.get(t);let n=rx,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return ix(s,n),e?(ix(s,e),s):(tm.set(t,s),s)}function ux(e,t){let n=new Map(e.properNames);for(let s of t)n.set(String(s).toLowerCase(),String(s));return{...e,properNames:n}}function bn(e,t,n={}){return UP(e,t,n)[0]??null}function UP(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,c=l=>{l&&!a.has(l.lemma)&&(a.add(l.lemma),i.push(l))};if(r){let l=e.nouns.get(r)??null;return n.singularOnly&&o?(c(o),c(l)):(c(l),c(o)),i}for(let l of lx(s))c(e.nouns.get(l));return i}function Pa(e,t){return WP(e,t)[0]??null}function WP(e,t){let n=String(t??"").toLowerCase(),s=[],o=new Set;for(let r of lx(n)){let i=e.verbs.get(r);i&&!o.has(i.lemma)&&(o.add(i.lemma),s.push(i))}return s}function Ma(e,t){return e.adjectives.get(String(t??"").toLowerCase())??null}function wi(e,t){return e.properNames.get(String(t??"").toLowerCase())??null}function xu(e,t){let n=String(e??"");if(!n)return!1;if(wi(t,n)||Eu.test(n)||/^[a-z][\w]*(?:-[\w]+)+$/i.test(n)||/^[A-Z]/.test(n))return!0;let s=bn(t,n);return s?s.lemma.toLowerCase()!==n.toLowerCase():!0}function im(e,t=an()){let n=String(e??"").trim();if(!n)return null;let s=n.toLowerCase();if(nm[s])return{pos:"determiner",type:nm[s]};if(sm[s])return{pos:"quantifier",type:sm[s]};let o=La(s);if(o!=null)return{pos:"number",type:"cardinal",value:o};let r=wi(t,n);if(r)return{pos:"properName",type:"individual",canonical:r};let i=bn(t,s);if(i)return i.property?{pos:"noun",type:`${i.property}-property`,lemma:i.lemma,property:i.property}:{pos:"noun",type:"class",lemma:i.lemma};let a=Pa(t,s);if(a)return{pos:"verb",type:"objectProperty",lemma:a.lemma,predicate:vu(a,t.ns),...a.prep?{prep:a.prep}:{}};let c=Ma(t,s);return c?{pos:"adjective",type:c.type,lemma:c.lemma}:null}var ax,nm,sm,om,rm,DP,BP,zP,tm,Eu,es=L(()=>{ox();ax="tmct:",nm=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),sm=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),om=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),rm=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),DP=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});BP=new Set(["data","object"]),zP=new Set(["subclass","data"]);tm=new Map;Eu=/[./\\#:@]/});var V3,K3,H3,GP,q3,Y3,X3,fx=L(()=>{cs();Fe();V3=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),K3=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),H3=Object.freeze({Class:[e=>`which classes inherit from ${e}`,e=>`what does ${e} contain`,e=>`where is ${e} defined`],Module:[e=>`what does ${e} import`,e=>`which modules import ${e}`,e=>`where is ${e} defined`],Function:[e=>`what calls ${e}`,e=>`what does ${e} call`,e=>`where is ${e} defined`],Method:[e=>`which class contains ${e}`,e=>`what calls ${e}`,e=>`where is ${e} defined`],Attribute:[e=>`which class contains ${e}`,e=>`where is ${e} defined`],GlobalVariable:[e=>`where is ${e} defined`,e=>`where is ${e} mentioned`],Commit:[e=>`what did commit ${e} touch`,e=>`when did ${e} change`]}),GP=Object.freeze({import:"imports",imports:"imports",importing:"imports",imported:"imports",call:"calls",calls:"calls",calling:"calls",called:"calls",invoke:"calls",invokes:"calls",invoking:"calls",contain:"contains",contains:"contains",containing:"contains",containment:"contains",member:"contains",members:"contains",inherit:"inherits",inherits:"inherits",inheriting:"inherits",inheritance:"inherits",extend:"inherits",extends:"inherits",extending:"inherits",subclass:"inherits",subclasses:"inherits",subclassing:"inherits",test:"tests",tests:"tests",testing:"tests",tested:"tests",coverage:"tests",define:"defines",defines:"defines",defining:"defines",defined:"defines",definition:"defines",definitions:"defines",declaration:"defines",touch:"touches",touches:"touches",touching:"touches",touched:"touches",cochange:"cochange","co-change":"cochange","change-coupling":"cochange",coupled:"cochange",export:"reexports",exports:"reexports",exporting:"reexports",exported:"reexports",reexport:"reexports",reexports:"reexports",reexporting:"reexports","re-export":"reexports","re-exports":"reexports","re-exporting":"reexports",serve:"serves",serves:"serves",serving:"serves",served:"serves",denote:"denotes",denotes:"denotes",denoting:"denotes",denoted:"denotes"}),q3=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"],serves:["serves"],denotes:["denotes"]}),Y3=Object.freeze({imports:{verb:"imports",edgeNoun:"import"},calls:{verb:"calls",edgeNoun:"call"},contains:{verb:"contains",edgeNoun:"containment"},inherits:{verb:"inherits from",edgeNoun:"inheritance"},tests:{verb:"tests",edgeNoun:"test"},defines:{verb:"defines",edgeNoun:"definition"},touches:{verb:"touches",edgeNoun:"touch"},cochange:{verb:"changes together with",edgeNoun:"change-coupling"},reexports:{verb:"re-exports",edgeNoun:"re-export"},serves:{verb:"serves",edgeNoun:"service"},denotes:{verb:"denotes",edgeNoun:"denotation"}}),X3=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});function mx(e){return!!e&&typeof e=="object"&&typeof e.s=="string"&&VP.test(e.s)&&typeof e.t=="string"&&e.t.length>0&&Number.isInteger(e.r)&&e.r>0}function _o(e){if(!e||typeof e!="object")return!1;for(let t of["term","title","text","summary","url"])if(typeof e[t]!="string"||!e[t])return!1;if(!Number.isInteger(e.revid)||e.revid<=0)return!1;for(let t of["isa","source","licence"])if(e[t]!==void 0&&(typeof e[t]!="string"||!e[t]))return!1;return!0}function ju(e,t){let n=String(e??"").split(/(?<=[.!?])\s+/),s="";for(let o of n){let r=s?`${s} ${o}`:o;if(r.length>t)break;s=r}return s||String(e??"").slice(0,t)}function HP(e){let t=e,n;do n=t,t=t.replace(/\s*\([^()]*\)/g,"");while(t!==n);return t}function hx(e,t){let n=bn(t,e);return n?V(n.lemma):e}function gx(e,t){let n=HP(String(e??"")).match(KP);if(!n)return null;let s=!n[1],o=[];for(let u of n[2].trim().split(/\s+/))if(qP.has(u)||(o.push(u),o.length>=6))break;let r=o;for(let u=r.indexOf("of");u>0;u=r.indexOf("of")){let d=r[u-1]?.split("-").pop(),p=d&&hx(d,t);if(p&&(XP.has(p)||JP.has(p))){r=r.slice(u+1);continue}r=r.slice(0,u);break}for(;r.length&&YP.has(r[0]);)r=r.slice(1);if(!r.length)return null;let i=r[r.length-1].split("-").pop();if(!i)return null;let a=hx(i,t);if(px.has(i)||px.has(a))return null;let c=bn(t,i);if(!c)return null;let l=V(c.lemma);return s&&(!/s$/.test(i)||V(i)===l)?null:l}var VP,ku,KP,qP,px,YP,XP,JP,gr=L(()=>{Ve();es();fx();VP=/^ref-[0-3][0-9a-f]$/;ku=400;KP=/^[A-Z][^.!?]*? (?:is|are) (?:(a|an|the) )?([a-z][a-z -]{1,60})/;qP=new Set(["that","which","where","who","whose","whom","when","used","found","made","with","in","on","for","from","by","to","and","or","about","around","roughly","approximately"]),px=new Set(["type","kind","sort","form","class","variety","group","part","piece","member","way","term","name","word","thing","example","family","genus","species","unit","series","set","list","number","amount","body","mass"]),YP=new Set(["a","an","the"]),XP=new Set(["type","kind","sort","form","class","variety","species","breed","genus","group","part","parts","piece","bunch","bit","name","set","way","unit","family","ability","color","series","mammal","practice","list","amount","mass","reworking","blockage","goddess","aura","development","consisting","announcement","messengers","subset","carrying","photograph","adding","use","science","songbird","symptom","accumulation","number","suborder","falling","management","evaluation","superorder","activity","interlacing","introduction"]),JP=new Set(["either","one","each","both","any"])});var br,Fa=L(()=>{br=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});function bx(e=process.env){return e?.TMCT_REFERENCE_PACK_DIR||ne(QP,"corpus","reference")}function wx(e){try{return br(Qs(e))}catch{return null}}function lm(e){if(am.has(e))return am.get(e);let t=null,n=wx(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return am.set(e,t),t}function ZP(e,t){let n=`${e}\0${t}`;if(cm.has(n))return cm.get(n);let s=null,o=wx(ne(e,"shards",`${t}.jsonl.gz`));if(o){s=new Map;for(let r of o.toString("utf8").split(`
|
|
169
|
+
`))if(r.trim())try{let i=JSON.parse(r);_o(i)&&s.set(i.term,i)}catch{}}return cm.set(n,s),s}function um(e,t){let n=lm(e);if(!n)return null;let s=n[String(t??"")];return mx(s)?ZP(e,s.s)?.get(s.t)??null:null}var eM,QP,am,cm,dm=L(()=>{Ro();Fa();jo();Qe();gr();eM={},QP=ne(ve(tn(eM.url)),"..","..","..");am=new Map,cm=new Map});function nM(e){if(!e||typeof e!="object")return!1;for(let t of["subject","predicate","object","provenance"])if(typeof e[t]!="string"||!e[t])return!1;return tM.includes(e.predicate)}function yx(e){return _o(e)?e.facts===void 0?!0:Array.isArray(e.facts)&&e.facts.length>0&&e.facts.every(nM):!1}function wr(e,t){return`research:${e}:${V(t).replace(/ /g,"_")}`}function yi(e){if(!e||typeof e.name!="string"||!e.name||typeof e.create!="function")throw new Error("registerResearchSource: expected { name, create(options) }");sM.set(e.name,{name:e.name,create:e.create})}var tM,sM,d4,f4,yr=L(()=>{Ve();gr();tM=Object.freeze(["rdf:type","rdfs:subClassOf","mgx:partOf","mgx:hasA","mgx:usedFor","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:madeOf","mgx:createdBy","mgx:locatedNear","mgx:hasProperty"]);sM=new Map;d4=Object.freeze(["wikipedia","wikidata","simple-wikipedia","simple-wikipedia-pack","wiktionary","dbpedia"]),f4=Object.freeze({wikipedia:"simple-wikipedia",wikidata:"wikidata","simple-wikipedia":"simple-wikipedia","simple-wikipedia-pack":"simple-wikipedia-pack",wiktionary:"wiktionary",dbpedia:"dbpedia-lookup"})});function $x(e){let t=Number(e);return Number.isFinite(t)?t===408||t===429||t>=500:!1}var h4,Ru=L(()=>{h4=Object.freeze({failureThreshold:5,windowMs:6e4,cooldownMs:6e4})});function Ba({fetchImpl:e,timeoutMs:t=$i,minIntervalMs:n=nn,retryAfterFloorMs:s=oM,maxFetchesPerTurn:o=rM,userAgent:r,waitForSlot:i=!1,validators:a=null}={}){let c=e??((...x)=>globalThis.fetch(...x)),l=new Map,u=0,d=0,p=!1,f=0,h=0,m=0,b=!1,g=!1,w=()=>{if(!r)return null;let x={"Api-User-Agent":r};return typeof document>"u"&&(x["User-Agent"]=r),x};function y(x){let j=Number(x)*1e3;d=Date.now()+Math.max(j||0,s)}function S(x){let j=a?.get(x);if(!j)return null;let M={};return j.etag&&(M["If-None-Match"]=j.etag),j.lastModified&&(M["If-Modified-Since"]=j.lastModified),Object.keys(M).length?M:null}function T(x,j){if(!a)return;let M=j.headers?.get?.("etag")??"",D=j.headers?.get?.("last-modified")??"";if(!M&&!D)return;let H=a.get(x)??{};a.set(x,{etag:M||H.etag||"",lastModified:D||H.lastModified||""})}async function v(x,{asJson:j}){if(b&&m>=o)return g=!0,null;f+=1,m+=1;let M=typeof AbortController=="function"?new AbortController:null,D=M?setTimeout(()=>M.abort(),t):null;try{let H={};M&&(H.signal=M.signal);let Y={...w()??{},...S(x)??{}};Object.keys(Y).length&&(H.headers=Y);let Z;try{Z=await c(x,H)}catch{return h+=1,null}if(Z.status===429)return y(Z.headers?.get?.("retry-after")),h+=1,null;if(Z.status===304)return a?{notModified:!0}:null;if(!Z.ok)return $x(Z.status)&&(h+=1),null;if(T(x,Z),j){let P=await Z.json();return P?.error?.code==="maxlag"?(y(Z.headers?.get?.("retry-after")),h+=1,null):P}return await Z.text()}catch{return M?.signal?.aborted&&(h+=1),null}finally{D!==null&&clearTimeout(D)}}async function E(x){return v(x,{asJson:!0})}async function I(x){return v(x,{asJson:!1})}let k=()=>Math.max(d,u+n);async function R(){for(;;){let x=Date.now();if(!p&&x>=k())return u=x,p=!0,!0;if(!i)return!1;await new Promise(j=>setTimeout(j,Math.max(k()-x,25)))}}async function $(x,j,{remember:M=!0}={}){if(l.has(x))return l.get(x);if(!await R())return null;let D=null;try{D=await j()}catch{D=null}finally{p=!1}return M&&l.set(x,D),D}function _(){b=!0,m=0,g=!1}function O(){return{fetches:f,systemicFailures:h,fetchesThisTurn:m,budgetExhausted:g}}return{fetchJson:E,fetchText:I,cachedFetch:$,beginTurn:_,stats:O}}var $i,nn,oM,rM,Da,za=L(()=>{Ru();$i=4e3,nn=2e3,oM=5e3,rM=6,Da=5});function fM({fetchImpl:e,origin:t=iM,timeoutMs:n=$i,minIntervalMs:s=nn,lexicon:o=null,userAgent:r=dM,waitForSlot:i=!1,sourceName:a=cM,label:c=lM}={}){let l=Ba({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:r,waitForSlot:i});function u(f,h){let m=Array.isArray(h?.[1])?h[1]:[];for(let b of m){let g=V(b);if(g===f||g.startsWith(f))return String(b)}return null}async function d(f,h){let m=await l.fetchJson(`${t}/api/rest_v1/page/summary/${encodeURIComponent(h.replace(/ /g,"_"))}`);if(!m)return null;let b=String(m.extract??""),g=Number(m.revision),w={term:f,title:String(m.title??h),text:b,summary:ju(b,ku),url:String(m.content_urls?.desktop?.page??`${t}/wiki/${encodeURIComponent(h.replace(/ /g,"_"))}`),revid:g},y=o;if(!y)try{y=an()}catch{y=null}let S=y?gx(b,y):null;return S&&(w.isa=S),_o(w)?w:null}async function p(f){let h=await l.fetchJson(`${t}/w/api.php?action=opensearch&format=json&origin=*&maxlag=${Da}&search=${encodeURIComponent(f)}&limit=3`),m=h?u(f,h):null;return m?d(f,m):null}return{name:a,origin:t,label:c,beginTurn(){l.beginTurn()},stats(){return l.stats()},provenanceTag(f){return wr(a,f)},async lookup(f){let h=String(f??"");return h?l.cachedFetch(h,()=>p(h)):null},async pageByTitle(f){let h=String(f??"").trim();return h?l.cachedFetch(`title\0${V(h)}`,()=>d(V(h),h)):null},async linkedTitles(f,{limit:h=25}={}){let m=String(f??"").trim();if(!m)return null;let b=await l.cachedFetch(`links\0${V(m)}`,async()=>{let w=(await l.fetchJson(`${t}/w/api.php?action=parse&format=json&formatversion=2&origin=*&maxlag=${Da}&prop=links&redirects=1&page=${encodeURIComponent(m)}§ion=0`))?.parse?.links;if(!Array.isArray(w))return null;let y=new Set,S=[];for(let T of w){if(!T||T.ns!==0||T.exists===!1)continue;let v=String(T.title??T["*"]??"").trim(),E=V(v);!v||!E||y.has(E)||(y.add(E),S.push(v))}return S});return Array.isArray(b)?b.slice(0,Math.max(0,h)):null}}}function pM(e={}){return fM({origin:aM,sourceName:vx,label:uM,waitForSlot:!0,...e})}var iM,aM,cM,vx,lM,uM,dM,Ex=L(()=>{Ve();es();gr();yr();za();iM="https://en.wikipedia.org",aM="https://simple.wikipedia.org",cM="wikipedia-live",vx="simple-wikipedia",lM="Wikipedia",uM="Simple English Wikipedia",dM="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)";yi({name:vx,create:pM})});function vM(e,t){let n=Array.isArray(t?.search)?t.search:[],s=[],o=[];for(let r of n){let i=String(r?.id??"");if(!jx.test(i))continue;let a=V(r?.label??"");a===e?s.push(i):a.startsWith(e)&&o.push(i)}return[...s,...o]}function EM(e){let t=[];for(let[n,s]of Object.entries(bM)){let o=e?.claims?.[n];if(!Array.isArray(o))continue;let r=0;for(let i of o){if(t.length>=SM)return t;if(r>=$M)break;let a=i?.mainsnak;if(a?.snaktype!=="value")continue;let c=String(a?.datavalue?.value?.id??"");jx.test(c)&&(t.push({property:n,predicate:s,id:c}),r+=1)}}return t}function xM(e,t,n){for(let s of wM)for(let o of e){if(o.property!==s)continue;let r=t.get(o.id);if(r&&r!==n)return r}return null}function kM({fetchImpl:e,origin:t=hM,timeoutMs:n=$i,minIntervalMs:s=nn,userAgent:o=gM,waitForSlot:r=!1,sourceName:i=kx}={}){let a=Ba({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:o,waitForSlot:r}),c=d=>`${t}/w/api.php?${new URLSearchParams({format:"json",origin:"*",maxlag:String(Da),...d})}`;async function l(d){let p=new Map;if(!d.length)return p;let f=await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels",ids:d.join("|")}));for(let[h,m]of Object.entries(f?.entities??{})){let b=V(m?.labels?.en?.value??"");b&&p.set(h,b)}return p}async function u(d){let p=await a.fetchJson(c({action:"wbsearchentities",language:"en",uselang:"en",type:"item",limit:"5",search:d})),f=p?vM(d,p):[];for(let h of f){let b=(await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels|descriptions|claims|info",ids:h})))?.entities?.[h];if(!b)continue;let g=EM(b),w=await l(g.map(k=>k.id)),y=xM(g,w,d);if(y&&yM.has(y))continue;let S=wr(i,d),T=[],v=new Set;for(let k of g){let R=w.get(k.id);!R||R===d||v.has(`${k.predicate}\0${R}`)||(v.add(`${k.predicate}\0${R}`),T.push({subject:d,predicate:k.predicate,object:R,provenance:S}))}let E=String(b.descriptions?.en?.value??""),I={term:d,title:String(b.labels?.en?.value??""),text:E,summary:ju(E,ku),url:`${t}/wiki/${h}`,revid:Number(b.lastrevid),source:xx,licence:mM};if(y&&(I.isa=y),T.length&&(I.facts=T),yx(I))return I}return null}return{name:i,origin:t,label:xx,beginTurn(){a.beginTurn()},stats(){return a.stats()},provenanceTag(d){return wr(i,d)},async lookup(d){let p=V(d??"");return p?a.cachedFetch(p,()=>u(p)):null}}}function jM(e={}){return kM({waitForSlot:!0,...e})}var hM,kx,xx,mM,gM,bM,wM,yM,$M,SM,jx,Rx=L(()=>{Ve();gr();yr();za();hM="https://www.wikidata.org",kx="wikidata",xx="Wikidata",mM="CC0 1.0",gM="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)",bM=Object.freeze({P31:"rdf:type",P279:"rdfs:subClassOf",P361:"mgx:partOf",P527:"mgx:hasA",P186:"mgx:madeOf",P366:"mgx:usedFor",P276:"mgx:atLocation",P1542:"mgx:causes",P170:"mgx:createdBy",P2670:"mgx:hasA"}),wM=["P279","P31"],yM=new Set(["scholarly article","album","song","single","film","television series","television series episode","band","musical group","video game","book","novel"]),$M=3,SM=12,jx=/^Q[1-9][0-9]*$/;yi({name:kx,create:jM})});function AM(e,t){let n=bn(t,e);return n?V(n.lemma):V(e)}function OM(e,t,n,s,o,r){if(!s||r<=0)return[];let i=new Set([n]),a=[];for(let c of String(t??"").matchAll(_M)){if(a.length>=r)break;let l=AM(c[0],o);!l||!ob(l)||i.has(l)||!s[l]||(i.add(l),um(e,l)&&a.push(IM(l)))}return a}function CM({dir:e,lexicon:t=null,sourceName:n=_x}={}){let s=e||bx(),o=t;function r(){if(o)return o;try{o=an()}catch{o=null}return o}function i(a){let c=V(a??"");if(!c)return null;let l=um(s,c);if(!l)return null;let u={...l,term:c};return _o(u)?u:null}return{name:n,origin:RM,provenanceTag(a){return wr(n,a)},async lookup(a){return i(a)},async pageByTitle(a){return i(a)},async linkedTitles(a,{limit:c=TM}={}){let l=i(a);if(!l)return null;let u=lm(s);return OM(s,l.text,l.term,u,r(),Math.max(0,c))}}}var RM,_x,_M,TM,IM,Tx=L(()=>{Ve();es();Kn();gr();dm();yr();RM="https://simple.wikipedia.org",_x="simple-wikipedia-pack",_M=/[A-Za-z][A-Za-z'-]*/g,TM=25;IM=e=>e.charAt(0).toUpperCase()+e.slice(1);yi({name:_x,create:CM})});var NM,LM,U4,fm=L(()=>{Ve();es();Kr();yr();NM=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3,source:"wikipedia"}),LM=["this","is","about","the"],U4=LM.length});var Ax=L(()=>{zt();Qe();Kp();Ve();Ue()});var Ix=L(()=>{Ve()});var _u=L(()=>{Cn();Wr()});var Ox=L(()=>{Ve()});var PM,Cx,Nx,Lx,hX,Px=L(()=>{Ox();za();PM=250,Cx=Object.freeze([{id:"wikimedia-featured",name:"Wikimedia featured feed",kind:"contemporary",format:"wikimedia-feed",url:"https://api.wikimedia.org/feed/v1/wikipedia/en/featured",homepage:"https://www.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"hacker-news",name:"Hacker News",kind:"contemporary",format:"hn",url:"https://hacker-news.firebaseio.com/v0",homepage:"https://news.ycombinator.com/",licence:"user-submitted, discussion linked",browserVerified:"2026-08-08",minIntervalMs:PM,enabledByDefault:!0},{id:"usgs-quakes",name:"USGS earthquakes",kind:"contemporary",format:"usgs",url:"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson",homepage:"https://earthquake.usgs.gov/",licence:"US public domain",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"nyt-world",name:"NYT World News",kind:"contemporary",format:"rss",url:"https://rss.nytimes.com/services/xml/rss/nyt/World.xml",homepage:"https://www.nytimes.com/section/world",licence:"personal use with attribution",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"wikinews-published",name:"Wikinews",kind:"contemporary",format:"mediawiki",url:"https://en.wikinews.org/w/api.php",homepage:"https://en.wikinews.org/",licence:"CC BY 2.5",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"simple-wikipedia",name:"Simple English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://simple.wikipedia.org",homepage:"https://simple.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"wikidata",name:"Wikidata",kind:"kb",format:"wikidata",url:"https://www.wikidata.org",homepage:"https://www.wikidata.org/",licence:"CC0 1.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"wiktionary",name:"Wiktionary",kind:"kb",format:"wiktionary",url:"https://en.wiktionary.org",homepage:"https://en.wiktionary.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!0},{id:"dbpedia-lookup",name:"DBpedia Lookup",kind:"kb",format:"dbpedia-lookup",url:"https://lookup.dbpedia.org",homepage:"https://www.dbpedia.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!1},{id:"english-wikipedia",name:"English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://en.wikipedia.org",homepage:"https://en.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:nn,enabledByDefault:!1}]),Nx=Object.freeze(["wikimedia-featured","hacker-news","usgs-quakes","nyt-world","wikinews-published"]),Lx=Object.freeze(["simple-wikipedia","wikidata","wiktionary"]),hX=new Map(Cx.map(e=>[e.id,e]))});var wX,yX,Mx=L(()=>{Ve();ui();wX=Object.freeze(["child","conceptnet","wordnet-complete"]),yX=Object.freeze({child:Object.freeze({license:"CC-BY-SA-4.0",notice:"corpus/child/LICENSE-NOTICE"}),conceptnet:Object.freeze({license:"CC-BY-SA-4.0",notice:"corpus/conceptnet/LICENSE-NOTICE"}),"wordnet-complete":Object.freeze({license:"CC-BY-4.0",notice:"corpus/wordnet/LICENSE-NOTICE"})})});var _t,SX,vX,EX,xX,kX,jX,RX,_X,TX,AX,IX,OX,CX,NX,LX,PX,MX,FX,DX,pm=L(()=>{_t=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SX=_t("createRequire"),vX=_t("readFileSync"),EX=_t("access"),xX=_t("readFile"),kX=_t("writeFile"),jX=_t("appendFile"),RX=_t("mkdir"),_X=_t("mkdtemp"),TX=_t("rename"),AX=_t("unlink"),IX=_t("rm"),OX=_t("stat"),CX=_t("copyFile"),NX=_t("readdir"),LX=_t("createReadStream"),PX=_t("createWriteStream"),MX=_t("randomBytes"),FX=_t("spawnSync"),DX=_t("createInterface")});var Fx=L(()=>{});var BM,i5,Dx,a5,c5,Bx=L(()=>{zt();pm();Qe();Ua();yu();em();Ue();sn();Fx();qn();Ve();Kn();ll();Su();es();BM=new Set(["VERB","AUX","ADP","SCONJ","CCONJ"]),i5=new Set([...BM,"PRON"]),Dx="said|says|told|reported|reports|announced|announces|stated|states|confirmed|confirms|added|wrote|writes",a5=new RegExp(`,\\s*["'\u201C\u201D\u2018\u2019]?\\s*([\\w.'\u2019-]+(?:\\s+[\\w.'\u2019-]+){0,3})\\s+(?:${Dx})\\s*[.!?]?\\s*$`,"i"),c5=new RegExp(`^\\s*([\\w.'\u2019-]+(?:\\s+[\\w.'\u2019-]+){0,4})\\s+(?:has\\s+|had\\s+|have\\s+)?(?:${Dx})\\s+(?:that\\s+)?(\\S.*)$`,"i")});var q5,Y5,X5,J5,Q5,mm=L(()=>{Ve();Ep();Ix();Ft();es();_u();qn();Px();za();yr();Mx();Ru();Bx();q5=Object.freeze({sources:Nx,kbSources:Lx,extraSources:Object.freeze([]),pollMinutes:15,enrichMinutes:10,enrichTermsPerCycle:3,negativeCacheTtlHours:24,syllogismsPerIngest:12,itemCap:30,newsFactCap:4e3,feedTop:3,windowHours:48,minIntervalMs:0}),Y5=6*36e5,X5=Object.freeze({"simple-wikipedia":"simple-wikipedia",wikidata:"wikidata",wiktionary:"wiktionary","dbpedia-lookup":"dbpedia"}),J5=Object.freeze(["child","conceptnet","wordnet-complete"]),Q5=Is.teach});function GM(e){if(!e||typeof e!="object")return!1;for(let t of["subject","predicate","object"])if(typeof e[t]!="string"||!e[t])return!1;return!(e.weight!==void 0&&!(typeof e.weight=="number"&&Number.isFinite(e.weight)&&e.weight>0))}function gm(e){if(!e||typeof e!="object"||typeof e.term!="string"||!e.term||!Array.isArray(e.facts)||e.facts.length===0)return!1;for(let t of e.facts)if(!GM(t)||V(t.subject)!==e.term&&V(t.object)!==e.term)return!1;return!0}var zx,Tu=L(()=>{Ve();zx=32});var VM,l8,Ux=L(()=>{Ro();Fa();jo();Qe();Tu();Ve();VM={},l8=ne(ve(tn(VM.url)),"..","..","..")});var d8,f8,p8,Wx=L(()=>{d8=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),f8=Object.freeze({propositionalQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question about whether a proposition holds ('does X import Y?')"}),checkQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question whose asker already expects the answer yes ('..., right?')"}),setQuestion:Object.freeze({dimension:"task",gloss:"a wh-question asking for the members of a set ('what does X import?')"}),choiceQuestion:Object.freeze({dimension:"task",gloss:"a question asking which of the listed alternatives holds ('is X a module or a class?')"}),inform:Object.freeze({dimension:"task",gloss:"a declarative telling the addressee something (a teach turn; also tmct explaining its own function)"}),answer:Object.freeze({dimension:"task",gloss:"an inform that discharges a question just asked (an answer grounded in the graph)"}),confirm:Object.freeze({dimension:"task",gloss:"an answer 'yes' to a check question"}),disconfirm:Object.freeze({dimension:"task",gloss:"an answer 'no' to a check question"}),agreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be true"}),disagreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be false"}),correction:Object.freeze({dimension:"task",gloss:"a disagreement that also supplies the replacement ('no, I meant Y')"}),request:Object.freeze({dimension:"task",gloss:"asks the addressee to perform an action ('solve it' \u2014 a goal turn)"}),instruct:Object.freeze({dimension:"task",gloss:"a request the addressee is expected to carry out without negotiation (a bare imperative)"}),suggestion:Object.freeze({dimension:"task",gloss:"puts an action forward as advisable without claiming authority over the addressee"}),offer:Object.freeze({dimension:"task",gloss:"commits the speaker to an action, conditional on the addressee wanting it"}),autoPositive:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn succeeded (an acknowledgement)"}),autoNegative:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn failed \u2014 tmct's honest miss"}),initialGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"opens an exchange of greetings ('hi')"}),returnGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"answers a greeting with a greeting"}),thanking:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses gratitude for something the addressee did"}),apology:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses regret for something the speaker did"})}),p8=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion","ask-choice":"choiceQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});var y8,HM,qM,Gx,$8,S8,v8,E8,x8,Vx=L(()=>{Cn();_u();y8=Object.freeze({inline:"inline",enumerated:"enumerated"}),HM=new Set(["in","on","at","for","with","from","of","into","onto"]),qM=new Set(["you","i","it","he","she","they","we","there","someone","something","one","him","her","them","who","himself","herself","itself","themselves","myself","yourself"]),Gx=new Set([...HM,"to","behind","before","near","next","along","alongside","under","over","between","among","during","without","about","by","as","like","that","if","when","while","being","because","since","until","so","and","but","or","immediately","likely","usually","normally","currently","is","are","was","were","do","does","did","has","have","had","will","would","could","should","might","must","can"]),$8=new Set([...Gx,"be","been"]),S8=new RegExp("^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:(?:what|which)\\s+[a-z][\\w'-]*|where|when|why|how|who)\\s+(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\s+(.+?)[?.!]*$","i"),v8=new RegExp("^(.*?)\\b(?:what|who|which|where|when|why|how)\\s+(?:i|you|he|she|it|we|they)?\\s*(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\b","i"),E8=Object.freeze([{family:"AtLocation",predicates:Object.freeze(["mgx:atLocation","mgx:locatedNear"]),cue:/\b(where|located|location)\b/i},{family:"IsA/Synonym/HasProperty",predicates:Object.freeze(["rdfs:subClassOf","mgx:synonym","mgx:hasProperty"]),cue:/\b(kind of|type of|another word for|same as|synonym)\b/i},{family:"HasPrerequisite/HasSubevent",predicates:Object.freeze(["mgx:hasPrerequisite","mgx:hasSubevent","mgx:hasFirstSubevent","mgx:hasLastSubevent"]),cue:/\b(before|after|first|next|then|once you|in order to)\b/i},{family:"Desires/MotivatedByGoal",predicates:Object.freeze(["mgx:desires","mgx:motivatedByGoal","mgx:causesDesire"]),cue:/\b(want\w*|desire\w*|motivat\w*)\b/i},{family:"Causes",predicates:Object.freeze(["mgx:causes","mgx:causesDesire"]),cue:/\b(cause\w*|result(?:s|ed)? in|leads? to|led to)\b/i},{family:"PartOf/HasA/MadeOf",predicates:Object.freeze(["mgx:partOf","mgx:hasA","mgx:madeOf"]),cue:/\b(part of|made of|has a|have a)\b/i},{family:"CapableOf",predicates:Object.freeze(["mgx:capableOf","mgxneg:capableOf"]),cue:/\b(capable of|able to)\b/i},{family:"UsedFor",predicates:Object.freeze(["mgx:usedFor"]),cue:/\b(used for|used to|use for)\b/i}]),x8=new Set([...qM,...Gx,"a","an","the","some","any","few","many","several","more","most","my","your","his","its","our","their","what","which","where","when","why","how","find","found","put","get","keep","store","place","buy","locate","hide","wear","carry","use","take","open","cross","need","want"])});function Wa(e){let t=new Map;for(let[n,s]of e||[])!n||!s||n===s||(t.has(n)||t.set(n,new Set),t.get(n).add(s));return t}function Au(e,t,{cap:n=6,stopAt:s=null,toward:o=null}={}){let r=[e],i=new Set([e]),a=e;for(;r.length<n&&!(o&&a===o);){let c=[...t.get(a)||[]].filter(d=>!i.has(d)).sort(Kx);if(!c.length)break;let l=o?c.filter(d=>d===o||wm(d,t).has(o)):[];a=(l.length?l:c)[0];let u=s&&s.has(a);if(u&&r.length>1||(i.add(a),r.push(a),u))break}return r}function wm(e,t,{cap:n=64}={}){let s=new Set([e]),o=[e];for(;o.length&&s.size<n;){let r=o.shift();for(let i of t.get(r)||[])s.has(i)||(s.add(i),o.push(i))}return s}function ym(e,t,n,s){if(n.has(e))return n.get(e);if(s.has(e))return 1;s.add(e);let o=t.get(e),r=1;if(o&&o.size){let i=0;for(let a of o)i=Math.max(i,ym(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function YM(e){let t=new Map;for(let[n,s]of e||[])!n||!s||(t.has(n)||t.set(n,new Set),t.get(n).add(s),t.has(s)||t.set(s,new Set),t.get(s).add(n));return t}function XM(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let c=wm(e,n),l=wm(t,n);if(c.has(t)||l.has(e))return{distinct:!1,reason:"subsumes",lcs:c.has(t)?t:e};if(s.size)for(let m of c){let b=s.get(m);if(b){for(let g of l)if(b.has(g))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...c].filter(m=>l.has(m));if(!u.length)return c.size<2||l.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=m=>ym(m,n,o,new Set),p=u[0],f=d(p);for(let m of u){let b=d(m);(b>f||b===f&&m<p)&&(p=m,f=b)}if(f<=i)return{distinct:!0,reason:"root-subsumer",lcs:p};if(a){let m=a.get(p);return typeof m=="number"&&m<r?{distinct:!0,reason:"low-ic",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}return 2*f/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}function Iu(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],c=n||Wa(t),l=YM(s),u=new Map,d=new Map(a.map(w=>[w,w])),p=w=>{for(;d.get(w)!==w;)d.set(w,d.get(d.get(w))),w=d.get(w);return w},f=(w,y)=>{let S=p(w),T=p(y);S!==T&&d.set(S<T?T:S,S<T?S:T)},h=[];for(let w=0;w<a.length;w+=1)for(let y=w+1;y<a.length;y+=1){let S=XM(a[w],a[y],c,l,u,{threshold:o,rootDepth:r,icByTerm:i});h.push({a:a[w],b:a[y],...S}),S.distinct||f(a[w],a[y])}let m=new Map;for(let w of a){let y=p(w);m.has(y)||m.set(y,[]),m.get(y).push(w)}let b=w=>ym(w,c,u,new Set),g=[...m.values()].map(w=>{let y=[...w].sort(),S=y[0],T=b(S);for(let v of y){let E=b(v);E>T&&(T=E,S=v)}return{objects:y,label:S}}).sort((w,y)=>Kx(w.label,y.label));return{split:g.length>1,clusters:g,pairs:h}}var Kx,Ou=L(()=>{Ft();aa();Kx=(e,t)=>e<t?-1:e>t?1:0});var Hx=L(()=>{});function qx(e,{pending:t=null}={}){return t?!0:String(e??"").split(`
|
|
170
|
+
`).filter(n=>n.trim()!=="").length>1}var Cu,C8,Yx=L(()=>{Hx();Cu=Object.freeze({MEMORY_COUNT:"memory-count",MEMORY_CLASS:"memory-class",LETTER_WORDS:"letter-words",COLLECTION_CONTENTS:"collection-contents",TAUGHT_CLASS_COUNT:"taught-class-count",MEMBERSHIP_LIST:"membership-list",MEMBERSHIP_EXAMPLE:"membership-example",SKOS_NEIGHBOURHOOD:"skos-neighbourhood",WHAT_ELSE:"what-else",FACT_SET:"fact-set",FACT_READBACK:"fact-readback"}),C8=Object.freeze(Object.values(Cu))});function $m(e){return typeof e=="string"&&JM.test(e)}function Xx(e){return!!e&&typeof e=="object"&&$r(e.s)}function Sm(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&$m(e.world)&&$r(e.subject)&&$r(e.predicate)&&$r(e.object)}function vm(e){if(!e||typeof e!="object"||e.kind!=="rule"||!$m(e.world)||!$r(e.name)||!ZM.has(e.ruleKind)||!e.slots||typeof e.slots!="object"||Array.isArray(e.slots))return!1;let t=Object.values(e.slots);return t.length>0&&t.every($r)}function Em(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&$m(e.world)&&$r(e.opening)}function Jx(e){return Sm(e)||vm(e)||Em(e)}function Qx(e){let t=e||[],n=t.filter(l=>l.predicate===eF).sort((l,u)=>tF(`${l.subject}\0${l.object}`,`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(l=>l.predicate==="rdf:type").map(l=>l.subject)),o=new Map;for(let l of t)l.predicate==="mgx:located-in"&&o.set(l.subject,l.object);let r=(l,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===l&&o.get(d.subject)===u),i=t.find(l=>typeof l.world=="string"&&l.kind==="fact"),a=(l,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:l,predicate:u,object:d}),c=[];for(let l of n){let u=l.subject,d=l.object;if(r(d,u))continue;let p=d,f=1;for(;s.has(p);)f+=1,p=`${d}-${f}`;s.add(p),c.push(a(p,"rdf:type",d)),c.push(a(p,"rdf:type","portable")),c.push(a(p,"mgx:located-in",u))}return c.length?[...t,...c]:t}var JM,QM,ZM,$r,eF,tF,Sr=L(()=>{JM=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,QM=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),ZM=new Set(QM),$r=e=>typeof e=="string"&&e.trim()!=="";eF="mgx:default-contains",tF=(e,t)=>e<t?-1:e>t?1:0});var nF,sF,P8,Ga=L(()=>{nF=Object.freeze(["mgx:consumes","mgx:display-name","mgx:evades","mgx:guards","mgx:hasMass","mgx:is-predator","mgx:mass-drain-per-turn","mgx:model","mgx:pursues","mgx:vision-radius"]),sF=Object.freeze(new Set(["mgx:consumes","mgx:evades","mgx:guards","mgx:pursues"])),P8=Object.freeze(["mgx:consumes","mgx:evades","mgx:pursues"])});var Si=L(()=>{});var oF,rF,iF,aF,cF,lF,uF,dF,fF,pF,hF,mF,gF,bF,wF,yF,$F,SF,vF,z8,EF,Zx,U8,W8,ek=L(()=>{es();Wr();oF="subClassOf",rF="typeAssertion",iF="relation",aF="someValuesFrom",cF="cardinality",lF="disjointWith",uF="possessive",dF="adjective",fF="capability",pF="union",hF="complement",mF="negativeType",gF="enumeration",bF="differentFrom",wF="bareExistential",yF="transitiveRole",$F="inverseRole",SF="universal",vF="subPropertyOf",z8=Object.freeze([oF,rF,iF,aF,cF,lF,uF,dF,fF,pF,hF,mF,gF,bF,wF,yF,$F,SF,vF]),EF=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Zx=new Map([["pick up","take"],["pick","take"],["grab","take"],["put down","drop"],["set down","drop"],["leave","drop"],["talk to","talk"],["speak to","talk"],["speak with","talk"],["talk","talk"],["speak","talk"],["chat with","talk"],["converse with","talk"],["look at","examine"],["examine","examine"],["inspect","examine"],["have a look at","examine"],["take a look at","examine"],["check out","examine"],["shut","close"]]),U8=Math.max(...[...Zx.keys()].map(e=>e.split(" ").length)),W8=[...new Set([...EF,...[...Zx.keys()].map(e=>e.split(" ")[0])])]});var vr=L(()=>{});var xm=L(()=>{Fe();cs();vr()});function Ht({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:To.Capability,name:e,label:t,question:n,readOnly:!0,parameters:Object.freeze(s),preconditions:Object.freeze(o),effects:Object.freeze({add:Object.freeze(r),del:Object.freeze(i)})})}var xF,To,je,kF,Er,bt,cn,wn,jF,tk,Kt,RF,_F,nk,X8,J8,Q8,vi=L(()=>{xF=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),To=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),je=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),kF=Object.freeze([je.MemoryTerm]),Er=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),bt=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:To.Parameter,name:e,kind:t,arg:n,required:s,note:o}),cn=()=>Object.freeze({type:To.Precondition,pred:Er.graphLoaded}),wn=(e,t)=>Object.freeze({type:To.Precondition,pred:Er.resolves,param:e,as:t}),jF=e=>Object.freeze({type:To.Precondition,pred:Er.anyPresent,params:Object.freeze([...e])}),tk=()=>Object.freeze({type:To.Precondition,pred:Er.memoryFacts}),Kt=(e,t=null)=>Object.freeze({type:To.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});RF=Object.freeze([Ht({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[bt("query",je.Query,{required:!1,note:"required unless a kind filter is given"}),bt("kind",je.Kind,{required:!1}),bt("name",je.Query,{required:!1}),bt("decorator",je.Query,{required:!1})],preconditions:[cn(),jF(["query","kind"])],add:[Kt("matches","query")]}),Ht({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("description","symbol")]}),Ht({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("signature","symbol")]}),Ht({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[bt("module",je.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[cn(),wn("module",je.Symbol)],add:[Kt("impact","module")]}),Ht({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[bt("class",je.Class,{arg:"class"})],preconditions:[cn(),wn("class",je.Class)],add:[Kt("members","class")]}),Ht({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[bt("class",je.Class,{arg:"class"})],preconditions:[cn(),wn("class",je.Class)],add:[Kt("subclasses","class")]}),Ht({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[bt("module",je.Module)],preconditions:[cn(),wn("module",je.Module)],add:[Kt("exports","module")]}),Ht({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("callers","symbol")]}),Ht({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("callees","symbol")]}),Ht({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("calls","symbol")]}),Ht({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("tests","symbol")]}),Ht({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[cn()],add:[Kt("untested",null)]}),Ht({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("history","symbol")]}),Ht({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[bt("symbol",je.Symbol)],preconditions:[cn(),wn("symbol",je.Symbol)],add:[Kt("cochanges","symbol")]}),Ht({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[bt("package",je.Package,{required:!1})],preconditions:[cn()],add:[Kt("architecture","package")]}),Ht({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[bt("term",je.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[tk(),wn("term",je.MemoryTerm)],add:[Kt("related","term")]}),Ht({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[bt("class",je.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),bt("expression",je.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),bt("size",je.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[tk(),wn("class",je.MemoryTerm)],add:[Kt("sprite","class")]})]),_F=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),nk=RF,X8=_F(nk),J8=Object.freeze({tmct_context:"unbounded edit-context bundle (multi-file); needs a size/budget precondition",tmct_context_more:"unbounded context continuation; same as tmct_context",tmct_snippet:"raw source-file read (reads the filesystem); needs a file-read + span precondition",tmct_ask:"the plain-English question entry point itself \u2014 calls ask.mjs directly and bypasses the capability planner; not one of the planner's operators",tmct_export:"reads the memory store's whole fact set with no discriminating param and no resolver goal frame; needs NL-reachability wiring before it can join",tmct_ingest:"writes into the memory store (grounds facts); capability() only models read-only operators, so a write path needs its own precondition/effect design first",tmct_file_history:"a module-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_method_history:"a method-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_class_history:"a class-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet"}),Q8=Object.freeze({prefixes:xF,vocab:To,kinds:je,precond:Er,get capabilities(){return nk}})});var km=L(()=>{vi()});var Nu=L(()=>{qn()});var jm=L(()=>{vi()});function CF(e){let t={};for(let n of String(e).toLowerCase().match(/[a-z]+/g)||[])!t.expression&&Object.hasOwn(ao,n)&&(t.expression=n),!t.size&&Oa([{predicate:OF,object:n}])!==1&&(t.size=n);return t}var $6,S6,v6,E6,OF,x6,Rm=L(()=>{cs();rs();uu();Ve();Fe();uc();Uh();vi();jm();$6=new RegExp(`\\b(?:${Object.keys(ss).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s+")).join("|")})\\b`,"i"),S6=Object.freeze({"reverse:calls":{topic:"callers",arg:"symbol"},"forward:calls":{topic:"callees",arg:"symbol"},"reverse:tests":{topic:"tests",arg:"symbol"},"forward:tests":{topic:"tests",arg:"symbol"},"reverse:inherits":{topic:"subclasses",arg:"class"},"forward:reexports":{topic:"exports",arg:"module"},"forward:contains":{topic:"members",arg:"class"},"when:touches":{topic:"history",arg:"symbol"},"forward:cochange":{topic:"cochanges",arg:"symbol"},"reverse:cochange":{topic:"cochanges",arg:"symbol"}}),v6=Object.freeze({imports:"no importer/imports query tool in the registry (there is no tmct_imports); refusing beats mis-routing to calls",uses:"a query-side UNION (imports+calls+callsSymbol) with no single capability; a router that must emit ONE call cannot honour it \u2014 refuse",defines:"Module->symbol `defines` has no dedicated capability (tmct_members is Class-scoped `contains`); refuse rather than answer a different grain",serves:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool",denotes:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool"}),E6=Object.freeze({}),OF="mgx:hasProperty";x6=Object.freeze([{re:/\buntested\b|\bwithout\s+(?:a\s+)?tests?\b|\bhas\s+no\s+tests?\b|\bneeds?\s+(?:a\s+)?tests?\b/i,topic:"untested",noArg:!0,skipIfSuperlative:!0},{re:/\bblast\s*radius\b|\bimpacts?\b|\bimpacted\b|what\s+(?:a\s+)?change.*(?:reach|affect|touch)|what\s+(?:depends?\s+on|dependents?)\b/i,topic:"impact",arg:"module"},{re:/\bcall[\s-]*edges?\b|\bcall[\s-]*graph\b|\boutgoing\s+calls?\b|\bcall[\s-]*sites?\s+(?:of|in|out|from)\b/i,topic:"calls",arg:"symbol"},{re:/\bcallees?\b|wh(?:at|o)\s+does\s+\S+\s+call\b/i,topic:"callees",arg:"symbol"},{re:/\bcallers?\b|who\s+calls\b|what\s+calls\b/i,topic:"callers",arg:"symbol"},{re:/\btests?\b.*\b(?:for|cover|covering|of)\b|which\s+tests?\b|covers?\b|covered\b|test\s+coverage\b/i,topic:"tests",arg:"symbol"},{re:/\bcochang|change[- ]coupl/i,topic:"cochanges",arg:"symbol"},{re:/\bexports?\b|\bpublic\s+api\b/i,topic:"exports",arg:"module"},{re:/\bsubclasses?\b|children\s+of\b|\bextends?\b/i,topic:"subclasses",arg:"class"},{re:/\bmembers?\b|\bmethods?\s+of\b|\battributes?\s+of\b/i,topic:"members",arg:"class"},{re:/\bhistory\b|who\s+changed\b|commits?\s+(?:that\s+)?touch/i,topic:"history",arg:"symbol"},{re:/\bsignature\b/i,topic:"signature",arg:"symbol"},{re:/\bsynonyms?\b|\banother\s+word\s+for\b|\brelated\s+(?:words?|concepts?|to)\b/i,topic:"related",arg:"term"},{re:/\bsprite\b|\bicon\b|\bavatar\b|\bpicture\s+of\b|\bwhat\s+does\s+.+\s+look\s+like\b/i,topic:"sprite",arg:"class",slots:CF},{re:/\bdescribe\b|\bexplain\b|what\s+is\b|tell\s+me\s+about\b|definition\s+of\b/i,topic:"description",arg:"symbol"},{re:/\bsearch\b|\bfind\b|look\s+for\b/i,topic:"matches",arg:"query"}])});var rk=L(()=>{});var LF,ik=L(()=>{Rm();vi();jm();rk();cs();LF=Object.freeze([Object.freeze({id:"coverage-invariant",kind:"maintenance",invariant:"an impactful module must be tested",focusClass:"Module",modes:Object.freeze(["scoped","global"]),subGoals:Object.freeze(["impact","untested"]),priorityTopic:"impact",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"untested"}),b:Object.freeze({topic:"impact",of:"focus",withFocus:!0}),names:"the change's untested footprint",empty:"no coverage gap"}),achieves:"coverage-gap"}),Object.freeze({id:"cochange-risk-invariant",kind:"maintenance",invariant:"a module change-coupled with the focus must be tested",focusClass:"Module",modes:Object.freeze(["scoped"]),subGoals:Object.freeze(["cochanges","untested"]),priorityTopic:"cochanges",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"cochanges",of:"focus"}),b:Object.freeze({topic:"untested"}),names:"the change-coupled untested set",empty:"every change-coupled module is tested"}),achieves:"cochange-risk"})])});var Lu=L(()=>{Si();Nu();Rm();ik();vi();km()});function FF(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||ne(MF,"corpus","worlds")}function ak(e){try{return br(Qs(e))}catch{return null}}function ck(e){if(Tm.has(e))return Tm.get(e);let t=null,n=ak(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Tm.set(e,t),t}function DF(e,t){let n=ck(e);if(!n)return null;let s=n[String(t??"")];if(!Xx(s))return null;let o=`${e}\0${t}`;if(Am.has(o))return Am.get(o);let r=null,i=ak(ne(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],c=[],l=null;for(let u of i.toString("utf8").split(`
|
|
171
|
+
`))if(u.trim())try{let d=JSON.parse(u);if(!Jx(d)||d.world!==t)continue;Sm(d)?a.push(d):vm(d)?c.push(d):Em(d)&&!l&&(l=d)}catch{}(a.length||c.length||l)&&(r={name:t,facts:Qx(a),rules:c,meta:l})}return Am.set(o,r),r}var zF,MF,Tm,Am,BF,q6,Pu=L(()=>{Ro();Fa();jo();Qe();Sr();zF={},MF=ne(ve(tn(zF.url)),"..","..","..");Tm=new Map,Am=new Map;BF=e=>({list:async()=>{let t=ck(e());return t?Object.keys(t).sort():null},load:async t=>DF(e(),t)}),q6=BF(()=>FF())});var sJ,lk=L(()=>{zt();Qe();Kn();Li();qn();Ue();sJ=ne(".tmct","memory","blocks")});var uk=L(()=>{vr()});var fk=L(()=>{Kn();Li();vr()});var Im=L(()=>{Kn();Li();vr()});var pk=L(()=>{Im();Kn();Os();vr()});var hk=L(()=>{});var mk=L(()=>{uk();fk();Im();pk();hk();vr()});var gk=L(()=>{lk();Ue();Hc();yu();mk();xm()});function Ei(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function Fu(e){let t=n=>VF.map((s,o)=>`--${n}-t${o+1}: ${Ei(e[n],s)};`).join(" ");return[`--bg: ${e.bg}; --ink: ${e.ink}; --muted: ${e.muted}; --line: ${e.line}; --card: ${e.card};`,`--taught: ${e.taught}; --corpus: ${e.corpus}; --entail: ${e.entail}; --alert: ${e.alert};`,t("taught"),t("corpus"),t("entail"),`--taught-soft: ${Ei(e.taught,.12)}; --corpus-soft: ${Ei(e.corpus,.12)};`,`--entail-soft: ${Ei(e.entail,.14)}; --alert-soft: ${Ei(e.alert,.12)};`,`--sprite-pop: drop-shadow(0 0 .6px ${Ei(e.ink,e.popRimAlpha)}) drop-shadow(${e.popShadow});`].join(" ")}var Mu,VF,YJ,Om=L(()=>{_u();Mu=Object.freeze({light:Object.freeze({bg:"#F7F6F2",ink:"#23272B",muted:"#6E7168",line:"#DDD9D0",card:"#FFFFFF",taught:"#2E7D4F",corpus:"#5A80AC",entail:"#B07C2E",alert:"#B0503F",popRimAlpha:.66,popShadow:"0 1px 1.2px rgba(0, 0, 0, .30)"}),dark:Object.freeze({bg:"#15181C",ink:"#E7E5DF",muted:"#9A9E95",line:"#2B3036",card:"#1C2126",taught:"#5FBE8B",corpus:"#6C93BF",entail:"#D9A554",alert:"#D08070",popRimAlpha:.45,popShadow:"0 1px 1.4px rgba(0, 0, 0, .55)"})}),VF=[.35,.65,1];YJ=`
|
|
172
|
+
:root { color-scheme: light dark; ${Fu(Mu.light)} }
|
|
173
|
+
@media (prefers-color-scheme: dark) { :root { ${Fu(Mu.dark)} } }
|
|
174
|
+
:root[data-theme="dark"] { ${Fu(Mu.dark)} }
|
|
175
|
+
:root[data-theme="light"] { ${Fu(Mu.light)} }
|
|
176
|
+
`});var bk=L(()=>{Si();Om()});var wk=L(()=>{Si();Om()});var $k=L(()=>{Ue();Sr();Cn();xi()});var vk=L(()=>{Os();Ue();Si();Lu();xi()});var kk,Y9,xi=L(()=>{Sr();Ga();Si();ek();es();hu();xm();km();Lu();Nu();Pu();Ue();gk();bk();wk();$k();vk();kk="mgx:world-epoch",Y9=new RegExp("^(?:what\\s+foods?\\s+(?:do\\s+you\\s+know(?:\\s+about)?|have\\s+you\\s+(?:found|seen|heard\\s+(?:about|of))|do\\s+you\\s+know\\s+of)|what\\s+do\\s+you\\s+know\\s+about\\s+(?:any\\s+)?foods?|do\\s+you\\s+know\\s+(?:about|of)\\s+(?:any\\s+)?foods?|where\\s+is\\s+(?:the\\s+)?food)[?.!\\s]*$","i")});var ki,J9,Q9,Z9,eQ,tQ,nQ,Ao=L(()=>{ki=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),mudiii:Object.freeze({predatorInitialMass:20,predatorMassDecrementPerTurn:.08,predatorVisionRadius:4,preyInitialMass:8,preyMassDecrementPerTurn:.06,preyVisionRadius:3,preySpawnIntervalTurns:5,foodSpawnIntervalTurns:3,spawnedFoodMass:2,placedFoodMass:2,maxPreyPopulation:6,maxFoodItems:8,foodVisionGated:!0,blendPreyDecision:!1,preyThreatWeight:.5,teach:!1}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),adventure:Object.freeze({teach:!1}),planning:Object.freeze({maxDepth:300})}),J9=Object.freeze({spider_initial_mass:"spiderInitialMass",spider_mass_decrement_per_turn:"spiderMassDecrementPerTurn",fly_initial_mass:"flyInitialMass",fly_mass_decrement_per_turn:"flyMassDecrementPerTurn",spider_vision_radius:"spiderVisionRadius",fly_vision_radius:"flyVisionRadius",egg_hatch_delay_turns:"eggHatchDelayTurns",fly_spawn_interval_turns:"flySpawnIntervalTurns",egg_lay_mass_threshold:"eggLayMassThreshold",egg_hatch_count:"eggHatchCount",min_hatchling_mass:"minHatchlingMass",web_duration_turns:"webDurationTurns"}),Q9=Object.freeze({mole_initial_mass:"moleInitialMass",mole_mass_decrement_per_turn:"moleMassDecrementPerTurn",mole_speed:"moleSpeed",mole_dig_reach:"moleDigReach",vole_initial_mass:"voleInitialMass",vole_mass_decrement_per_turn:"voleMassDecrementPerTurn",vole_speed:"voleSpeed",vole_dig_reach:"voleDigReach",badger_initial_mass:"badgerInitialMass",badger_mass_decrement_per_turn:"badgerMassDecrementPerTurn",badger_speed:"badgerSpeed",badger_dig_reach:"badgerDigReach",groundhog_initial_mass:"groundhogInitialMass",groundhog_mass_decrement_per_turn:"groundhogMassDecrementPerTurn",groundhog_speed:"groundhogSpeed",groundhog_dig_reach:"groundhogDigReach",meerkat_initial_mass:"meerkatInitialMass",meerkat_mass_decrement_per_turn:"meerkatMassDecrementPerTurn",meerkat_speed:"meerkatSpeed",meerkat_dig_reach:"meerkatDigReach"}),Z9=Object.freeze({predator_initial_mass:"predatorInitialMass",predator_mass_decrement_per_turn:"predatorMassDecrementPerTurn",predator_vision_radius:"predatorVisionRadius",prey_initial_mass:"preyInitialMass",prey_mass_decrement_per_turn:"preyMassDecrementPerTurn",prey_vision_radius:"preyVisionRadius",prey_spawn_interval_turns:"preySpawnIntervalTurns",food_spawn_interval_turns:"foodSpawnIntervalTurns",spawned_food_mass:"spawnedFoodMass",placed_food_mass:"placedFoodMass",max_prey_population:"maxPreyPopulation",max_food_items:"maxFoodItems",food_vision_gated:"foodVisionGated",blend_prey_decision:"blendPreyDecision",prey_threat_weight:"preyThreatWeight",teach:"teach"}),eQ=Object.freeze({teach:"teach"}),tQ=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),nQ=Object.freeze({max_depth:"maxDepth"})});var jk,ZF,Bu,eD,tD,Rk,_k,nD,sD,rQ,oD,rD,Tk=L(()=>{Ao();jk="spider-fly",ZF=10,Bu=Object.freeze({x:2,y:2}),eD=1,tD=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider",hunts:"prey"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly",hunts:null}),food:null}),Rk=(e,t)=>`cell-${e}-${t}`,_k=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),nD=(e,t)=>_k(e,t,Bu.x,Bu.y)<=eD,sD=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),rQ=Object.freeze([Object.freeze(["poodle","dog"]),Object.freeze(["sheepdog","dog"]),Object.freeze(["dog","animal"]),Object.freeze(["spider","arachnid"]),Object.freeze(["arachnid","animal"]),Object.freeze(["fly","insect"]),Object.freeze(["insect","animal"])]),oD="a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move. Watch, or address one by name in chat.",rD=Object.freeze({name:jk,gridSize:ZF,opening:oD,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:nD,webHomeCell:Rk(Bu.x,Bu.y)})});var Ak,Nk,cQ,lQ,uQ,Cm,Ik,Ok,Ck,Nm,dQ,fQ,zu=L(()=>{Ao();Ak=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),Nk=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),cQ=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),lQ=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),uQ=Object.freeze([Ak.spawnedFood,Ak.placedFood]),Cm=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),Ik=Cm({name:"town-square",gridSize:12,opening:"a fox prowls the town square; goblins pick over the stalls for scraps. Neither is yours to move. Watch, or address one by name in chat.",cast:{predators:1,prey:3},props:[{id:"house-1",model:"house-1",cell:"cell-8-1",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-8-2",rotation:"180"},{id:"house-3",model:"house-3",cell:"cell-8-3",rotation:"180"},{id:"well-1",model:"well",cell:"cell-6-7",rotation:"0"},{id:"stall-1",model:"market-stall-1",cell:"cell-3-9",rotation:"90"},{id:"inn-1",model:"inn",cell:"cell-11-10",rotation:"270"}]}),Ok=Cm({name:"town-square-market",gridSize:10,opening:"market day in the town square: two rows of stalls, goblins working the lanes between them, and a fox somewhere among the crowd.",cast:{predators:1,prey:4},props:[{id:"stall-1",model:"market-stall-1",cell:"cell-2-4",rotation:"0"},{id:"stall-2",model:"market-stall-2",cell:"cell-3-4",rotation:"0"},{id:"stall-3",model:"market-stall-1",cell:"cell-4-4",rotation:"0"},{id:"stall-4",model:"market-stall-2",cell:"cell-6-4",rotation:"0"},{id:"stall-5",model:"market-stall-1",cell:"cell-7-4",rotation:"0"},{id:"stall-6",model:"market-stall-2",cell:"cell-8-4",rotation:"0"},{id:"stall-7",model:"market-stall-2",cell:"cell-2-7",rotation:"180"},{id:"stall-8",model:"market-stall-1",cell:"cell-3-7",rotation:"180"},{id:"stall-9",model:"market-stall-2",cell:"cell-4-7",rotation:"180"},{id:"stall-10",model:"market-stall-1",cell:"cell-6-7",rotation:"180"},{id:"stall-11",model:"market-stall-2",cell:"cell-7-7",rotation:"180"},{id:"stall-12",model:"market-stall-1",cell:"cell-8-7",rotation:"180"},{id:"well-1",model:"well",cell:"cell-5-5",rotation:"0"},{id:"blacksmith-1",model:"blacksmith",cell:"cell-10-5",rotation:"270"},{id:"cart-1",model:"cart",cell:"cell-1-1",rotation:"90"},{id:"cart-2",model:"cart",cell:"cell-10-10",rotation:"270"},{id:"bush-1",model:"bush",cell:"cell-10-1",rotation:"0"},{id:"bush-2",model:"bush",cell:"cell-1-10",rotation:"0"}]}),Ck=Cm({name:"town-square-chapel",gridSize:14,opening:"the chapel corner of the town square, fenced to the south and shaded by three oaks. Two foxes hunt here, and two goblins know it.",cast:{predators:2,prey:2},props:[{id:"inn-1",model:"inn",cell:"cell-2-2",rotation:"180"},{id:"house-1",model:"house-1",cell:"cell-3-2",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-2-3",rotation:"90"},{id:"fence-1",model:"fence",cell:"cell-7-11",rotation:"0"},{id:"fence-2",model:"fence",cell:"cell-8-11",rotation:"0"},{id:"fence-3",model:"fence",cell:"cell-9-11",rotation:"0"},{id:"oak-1",model:"oak-tree",cell:"cell-12-4",rotation:"0"},{id:"oak-2",model:"oak-tree",cell:"cell-12-12",rotation:"90"},{id:"oak-3",model:"oak-tree",cell:"cell-5-8",rotation:"180"}]}),Nm=Object.freeze({[Ik.name]:Ik,[Ok.name]:Ok,[Ck.name]:Ck}),dQ=Object.freeze(Object.keys(Nm)),fQ=Object.freeze([Object.freeze(["fox","canine"]),Object.freeze(["canine","animal"]),Object.freeze(["goblin","humanoid"]),Object.freeze(["humanoid","creature"]),Object.freeze(["creature","animal"]),Object.freeze(["crumb","food"]),Object.freeze(["morsel","food"]),Object.freeze(["food","thing"]),Object.freeze(["prop","thing"])])});var Lm=L(()=>{});var Lk=L(()=>{});var Ha,FQ,hD,mD,gD,bD,wD,yD,$D,SD,vD,ED,xD,kD,jD,RD,_D,TD,AD,DQ,Pm=L(()=>{zu();Lm();Os();Ue();Sr();Lk();Ve();Ao();Ga();xi();Ha=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox",hunts:"prey"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin",hunts:null},food:{spawnedKind:"crumb",placedKind:"morsel"}}),FQ=Object.freeze(["predator","prey"]),hD="mgx:currently-in",mD="mgx:hasMass",gD="mgx:feels",bD="mgx:facing",wD="mgx:driven-facing",yD="mgx:eaten-by",$D="mgx:starved",SD="mgx:placed-by",vD="mgx:model",ED="mgx:rotation",xD="mgx:carrying",kD="mgx:prey-eaten",jD="mgx:web-built-at-turn",RD="mgx:laid-at-turn",_D="mgx:hatched-into",TD="mgx:turn-played",AD=new Set([hD,mD,gD,bD,wD,yD,$D,SD,vD,ED,TD,xD,kD,jD,RD,_D,"rdf:type",kk]),DQ=Object.freeze([...AD].sort())});var s7,o7,Mk=L(()=>{Tk();zu();Pm();Sr();Pu();Ue();Ao();s7=new RegExp("^@(spider|fly)(?:-(\\d+))?[,:]?\\s+the\\s+(spider|fly)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),o7=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var N7,L7,P7,M7,F7,D7,B7,ND,LD,PD,MD,Fk,Dk,FD,z7,U7,Bk=L(()=>{zu();Pm();xi();Cn();Sr();Pu();Ue();Ao();Ga();Lm();Nu();Os();N7=Ha.predator.kind,L7=Ha.prey.kind,P7=Ha.food.spawnedKind,M7=Ha.food.placedKind,F7=Object.freeze(new Set(["river-crossing"])),D7=new RegExp("^@(fox|goblin)(?:-(\\d+))?[,:]?\\s+the\\s+(fox|goblin|crumb|morsel)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),B7=new RegExp("^who\\s+(?:put|placed|dropped)\\s+(?:(?:the\\s+)?(morsel|crumb)(?:-(\\d+))?|(?:(?:the\\s+)?(?:food|morsel|crumb|that|it)\\s+)?(?:at|on)\\s+(cell-\\d+-\\d+))(?:\\s+there)?[?.!\\s]*$","i"),ND="mgx:currently-in",LD="mgx:hasMass",PD="mgx:feels",MD="mgx:facing",Fk="(fox|goblin|crumb|morsel)(?:-(\\d+))?",Dk="(fox|goblin)(?:-(\\d+))?",FD="(crumb|morsel)(?:-(\\d+))?",z7=[{kind:"placement",predicate:ND,re:new RegExp(`^(?:the\\s+)?${Fk}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:LD,re:new RegExp(`^(?:the\\s+)?${Fk}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:PD,re:new RegExp(`^(?:the\\s+)?${Dk}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:MD,re:new RegExp(`^(?:the\\s+)?${Dk}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],U7=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${FD}\\s+there[.!\\s]*$`,"i")});var zk=L(()=>{Ga()});var Tt,Y7,X7,J7,Q7,Z7,eZ,tZ,nZ,sZ,oZ,rZ,iZ,aZ,cZ,lZ,uZ,dZ,fZ,DD,Uk=L(()=>{Tt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Y7=Tt("createRequire"),X7=Tt("readFileSync"),J7=Tt("access"),Q7=Tt("readFile"),Z7=Tt("writeFile"),eZ=Tt("appendFile"),tZ=Tt("mkdir"),nZ=Tt("mkdtemp"),sZ=Tt("rename"),oZ=Tt("unlink"),rZ=Tt("rm"),iZ=Tt("stat"),aZ=Tt("copyFile"),cZ=Tt("readdir"),lZ=Tt("createReadStream"),uZ=Tt("createWriteStream"),dZ=Tt("randomBytes"),fZ=Tt("spawnSync"),DD=Tt("createInterface")});var At,hZ,mZ,gZ,bZ,wZ,yZ,$Z,SZ,vZ,EZ,xZ,kZ,jZ,RZ,_Z,TZ,AZ,Wk,IZ,Mm=L(()=>{At=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},hZ=At("createRequire"),mZ=At("readFileSync"),gZ=At("access"),bZ=At("readFile"),wZ=At("writeFile"),yZ=At("appendFile"),$Z=At("mkdir"),SZ=At("mkdtemp"),vZ=At("rename"),EZ=At("unlink"),xZ=At("rm"),kZ=At("stat"),jZ=At("copyFile"),RZ=At("readdir"),_Z=At("createReadStream"),TZ=At("createWriteStream"),AZ=At("randomBytes"),Wk=At("spawnSync"),IZ=At("createInterface")});var Gk=L(()=>{Mm();Qe();zt();Qe();ya();sn()});var Vk=L(()=>{});var BD,Kk=L(()=>{zt();Qe();Ue();Vk();BD=ne(".tmct","sessions")});var Hk=L(()=>{zt();Qe();mu()});var qk,JZ,Yk=L(()=>{qk=Object.freeze({countNouns:{class:"Class",classes:"Class",function:"Function",functions:"Function",func:"Function",funcs:"Function",module:"Module",modules:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",method:"Method",methods:"Method",attribute:"Attribute",attributes:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",commit:"Commit",commits:"Commit",session:"Session",sessions:"Session"},classLabels:{Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},helpRows:[["/find <query>","lexical search across the graph"],["/search <query>","alias of /find"],["/context <symbol>","the sized edit bundle for a symbol (start here to change code)"],["/snippet <symbol>","exact source of one function/class/method"],["/describe <symbol>","a symbol's definition, kind and relations"],["/signature <symbol>","a symbol's signature only"],["/members <class>","the methods/attributes of a class"],["/subclasses <class>","the subclasses of a class"],["/impact <module>","what a change to this module or symbol reaches (impact closure)"],["/callers <symbol>","functions that call this symbol"],["/callees <symbol>","functions this symbol calls"],["/tests <symbol>","the tests covering this symbol"],["/untested","symbols with no covering test"],["/history <symbol>","the commit history of this symbol"],["/exports <module>","a module's public exports"],["/arch [package]","the architecture overview (optional package filter)"]],missRecoveryPointer:"for code structure, index this repo with `tmct index`, or point me at a .tmct/graph.json with --repo <path> (or try `npm run example:mini`)."}),JZ=Object.freeze({countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""})});var It,ZZ,eee,tee,nee,see,oee,ree,iee,aee,cee,lee,uee,dee,fee,pee,hee,mee,gee,Xk,Jk=L(()=>{It=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},ZZ=It("createRequire"),eee=It("readFileSync"),tee=It("access"),nee=It("readFile"),see=It("writeFile"),oee=It("appendFile"),ree=It("mkdir"),iee=It("mkdtemp"),aee=It("rename"),cee=It("unlink"),lee=It("rm"),uee=It("stat"),dee=It("copyFile"),fee=It("readdir"),pee=It("createReadStream"),hee=It("createWriteStream"),mee=It("randomBytes"),gee=It("spawnSync"),Xk=It("createInterface")});var nj={};Nt(nj,{CONTEXT_PASSAGE_PREDICATE:()=>Zk,CO_OCCURS_PREDICATE:()=>Uu,ingestUnknownFromAssertions:()=>WD,knownTermsFrom:()=>ej,passageFor:()=>tj});function ej(e,t){let n=new Set;for(let s of e?.individuals||[]){if(s?.class!==Ke)continue;let o=a=>(s.attributes||[]).find(c=>c?.key===a)?.value,r=o("subject"),i=o("object");r&&n.add(V(r)),i&&n.add(V(i))}for(let s of t||[])s?.subject&&n.add(V(s.subject)),s?.object&&n.add(V(s.object));return n}function tj(e,t){let n=e?.surfaceText;if(typeof n=="string"&&n.trim())return n.replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\s+/g," ").trim();let s=Io(e?.start),o=Io(e?.end);return t?.surface&&s&&o?t.surface.replace("{start}",s).replace("{end}",o):null}function UD(e,t,n){let s=String(e||"").toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(Boolean),o=[],r=new Set;for(let i=0;i<s.length&&o.length<Qk;i+=1){let a=[s[i]];i+1<s.length&&a.push(`${s[i]} ${s[i+1]}`);for(let c of a)if(!(zD.has(c)||r.has(c)||n.has(c))&&t.has(c)&&(o.push(c),r.add(c),o.length>=Qk))break}return o}async function WD(e,{assertions:t,map:n,mappedFacts:s=[],memory:o,provenancePrefix:r="corpus:unknown",limit:i=500}={}){if(!Array.isArray(t)||!n)return{captured:0,linked:0,appended:0,skipped:0};let a=o||await rt(e),c=ej(a,s),l=new Set,u=[];for(let f of t){if(l.size>=i)break;let h=n.get(f.rel);if(!h||h.ace!=="none")continue;let m=Io(f.start),b=Io(f.end);if(!m||!b)continue;let g=V(m),w=V(b),y=!c.has(g),S=!c.has(w);if(!y&&!S)continue;let T=tj(f,h);if(!T)continue;let v=[[m,b,y],[b,m,S]];for(let[E,I,k]of v){if(!k||l.size>=i)continue;let R=V(E);if(l.has(R))continue;let $=`${r} ${f.rel}`;u.push({subject:E,predicate:Zk,object:T,provenance:$}),u.push({subject:E,predicate:Uu,object:I,provenance:$});let _=UD(T,c,new Set([g,w]));for(let O of _)u.push({subject:E,predicate:Uu,object:O,provenance:$});l.add(R),c.add(R)}}if(!u.length)return{captured:0,linked:0,appended:0,skipped:0};let d=await Zn(e,u),p=u.filter(f=>f.predicate===Uu).length;return{captured:l.size,linked:p,appended:d.appended,skipped:d.skipped}}var Zk,Uu,zD,Qk,sj=L(()=>{Ue();qa();Zk="mgx:contextPassage",Uu="mgx:coOccursWith",zD=new Set(["a","an","the","is","are","was","were","be","being","been","to","of","for","in","on","at","with","by","as","and","or","that","this","it","its","you","your","related","kind","used"]),Qk=3});var rj={};Nt(rj,{MAP_FILE:()=>Xa,SEON_CONCEPTS_FILE:()=>Wu,SEON_DEFINITIONS_FILE:()=>GD,SLICE_FILE:()=>Ya,TIER2_DIR:()=>xr,TIER2_MANIFEST_FILE:()=>VD,WORDNET_DIR:()=>Ja,appendNewFacts:()=>qu,loadMap:()=>Vu,loadSlice:()=>Gu,preferThenLimit:()=>Hu,seedMemory:()=>HD,termText:()=>Io,toFacts:()=>Ku});async function Gu(e=Ya){let t=Xk({input:nx(e,"utf8"),crlfDelay:1/0}),n=[],s=0;for await(let o of t){s+=1;let r=o.trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(a){throw new Error(`${e}:${s}: not valid JSON: ${a.message}`)}for(let a of["start","rel","end"])if(typeof i[a]!="string"||!i[a])throw new Error(`${e}:${s}: assertion missing "${a}"`);n.push(i)}return n}async function Vu(e=Xa){let n=lr(await Ne(e,"utf8")).relation||[],s=new Map;for(let o of n){if(!o.rel)throw new Error(`${e}: a [[relation]] row is missing "rel"`);if(s.has(o.rel))throw new Error(`${e}: duplicate mapping for ${o.rel}`);if(!KD.has(o.ace))throw new Error(`${e}: ${o.rel} has unknown ace pattern ${JSON.stringify(o.ace)}`);if(o.ace!=="none"&&!o.predicate)throw new Error(`${e}: ${o.rel} maps to ${o.ace} but names no predicate URI`);s.set(o.rel,o)}return s}function Ku(e,t,n="corpus:conceptnet"){let s=[];for(let o of e){let r=t.get(o.rel);if(!r)throw new Error(`slice/map drift: relation ${o.rel} has no row in conceptnet-map.toml`);if(r.ace==="none")continue;let i=Io(o.start),a=Io(o.end);if(!i||!a)continue;let c=r.predicate==="mgx:relatedTo"?n.replace(/^corpus:/,"corpus-weak:"):n;s.push({subject:i,predicate:r.predicate,object:a,provenance:`${c} ${o.rel}`})}return s}function Hu(e,t,n){let s=e;if(Array.isArray(t)&&t.length){let o=new Map(t.map((r,i)=>[r,i]));s=s.slice().sort((r,i)=>(o.get(r.predicate)??t.length)-(o.get(i.predicate)??t.length))}return n===void 0?s:s.slice(0,n)}async function qu(e,t,n){let s=n??await rt(e),o=new Set;for(let c of s.individuals||[]){if(c?.class!=="Fact")continue;let l=u=>(c.attributes||[]).find(d=>d.key===u)?.value;o.add(oj(l("subject"),l("predicate"),l("object")))}let r=0,i=[];for(let c of t){let l=oj(c.subject,c.predicate,c.object);if(o.has(l)){r+=1;continue}o.add(l),i.push(c)}let a=await Zn(e,i);return{appended:a.appended,skipped:r+a.skipped}}async function HD(e,{limit:t,slicePath:n=Ya,mapPath:s=Xa,prefer:o,provenancePrefix:r,captureUnknownContext:i=!1,unknownContextLimit:a}={}){let[c,l]=await Promise.all([Gu(n),Vu(s)]),u=Hu(Ku(c,l,r),o,t),d=await rt(e),{appended:p,skipped:f}=await qu(e,u,d),h;if(i){let{ingestUnknownFromAssertions:m}=await Promise.resolve().then(()=>(sj(),nj));h=await m(e,{assertions:c,map:l,mappedFacts:u,memory:d,provenancePrefix:r?`${r}-unknown`:void 0,limit:a})}return{appended:p,skipped:f,total:u.length,...h?{unknown:h}:{}}}var qD,ji,Ya,Xa,Wu,GD,xr,VD,Ja,Ree,KD,Io,oj,qa=L(()=>{Ro();zt();Jk();jo();Qe();Fl();Ue();qD={},ji=ne(ve(tn(qD.url)),"..","..",".."),Ya=ne(ji,"corpus","conceptnet","slice.jsonl"),Xa=ne(ji,"src","adapters","corpus","conceptnet-map.toml"),Wu=ne(ji,"corpus","domains","code","concepts.jsonl"),GD=ne(ji,"corpus","domains","code","definitions.jsonl"),xr=ne(ji,"corpus","tier2"),VD=ne(xr,"manifest.json"),Ja=ne(ji,"corpus","wordnet"),Ree=ne(Ja,"manifest.json"),KD=new Set(["subClassOf","type","ObjectProperty","someValuesFrom","disjointWith","property","none"]);Io=e=>{let t=/^\/c\/en\/([^/]+)/.exec(String(e||""));return t?t[1].replace(/_/g," "):null};oj=(e,t,n)=>`${V(e)} ${t} ${V(n)}`});var aj={};Nt(aj,{loadChildPackFacts:()=>ij,seedChildPack:()=>XD});function YD(){return Array.from({length:zx},(e,t)=>`child-${t.toString(16).padStart(2,"0")}`)}function ij(e,t="corpus:child"){let n=[],s=new Set;for(let o of YD()){let r;try{r=br(Qs(ne(e,"shards",`${o}.jsonl.gz`))).toString("utf8")}catch{continue}for(let i of r.split(`
|
|
177
|
+
`)){if(!i.trim())continue;let a;try{a=JSON.parse(i)}catch{continue}if(gm(a))for(let c of a.facts){let l=`${c.subject} ${c.predicate} ${c.object}`;s.has(l)||(s.add(l),n.push({subject:c.subject,predicate:c.predicate,object:c.object,provenance:`${t} ${a.term}`}))}}}return n}async function XD(e,{packDir:t,provenancePrefix:n,limit:s,prefer:o}={}){let r=Hu(ij(t,n),o,s),{appended:i,skipped:a}=await qu(e,r);return{appended:i,skipped:a,total:r.length}}var cj=L(()=>{Ro();Fa();Qe();Tu();qa()});var mj={};Nt(mj,{BUILTIN_EXTENSIONS:()=>tB,EXTENSION_KINDS:()=>Yu,activeDomainPacks:()=>zm,defaultCodeDomainPacks:()=>hj,defaultCodeLaneVocab:()=>pj,isSeedableEntry:()=>dj,mergedLaneVocab:()=>Bm,mergedLexiconExtra:()=>fj,resolveExtensions:()=>uj,seedActiveCorpusEntries:()=>oB,validateExtensionEntry:()=>lj,validateExtensionPack:()=>iB});function Xu(){return{seon:{kind:"corpus",active:!1,corpusPath:Wu,provenancePrefix:"corpus:seon"},code:{kind:"pack",active:!1,corpusPath:Wu,provenancePrefix:"corpus:seon",vocabPath:ZD,vocabData:qk,groundingKind:"extraction",groundingAdapter:"tmct index (the graphPaths provider seam)"},conceptnet:{kind:"corpus",active:!1,corpusPath:Ya,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:eB},human:{kind:"corpus",active:!0,corpusPath:ne(xr,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:ne(xr,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:ne(xr,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-general":{kind:"corpus",active:!1,corpusPath:ne(xr,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:ne(Ja,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:ne(Ja,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:ne(JD,"namenet.jsonl"),provenancePrefix:"corpus:namenet"},child:{kind:"corpus",active:!1,shardPackPath:QD,provenancePrefix:"corpus:child"}}}function lj(e,t){if(!t||typeof t!="object")throw new Error(`extension "${e}": entry must be an object`);if(!Yu.includes(t.kind))throw new Error(`extension "${e}": unknown kind ${JSON.stringify(t.kind)} (must be one of ${Yu.join(", ")})`);if(t.active!==void 0&&typeof t.active!="boolean")throw new Error(`extension "${e}": "active" must be a boolean`);if(t.kind==="corpus"&&!t.corpusPath&&!t.shardPackPath)throw new Error(`extension "${e}": a "corpus" entry needs corpus_path or shard_pack_path`);if(t.kind==="ontology"&&!t.corpusPath)throw new Error(`extension "${e}": an "ontology" entry needs ontology_path`);if(t.kind==="lexicon"&&!t.lexiconPath)throw new Error(`extension "${e}": a "lexicon" entry needs lexicon_path`);if(t.kind==="templates"&&!t.templatesPath)throw new Error(`extension "${e}": a "templates" entry needs templates_path`);if(t.kind==="pack"&&!t.corpusPath&&!t.shardPackPath&&!t.lexiconPath&&!t.templatesPath&&!t.phrasebookPath)throw new Error(`extension "${e}": a "pack" entry needs at least one of corpus_path/shard_pack_path/lexicon_path/templates_path/phrasebook_path`);if(t.limit!==void 0&&!Number.isFinite(t.limit))throw new Error(`extension "${e}": "limit" must be a finite number`);if(t.prefer!==void 0&&!Array.isArray(t.prefer))throw new Error(`extension "${e}": "prefer" must be an array of predicate URIs`)}function sB(e,t,n,s){if(!t&&n.kind===void 0)throw new Error(`extension "${e}": an unrecognized extension needs a "kind" (one of ${Yu.join(", ")})`);let o={kind:n.kind!==void 0?n.kind:t?.kind,active:n.active!==void 0?!!n.active:!!t?.active},r=[["corpus_path","corpusPath"],["ontology_path","corpusPath"],["shard_pack_path","shardPackPath"],["lexicon_path","lexiconPath"],["templates_path","templatesPath"],["phrasebook_path","phrasebookPath"],["map_path","mapPath"],["vocab_path","vocabPath"]];for(let[i,a]of r)n[i]!==void 0?o[a]=nB(s,n[i]):t?.[a]!==void 0&&(o[a]=t[a]);return o.provenancePrefix=n.provenance_prefix!==void 0?String(n.provenance_prefix):t?.provenancePrefix??`corpus:${e}`,n.limit!==void 0?o.limit=Number(n.limit):t?.limit!==void 0&&(o.limit=t.limit),n.prefer!==void 0?o.prefer=n.prefer:t?.prefer!==void 0&&(o.prefer=t.prefer),n.grounding_kind!==void 0?o.groundingKind=String(n.grounding_kind):t?.groundingKind!==void 0&&(o.groundingKind=t.groundingKind),n.grounding_adapter!==void 0?o.groundingAdapter=String(n.grounding_adapter):t?.groundingAdapter!==void 0&&(o.groundingAdapter=t.groundingAdapter),o}async function uj(e,{configFile:t}={}){let n=e?await zl(e,t?{file:t}:{}):null,s=Xu(),o=n&&n.extensions&&typeof n.extensions=="object"?n.extensions:{},r=n&&n.bias&&typeof n.bias=="object"?n.bias:{},i=new Set([...Object.keys(s),...Object.keys(o)]),a=new Map;for(let p of i){let f=sB(p,s[p]||null,o[p]||{},e||process.cwd());lj(p,f),a.set(p,f)}let c={};for(let[p,f]of Object.entries(r)){if(typeof f!="number"||!Number.isFinite(f))throw new Error(`[bias] "${p}": bias must be a finite number, got ${JSON.stringify(f)}`);c[p]=f}let u=["seon","conceptnet",...[...a.keys()].filter(p=>p!=="seon"&&p!=="conceptnet").sort()].filter(p=>a.has(p));return{entries:new Map(u.map(p=>[p,a.get(p)])),biasByBundle:c}}function dj(e){return e?e.kind==="corpus"||e.kind==="ontology"?!0:e.kind==="pack"&&!!(e.corpusPath||e.shardPackPath):!1}async function oB(e,t,n={}){let{seedMemory:s}=await Promise.resolve().then(()=>(qa(),rj)),{captureUnknownContext:o,unknownContextLimit:r}=n,i={},a=0,c=0,l=0;for(let[u,d]of t instanceof Map?t:new Map)if(d.active&&dj(d))try{let p=d.shardPackPath?await(await Promise.resolve().then(()=>(cj(),aj))).seedChildPack(e,{packDir:d.shardPackPath,provenancePrefix:d.provenancePrefix,limit:d.limit,prefer:d.prefer}):await s(e,{slicePath:d.corpusPath,mapPath:d.mapPath,provenancePrefix:d.provenancePrefix,limit:d.limit,prefer:d.prefer,captureUnknownContext:o,unknownContextLimit:r});i[u]={appended:p.appended,skipped:p.skipped,total:p.total},a+=p.appended,c+=p.skipped,l+=p.total}catch(p){i[u]={appended:0,skipped:0,total:0,error:p&&p.message?p.message:String(p)}}return{appended:a,skipped:c,total:l,perBundle:i}}async function fj(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&(r.kind!=="lexicon"&&r.kind!=="pack"||r.lexiconPath&&n.push({name:o,path:r.lexiconPath,bias:t[o]??1}));if(!n.length)return null;n.sort((o,r)=>o.bias-r.bias);let s={nouns:{},verbs:{},adjectives:{},properNames:[]};for(let o of n){let r;try{r=JSON.parse(await Ne(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": lexicon file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}if(Object.assign(s.nouns,r.nouns||{}),Object.assign(s.verbs,r.verbs||{}),Object.assign(s.adjectives,r.adjectives||{}),Array.isArray(r.properNames))for(let i of r.properNames)s.properNames.includes(i)||s.properNames.push(i)}return s}async function Bm(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&(!r.vocabPath&&!r.vocabData||n.push({name:o,path:r.vocabPath,data:r.vocabData,bias:t[o]??1}));let s={countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""};if(!n.length)return s;n.sort((o,r)=>o.bias-r.bias);for(let o of n){let r;if(o.data)r=o.data;else try{r=JSON.parse(await Ne(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": vocab file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}Object.assign(s.countNouns,r.countNouns||{}),Object.assign(s.classLabels,r.classLabels||{}),Array.isArray(r.helpRows)&&s.helpRows.push(...r.helpRows),r.missRecoveryPointer&&(s.missRecoveryPointer=r.missRecoveryPointer)}return s}function pj(){if(!Fm){let e={...Xu().code,active:!0};Fm=Bm(new Map([["code",e]]),{})}return Fm}async function rB(e,t){let n={name:e,groundingKind:t.groundingKind||"",groundingAdapter:t.groundingAdapter||"",commandCount:0,countNounCount:0};if(!t.vocabPath)return n;try{let s=JSON.parse(await Ne(t.vocabPath,"utf8"));n.commandCount=Array.isArray(s.helpRows)?s.helpRows.length:0,n.countNounCount=Object.keys(s.countNouns||{}).length}catch{}return n}async function zm(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&n.push({name:o,entry:r,bias:t[o]??1});n.sort((o,r)=>o.bias-r.bias||o.name.localeCompare(r.name));let s=[];for(let o of n)s.push(await rB(o.name,o.entry));return s}function hj(){if(!Dm){let e={...Xu().code,active:!0};Dm=zm(new Map([["code",e]]),{})}return Dm}async function iB(e,t){let n=[],s=o=>o&&(yd(o)?o:Xt(e,o));if(t.corpusPath){let o=s(t.corpusPath);try{let r=await Gu(o),i=await Vu(s(t.mapPath)||Xa),a=Ku(r,i,t.provenancePrefix||"corpus:pack");n.push({kind:"corpus",path:o,ok:!0,counts:{assertions:r.length,facts:a.length}})}catch(r){n.push({kind:"corpus",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.lexiconPath){let o=s(t.lexiconPath);try{let{loadLexicon:r}=await Promise.resolve().then(()=>(es(),dx)),i=JSON.parse(await Ne(o,"utf8")),a=r(i);n.push({kind:"lexicon",path:o,ok:!0,counts:{nouns:a.nouns.size,verbs:a.verbs.size,adjectives:a.adjectives.size,properNames:a.properNames.size}})}catch(r){n.push({kind:"lexicon",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.templatesPath){let o=s(t.templatesPath);try{let{loadTemplates:r}=await Promise.resolve().then(()=>(gu(),ex)),i=await r(o),a=[...i.keys()].filter(c=>!c.includes(":"));if(a.length)throw new Error(`template id${a.length>1?"s":""} not namespaced "<packname>:<id>": ${a.join(", ")}`);n.push({kind:"templates",path:o,ok:!0,counts:{templates:i.size}})}catch(r){n.push({kind:"templates",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.vocabPath){let o=s(t.vocabPath);try{let r=JSON.parse(await Ne(o,"utf8")),i=r.countNouns&&typeof r.countNouns=="object"?Object.keys(r.countNouns).length:0,a=r.classLabels&&typeof r.classLabels=="object"?Object.keys(r.classLabels).length:0,c=Array.isArray(r.helpRows)?r.helpRows.length:0;n.push({kind:"vocab",path:o,ok:!0,counts:{countNouns:i,classLabels:a,helpRows:c}})}catch(r){n.push({kind:"vocab",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.kind==="pack"){let o=t.groundingKind;o!=="extraction"&&o!=="taught-only"?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:`a "pack" entry needs "grounding_kind" of "extraction" or "taught-only" (got ${JSON.stringify(o??null)})`}):o==="extraction"&&!t.groundingAdapter?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:'grounding_kind "extraction" needs "grounding_adapter" naming the adapter'}):n.push({kind:"grounding",path:"(pack manifest)",ok:!0,counts:o==="extraction"?{channel:o,adapter:t.groundingAdapter}:{channel:o}})}return{ok:n.length>0&&n.every(o=>o.ok),results:n}}var Um,JD,QD,ZD,Yu,eB,tB,nB,Fm,Dm,Wm=L(()=>{Qe();zt();jo();Yk();ya();qa();Um={},JD=ne(ve(tn(Um.url)),"..","..","corpus","namenet"),QD=ne(ve(tn(Um.url)),"..","..","corpus","child"),ZD=ne(ve(tn(Um.url)),"..","..","corpus","domains","code","vocab.json"),Yu=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),eB=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:desires","mgx:motivatedByGoal","mgx:hasSubevent"];tB=Object.freeze(Xu());nB=(e,t)=>{if(t==null)return;let n=String(t);return yd(n)?n:Xt(e,n)};Fm=null;Dm=null});var gj=L(()=>{});var bj=L(()=>{Qe();Ro();zt();pm();Uk();Mm();sn();Gk();Fe();Kk();mu();Hk();Ni();Wm();Ua();Ao();hu();Lu();fm();mm();yr();gj()});var wj={};Nt(wj,{proseLemma:()=>lB});function lB(){if(kr!==void 0)return kr;try{let e=$u();if(!e)return kr=null,kr;let t=e.its,n=new Map;kr=s=>{let o=String(s||"");if(n.has(o))return n.get(o);let r;try{r=String(e.readDoc(o).tokens().out(t.lemma)[0]||o).toLowerCase()}catch{r=o.toLowerCase()}return n.set(o,r),r}}catch{kr=null}return kr}var kr,yj=L(()=>{Su()});var $j={};Nt($j,{digestTermFromRows:()=>fB,loadDigestStructureTable:()=>dB,readDigestStructures:()=>uB});var uB,dB,fB,Sj=L(()=>{uB=()=>null,dB=()=>null,fB=()=>null});var Jm={};Nt(Jm,{DEFAULT_MODULE_HOPS:()=>Hm,DEFAULT_PROVE_BRANCHES:()=>Aj,DEFAULT_PROVE_NODES:()=>Ij,DEFAULT_PROVE_STEPS:()=>Tj,MAX_PROVEN_CASES:()=>Cj,MAX_ROLE_ASSERTIONS:()=>Oj,TABLEAU_RULE_CONFIDENCE:()=>wB,buildTableauKb:()=>zB,canonicalKey:()=>He,extractTableauModule:()=>GB,findTableauViolations:()=>WB,isSatisfiable:()=>Ym,moduleHasDlShape:()=>KB,proveEntailment:()=>MB,proveSubsumption:()=>FB,proveSubsumptionOfNegation:()=>DB,toNNF:()=>ln});function He(e){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("canonicalKey: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return"top";case"bot":return"bot";case"atom":return`atom(${e.name})`;case"nom":return`nom(${e.ind})`;case"not":return`not(${He(e.c)})`;case"and":return`and(${e.cs.map(He).sort().join(",")})`;case"or":return`or(${e.cs.map(He).sort().join(",")})`;case"some":return`some(${e.r},${He(e.c)})`;case"all":return`all(${e.r},${He(e.c)})`;case"atLeast":return`atLeast(${e.n},${e.r},${He(e.c)})`;case"atMost":return`atMost(${e.n},${e.r},${He(e.c)})`;default:throw new TypeError(`canonicalKey: unknown expression tag "${e.t}"`)}}function Qa(e,t){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("toNNF: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return t?{t:"bot"}:{t:"top"};case"bot":return t?{t:"top"}:{t:"bot"};case"atom":return t?{t:"not",c:{t:"atom",name:e.name}}:{t:"atom",name:e.name};case"nom":return t?{t:"not",c:{t:"nom",ind:e.ind}}:{t:"nom",ind:e.ind};case"not":return Qa(e.c,!t);case"and":case"or":{let n=e.t==="and"?"or":"and",s=e.cs.map(o=>Qa(o,t));return s.sort((o,r)=>Ot(He(o),He(r))),{t:t?n:e.t,cs:s}}case"some":case"all":{let n=e.t==="some"?"all":"some",s=Qa(e.c,t);return{t:t?n:e.t,r:e.r,c:s}}case"atLeast":case"atMost":{let n=Qa(e.c,!1);return t?e.t==="atLeast"?{t:"atMost",n:e.n-1,r:e.r,c:n}:{t:"atLeast",n:e.n+1,r:e.r,c:n}:{t:e.t,n:e.n,r:e.r,c:n}}default:throw new TypeError(`toNNF: unknown expression tag "${e.t}"`)}}function ln(e){return Qa(e,!1)}function qt(e){return[...new Set((Array.isArray(e)?e:[]).filter(Boolean))].sort()}function Vm(e,t){let n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):t}function mB(e,t){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.floor(n):t}function _j(e,t){let n=new Set(e),s=!0;for(;s;){s=!1;for(let o of t)n.has(o.subject)&&!n.has(o.object)&&(n.add(o.object),s=!0),n.has(o.object)&&!n.has(o.subject)&&(n.add(o.subject),s=!0)}return n}function gB(e){let t=new Map;for(let[s,o]of e||[])!s||!o||s===o||(t.has(s)||t.set(s,new Set),t.get(s).add(o));let n=new Map;return s=>{if(n.has(s))return n.get(s);let o=new Set,r=[...t.get(s)||[]];for(;r.length;){let i=r.pop();if(!o.has(i)){o.add(i);for(let a of t.get(i)||[])o.has(a)||r.push(a)}}return n.set(s,o),o}}function bB(e,t){let n=(e||[]).map(([r,i])=>[xs(r),xs(i)]),s=gB(n.map(([r,i])=>[i,r])),o=new Map;for(let r of t){let i=xs(r);o.set(i,new Set([i,...s(i)]))}return o}function vj(e,t,n){let s=xs(t),o=xs(n);if(s===o)return!0;let r=e&&e.roleClosure?e.roleClosure.get(o):null;return r?r.has(s):!1}function Zu(e,t,n,s){let o=[];for(let r of e.edges)if(r.from===n&&vj(t,r.r,s))o.push({to:r.to,fromFacts:r.fromFacts});else if(r.to===n){let i=t&&t.inverseOf?t.inverseOf.get(xs(r.r)):null;i&&vj(t,i,s)&&o.push({to:r.from,fromFacts:r.fromFacts})}return o}function Ju(e,t){return t==="fresh-0"?!1:e&&e.namedIndividuals&&e.namedIndividuals.has(t)?!0:!yB.test(t)}function Za(e,t){return e<t?`${e}\u241F${t}`:`${t}\u241F${e}`}function $B(e,t,n,s){if(t===n)return;let o=Za(t,n),r=e.inequalityFrom.get(o);e.inequalityFrom.set(o,qt(r?[...r,...s]:s))}function Nj(e,t,n,s){return n===s?!1:Ju(t,n)&&Ju(t,s)?!0:e.inequalityFrom.has(Za(n,s))}function Lj(e,t,n){let s=e.inequalityFrom.get(Za(t,n));return s?s.slice():[]}function SB(e,t,n){let s=Ju(e,t),o=Ju(e,n);return s&&!o?[t,n]:o&&!s?[n,t]:t<n?[t,n]:[n,t]}function Pj(e,t,n,s){if(n===s)return n;let[o,r]=SB(t,n,s),i=e.nodes.get(o),a=e.nodes.get(r);if(!i||!a)return o;for(let[d,{expr:p,from:f}]of a.labels){let h=i.labels.get(d);i.labels.set(d,{expr:p,from:h?qt([...h.from,...f]):f.slice()})}let c=[],l=new Map;for(let d of e.edges){let p=d.from===r?o:d.from,f=d.to===r?o:d.to,h=`${p}\u241F${d.r}\u241F${f}`,m=l.get(h);if(m)m.fromFacts=qt([...m.fromFacts,...d.fromFacts]);else{let b={from:p,r:d.r,to:f,fromFacts:d.fromFacts.slice()};l.set(h,b),c.push(b)}}e.edges=c;for(let d of e.nodes.values())d.parent===r&&(d.parent=o);let u=new Map;for(let[d,p]of e.inequalityFrom){let[f,h]=d.split("\u241F"),m=f===r?o:f,b=h===r?o:h;if(m===b)continue;let g=Za(m,b),w=u.get(g);u.set(g,w?qt([...w,...p]):p)}return e.inequalityFrom=u,e.nodes.delete(r),o}function qm(e,t){return{id:e,labels:new Map,parent:t??null,branchedOn:new Set,appliedAxioms:new Set,successorCount:0}}function ts(e,t,n){let s=He(t);return e.labels.has(s)?!1:(e.labels.set(s,{expr:t,from:qt(n)}),!0)}function Ri(e){return[...e.labels.entries()].sort((t,n)=>Ot(t[0],n[0]))}function Qu(e){if(e.labels.has("bot"))return{nodeId:e.id,keyA:"bot",keyB:"bot",premises:e.labels.get("bot").from.slice()};let t=[...e.labels.keys()].sort();for(let n of t){let{expr:s,from:o}=e.labels.get(n),r=He(ln(Es(s)));if(r<=n)continue;let i=e.labels.get(r);if(i)return{nodeId:e.id,keyA:n,keyB:r,premises:qt([...o,...i.from])}}return null}function Ej(e,t){let n=new Set;for(let s of e.edges)s.to===t&&n.add(s.r);return n}function Mj(e,t,n){let s=[...e.labels.keys()],o=!!(n&&n.inverseOf&&n.inverseOf.size>0),r=o?Ej(t,e.id):null,i=e.parent;for(;i;){let a=t.nodes.get(i);if(!a)break;if(s.length===a.labels.size&&s.every(c=>a.labels.has(c))){if(!o)return!0;let c=Ej(t,a.id);if(r.size===c.size&&[...r].every(l=>c.has(l)))return!0}i=a.parent}return!1}function xj(e){let t=new Map;for(let[n,s]of e.nodes)t.set(n,{id:s.id,labels:new Map(s.labels),parent:s.parent,branchedOn:new Set(s.branchedOn),appliedAxioms:new Set(s.appliedAxioms),successorCount:s.successorCount});return{nodes:t,edges:e.edges.slice(),closed:!1,clash:null,inequalityFrom:new Map(e.inequalityFrom),choices:(e.choices||[]).slice()}}function vB(e){for(let t of e.nodes.values())for(let[,{expr:n,from:s}]of Ri(t)){if(n.t!=="and")continue;let o=!1;for(let r of n.cs)ts(t,r,s)&&(o=!0);if(o)return{applied:!0,touched:[t.id]}}return{applied:!1,touched:[]}}function EB(e,t){let n=new Map;for(let o of e.nodes.values())for(let r of o.labels.keys())r.startsWith("nom(")&&(n.has(r)||n.set(r,[]),n.get(r).push(o.id));let s=[...n.keys()].sort();for(let o of s){let r=[...new Set(n.get(o))].sort();if(r.length<2)continue;let[i,a]=r;if(Nj(e,t,i,a)){let c=e.nodes.get(i).labels.get(o)?.from||[],l=e.nodes.get(a).labels.get(o)?.from||[];return{kind:"clash",clash:{nodeId:i,keyA:o,keyB:`merge(${i},${a})`,premises:qt([...c,...l,...Lj(e,i,a)])}}}return{kind:"merge",a:i,b:a}}return{kind:"none"}}function xB(e,t){let n=t&&t.transitiveRoles instanceof Set?t.transitiveRoles:null;for(let s of e.nodes.values())for(let[,{expr:o,from:r}]of Ri(s)){if(o.t!=="all")continue;let i=[];for(let{to:a,fromFacts:c}of Zu(e,t,s.id,o.r)){let l=e.nodes.get(a);if(!l)continue;let u=[...r,...c];ts(l,o.c,u)&&i.push(l.id),n&&n.has(o.r)&&ts(l,o,u)&&i.push(l.id)}if(i.length)return{applied:!0,touched:i}}return{applied:!1,touched:[]}}function kB(e,t){for(let n of e.nodes.values())for(let s=0;s<t.axioms.length;s+=1){if(n.appliedAxioms.has(s))continue;let o=t.axioms[s];if(n.appliedAxioms.add(s),ts(n,o.disjunction,o.from))return{applied:!0,touched:[n.id]}}return{applied:!1,touched:[]}}function jB(e,t){if(He(t)==="bot")return[];let n=He(ln(Es(t))),s=e.labels.get(n);return s?s.from:null}function RB(e,t,n){return n.some(s=>e.unionOrOneOfIds&&e.unionOrOneOfIds.has(s))&&t.every(s=>s.t==="atom"||s.t==="nom")}function _B(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of Ri(n)){if(o.t!=="or"||n.branchedOn.has(s))continue;let i=[...o.cs].sort((d,p)=>Ot(He(d),He(p)));if(i.some(d=>n.labels.has(He(d)))){n.branchedOn.add(s);continue}let a=i.map(d=>({c:d,clashFrom:jB(n,d)})),c=a.filter(d=>d.clashFrom===null).map(d=>d.c),l=a.filter(d=>d.clashFrom!==null).flatMap(d=>d.clashFrom),u=RB(t,i,r)?{cs:i,from:r}:null;return c.length===0?{kind:"clash",clash:{nodeId:n.id,keyA:He(i[0]),keyB:He(ln(Es(i[0]))),premises:qt([...r,...l])},choice:u}:c.length===1?(n.branchedOn.add(s),ts(n,c[0],[...r,...l]),{kind:"applied",touched:[n.id],choice:u}):(n.branchedOn.add(s),{kind:"split",node:n,from:r,disjuncts:c,choice:u})}return{kind:"none"}}function TB(e,t){for(let n of e.nodes.values())if(!Mj(n,e,t))for(let[,{expr:s,from:o}]of Ri(n)){if(s.t!=="some")continue;let r=He(s.c);if(Zu(e,t,n.id,s.r).some(c=>e.nodes.get(c.to)?.labels.has(r)))continue;n.successorCount+=1;let a=qm(`${n.id}.${n.successorCount}`,n.id);return ts(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()}),{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function AB(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of Ri(n)){if(o.t!=="atMost")continue;let i=He(o.c),a=[...new Set(Zu(e,t,n.id,o.r).map(u=>u.to))].filter(u=>e.nodes.get(u)?.labels.has(i)).sort();if(a.length<=o.n)continue;let c=[];for(let u=0;u<a.length;u+=1)for(let d=u+1;d<a.length;d+=1)c.push([a[u],a[d]]);if(c.length===0){let u=e.nodes.get(a[0])?.labels.get(i)?.from||[];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`witness(${a[0]})`,premises:qt([...r,...u])}}}let l=c.filter(([u,d])=>!Nj(e,t,u,d));if(l.length===0){let[u,d]=c[0];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`merge(${u},${d})`,premises:qt([...r,...Lj(e,u,d)])}}}return{kind:"split-merge",pairs:l}}return{kind:"none"}}function IB(e,t){for(let n of e.nodes.values())if(!Mj(n,e,t))for(let[,{expr:s,from:o}]of Ri(n)){if(s.t!=="atLeast")continue;let r=He(s.c),i=[...new Set(Zu(e,t,n.id,s.r).map(c=>c.to))].filter(c=>e.nodes.get(c)?.labels.has(r)).sort();if(i.length>=s.n)continue;n.successorCount+=1;let a=qm(`${n.id}.${n.successorCount}`,n.id);ts(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()});for(let c of i)$B(e,a.id,c,o);return{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function OB(e,t){for(let n of t){let s=e.nodes.get(n),o=s&&Qu(s);if(o)return o}return null}function jr(e,t){let n=OB(e,t);return n?{kind:"clash",clash:n}:{kind:"applied"}}function CB(e,t){let n=vB(e);if(n.applied)return jr(e,n.touched);let s=xB(e,t);if(s.applied)return jr(e,s.touched);let o=EB(e,t);if(o.kind==="clash")return o;if(o.kind==="merge"){let u=Pj(e,t,o.a,o.b);return jr(e,[u])}let r=kB(e,t);if(r.applied)return jr(e,r.touched);let i=_B(e,t);if(i.kind==="clash")return i;if(i.kind==="applied")return i.choice&&e.choices.push(i.choice),jr(e,i.touched);if(i.kind==="split")return i;let a=AB(e,t);if(a.kind==="clash"||a.kind==="split-merge")return a;let c=IB(e,t);if(c.applied)return jr(e,c.touched);let l=TB(e,t);return l.applied?jr(e,l.touched):{kind:"done"}}function NB(e){let t=[...e.nodes.values()].map(s=>({id:s.id,parent:s.parent,labels:[...s.labels.entries()].sort((o,r)=>Ot(o[0],r[0])).map(([,{expr:o,from:r}])=>({expr:o,from:r}))})),n=e.edges.map(({from:s,r:o,to:r,fromFacts:i})=>({from:s,r:o,to:r,fromFacts:i.slice()}));return{nodes:t,edges:n}}function LB(e,t,n){let s=Vm(n.maxSteps,Tj),o=Vm(n.maxBranches,Aj),r=Vm(n.maxNodes,Ij),i=[e],a=0,c=1,l=[];for(;i.length;){let u=i.pop();if(u.closed){l.push(u.clash);continue}if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};for(;;){let d=CB(u,t);if(d.kind==="clash"){let p=d.choice?[...u.choices,d.choice]:u.choices.slice();l.push({...d.clash,choices:p});break}if(d.kind==="applied"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};continue}if(d.kind==="split"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.disjuncts.map(f=>{let h=xj(u);d.choice&&h.choices.push(d.choice);let m=h.nodes.get(d.node.id);ts(m,f,d.from);let b=Qu(m);return b&&(h.closed=!0,h.clash={...b,choices:h.choices.slice()}),h});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}if(d.kind==="split-merge"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.pairs.map(([f,h])=>{let m=xj(u),b=Pj(m,t,f,h),g=m.nodes.get(b),w=g&&Qu(g);return w&&(m.closed=!0,m.clash={...w,choices:m.choices.slice()}),m});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}return{status:"satisfiable",model:NB(u),steps:a,branches:c}}if(c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c}}return{status:"unsatisfiable",clashes:l,steps:a,branches:c}}function PB(e,t){let n=new Map,s=i=>(n.has(i)||n.set(i,qm(i,null)),n.get(i));for(let i of e.individuals||[])s(i);for(let i of e.assertions||[])ts(s(i.ind),i.expr,i.from);for(let i of t||[])!i||!i.ind||!i.expr||ts(s(i.ind),ln(i.expr),i.from||[]);for(let[i,a]of e.nominalIndividuals||[])ts(s(i),{t:"nom",ind:i},a);let o=new Map;for(let i of e.differentFrom||[]){if(!i||!i.a||!i.b||i.a===i.b)continue;let a=Za(i.a,i.b),c=o.get(a);o.set(a,qt(c?[...c,...i.from]:i.from))}let r=[];for(let i of e.roleAssertions||[])s(i.a),s(i.b),r.push({from:i.a,r:i.r,to:i.b,fromFacts:i.from.slice()});return{nodes:n,edges:r,closed:!1,clash:null,inequalityFrom:o,choices:[]}}function Ym(e,t=[],n={}){let s=PB(e,t);for(let r of s.nodes.values()){let i=Qu(r);if(i){s.closed=!0,s.clash={...i,choices:[]};break}}let o=LB(s,e,n);return o.status==="exhausted"?{satisfiable:null,exhausted:o.reason,steps:o.steps,branches:o.branches}:o.status==="satisfiable"?{satisfiable:!0,model:o.model,steps:o.steps,branches:o.branches}:{satisfiable:!1,closedClashes:o.clashes,steps:o.steps,branches:o.branches}}function Xm(e,t,n){let s=Ym(e,t,n);if(s.satisfiable===null)return{status:"exhausted",reason:s.exhausted,steps:s.steps,branches:s.branches};if(s.satisfiable===!1){let o=qt(s.closedClashes.flatMap(l=>l?.premises||[])),r=new Map;for(let l of s.closedClashes)for(let u of l?.choices||[])for(let d of u.cs)r.set(He(d),d);let i=[...r.keys()].sort(),a=i.slice(0,Cj).map(l=>r.get(l)),c=i.length;return{status:"proved",premises:o,cases:a,casesTotal:c,steps:s.steps,branches:s.branches}}return{status:"disproved",model:s.model,steps:s.steps,branches:s.branches}}function MB(e,t,n,s={}){return Xm(e,[{ind:t,expr:ln(Es(n)),from:[]}],s)}function FB(e,t,n,s={}){let o=ln(jj([De(t),Es(De(n))]));return Xm(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function DB(e,t,n,s={}){let o=ln(jj([De(t),De(n)]));return Xm(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function BB(e){return e?e.keyA==="bot"?"bottom":`complement:${e.keyA}~${e.keyB}`:"unsatisfiable"}function zB(e){let t=Array.isArray(e)?e.filter(P=>P&&P.subject&&P.predicate):[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=[],d=[],p=[],f=[],h=new Set,m=[],b=[],g=[],w=[],y=(P,K,W)=>{P.has(K)||P.set(K,[]),P.get(K).push(W)};for(let P of t){let K=String(P.predicate).trim().toLowerCase();K==="owl:onproperty"?n.set(P.subject,{object:P.object,id:P.id}):K==="owl:somevaluesfrom"?s.set(P.subject,{object:P.object,id:P.id}):K==="owl:allvaluesfrom"?o.set(P.subject,{object:P.object,id:P.id}):K==="owl:onclass"?r.set(P.subject,{object:P.object,id:P.id}):K==="owl:mincardinality"?i.set(P.subject,{kind:"min",n:Number(P.object),id:P.id}):K==="owl:maxcardinality"?i.set(P.subject,{kind:"max",n:Number(P.object),id:P.id}):K==="owl:cardinality"?i.set(P.subject,{kind:"exact",n:Number(P.object),id:P.id}):K==="rdfs:subclassof"?u.push(P):K==="owl:disjointwith"?d.push(P):K==="rdf:type"?(p.push(P),String(P.object||"").toLowerCase()==="transitiveproperty"&&h.add(P.subject)):K==="mgxneg:subclassof"?f.push(P):K==="owl:unionof"?y(a,P.subject,P):K==="owl:complementof"?c.set(P.subject,P):K==="rdfs:subpropertyof"?m.push(P):K==="owl:differentfrom"?b.push(P):K==="owl:oneof"?y(l,P.subject,P):K==="owl:inverseof"?g.push(P):w.push(P)}let S=new Set;for(let P of p){let K=String(P.object||"").toLowerCase();Km.has(K)||S.add(P.subject)}let T=_j(S,w),v=P=>T.has(P)||Rj.test(P),E=w.filter(P=>v(P.subject)&&v(P.object)).sort((P,K)=>Ot(P.subject,K.subject)||Ot(P.predicate,K.predicate)||Ot(P.object,K.object)).slice(0,Oj).map(P=>({a:P.subject,r:P.predicate,b:P.object,from:[P.id]})),I=(P,K,W)=>({sub:P,sup:K,from:qt(W),disjunction:ln(Gm([Es(P),K]))}),k=[],R=[];for(let P of u){let K=P.object;if(!n.has(K)){k.push(I(De(P.subject),De(K),[P.id]));continue}let W=n.get(K),C=s.get(K);if(C){k.push(I(De(P.subject),pB(W.object,De(C.object)),[P.id,W.id,C.id]));continue}let F=o.get(K);if(F){k.push(I(De(P.subject),hB(W.object,De(F.object)),[P.id,W.id,F.id]));continue}let N=i.get(K),B=r.get(K);if(N&&B){let z=[P.id,W.id,B.id,N.id];N.kind==="min"?k.push(I(De(P.subject),{t:"atLeast",n:N.n,r:W.object,c:De(B.object)},z)):N.kind==="max"?k.push(I(De(P.subject),{t:"atMost",n:N.n,r:W.object,c:De(B.object)},z)):N.kind==="exact"&&(k.push(I(De(P.subject),{t:"atLeast",n:N.n,r:W.object,c:De(B.object)},z)),k.push(I(De(P.subject),{t:"atMost",n:N.n,r:W.object,c:De(B.object)},z)))}}for(let P of d)v(P.subject)?R.push({ind:P.subject,expr:ln(Es(De(P.object))),from:[P.id]}):k.push(I(De(P.subject),ln(Es(De(P.object))),[P.id]));for(let P of p)Km.has(String(P.object||"").toLowerCase())||R.push({ind:P.subject,expr:De(P.object),from:[P.id]});for(let P of f)R.push({ind:P.subject,expr:ln(Es(De(P.object))),from:[P.id]});for(let[P,K]of a){let W=[...K].sort((B,z)=>Ot(String(B.object),String(z.object))),C=W.map(B=>De(B.object)),F=W.map(B=>B.id),N=ln(Gm(C));k.push(I(De(P),N,F)),k.push(I(N,De(P),F))}for(let[P,K]of c){let W=ln(Es(De(K.object)));k.push(I(De(P),W,[K.id])),k.push(I(W,De(P),[K.id]))}let $=new Map;for(let[P,K]of l){let W=[...K].sort((N,B)=>Ot(String(N.object),String(B.object))),C=W.map(N=>({t:"nom",ind:N.object})),F=W.map(N=>N.id);k.push(I(De(P),ln(Gm(C)),F));for(let N of W){k.push(I({t:"nom",ind:N.object},De(P),[N.id]));let B=$.get(N.object);$.set(N.object,B?qt([...B,N.id]):[N.id])}}let _=b.map(P=>({a:P.subject,b:P.object,from:[P.id]})).sort((P,K)=>Ot(P.a,K.a)||Ot(P.b,K.b)),O=new Map;for(let P of g)O.set(P.subject,P.object),O.has(P.object)||O.set(P.object,P.subject);let x=new Set;for(let{object:P}of n.values())x.add(P);for(let P of E)x.add(P.r);let j=m.map(P=>[P.subject,P.object]).sort((P,K)=>Ot(P[0],K[0])||Ot(P[1],K[1])),M=new Set([...x,...j.flat(),...O.keys(),...O.values()]),D=bB(j,M);k.sort((P,K)=>Ot(He(P.sub),He(K.sub))||Ot(He(P.sup),He(K.sup))||Ot(P.from.join(","),K.from.join(","))),R.sort((P,K)=>Ot(P.ind,K.ind)||Ot(He(P.expr),He(K.expr)));let H=[...new Set([...R.map(P=>P.ind),...E.flatMap(P=>[P.a,P.b])])].sort(),Y=new Set(H),Z=new Set([...[...a.values()].flatMap(P=>P.map(K=>K.id)),...[...l.values()].flatMap(P=>P.map(K=>K.id))]);return{axioms:k,assertions:R,roles:[...x].sort(),individuals:H,transitiveRoles:h,roleClosure:D,namedIndividuals:Y,nominalIndividuals:$,differentFrom:_,inverseOf:O,roleAssertions:E,unionOrOneOfIds:Z}}function UB(e,t){return{axioms:e.axioms,assertions:(e.assertions||[]).filter(n=>n.ind===t),roles:e.roles,individuals:[t],transitiveRoles:e.transitiveRoles,roleAssertions:e.roleAssertions,roleClosure:e.roleClosure,namedIndividuals:e.namedIndividuals,nominalIndividuals:e.nominalIndividuals,differentFrom:e.differentFrom,inverseOf:e.inverseOf,unionOrOneOfIds:e.unionOrOneOfIds}}function WB(e,t=null,n={}){let s=[...new Set(Array.isArray(t)&&t.length?t:e.individuals||[])].sort(),o=[];for(let r of s){let i=UB(e,r);if(!i.assertions.length)continue;let a=Ym(i,[],n);if(a.satisfiable===null||a.satisfiable===!0)continue;let c=qt(a.closedClashes.flatMap(l=>l?.premises||[]));o.push({subject:r,premises:c,kind:BB(a.closedClashes[0])})}return o.sort((r,i)=>Ot(r.subject,i.subject)),o}function vs(e,t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)}function GB(e,t,{hops:n=Hm}={}){let s=Array.isArray(e)?e.filter(j=>j&&j.subject&&j.predicate):[],o=mB(n,Hm),r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,h=new Map,m=new Map,b=[],g=new Map,w=new Set;for(let j of s){if(String(j.predicate).trim().toLowerCase()!=="rdf:type")continue;let M=String(j.object||"").toLowerCase();Km.has(M)||w.add(j.subject)}let y=s.filter(j=>!kj.has(String(j.predicate).trim().toLowerCase())),S=_j(w,y),T=j=>S.has(j)||Rj.test(j);for(let j of s){let M=String(j.predicate).trim().toLowerCase();M==="rdfs:subclassof"?(vs(r,j.subject,j.object),vs(i,j.object,j.subject)):M==="owl:onproperty"?a.set(j.subject,j.object):M==="owl:somevaluesfrom"||M==="owl:allvaluesfrom"||M==="owl:onclass"?(c.set(j.subject,j.object),vs(l,j.object,j.subject)):M==="owl:unionof"?(vs(u,j.subject,j.object),vs(d,j.object,j.subject)):M==="owl:complementof"?(p.set(j.subject,j.object),vs(f,j.object,j.subject)):M==="owl:oneof"?(vs(h,j.subject,j.object),vs(m,j.object,j.subject)):!kj.has(M)&&T(j.subject)&&T(j.object)&&(b.push(j),vs(g,j.subject,j.object),vs(g,j.object,j.subject))}let v=new Map;function E(j){let M=v.get(j);if(M)return M;let D=new Set,H=[...r.get(j)||[],...i.get(j)||[]];for(;H.length;){let Y=H.pop();if(!D.has(Y)){D.add(Y);for(let Z of r.get(Y)||[])D.has(Z)||H.push(Z);for(let Z of i.get(Y)||[])D.has(Z)||H.push(Z)}}v.set(j,D);for(let Y of D)v.has(Y)||v.set(Y,D);return D}let I=new Set,k=new Map,R=[];function $(j,M){if(!j)return;let D=k.get(j);D!==void 0&&D>=M||(k.set(j,M),R.push({term:j,hopsLeft:M}))}let _=[...new Set((Array.isArray(t)?t:[]).map(j=>V(j)).filter(Boolean))];for(let j of _)$(j,o);let O=0;for(;O<R.length;){let{term:j,hopsLeft:M}=R[O];if(O+=1,k.get(j)===M){I.add(j);for(let D of E(j))I.add(D),$(D,M);if(!(M<=0)){c.has(j)&&$(c.get(j),o);for(let D of l.get(j)||[])$(D,o);for(let D of u.get(j)||[])$(D,M-1);for(let D of d.get(j)||[])$(D,M-1);p.has(j)&&$(p.get(j),M-1);for(let D of f.get(j)||[])$(D,M-1);for(let D of h.get(j)||[])$(D,M-1);for(let D of m.get(j)||[])$(D,M-1);for(let D of g.get(j)||[])$(D,o)}}}let x=new Set;for(let[j,M]of a)I.has(j)&&x.add(xs(M));for(let j of b)(I.has(j.subject)||I.has(j.object))&&x.add(xs(j.predicate));return s.filter(j=>{if(I.has(j.subject)||I.has(j.object))return!0;let M=String(j.predicate).trim().toLowerCase();return M==="rdfs:subpropertyof"||M==="owl:inverseof"||M==="rdf:type"&&String(j.object).toLowerCase()==="transitiveproperty"?x.has(xs(j.subject)):!1})}function KB(e){return(Array.isArray(e)?e:[]).some(n=>{let s=String(n?.predicate||"").trim().toLowerCase();return VB.has(s)?!0:s==="rdf:type"&&String(n?.object||"").toLowerCase()==="transitiveproperty"})}var Ot,De,Es,jj,Gm,pB,hB,Rj,xs,Km,Tj,Aj,Ij,wB,Hm,Oj,Cj,yB,kj,VB,Qm=L(()=>{Ve();Ot=(e,t)=>e<t?-1:e>t?1:0,De=e=>({t:"atom",name:e}),Es=e=>({t:"not",c:e}),jj=e=>({t:"and",cs:e}),Gm=e=>({t:"or",cs:e}),pB=(e,t)=>({t:"some",r:e,c:t}),hB=(e,t)=>({t:"all",r:e,c:t});Rj=/[./\\#:@]/;xs=e=>V(e);Km=new Set(["restriction","transitiveproperty","class"]),Tj=5e3,Aj=256,Ij=512,wB=.95,Hm=4,Oj=256,Cj=6,yB=/\.\d+$/;kj=new Set(["owl:onproperty","owl:somevaluesfrom","owl:allvaluesfrom","owl:onclass","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subclassof","owl:disjointwith","rdf:type","mgxneg:subclassof","owl:unionof","owl:complementof","rdfs:subpropertyof","owl:differentfrom","owl:oneof","owl:inverseof"]);VB=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"])});var Wj={};Nt(Wj,{BOT:()=>yn,DEFAULT_EL_BUDGET:()=>sg,DEFAULT_EL_ROUNDS:()=>og,EL_RESTRICTION_RULE:()=>ng,EL_RULE_CONFIDENCE:()=>Zm,EL_SUBSUMPTION_RULE:()=>tg,ENTAILED_EL_PROVENANCE:()=>zj,ENTAILED_EL_RESTRICTION_PROVENANCE:()=>tc,TOP:()=>Oo,classifyEl:()=>cz,elGoalAxioms:()=>Dj,elGoalFor:()=>Bj,elUnsatisfiableClasses:()=>az,normalizeElTBox:()=>eg,proveElSubsumption:()=>iz,saturateEl:()=>ed});function qB(e,t,n){for(let s of t)if(typeof e?.[s]!="function")throw new TypeError(`${n} needs a store option carrying { ${t.join(", ")} } (memory/core.mjs's read/write functions) \u2014 missing ${s}`);return e}function YB(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function eg(e,{budget:t=500}={}){let s=[...(Array.isArray(e)?e:[]).filter($=>$&&$.id&&$.subject&&$.predicate&&$.object!==void 0&&$.object!==null)].sort(HB),o=s.length>t,r=o?s.slice(0,t):s,i=new Set,a=new Set,c=$=>{$&&$!==Oo&&$!==yn&&i.add($)},l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,h=new Map,m=[],b=[],g=new Map,w=[];for(let $ of r){if($.subject===Oo||$.subject===yn||$.object===Oo||$.object===yn)continue;let _=$.predicate;QB(_)?(l.set($.subject,$),c($.subject)):ZB(_)?(u.set($.subject,$),c($.subject),c($.object)):ez(_)?d.set($.subject,$):tz(_)?(p.set($.subject,$),c($.subject),c($.object)):rz(_)?(f.set($.subject,$),c($.subject)):nz(_)?(h.has($.subject)||h.set($.subject,[]),h.get($.subject).push($),c($.subject),c($.object)):Fj(_)?(m.push($),c($.subject),c($.object)):JB(_)?(b.push($),c($.subject),c($.object)):XB(_)&&$.object==="transitiveproperty"?(g.has($.subject)||g.set($.subject,$),a.add($.subject)):sz(_)&&(w.push($),a.add($.subject),a.add($.object))}let y=new Set([...l.keys()].filter($=>u.has($))),S=new Set([...l.keys()].filter($=>d.has($)));for(let $ of S)i.delete($);let T=new Map;for(let $ of y)T.set($,{role:l.get($).object,filler:u.get($).object});let v=new Map;for(let $ of cp(r))$.kind!=="min"&&$.kind!=="exactly"||$.n>=1&&(y.has($.restriction)||!l.has($.restriction)||!p.has($.restriction)||!f.has($.restriction)||(v.set($.restriction,$.onClass),T.set($.restriction,{role:"has",filler:$.onClass})));let E=new Set(h.keys()),I=[],k=new Map;for(let $ of m){let _=$.subject,O=$.object;if(E.has(_)){k.has(_)||k.set(_,$);continue}if(y.has(O)){let{role:x,filler:j}=T.get(O),M=l.get(O),D=u.get(O);I.push({form:"someRight",sub:_,role:x,filler:j,from:[$.id,M.id,D.id]}),I.push({form:"someLeft",role:x,filler:j,sup:O,from:[M.id,D.id]});continue}if(v.has(O)){let x=v.get(O),j=l.get(O),M=p.get(O),D=f.get(O);I.push({form:"someRight",sub:_,role:"has",filler:x,from:[$.id,j.id,M.id,D.id]}),I.push({form:"someLeft",role:"has",filler:x,sup:O,from:[j.id,M.id,D.id]});continue}S.has(O)||I.push({form:"sub",sub:_,sup:O,from:[$.id]})}for(let[$,_]of h){let O=k.get($);if(!O)continue;let x=new Map;for(let H of _)x.has(H.object)||x.set(H.object,H);let j=[...x.keys()].sort();if(j.length<2)continue;let M=j[0],D=[x.get(j[0]).id];for(let H=1;H<j.length;H+=1){let Y=j[H],Z=H===j.length-1,P=Z?O.object:`${M}-and-${Y}`,K=[M,Y].sort(),W=x.get(Y).id,C=Z?[...D,W,O.id]:[...D,W];I.push({form:"and",subs:K,sup:P,from:C}),D=[...D,W],M=P}}for(let $ of b)I.push({form:"and",subs:[$.subject,$.object].sort(),sup:yn,from:[$.id]});let R=[];for(let $ of[...g.keys()].sort())R.push({kind:"transitive",role:$,from:[g.get($).id]});for(let $ of[...w].sort(Zt))R.push({kind:"sub",sub:$.subject,sup:$.object,from:[$.id]});return{axioms:I,roleAxioms:R,concepts:i,roles:a,restrictionOf:T,truncated:o}}function ed(e,{budget:t=2e3,rounds:n=64,focus:s=null}={}){let o=e?.axioms||[],r=e?.roleAxioms||[],i=[...e?.concepts||[]].sort(),a=s instanceof Set?s.size?s:null:YB(s),c=(...$)=>!a||$.some(_=>a.has(_)),l=new Map,u=new Map,d=new Map,p=new Map;for(let $ of o)if($.form==="sub")l.has($.sub)||l.set($.sub,[]),l.get($.sub).push({sup:$.sup,from:$.from});else if($.form==="and"){let[_,O]=$.subs;for(let[x,j]of[[_,O],[O,_]])u.has(x)||u.set(x,[]),u.get(x).push({other:j,sup:$.sup,from:$.from})}else if($.form==="someRight")d.has($.sub)||d.set($.sub,[]),d.get($.sub).push({role:$.role,filler:$.filler,from:$.from});else if($.form==="someLeft"){let _=`${$.role}${ue}${$.filler}`;p.has(_)||p.set(_,[]),p.get(_).push({sup:$.sup,from:$.from})}let f=new Map,h=new Set,m=new Map;for(let $ of r)$.kind==="sub"?(f.has($.sub)||f.set($.sub,[]),f.get($.sub).push({sup:$.sup,from:$.from})):$.kind==="transitive"&&(h.add($.role),m.has($.role)||m.set($.role,$.from));let b=new Map;for(let $ of i)b.set($,new Set([$,Oo]));let g=new Map,w=new Map,y=new Map,S=($,_)=>$===_?[]:w.get(`${$}${ue}${_}`)||[],T=($,_)=>y.get(`${$}${ue}${_}`)||[],v=(...$)=>{let _=new Set,O=[];for(let x of $)for(let j of x||[])!j||_.has(j)||(_.add(j),O.push(j));return O},E=0,I=!1,k=0;for(let $=0;$<n;$+=1){k+=1;let _=[];for(let[x,j]of b)for(let M of j)for(let{sup:D,from:H}of l.get(M)||[])j.has(D)||c(x,M,D)&&_.push({kind:"sub",A:x,X:D,from:v(S(x,M),H),sortKey:`1${ue}${x}${ue}${D}${ue}${M}`});for(let[x,j]of b)for(let M of j)for(let{other:D,sup:H,from:Y}of u.get(M)||[])j.has(D)&&(j.has(H)||c(x,M,D,H)&&_.push({kind:"sub",A:x,X:H,from:v(S(x,M),S(x,D),Y),sortKey:`2${ue}${x}${ue}${H}${ue}${[M,D].sort().join(ue)}`}));for(let[x,j]of b)for(let M of j)for(let{role:D,filler:H,from:Y}of d.get(M)||[]){let Z=`${x}${ue}${H}`;(g.get(D)||ec).has(Z)||c(x,M,H)&&_.push({kind:"role",role:D,A:x,B:H,from:v(S(x,M),Y),sortKey:`3${ue}${D}${ue}${x}${ue}${H}${ue}${M}`})}for(let[x,j]of g)for(let M of j){let[D,H]=M.split(ue),Y=b.get(H)||ec;for(let Z of Y)for(let{sup:P,from:K}of p.get(`${x}${ue}${Z}`)||[]){let W=b.get(D);!W||W.has(P)||c(D,H,Z,P)&&_.push({kind:"sub",A:D,X:P,from:v(T(x,M),S(H,Z),K),sortKey:`4${ue}${D}${ue}${P}${ue}${x}${ue}${H}${ue}${Z}`})}}for(let[x,j]of g)for(let M of j){let[D,H]=M.split(ue);if(!(b.get(H)||ec).has(yn))continue;let Y=b.get(D);!Y||Y.has(yn)||c(D,H)&&_.push({kind:"sub",A:D,X:yn,from:v(T(x,M),S(H,yn)),sortKey:`5${ue}${D}${ue}${x}${ue}${H}`})}for(let[x,j]of g)for(let{sup:M,from:D}of f.get(x)||[])for(let H of j){if((g.get(M)||ec).has(H))continue;let[Y,Z]=H.split(ue);c(Y,Z)&&_.push({kind:"role",role:M,A:Y,B:Z,from:v(T(x,H),D),sortKey:`6${ue}${M}${ue}${Y}${ue}${Z}${ue}${x}`})}for(let x of[...h].sort()){let j=g.get(x);if(j)for(let M of j){let[D,H]=M.split(ue);for(let Y of j){let[Z,P]=Y.split(ue);if(Z!==H)continue;let K=`${D}${ue}${P}`;j.has(K)||c(D,H,P)&&_.push({kind:"role",role:x,A:D,B:P,from:v(T(x,M),T(x,Y),m.get(x)),sortKey:`7${ue}${x}${ue}${D}${ue}${P}${ue}${H}`})}}}if(!_.length){I=!0;break}_.sort((x,j)=>x.sortKey<j.sortKey?-1:x.sortKey>j.sortKey?1:0);let O=!1;for(let x of _){if(E>=t)break;if(x.kind==="sub"){let j=b.get(x.A);if(!j||j.has(x.X))continue;j.add(x.X),w.set(`${x.A}${ue}${x.X}`,x.from),E+=1,O=!0}else{g.has(x.role)||g.set(x.role,new Set);let j=g.get(x.role),M=`${x.A}${ue}${x.B}`;if(j.has(M))continue;j.add(M),y.set(`${x.role}${ue}${M}`,x.from),E+=1,O=!0}}if(E>=t)break;if(!O){I=!0;break}}let R=[...b.entries()].filter(([,$])=>$.has(yn)).map(([$])=>$).sort();return{subsumers:b,roleEdges:g,unsatisfiable:R,derivationOf:w,rounds:k,truncated:!I}}function Dj(e,t,{budget:n=200}={}){let o=[...(e?.axioms||[]).filter(a=>a.form==="someRight")].sort((a,c)=>{let l=`${a.role}${ue}${a.filler}${ue}${a.sub}`,u=`${c.role}${ue}${c.filler}${ue}${c.sub}`;return l<u?-1:l>u?1:0}),r=[],i=new Set;for(let a of o){let l=[...t?.get(a.filler)||new Set([a.filler,Oo])].filter(u=>u!==Oo&&u!==yn).sort();for(let u of l){let d=`some-${a.role}-${u}`;if(!i.has(d)&&(i.add(d),r.push({form:"someLeft",role:a.role,filler:u,sup:d,from:[]}),r.length>=n))return r}}return r}function Bj(e,t){let n=V(e),s=V(t),o=`some-${n}-${s}`;return{axiom:{form:"someLeft",role:n,filler:s,sup:o,from:[]},name:o}}function iz(e,t,{role:n,filler:s},{budget:o=2e3,rounds:r=64}={}){let i=V(t),a=eg(e,{budget:o}),{axiom:c,name:l}=Bj(n,s),u=new Set(a.concepts);u.add(i),u.add(c.filler);let d={...a,axioms:[...a.axioms,c],concepts:u},p=ed(d,{budget:o,rounds:r});return(p.subsumers.get(i)||ec).has(l)?{proved:!0,premises:p.derivationOf.get(`${i}${ue}${l}`)||[]}:{proved:!1,exhausted:p.truncated}}function Uj(e,{budget:t=sg,rounds:n=og,focus:s=null}={}){let o=eg(e,{budget:t}),r=ed(o,{budget:t,rounds:n,focus:s}),i=Dj(o,r.subsumers),a=new Map(i.map(d=>[d.sup,{role:d.role,filler:d.filler}])),c={...o,axioms:[...o.axioms,...i]},l=ed(c,{budget:t,rounds:n,focus:s}),u=o.truncated||r.truncated||l.truncated;return{normalized:o,goals:i,goalInfo:a,finalPass:l,truncated:u}}function az(e,t={}){let{finalPass:n,truncated:s}=Uj(e,t);return{unsatisfiable:n.unsatisfiable,premisesOf:o=>n.derivationOf.get(`${o}${ue}${yn}`)||[],truncated:s}}async function cz(e,{budget:t=sg,rounds:n=og,focus:s=null,maxEnvironments:o=ti,store:r}={}){let{loadMemory:i,readFactRows:a,appendFacts:c}=qB(r,["loadMemory","readFactRows","appendFacts"],"classifyEl"),l=await i(e),u=a(l),{normalized:d,goals:p,goalInfo:f,finalPass:h,truncated:m}=Uj(u,{budget:t,rounds:n,focus:s}),b=new Map;for(let R of u)b.set(`${R.subject}${ue}${R.predicate}${ue}${R.object}`,R.trust);let g=new Map(u.map(R=>[R.id,R])),w=R=>(R||[]).map($=>g.get($)?.trust).filter($=>typeof $=="number"),y=new Set(u.filter(R=>Fj(R.predicate)).map(R=>`${R.subject}${ue}${R.object}`)),S=[],T=[],v=new Set,E=[...h.subsumers.keys()].sort();for(let R of E){let $=h.subsumers.get(R);if($.has(yn))continue;let _=[...$].filter(O=>O!==R&&O!==Oo&&O!==yn).sort();for(let O of _){let x=`${R}${ue}${O}`;if(y.has(x))continue;let j=h.derivationOf.get(x)||[],M=f.get(O);if(M){v.has(O)||(v.add(O),S.push({subject:O,predicate:Gt,object:"owl:Restriction",provenance:tc,justification:[j]}),S.push({subject:O,predicate:Nn,object:M.role,provenance:tc,justification:[j]}),S.push({subject:O,predicate:Ln,object:M.filler,provenance:tc,justification:[j]}));let D=w(j),H=S.length;S.push({subject:R,predicate:Be,object:O,provenance:tc,justification:[j],...D.length?{premiseTrusts:D,ruleConfidence:Zm}:{}}),T.push({toWriteIndex:H,subject:R,object:O,rule:ng})}else if(d.concepts.has(O)){let D=w(j),H=S.length;S.push({subject:R,predicate:Be,object:O,provenance:zj,justification:[j],...D.length?{premiseTrusts:D,ruleConfidence:Zm}:{}}),T.push({toWriteIndex:H,subject:R,object:O,rule:tg})}}}let{ids:I}=await c(e,S),k=T.map(R=>({id:I[R.toWriteIndex],subject:R.subject,object:R.object,rule:R.rule}));return{derived:k,count:k.length,budget:t,rounds:n,truncated:m,unsatisfiable:h.unsatisfiable,goalCount:p.length}}var ue,HB,Oo,yn,ks,Fj,XB,JB,QB,ZB,ez,tz,nz,sz,oz,rz,ec,tg,zj,ng,tc,Zm,sg,og,Gj=L(()=>{Ve();Ft();tr();ue="\u241F",HB=(e,t)=>{let n=String(e.id),s=String(t.id);return n<s?-1:n>s?1:0},Oo="top",yn="bot";ks=e=>String(e||"").trim().toLowerCase(),Fj=e=>ks(e)==="rdfs:subclassof",XB=e=>ks(e)==="rdf:type",JB=e=>ks(e)==="owl:disjointwith",QB=e=>ks(e)==="owl:onproperty",ZB=e=>ks(e)==="owl:somevaluesfrom",ez=e=>ks(e)==="owl:allvaluesfrom",tz=e=>ks(e)==="owl:onclass",nz=e=>ks(e)==="owl:intersectionof",sz=e=>ks(e)==="rdfs:subpropertyof",oz=new Set(["owl:cardinality","owl:mincardinality","owl:maxcardinality"]),rz=e=>oz.has(ks(e));ec=new Set;tg="elSubsumption",zj=`entailed:${tg}`,ng="elRestriction",tc=`entailed:${ng}`,Zm=.95,sg=2e3,og=64});var Vj={};Nt(Vj,{DEFAULT_REASONING_CONFIG:()=>td,resolveReasoningConfig:()=>pz});function dz(e,t){let n=Number(e);return Number.isInteger(n)&&n>0?n:t}function fz(e,t){return typeof e=="boolean"?e:t}function pz(e){let t=e?.reasoning||{},n={...td};for(let[s,o]of Object.entries(lz))t[s]!==void 0&&(n[o]=dz(t[s],td[o]));for(let[s,o]of Object.entries(uz))t[s]!==void 0&&(n[o]=fz(t[s],td[o]));return n}var td,lz,uz,Kj=L(()=>{td=Object.freeze({syllogiseBudget:50,syllogiseDepth:32,classifyBudget:2e3,classifyRounds:64,maxEnvironments:4,proveSteps:5e3,proveBranches:256,proveNodes:512,askProveFallback:!0,askProveSteps:1e3,askProveBranches:64,askProveNodes:128}),lz=Object.freeze({syllogise_budget:"syllogiseBudget",syllogise_depth:"syllogiseDepth",classify_budget:"classifyBudget",classify_rounds:"classifyRounds",max_environments:"maxEnvironments",prove_steps:"proveSteps",prove_branches:"proveBranches",prove_nodes:"proveNodes",ask_prove_steps:"askProveSteps",ask_prove_branches:"askProveBranches",ask_prove_nodes:"askProveNodes"}),uz=Object.freeze({ask_prove_fallback:"askProveFallback"})});function mg(e){if(!e)return null;let{node:t,shape:n,kind:s}=e;if(t==="find")return`locate a specific named entity ("${e.term}")`;if(t==="count")return`get a count of ${nd(e.entityType)}`;if(t==="list")return`list/enumerate ${nd(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${nd(e.entityType)} by ${e.metricNoun||e.metric||"a metric"}`;if(t==="anaphora")return"follow up on the previous answer's result set (discourse anaphora)";if(t==="membership")return`understand "${e.term||"an entity"}"'s membership/relationship`;if(t==="clause")return mg(e.clause);if(t==="miss")return null;if(t==="boolean"||t==="qualifier"||t==="reverseSet"||t==="forwardSet"||t==="allOfClass"||t==="temporal"){let o=s||e.inner?.kind;return o&&Un[o]?Un[o]:`filter/traverse ${nd(e.entityType)} by a relationship`}return n==="meta"?`understand a vocabulary/definition term ("${e.object}")`:n==="where"?`locate where something is defined ("${e.object}")`:n==="when"?"understand when something last changed (history)":n==="whoLast"?"find who most recently touched something (history)":n==="mentions"?`find where something is mentioned in prose ("${e.object}")`:n==="ask"?s&&Un[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?Un[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function vg(e){let t=new Map;for(let n of e)t.has(qj(n))||t.set(qj(n),n);return t}function ig(e,t=No){let n=[],s=[];for(let c of e)c.predicate===t&&(s.push([c.subject,c.object]),Rr(c)&&n.push([c.subject,c.object]));let o=new Map,r=new Map,i=new Set,a=(c,l,u)=>{!l||!u||l===u||(c.has(l)||c.set(l,new Set),c.get(l).add(u))};for(let[c,l]of s)a(r,c,l),l&&i.add(l);for(let[c,l]of n)a(o,c,l);return{strictEdges:n,broadEdges:s,strictSucc:o,broadSucc:r,reachableHeads:i}}function ag(e,t,n,s,o){let r=s.reachableHeads,i=!1;for(let a of n)if(r.has(a)){i=!0;break}return i?e(t,n,[],s.strictSucc,o)||e(t,n,[],s.broadSucc,o):null}function $z(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function Sz(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(yj(),wj)),s=n();return s?$z(t,s(t)):t}catch{return t}}function xg(e){let t=String(e||"").trim();if(/[a-z]ies$/i.test(t))return`${t.slice(0,-3)}y`;if(/[a-z]ses$/i.test(t)){let n=t.slice(0,-2);return/ss$/i.test(n)||vz.has(n.toLowerCase())?n:t.slice(0,-1)}return/(xes|zes|ches|shes)$/i.test(t)?t.slice(0,-2):/[a-z]s$/i.test(t)&&!/(?:ss|ous)$/i.test(t)?t.slice(0,-1):t}async function cd(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return gi;if(t==="can")return"mgx:capableOf";try{let n=await Sz(t);return n==="have"?gi:us(`mgx:${n}`)}catch{return us(`mgx:${t}`)}}function Tz(e,t){let n=String(t||"").match(_z);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function nc(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(cs(),Qy)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function Jj(e){return e.predicate===$R&&e.object==="transitiveproperty"||e.predicate===SR}function dg(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function Pz(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of Lz)if(n!==s&&n.endsWith(` ${s}`)){let r=t.slice(0,t.length-s.length).trim();if(r)return{subject:r,predicate:o}}return{subject:t,predicate:null}}function gg(e){return e.replace(/#node:[0-9a-f]+/g,"")}function jg(e){let t=A$(e),n=e.provenance?` (source: ${gg(e.provenance)})`:"";return`${t?` ${t}`:""}${Mz(e)}${n}`}function Mz(e){let t=[...new Set((Array.isArray(e?.attributedTo)?e.attributedTo:[]).filter(Boolean))].sort();return t.length?` (${t.length===1?t[0]:`${t.slice(0,-1).join(", ")} and ${t[t.length-1]}`} said)`:""}function Lo(e){return`${eo(e)}${jg(e)}`}function se(e){let t=jg(e);return e.predicate===SR?`${Sp(e.subject)} implies ${Sp(e.object)}${t}`:e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${eo(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${eo(e)}${t}`:e.provenance.includes("corpus:")?`${eo(e)}${t}`:e.provenance.includes("reference:")?`${eo(e)}${t}`:`i learned: ${eo(e)}${t}`}function Rg(e,t=null){if(t?.senseScreen?.rows===e)return t.senseScreen.gate;let n=[],s=[];for(let r of e||[])String(r.provenance||"").includes("entailed:")||(r.predicate===No?n.push([r.subject,r.object]):r.predicate===$R&&s.push([r.subject,r.object]));let o=sa({subClassEdges:n,typeEdges:s});return t&&(t.senseScreen={rows:e,gate:o}),o}function RR(e,t,n){for(let s of n)if(e.declines(t,s))return!0;return!1}function Zj(e,t,n,{toward:s=null,screen:o=null}={}){let r=se(e);if(!$n.has(e.predicate)||!n.has(e.subject))return r;let i=Au(e.object,t,{cap:6,stopAt:ul,toward:s});if(o){let l=i.findIndex((u,d)=>d>0&&o.declines(e.object,u));l>0&&(i=i.slice(0,l))}if(i.length<=1)return r;let a=` \u2192 ${i.slice(1).join(" \u2192 ")}`,c=jg(e);return!c||!r.endsWith(c)?r+a:r.slice(0,r.length-c.length)+a+c}function eR(e,t,n,{indent:s="",cache:o=null}={}){let r=t.filter(E=>E.predicate===No).map(E=>[E.subject,E.object]),i=Wa(r),a=Rg(t,o),c=e.map(E=>`${s}${Zj(E,i,n,{screen:a})}`),l=e.filter(E=>$n.has(E.predicate)&&n.has(E.subject)),u=[...new Set(l.map(E=>E.object))];if(u.length<2)return{lines:c,grouped:null};let d=t.filter(E=>E.predicate==="owl:disjointWith").map(E=>[E.subject,E.object]),{split:p,clusters:f}=Iu(u,{parents:i,disjointEdges:d});if(!p)return{lines:c,grouped:null};let h=l[0].subject,m=new Map;for(let E of f)for(let I of E.objects)m.set(I,E);let b=e.filter(E=>!($n.has(E.predicate)&&n.has(E.subject))),g=[],w=[],y=0,S=E=>{let I=Zj(E,i,n,{screen:a});return y<_e?(y+=1,`${s}${I}`):(w.push(I),null)};for(let E of f){let I=l.filter(k=>m.get(k.object)===E).map(S).filter(Boolean);I.length&&g.push(`${s}${h}, the ${E.label}:
|
|
178
178
|
${I.join(`
|
|
179
179
|
`)}`)}if(b.length){let E=b.map(S).filter(Boolean);E.length&&g.push(`${s}also about ${h}:
|
|
180
180
|
${E.join(`
|
|
181
181
|
`)}`)}let T=w.length?`
|
|
182
182
|
${s}\u2026and ${w.length} more \u2014 say 'more' to see them.`:"",v={text:g.join(`
|
|
183
|
-
`)+T,replace:!0,...w.length?{pending:{items:w,noun:"facts"}}:{}};return{lines:c,grouped:v}}async function
|
|
183
|
+
`)+T,replace:!0,...w.length?{pending:{items:w,noun:"facts"}}:{}};return{lines:c,grouped:v}}async function Dz(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(Sj(),$j)))}catch{return null}let r;try{r=o(e,t,n)}catch{return null}if(!r||!r.paragraphs.length)return null;let i=[...new Set((r.sources||[]).map(u=>u.provenance).filter(Boolean))],a=i.length?`(sources: ${i.join("; ")})
|
|
184
184
|
`:"",c=`Say 'show the facts' for all ${s.length} stored facts.`;return{text:`${r.paragraphs.join(`
|
|
185
185
|
|
|
186
186
|
`)}
|
|
187
187
|
|
|
188
|
-
${a}${c}`,pending:{items:s,noun:"facts"}}}function
|
|
188
|
+
${a}${c}`,pending:{items:s,noun:"facts"}}}function _r(e){let t=wu().find(n=>n.kind==="article");return t&&Zh(String(e||""),t)?"an":"a"}function _R(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${se(e)}; ${se(t)}. To settle it, say "forget that ${e.subject} is ${_r(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${se(t)}`,replace:!0}:e?{text:`yes \u2014 ${se(e)}`,replace:!0}:null}function Bz(e,t){return{text:`you've told me both ${Lo(e)} and ${Lo(t)} \u2014 together those contradict, and I won't derive an answer from an inconsistency. To settle it, say "forget that ${e.subject} is ${_r(e.object)} ${e.object}".`,replace:!0}}function sd(e){let t=e[0],n=e[e.length-1];return`${e.map(s=>Lo(s)).join("; ")}; so ${t.subject} is a ${n.object}`}async function od(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Ue(),Js)),n=await t(e),s=[];for(let o of n.individuals||[]){if(o?.class!=="Fact")continue;let r=a=>(o.attributes||[]).find(c=>c.key===a)?.value||"",i=r("extraction").split(" ").filter(Boolean);s.push({subject:r("subject"),predicate:r("predicate"),object:r("object"),provenance:r("provenance"),...i.length?{extraction:i}:{}})}return s}catch{return[]}}async function it(e,t=null){if(t?.rows)return t.rows;try{let{foldedFactRows:n}=await Promise.resolve().then(()=>(Ue(),Js)),s=await n(e);return t&&(t.rows=s,t.reloads=(t.reloads||0)+1),s}catch{return[]}}function zz(e){if(!rd)try{rd=an().nounPlurals}catch{rd=new Map}return rd.get(e)??null}function ud(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return bn(an(),t)?.lemma||t}catch{return t}}function Uz(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return ud(e);let n=ud(xg(t[1]));return`${_r(n)} ${n}`}function Q(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(Wz,"").trim();r&&r!==n&&o.add(r);for(let i of o){s.add(i),i.endsWith("es")&&s.add(i.slice(0,-2)),i.endsWith("s")&&s.add(i.slice(0,-1));let a=zz(i);a&&s.add(e(a))}return s}function tR(e,t,n){for(let s of e)for(let o of t){let r=n(s,o);if(r)return r}return null}function IR(e,t=null){let n=dd(e),s=n.match(Gz);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(Kz);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function wg(e){let t=String(e||"").replace(Xz,"");if(t!==e){let s=t.match(Co);if(s)return s}let n=String(e||"").match(Jz);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Co):null}function Zz(e,t,n){let s=String(e||"").trim().split(/\s+/).filter(Boolean);if(s.length<2)return null;let o=t.filter(r=>$n.has(r.predicate));if(!o.length)return null;for(let r=1;r<s.length;r+=1){let i=Q(n,s.slice(0,r).join(" ")),a=s.slice(r).join(" "),c=Q(n,a);if(o.some(l=>c.has(l.subject)&&i.has(l.object)))return a}return null}function OR(e,t,n){if(t.has(n))return!0;for(let s of Q(e,n))if(t.has(s))return!0;return!1}function CR(e,t,n,s){let o=a=>a.predicate===ad&&s(a.object)===n||a.predicate===`tmct:${n}`&&a.object==="true",r=(a,c)=>OR(s,a,c.subject),i=e.find(a=>r(t,a)&&o(a));if(i)return[i];for(let a of e.filter(c=>$n.has(c.predicate)&&r(t,c))){let c=Q(s,a.object),l=e.find(u=>r(c,u)&&o(u));if(l)return[a,l]}return null}function oU(e,t,n,s){let o=a=>a.predicate==="mgx:capableOf"&&n.has(s(a.object)),r=(a,c)=>OR(s,a,c.subject),i=e.find(a=>r(t,a)&&o(a));if(i)return[i];for(let a of e.filter(c=>$n.has(c.predicate)&&r(t,c))){let c=Q(s,a.object),l=e.find(u=>r(c,u)&&o(u));if(l)return[a,l]}return null}function rU(e){let t=String(e??"").trim().match(/^([\w-]+)\s+(\S.*)$/);if(!t)return null;let n=La(t[1]);return n===null?null:{count:n,part:t[2]}}function ld(e){return String(e||"").replace(/^(?:can't|cannot|can not|cant)\s+/i,"can ").replace(/^(?:doesn't|does not)\s+/i,"does ").replace(/^(?:don't|do not)\s+/i,"do ").replace(/^(?:didn't|did not)\s+/i,"did ").replace(/\s+(?:not|never)\s+/i," ").replace(/\s+/g," ").trim()}function oR(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function yU(e,t){let n=(e||[]).map(s=>t.find(o=>o.predicate===s.predicate&&o.subject===s.subject&&o.object===s.object));return!n.length||!n.every(Boolean)?null:n.map(s=>Lo(s)).join("; ")}function iR(e,t,n,{maxHops:s=3}={}){let o=Q(V,e),r=Q(V,t),i=ol(o,r,n,{maxHops:s}),a=c=>{let l=c&&c.length?yU(c,n):null;return l?` \u2014 via: ${l}`:""};if(i.verdict==="both")return{text:`I have both, at the same level of detail \u2014 my sources disagree, so I won't pick:
|
|
189
189
|
${[...i.negative,...i.positive].map(se).join(`
|
|
190
|
-
`)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let c=i.verdict==="no"?i.negative[0]:i.positive[0],l=`${i.verdict} \u2014 ${se(c)}${a(i.chain)}`;return i.overrides&&(l+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${se(i.overrides.fact)}`),{text:l,replace:!0}}return null}function
|
|
190
|
+
`)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let c=i.verdict==="no"?i.negative[0]:i.positive[0],l=`${i.verdict} \u2014 ${se(c)}${a(i.chain)}`;return i.overrides&&(l+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${se(i.overrides.fact)}`),{text:l,replace:!0}}return null}function aR(e,t,n,{maxHops:s=3}={}){let o=Q(V,e),r=Q(V,t),i=hp(o,r,n,{maxHops:s});if(!i)return null;let a=`${e} is a kind of ${i.klass}`,c=`I don't know if ${e} can ${t}.`;if(i.positive.length||i.negative.length){let u=[`${i.positive.length} can ${t}`,`${i.negative.length} cannot`,`${i.unknown.length} I have nothing on`].join(", "),d=[...i.positive,...i.negative].slice(0,pp).map(p=>se(p.fact));return{text:`${c} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
|
|
191
191
|
${d.join(`
|
|
192
|
-
`)}`,replace:!0,miss:!0}}let l=
|
|
192
|
+
`)}`,replace:!0,miss:!0}}let l=mp(r,n,{exclude:new Set([...o,i.klass])});if(l.length){let u=l.slice(0,pp),d=l.slice(u.length);return{text:`${c} ${a}, and nothing I know about ${i.klass} says whether one can ${t}. I do know ${l.length} thing${l.length===1?"":"s"} that can ${t}${d.length?` (first ${u.length} shown)`:""}:
|
|
193
193
|
${u.map(se).join(`
|
|
194
|
-
`)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(se),noun:"facts"}}:{}}}return{text:`${c} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function
|
|
194
|
+
`)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(se),noun:"facts"}}:{}}}return{text:`${c} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function vU(e){let t=String(e||"").toLowerCase().trim().replace(/\s+/g," ");if(t==="best")return"better";if(t==="worst")return"worse";let n=t.match(/^(most|least)\s+([a-z][\w-]*)$/);return n?`${n[1]==="most"?"more":"less"} ${n[2]}`:/[a-z]est$/.test(t)&&t.length>4?`${t.slice(0,-3)}er`:null}function Tn(e){let t=new Set,n=[];for(let s of e){let o=`${s.subject}|${s.predicate}|${s.object}`;t.has(o)||(t.add(o),n.push(s))}return n}async function LR(e,t,n,s,o={},r=null,i=null){return PR(MR(await NU(e,t,n,s,o,r,i),n,t),Cu.FACT_SET)}function PR(e,t){return!e||e.miss||typeof e.text!="string"||!qx(e.text,e)?e:{...e,enumerationLane:t}}function MR(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=mg(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Hj),!o){let r=s.match(bg),i=r?null:dd(s).match(AR)||IR(s),a=r?r[2]:i?i[1]:null;a&&!yg.has(a.toLowerCase())&&(o=Hj)}if(!o){let r=s.match(DR);r&&(o=mg({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function fg(e,t,n,s,o=null,r=[]){let{ON_PROPERTY_PREDICATE:i,SOME_VALUES_FROM_PREDICATE:a}=await Promise.resolve().then(()=>(Ft(),mn)),c=await it(e,t),l=new Map,u=new Map;for(let f of c)f.predicate===i?l.set(f.subject,f.object):f.predicate===a&&u.set(f.subject,f.object);let d=c.filter(f=>f.predicate===No&&n.has(f.subject)&&l.has(f.object)&&u.has(f.object)),p=d.filter(f=>s.has(u.get(f.object))).sort((f,h)=>hz(f.object,h.object)||Zt(f,h))[0];if(p){let f=new Map(c.map(b=>[b.id,b])),h=(p.justification||[]).map(b=>f.get(b)).filter(b=>b&&b.predicate===No),m=h.length?h:[p];return{text:`yes \u2014 ${[...r,...m].map(se).join("; ")}`,replace:!0}}return d.length&&o?{text:`I can't confirm that \u2014 nothing I remember composes to it yet. Run "/classify ${o}", then ask me again.`,replace:!0,miss:!0}:null}async function TU(e,t,n){let{extractTableauModule:s,buildTableauKb:o,findTableauViolations:r}=await Promise.resolve().then(()=>(Qm(),Jm)),{elUnsatisfiableClasses:i}=await Promise.resolve().then(()=>(Gj(),Wj)),a=e.filter(m=>m.predicate==="rdf:type"&&t.has(m.subject)).map(m=>m.object),c=[...new Set([...t,...a])],l=s(e,c),u=new Map(l.map(m=>[m.id,m])),d=o(l),p=d.individuals.filter(m=>t.has(m));if(p.length){let m={maxSteps:n.proveSteps,maxBranches:n.proveBranches,maxNodes:n.proveNodes},b=r(d,p,m)[0];if(b){let g=b.premises.map(w=>u.get(w)).filter(Boolean).map(se).join("; ");return`I can't answer that \u2014 what I've been told about ${b.subject} is inconsistent: ${g||"the facts I hold about it clash"}. I'd need one of those retracted before I can answer honestly.`}}let f=i(l,{budget:n.classifyBudget,rounds:n.classifyRounds,focus:new Set(c)}),h=f.unsatisfiable.find(m=>t.has(m)||a.includes(m));if(h){let m=f.premisesOf(h).map(b=>u.get(b)).filter(Boolean).map(se).join("; ");return`I can't answer that \u2014 "${h}" can never have any members: ${m||"its own subclass chain is unsatisfiable"}. I'd need one of those retracted before I can answer honestly.`}return null}function IU(e){return e.some(t=>{let n=String(t?.predicate||"").trim().toLowerCase();return AU.has(n)?!0:n==="rdf:type"&&String(t?.object||"").toLowerCase()==="transitiveproperty"})}function OU(e,t){return t>e.length?`one of ${t} possibilities`:e.map(n=>n.t==="nom"?n.ind:n.name).map(n=>`${_r(n)} ${n}`).join(" or ")}function lR(e,t,n,{negate:s=!1}={}){let o=s?`is not a ${n}`:`is a ${n}`;return!e.cases||!e.cases.length?`so ${t} ${o}.`:`in every case \u2014 ${OU(e.cases,e.casesTotal)} \u2014 ${t} ${o}.`}async function CU(e,t,n,s,o,r,i){if(!IU(n))return null;let{extractTableauModule:a,buildTableauKb:c,proveEntailment:l,proveSubsumption:u,proveSubsumptionOfNegation:d,findTableauViolations:p,moduleHasDlShape:f}=await Promise.resolve().then(()=>(Qm(),Jm)),{normFactTerm:h}=await Promise.resolve().then(()=>(Ue(),Js)),m=mR(o,n,h(s)),b=mR(r,n,h(i)),g=n.filter(O=>O.predicate==="rdf:type"&&o.has(O.subject)).map(O=>O.object),w=a(n,[m,b,...g]);if(!f(w))return null;let y=await BR(e);if(!y.askProveFallback)return null;let S=c(w),T={maxSteps:y.askProveSteps,maxBranches:y.askProveBranches,maxNodes:y.askProveNodes},v=S.namedIndividuals.has(m),E=new Map(w.map(O=>[O.id,O]));if(v){let O=p(S,[m],T)[0];if(O){let x=O.premises.map(j=>E.get(j)).filter(Boolean).map(se).join("; ");return{text:`I can't answer that \u2014 what I've been told about ${O.subject} is inconsistent: ${x||"the facts I hold about it clash"}. I'd need one of those retracted before I can answer honestly.`,replace:!0}}}let I=O=>O.premises.map(x=>E.get(x)).filter(Boolean).map(se).join("; "),k=v?l(S,m,{t:"atom",name:b},T):u(S,m,b,T);if(k.status==="proved"){let O=I(k),x=lR(k,s,i);return{text:`yes \u2014 ${O}; ${x}`,replace:!0}}if(k.status==="exhausted")return{budgetExhausted:!0};let R=v?l(S,m,{t:"not",c:{t:"atom",name:b}},T):d(S,m,b,T);if(R.status==="exhausted")return{budgetExhausted:!0};if(R.status!=="proved")return null;let $=I(R),_=lR(R,s,i,{negate:!0});return{text:`no \u2014 ${$}; ${_}`,replace:!0}}async function NU(e,t,n,s,o={},r=null,i=null){let a,c;try{({normFactTerm:a,normFactPredicate:c}=await Promise.resolve().then(()=>(Ue(),Js)))}catch{return null}let l=String(t).trim(),u=l.match(lU);if(u){let W=Q(a,u[1]),C=(await it(e,r)).filter(F=>F.predicate==="mgx:usedFor"&&W.has(F.object));if(C.length){let N=lt(Tn(C),o).map(se),B=N.slice(0,_e),z=N.slice(_e),U=z.length?`
|
|
195
195
|
\u2026and ${z.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
|
|
196
|
-
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}}for(let{predicate:W,re:C}of
|
|
196
|
+
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}}for(let{predicate:W,re:C}of xU){let F=l.match(C);if(!F)continue;let N=Q(a,F[1]),B=(await it(e,r)).filter(pe=>pe.predicate===W&&N.has(pe.object));if(!B.length)continue;let U=lt(Tn(B),o).map(se),G=U.slice(0,_e),J=U.slice(_e),ae=J.length?`
|
|
197
197
|
\u2026and ${J.length} more \u2014 say 'more' to see them.`:"";return{text:G.join(`
|
|
198
|
-
`)+ae,replace:!0,...J.length?{pending:{items:J,noun:"facts"}}:{}}}let d=l.match(
|
|
198
|
+
`)+ae,replace:!0,...J.length?{pending:{items:J,noun:"facts"}}:{}}}let d=l.match($U),p=d?null:l.match(SU),f=d?d[1]:p?.[2],h=d?d[2]:p?.[1],m=f&&h?vU(h):null;if(m){let W=`mgx:${m.replace(/\s+/g,"-")}-than`,C=await it(e,r),F=Q(a,f),N=[...F].sort((U,G)=>U.length-G.length)[0],B=U=>F.has(U)||U.startsWith(`${N}-`)||U.startsWith(`${N} `)||C.some(G=>$n.has(G.predicate)&&G.subject===U&&F.has(G.object)),z=Tn(C.filter(U=>U.predicate===W&&Rr(U))).filter(U=>U.subject!==U.object&&B(U.subject)&&B(U.object));if(z.length){let U=new Set,G=new Map;for(let ee of z)U.add(ee.subject),U.add(ee.object),G.set(ee.object,(G.get(ee.object)||0)+1),G.has(ee.subject)||G.set(ee.subject,G.get(ee.subject)||0);let J=new Map(G),ae=[],pe=null;for(;J.size;){let ee=[...J.keys()].filter(te=>J.get(te)===0);if(ee.length!==1){pe=ee.length===0?{text:`I can't order the ${N}s \u2014 the "${m} than" facts I have loop back on themselves, so no ${h} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${h} ${N} from what I know \u2014 nothing compares ${ee[0]} and ${ee[1]}. Teach me, e.g. "${ee[0]} is ${m} than ${ee[1]}".`,replace:!0,miss:!0};break}let X=ee[0];ae.push(X),J.delete(X);for(let te of z)te.subject===X&&J.has(te.object)&&J.set(te.object,J.get(te.object)-1)}if(pe)return pe;let re=ae.slice(0,-1).map((ee,X)=>z.find(te=>te.subject===ee&&te.object===ae[X+1]));if(re.every(Boolean)){let ee=re.map(X=>Lo(X)).join("; ");return{text:`${ae[0]} \u2014 ${ee}; so ${ae[0]} is the ${h} ${N}`,replace:!0}}}}let b=s?l.match(uU)||l.match(dU):null;if(b){let W=Q(a,b[1]),C=(await it(e,r)).filter(F=>Cr(F.predicate)!==null&&W.has(F.subject));if(C.length){let N=lt(Tn(C),o).map(se),B=N.slice(0,_e),z=N.slice(_e),U=z.length?`
|
|
199
199
|
\u2026and ${z.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
|
|
200
|
-
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}}let g=l.match(
|
|
200
|
+
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}}let g=l.match(fU);if(g){let W=g[1].toLowerCase(),C=Q(a,g[2].replace(/^(?:an?|the)\s+/i,"").trim()),F=(await it(e,r)).filter(N=>Cr(N.predicate)===W&&C.has(N.object));if(F.length){let B=lt(Tn(F),o).map(se),z=B.slice(0,_e),U=B.slice(_e),G=U.length?`
|
|
201
201
|
\u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:z.join(`
|
|
202
|
-
`)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}{let W=l.match(
|
|
202
|
+
`)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}{let W=l.match(pU),C=W?W[2]:g&&["in","inside"].includes(g[1].toLowerCase())?g[2]:null;if(C!=null){let F=W&&W[1].toLowerCase()==="parts"?["mgx:partOf"]:Cz,N=Q(a,C.replace(/^(?:an?|the)\s+/i,"").trim()),B=(await it(e,r)).filter(z=>F.includes(z.predicate)&&N.has(z.object));if(B.length){let U=lt(Tn(B),o).map(se),G=U.slice(0,_e),J=U.slice(_e),ae=J.length?`
|
|
203
203
|
\u2026and ${J.length} more \u2014 say 'more' to see them.`:"";return{text:G.join(`
|
|
204
|
-
`)+ae,replace:!0,...J.length?{pending:{items:J,noun:"facts"}}:{}}}}}let w=l.match(
|
|
204
|
+
`)+ae,replace:!0,...J.length?{pending:{items:J,noun:"facts"}}:{}}}}}let w=l.match(hU);if(w){let W=w[3].toLowerCase(),C=Q(a,w[2]),F=new Set([...Q(a,w[1])].map(B=>c(`mgx:${W}-${B.replace(/\s+/g,"-")}`))),N=(await it(e,r)).filter(B=>F.has(c(B.predicate))&&C.has(a(B.subject)));if(N.length){let z=lt(Tn(N),o).map(se),U=z.slice(0,_e),G=z.slice(_e),J=G.length?`
|
|
205
205
|
\u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
|
|
206
|
-
`)+J,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}let y=n?.parsed?.shape==="meta"?n.parsed.object:null,S=n?.parsed&&n.parsed.node!=="miss";if(!y&&s&&!S&&!
|
|
206
|
+
`)+J,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}let y=n?.parsed?.shape==="meta"?n.parsed.object:null,S=n?.parsed&&n.parsed.node!=="miss";if(!y&&s&&!S&&!cR.test(l)){let W=l.match(DR)||l.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);W&&(y=oo(W[1]))}if(!y&&s){let W=l.match(JU);W&&(y=oo(En(W[1].trim())))}if(!y&&n?.ambiguous&&Array.isArray(n.candidateParses)){let W=n.candidateParses.find(C=>C?.shape==="meta"&&C.object);W&&(y=oo(String(W.object)))}if(y){let W=Pz(y),{predicate:C}=W,F=W.subject.replace(/^(?:the|an?)\s+/i,"").trim()||W.subject,N=!1;if(C&&Zs.test(F)){if(!i){let oe=String(Vs[C]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${F.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${oe?` ${oe}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}F=i,N=!0}let B=Q(a,F),z=await it(e,r);if(!z.some(oe=>B.has(oe.subject)||B.has(oe.object))){let oe=Zz(F,z,a);oe&&(F=oe,B=Q(a,F))}let U=(await it(e,r)).filter(oe=>B.has(oe.subject)&&!Xj.has(oe.predicate)&&!Jj(oe)&&!Qj.has(oe.predicate)),G=C?U.filter(oe=>c(oe.predicate)===C):U;if(!C&&G.length&&!G.some(pg)&&(G=[]),!G.length){if(C&&(U.length||N))return{text:`I don't have any "${Vs[C]}" facts about ${F}.`,replace:s,...U.length?{}:{miss:!0}};if(!C){let oe=lt((await it(e,r)).filter(Te=>B.has(Te.object)),o);if(oe.length&&!oe.some(pg)&&(oe=[]),oe.length){let Te=oe.map(se),ge=Te.slice(0,_e),Ie=Te.slice(_e),Ee=Ie.length?`
|
|
207
207
|
\u2026and ${Ie.length} more \u2014 say 'more' to see them.`:"";return{text:ge.join(`
|
|
208
|
-
`)+Ee,replace:s,...Ie.length?{pending:{items:Ie,noun:"facts"}}:{}}}}return null}G=
|
|
208
|
+
`)+Ee,replace:s,...Ie.length?{pending:{items:Ie,noun:"facts"}}:{}}}}return null}G=qz(lt(G,o));let J=await it(e,r),{lines:ae,grouped:pe}=eR(G,J,B,{cache:r}),re=!C&&ae.length>Fz?await Dz(F,G,J,ae):null;if(re)return{...re,replace:s};if(pe)return{...pe,replace:s};let ee=ae.slice(0,_e),X=ae.slice(_e),te=X.length?`
|
|
209
209
|
\u2026and ${X.length} more \u2014 say 'more' to see them.`:"";return{text:ee.join(`
|
|
210
|
-
`)+te,replace:s,...X.length?{pending:{items:X,noun:"facts"}}:{}}}if(!s)return null;let T=l.match(
|
|
210
|
+
`)+te,replace:s,...X.length?{pending:{items:X,noun:"facts"}}:{}}}if(!s)return null;let T=l.match(wz);if(T){let C=`mgx:${T[2].toLowerCase().replace(/\s+/g,"-")}-than`,F=await od(e),N=re=>{let ee=re.replace(/^(?:an?|the)\s+/i,"").trim();return i&&Zs.test(ee)?i:ee},B=N(T[1]),z=N(T[3]),U=Q(a,B),G=Q(a,z),J=F.find(re=>re.predicate===C&&U.has(re.subject)&&G.has(re.object));if(J){let re=F.find(X=>X.predicate===C&&U.has(X.object)&&G.has(X.subject)),ee=re?` \u2014 though you also told me the opposite: ${se(re)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${se(J)}${ee}`,replace:!0}}let ae=F.filter(re=>re.predicate===C&&(U.has(re.subject)||U.has(re.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${ae.length?` I do know: ${ae.slice(0,3).map(se).join("; ")}.`:""} If it's true, teach me: "${B} is ${T[2].toLowerCase()} than ${z}".`,replace:!0,miss:!0}}let v=ld(l).match(sU);if(v){let W=Q(a,v[1]),C=v[2].toLowerCase(),F=await it(e,r),N=CR(F,W,C,a)??oU(F,W,new Set([`be ${C}`,C]),a);if(N)return{text:`yes \u2014 ${N.map(se).join("; ")}`,replace:!0}}for(let{predicate:W,phrase:C,re:F}of RU){let N=l.match(F);if(!N)continue;let B=await od(e),z=Q(a,N[1]),U=Q(a,N[2]),G=B.find(ee=>ee.predicate===W&&z.has(ee.subject)&&U.has(ee.object));if(G)return{text:`yes \u2014 ${se(G)}`,replace:!0};let[J]=C.split(" "),ae=await cd(nr(J));if(ae!==W){let ee=ae.replace(/^mgx:/,"mgxneg:");if(B.some(X=>(X.predicate===ae||X.predicate===ee)&&z.has(X.subject)))continue}let pe=jU.has(W)?` If it's true, teach me: "${N[1]} ${C} ${N[2]}".`:"",re=B.filter(ee=>ee.predicate===W&&z.has(ee.subject));if(re.length){let ee=re.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${C} ${N[2]}. I do know: ${ee}.${pe}`,replace:!0,miss:!0}}if(!n?.parsed&&B.some(ee=>z.has(ee.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${C} ${N[2]}.${pe}`,replace:!0,miss:!0};break}let E=l.match(Co)||wg(l);if(E){let W=Q(a,E[1]),C=Q(a,E[2]),F=await it(e,r),N=G=>W.has(G.subject)&&C.has(G.object),{DISJOINT_PREDICATE:B}=await Promise.resolve().then(()=>(Ft(),mn)),z=G=>W.has(G.subject)||W.has(G.object)||C.has(G.subject)||C.has(G.object);return F.some(G=>G.predicate===B&&Rr(G)&&z(G))?null:_R(F.find(G=>$n.has(G.predicate)&&N(G)),F.find(G=>G.predicate===nl&&N(G)))}let I=ld(l),k=I.match(eU);if(k){let W=await it(e,r),C=k[1],F=iR(k[2],k[3],W);if(F&&I!==rR(l)&&(F=oR(F)),F&&C)return{text:`I can't speak for ${C.trim()} ${k[2]} \u2014 what I remember is generic, not universal. ${F.text}.`,replace:!0};if(F)return F;let N=Q(a,k[2]),B=W.filter(z=>z.predicate==="mgx:capableOf"&&N.has(z.subject));if(B.length){let z=B.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${k[2]} can ${k[3]}. I do know: ${z}. If it's true, teach me: "a ${B[0].subject} can ${k[3]}".`,replace:!0,miss:!0}}return aR(k[2],k[3],W)}let R=l.match(nU);if(R){let W=Q(a,R[1]),C=Q(a,R[2]),N=(await od(e)).map(B=>({fact:B,quantified:sR.has(B.predicate)&&C.has(B.subject)?rU(B.object):null})).find(({quantified:B})=>B&&[...Q(a,B.part)].some(z=>W.has(z)));if(N)return{text:`${N.quantified.count} \u2014 ${se(N.fact)}`,replace:!0}}let $=l.match(tU);if($){let W=Q(a,$[1]),C=Q(a,$[2]),F=await od(e),N=G=>F.find(J=>sR.has(J.predicate)&&G.has(J.subject)&&C.has(J.object)),B=N(W);if(B)return{text:`yes \u2014 ${se(B)}`,replace:!0};let z=[{terms:W,chain:[]}],U=new Set;for(let G=0;G<4;G+=1){let J=[];for(let{terms:ae,chain:pe}of z){let re=F.filter(ee=>$n.has(ee.predicate)&&ae.has(ee.subject)&&!U.has(ee.object));for(let ee of re){if(U.has(ee.object))continue;U.add(ee.object);let X=[...pe,ee],te=Q(a,ee.object),oe=N(te);if(oe)return{text:`yes \u2014 ${[...X.map(se),se(oe)].join("; ")}`,replace:!0};let Te=await fg(e,r,te,C,null,X);if(Te)return Te;J.push({terms:te,chain:X})}}if(!J.length)break;z=J}return fg(e,r,W,C,$[1].trim())}let _=l.match(iU);if(_){let W=Q(a,_[1]),C=Q(a,_[3]),F=await fg(e,r,W,C,_[1].trim());if(F)return F}let O=ld(l),x=O.match(mU);if(x){let W=await it(e,r),C=!!x[1],F=Q(a,x[2]),N=Q(a,x[3]),B=iR(x[2],x[3],W);if(B&&O!==rR(l)&&(B=oR(B)),B&&C)return{text:`I can't speak for ${x[1].trim()} ${x[2]} \u2014 what I remember is generic, not universal. ${B.text}.`,replace:!0};if(B)return B;if(s){let z=W.filter(G=>G.predicate==="mgx:capableOf"&&F.has(G.subject));if(z.length){let G=z.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${x[2]} can ${x[3]}. I do know: ${G}. If it's true, teach me: "a ${z[0].subject} can ${x[3]}".`,replace:!0,miss:!0}}let U=aR(x[2],x[3],W);if(U)return U;if(!/\s/.test(x[2].trim())&&!W.some(G=>F.has(G.subject)||F.has(G.object))){let G=xg(ud(x[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${x[2]}" yet. Teach me "a ${G} can ${x[3]}" (or "a ${G} cannot ${x[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let j=l.match(aU);if(j){let W=Q(a,j[1]),C=(await it(e,r)).filter(G=>(G.predicate==="mgx:capableOf"||G.predicate===ni)&&W.has(G.subject));if(!C.length)return null;let N=lt(Tn(C),o).map(se),B=N.slice(0,_e),z=N.slice(_e),U=z.length?`
|
|
211
211
|
\u2026and ${z.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
|
|
212
|
-
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}let M=l.match(
|
|
212
|
+
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}let M=l.match(wU);if(M){let W=Q(a,M[1]),C=Q(a,M[2]),F=await it(e,r),N=Tn(F.filter(B=>B.predicate==="mgx:capableOf"&&C.has(B.object))).filter(B=>ol(new Set([B.subject]),C,F).verdict==="yes");if(N.length){let{findIsaChain:B,buildSubClassSuccessors:z,SUBCLASS_PREDICATE:U,TYPE_PREDICATE:G}=await Promise.resolve().then(()=>(Ft(),mn)),J=F.filter(ce=>ce.predicate===U),ae=F.filter(ce=>ce.predicate===G),pe=J.map(ce=>[ce.subject,ce.object]),re=ae.map(ce=>[ce.subject,ce.object]),ee=z(pe),X=ce=>(ce.predicate===U?J:ae).find(le=>le.subject===ce.subject&&le.object===ce.object),te=new Map,oe=N.filter(ce=>W.has(ce.subject)?!0:(te.has(ce.subject)||te.set(ce.subject,B(ce.subject,W,re,ee,{maxHops:3})),!!te.get(ce.subject))),ge=lt(oe.length?oe:N,o).map(ce=>{let le=oe.length?te.get(ce.subject):null;if(!le||le.length<2)return se(ce);let de=le.map(X);if(!de.every(Boolean))return se(ce);let ut=de.map(Ct=>Lo(Ct)).join("; ");return`${se(ce)} \u2014 via: ${ut}`}),Ie=ge.slice(0,_e),Ee=ge.slice(_e),xe=Ee.length?`
|
|
213
213
|
\u2026and ${Ee.length} more \u2014 say 'more' to see them.`:"";return{text:(oe.length?"":`nothing I remember ties these to "${M[1]}", but:
|
|
214
214
|
`)+Ie.join(`
|
|
215
|
-
`)+xe,replace:!0,...Ee.length?{pending:{items:Ee,noun:"facts"}}:{}}}}let D=l.match(
|
|
215
|
+
`)+xe,replace:!0,...Ee.length?{pending:{items:Ee,noun:"facts"}}:{}}}}let D=l.match(bU);if(D&&D[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let W=Q(a,D[1]),C=(await it(e,r)).filter(F=>F.predicate==="mgxneg:capableOf"&&W.has(F.object));if(C.length){let N=lt(Tn(C),o).map(se),B=N.slice(0,_e),z=N.slice(_e),U=z.length?`
|
|
216
216
|
\u2026and ${z.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
|
|
217
|
-
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${D[1].trim()}.`,replace:!0,miss:!0}}let H=l.match(
|
|
217
|
+
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${D[1].trim()}.`,replace:!0,miss:!0}}let H=l.match(gU);if(H&&H[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let W=Q(a,H[1]),C=mp(W,await it(e,r));if(C.length){let N=lt(Tn(C),o).map(se),B=N.slice(0,_e),z=N.slice(_e),U=z.length?`
|
|
218
218
|
\u2026and ${z.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
|
|
219
|
-
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}}let Y=l.match(
|
|
219
|
+
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}}let Y=l.match(cU);if(Y&&!_U.has(Y[1].trim().split(/\s+/)[0]?.toLowerCase())){let W=Q(a,Y[1]),C=(await it(e,r)).filter(G=>G.predicate==="mgx:hasA"&&W.has(G.object));if(!C.length)return null;let N=lt(Tn(C),o).map(se),B=N.slice(0,_e),z=N.slice(_e),U=z.length?`
|
|
220
220
|
\u2026and ${z.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
|
|
221
|
-
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}let Z=l.match(
|
|
221
|
+
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}let Z=l.match(cR),P=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:Z?.[1];if(P){let W=Q(a,P),C=(await it(e,r)).filter(G=>$n.has(G.predicate)&&W.has(G.object));if(!C.length)return null;let N=lt(Tn(C),o).map(se),B=N.slice(0,_e),z=N.slice(_e),U=z.length?`
|
|
222
222
|
\u2026and ${z.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
|
|
223
|
-
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}let K=l.match(
|
|
223
|
+
`)+U,replace:!0,...z.length?{pending:{items:z,noun:"facts"}}:{}}}let K=l.match(Qz);if(K){let W=Q(a,K[1]),C=await it(e,r),F=ie=>!String(ie.provenance||"").includes("corpus:")&&!String(ie.provenance||"").includes("web:"),N=C.filter(ie=>$n.has(ie.predicate)&&F(ie)),B=Rg(C,r),z=new Set,U=W;for(let ie=0;ie<8&&U.size;ie+=1){let qe=new Set;for(let Ze of N)!U.has(Ze.object)||z.has(Ze.subject)||RR(B,Ze.subject,W)||qe.add(Ze.subject);if(!qe.size)break;for(let Ze of qe)z.add(Ze);let $t=new Set;for(let Ze of qe)for(let St of Q(a,Ze))$t.add(St);U=$t}let G=C.filter(ie=>W.has(ie.subject)||W.has(ie.object)||z.has(ie.subject));if(!G.length){let ie=a(K[1]).split(/\s+/).filter(qe=>qe.length>=4&&!TR.has(qe));if(ie.length){let qe=Ze=>new Set(String(Ze||"").split(/\s+/)),$t=Ze=>{let St=qe(Ze);return ie.some(Ir=>St.has(Ir))};G=C.filter(Ze=>$t(Ze.subject)||$t(Ze.object))}}G=G.filter(ie=>!Xj.has(ie.predicate)&&!Jj(ie)&&!Qj.has(ie.predicate));let J=G.length>0&&!G.some(pg);if(!G.length)return null;let{findConsistencyViolations:ae,TYPE_PREDICATE:pe,SUBCLASS_PREDICATE:re,DISJOINT_PREDICATE:ee}=await Promise.resolve().then(()=>(Ft(),mn)),X=ie=>!ie.provenance?.includes("corpus:")&&!ie.provenance?.includes("web:"),te=C.filter(ie=>ie.predicate===pe&&X(ie)).map(ie=>[ie.subject,ie.object]),oe=C.filter(ie=>ie.predicate===re&&X(ie)).map(ie=>[ie.subject,ie.object]),Te=C.filter(ie=>ie.predicate===ee&&X(ie)).map(ie=>[ie.subject,ie.object]);if(Te.length){let qe=ae(te,oe,Te,{focus:W,budget:5}).find($t=>W.has($t.subject));if(qe)return{text:`I can't answer that \u2014 what I've been told about ${qe.subject} is inconsistent: it's taught to be both ${qe.classA} and ${qe.classB}, but ${qe.viaA} and ${qe.viaB} are disjoint (${qe.viaA} owl:disjointWith ${qe.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let ge=await BR(e),Ie=await TU(C,W,ge);if(Ie)return{text:Ie,replace:!0};let Ee=G.find(ie=>W.has(ie.subject)||W.has(ie.object)),xe=Ee?W.has(Ee.subject)?Ee.subject:Ee.object:K[1].trim(),et=G.some(ie=>z.has(ie.subject)&&!W.has(ie.subject)&&!W.has(ie.object));G=lt(G,o);let ce=`${G.length} remembered fact${G.length===1?"":"s"} about ${xe}${et?" (including its known subtypes)":""}:`,{lines:le,grouped:de}=eR(G,C,W,{indent:" ",cache:r});if(de)return{...de,text:`${ce}
|
|
224
224
|
${de.text}`,...J?{weakOnly:!0}:{}};let ut=le.slice(0,_e),Ct=le.slice(_e),Yt=Ct.length?`
|
|
225
225
|
\u2026and ${Ct.length} more \u2014 say 'more' to see them.`:"";return{text:`${ce}
|
|
226
226
|
${ut.join(`
|
|
227
|
-
`)}${Yt}`,replace:!0,...Ct.length?{pending:{items:Ct.map(ie=>ie.trim()),noun:"facts"}}:{},...J?{weakOnly:!0}:{}}}return null}async function
|
|
227
|
+
`)}${Yt}`,replace:!0,...Ct.length?{pending:{items:Ct.map(ie=>ie.trim()),noun:"facts"}}:{},...J?{weakOnly:!0}:{}}}return null}async function KU(e,t){let n=await nc(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(i=>i?.id===n.id))?.class;if(!s)return null;let{defaultCodeLaneVocab:o}=await Promise.resolve().then(()=>(Wm(),mj)),{classLabels:r}=await o();return r[s]?r[s][0]:null}function id(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<qU;r+=1){let i=null;for(let a of e.relations||[])if(HU.test(`${a?.prop||""} ${a?.predicate||""}`)&&(i=(a.edges||[]).find(c=>c?.subject===o)||null,i))break;if(!i||s.has(i.object))break;s.add(i.object),n.push({id:i.object,label:i.objectLabel||i.object}),o=i.object}return n}async function FR(e,t,n,s,o=null,r=null,i={},a=null){return PR(MR(await YU(e,t,n,s,o,r,i,a),n,t),Cu.FACT_READBACK)}async function YU(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let c;try{({normFactTerm:c}=await Promise.resolve().then(()=>(Ue(),Js)))}catch{return null}let l=String(t).trim();if(o){let C=l.match(Co);if(C){let F=await nc(o,C[1]);if(F){let N=Q(c,En(C[2])),B=id(o,F.id).find(U=>[...Q(c,U.label)].some(G=>N.has(G)));if(B)return{text:`yes \u2014 the code graph says ${F.label} inherits ${B.label}.`,replace:!0};let z=await nc(o,En(C[2]));if(z&&id(o,z.id).some(U=>U.id===F.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${z.label} inherits ${F.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=l.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await it(e,a);if(!d.length){if(!Co.test(u)&&!bg.test(u)){let F=u.match(dR);if(F){let N=F[1].trim(),B=Zs.test(N)?r||null:N;if(B&&!/^there\b/i.test(B)&&!n?.parsed&&!pR.test(N)&&!fR.test(N)&&!Yj.test(F[2].trim()))return hR(B,F[2].trim().toLowerCase())}}let C=u.match(Co)||wg(l);if(!(C&&!/^there\b/i.test(C[1].trim())||nR.test(l)))return null}let p=d.filter(C=>$n.has(C.predicate)),f=(C,F)=>F.trust-C.trust||Zt(C,F),h=C=>{let F=C.map(se),N=F.slice(0,_e),B=F.slice(_e),z=B.length?`
|
|
228
228
|
\u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
|
|
229
|
-
`)+z,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}};if(
|
|
230
|
-
`),replace:!0}:U(C).length>0||!!J(pe,C)?{text:/^what\b/i.test(
|
|
229
|
+
`)+z,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}};if(VU.test(l)){let C=lt(p.length?p:d,i);return C.length?h(C):null}let m=u.match(bg);if(m){let C=m[1].trim(),F=Zs.test(C)?r||null:C,N=m[2].trim().toLowerCase(),B=m[3].trim();if(F&&!yg.has(N)){let z=ig(d),{findIsaChain:U}=await Promise.resolve().then(()=>(Ft(),mn)),G=Te=>{let ge=String(Te||"").trim().toLowerCase(),Ie=[];for(let Ee of d){let xe=dg(Ee.predicate);if(!xe)continue;if(xe===ge){Ie.push({fact:Ee,aliasFacts:[]});continue}let et=ag(U,xe,new Set([ge]),z,{maxHops:2});if(!et)continue;let ce=et.map(le=>d.find(de=>de.predicate===No&&de.subject===le.subject&&de.object===le.object));ce.every(Boolean)&&Ie.push({fact:Ee,aliasFacts:ce})}return Ie},{loadMemory:J,findRuleByName:ae,resolveRelationChase:pe}=await Promise.resolve().then(()=>(Ue(),Js)),{findActionPath:re}=await Promise.resolve().then(()=>(Os(),wc)),ee=await J(e),te=await pe(ee,N,F,B,{relationFactsFor:G,renderFactLine:se,factPhrase:eo,factTermVariants:Q,byTrust:f,rows:d,HAS_PROPERTY_PREDICATE:ad,findActionPath:re});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:G(N).length>0||!!ae(ee,N)?{text:`I know the '${N}' relation, but I can't confirm ${F} is the ${N} of ${B} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${N}' yet.`,replace:!0}}}let b=dd(u).match(AR)||IR(u,C=>{let F=Q(c,C);return d.some(N=>F.has(N.subject)||F.has(N.object))});if(b){let C=b[1].trim().toLowerCase(),F=b[2].trim(),N=Zs.test(F)?r||null:F;if(N&&!yg.has(C)){let B=ig(d),{findIsaChain:z}=await Promise.resolve().then(()=>(Ft(),mn)),U=Te=>{let ge=String(Te||"").trim().toLowerCase(),Ie=[];for(let Ee of d){let xe=dg(Ee.predicate);if(!xe)continue;if(xe===ge){Ie.push({fact:Ee,aliasFacts:[]});continue}let et=ag(z,xe,new Set([ge]),B,{maxHops:2});if(!et)continue;let ce=et.map(le=>d.find(de=>de.predicate===No&&de.subject===le.subject&&de.object===le.object));ce.every(Boolean)&&Ie.push({fact:Ee,aliasFacts:ce})}return Ie},{loadMemory:G,findRuleByName:J,resolveRelationChaseReverse:ae}=await Promise.resolve().then(()=>(Ue(),Js)),pe=await G(e),{findReachableSet:re}=await Promise.resolve().then(()=>(Os(),wc)),X=await ae(pe,C,N,{relationFactsFor:U,renderFactLine:se,factPhrase:eo,factTermVariants:Q,byTrust:f,rows:d,HAS_PROPERTY_PREDICATE:ad,findReachableSet:re});return X.length?{text:X.map(ge=>`${ge.subject} \u2014 ${ge.citation.join("; ")}`).join(`
|
|
230
|
+
`),replace:!0}:U(C).length>0||!!J(pe,C)?{text:/^what\b/i.test(dd(u))?`I don't know what the ${C} of ${N} is from what you've told me.`:`I don't know anyone who is the ${C} of ${N} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}{let C=u.match(XU);if(C){let F=Q(c,C[1]),N=lt(d.filter(B=>F.has(B.subject)||F.has(B.object)),i);if(N.length){let B=N.map(se),z=B.slice(0,_e),U=B.slice(_e),G=U.length?`
|
|
231
231
|
\u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:z.join(`
|
|
232
|
-
`)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}}let g=u.match(
|
|
233
|
-
`),replace:!0}}}return null}}let w=l.match(oR),y=l.match(Co)||$g(l)||w&&`is ${w[1].trim()} a ${w[2].trim()}`.match(Co);if(y){let C=Q(c,En(y[2])),F=r&&eo.test(y[1].trim())?r:y[1],N=new Set(Q(c,F));if([...N].some(q=>C.has(q))){let q=En(y[2]).trim();return{text:`yes \u2014 ${Tr(q)} ${q} is ${Tr(q)} ${q}, trivially: every kind is a kind of itself.`,replace:!0}}let B=await s2(o,F);if(B)for(let q of Q(c,B))N.add(q);let{findIsaChain:z,buildSubClassSuccessors:U,deriveDisjointViolations:G,SUBCLASS_PREDICATE:J,TYPE_PREDICATE:ae,DISJOINT_PREDICATE:pe}=await Promise.resolve().then(()=>(Ft(),mn)),re=_r,ee=p.filter(q=>q.predicate===J&&re(q)),X=p.filter(q=>q.predicate===ae&&re(q)),te=ee.map(q=>[q.subject,q.object]),oe=X.map(q=>[q.subject,q.object]),Te=p.filter(q=>q.predicate===J),ge=p.filter(q=>q.predicate===ae),Ie=ge.map(q=>[q.subject,q.object]),Ee=Te.map(q=>[q.subject,q.object]),xe=U(te),et=U(Ee),ce=d.filter(q=>q.predicate===pe&&re(q)),le=ce.map(q=>[q.subject,q.object]),de=ce.length?G(Ie.concat(Ee),Ee,le,{budget:20,focus:new Set([...N,...C])}):[],ut=q=>{let ke=de.find(We=>We.subject===q&&C.has(We.object));if(!ke)return null;let ye=p.filter(We=>C.has(We.object)&&(We.subject===ke.viaClass||We.subject===ke.subject)).sort(f)[0],Re=ce.find(We=>We.subject===ke.viaClass&&We.object===ke.object||We.subject===ke.object&&We.object===ke.viaClass);return!ye||!Re?null:Jz(ye,Re)},Ct=p.filter(q=>N.has(q.subject)&&C.has(q.object)).sort(f)[0],Yt=d.filter(q=>q.predicate===nl&&N.has(q.subject)&&C.has(q.object)).sort(f)[0],ie=ce.find(q=>N.has(q.subject)&&C.has(q.object)||N.has(q.object)&&C.has(q.subject));if(Ct&&!Yt){let q=ut(Ct.subject);if(q)return q}let qe=AR(Ct,Yt||ie);if(qe)return qe;if(ce.length){let q=Re=>{let We=new Set(Re),Bt=new Set(Re);for(let Me=0;Me<8&&Bt.size;Me+=1){let $e=new Set;for(let[Ye,Po]of Ee)Bt.has(Ye)&&!We.has(Po)&&$e.add(Po);if(!$e.size)break;for(let Ye of $e)We.add(Ye);Bt=$e}return We},ke=q(C),ye=de.find(Re=>N.has(Re.subject)&&ke.has(Re.object)&&!q([Re.viaClass]).has(Re.object)&&!q([Re.object]).has(Re.viaClass));if(ye){let Re=p.filter($e=>N.has($e.subject)&&$e.object===ye.viaClass).sort(f)[0],We=ce.find($e=>$e.subject===ye.viaClass&&$e.object===ye.object||$e.subject===ye.object&&$e.object===ye.viaClass),Bt=!C.has(ye.object),Me=Bt?p.filter($e=>C.has($e.subject)&&$e.object===ye.object).sort(f)[0]:null;if(Re&&We&&(!Bt||Me)){let $e=En(y[2]).trim();return{text:`no \u2014 ${[Re,...Me?[Me]:[]].map(se).join("; ")}; and ${Lo(We)} \u2014 so ${F} can never be ${Tr($e)} ${$e}.`,replace:!0}}}}let $t=await nc(o,F);if($t){let q=new Map;for(let ye of ad(o,$t.id))for(let Re of Q(c,ye.label))!N.has(Re)&&!q.has(Re)&&q.set(Re,ye.label);let ke=p.filter(ye=>q.has(ye.subject)&&C.has(ye.object)).sort(f)[0];if(ke)return{text:`yes \u2014 the code graph says ${$t.label} inherits ${q.get(ke.subject)}, and ${se(ke)}`,replace:!0}}let Ze=Tg(d,a),St=[...N].filter(q=>!TR(Ze,q,C)),Or=q=>(q.predicate===J?ee:X).find(ke=>ke.subject===q.subject&&ke.object===q.object);for(let q of St){let ke=z(q,C,oe,xe,{maxHops:2});if(!ke)continue;let ye=ut(q);if(ye)return ye;let Re=ke.map(Or);if(Re.every(Boolean))return{text:`yes \u2014 ${od(Re)}`,replace:!0}}let A=q=>(q.predicate===J?Te:ge).find(ke=>ke.subject===q.subject&&ke.object===q.object);for(let q of St){let ke=z(q,C,Ie,et,{maxHops:2});if(!ke)continue;let ye=ut(q);if(ye)return ye;let Re=ke.map(A);if(Re.every(Boolean)&&Re.some(re))return{text:`yes \u2014 ${od(Re)}`,replace:!0}}let me=F.match(/^(.*\S)\s+not$/i),Ne=me&&[me[0],r&&eo.test(me[1].trim())?r:me[1]];if(Ne){let q=Q(c,Ne[1]),ke=C,ye=p.filter(Me=>q.has(Me.subject)&&ke.has(Me.object)).sort(f)[0];if(ye)return{text:`no \u2014 ${se(ye)}`,replace:!0};let Re=ce.find(Me=>q.has(Me.subject)&&ke.has(Me.object)||q.has(Me.object)&&ke.has(Me.subject));if(Re)return{text:`yes \u2014 ${se(Re)}`,replace:!0};let We=Ne[1].trim(),Bt=En(y[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${We} and ${Bt}. If no ${We} is a ${Bt}, teach me: "no ${We} is a ${Bt}".`,replace:!0,miss:!0}}if(ce.length){let q=G(oe.concat(te),te,le,{budget:10});for(let ke of N){let ye=q.find(Me=>Me.subject===ke&&C.has(Me.object));if(!ye)continue;let Re=X.concat(ee).find(Me=>Me.subject===ye.subject&&Me.object===ye.viaType),We=ce.find(Me=>Me.subject===ye.viaClass&&Me.object===ye.object||Me.subject===ye.object&&Me.object===ye.viaClass),Bt=[Re,We].filter(Boolean).map(se);return{text:`no \u2014 ${Bt.length?Bt.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:_s,ON_PROPERTY_PREDICATE:Ts,SOME_VALUES_FROM_PREDICATE:sc,deriveSomeValuesFromSubsumption:i_,ENTAILED_SCM_SVF_PROVENANCE:a_,SCM_SVF_RULE_CONFIDENCE:c_,entailedTrustFrom:Ig}=await Promise.resolve().then(()=>(Ft(),mn)),Og=d.filter(q=>q.predicate===Ts&&re(q)),Cg=d.filter(q=>q.predicate===sc&&re(q));if(Og.length&&Cg.length){let q=new Map(Cg.map($e=>[$e.subject,$e.object])),ke=Og.map($e=>({restriction:$e.subject,property:$e.object,target:q.get($e.subject)})).filter($e=>$e.target),ye=new Set([J,ae,pe,Ts,sc,"owl:intersectionOf"]),Re=d.filter($e=>re($e)&&!ye.has($e.predicate)),We=Re.map($e=>[$e.subject,$e.predicate,$e.object]),Bt=_s(We,oe,te,ke,{budget:10});for(let $e of N){let Ye=Bt.find(Kn=>Kn.subject===$e&&C.has(Kn.object));if(!Ye)continue;let Po=Re.find(Kn=>Kn.subject===Ye.subject&&Kn.predicate===Ye.viaProperty&&Kn.object===Ye.viaValue),Mo=X.find(Kn=>Kn.subject===Ye.viaValue&&Kn.object===Ye.viaType),Ii=[Po,Mo].filter(Boolean).map(se);return{text:`yes \u2014 ${Ii.length?Ii.join("; "):`${Ye.subject} ${Ye.viaProperty} ${Ye.viaValue}, and ${Ye.viaValue} is a ${Ye.viaType}.`}`,replace:!0}}let Me=ke.length>1?i_(ke,te,{budget:10}):[];if(Me.length){let $e=U(te.concat(Me.map(Oe=>[Oe.subject,Oe.object]))),Ye=new Map(ke.map(Oe=>[Oe.restriction,Oe])),Po=new Map;for(let Oe of d)Po.set(`${Oe.subject}\0${Oe.predicate}\0${Oe.object}`,Oe.trust);let Mo=(Oe,ss,un)=>Po.get(`${Oe}\0${ss}\0${un}`),Ii=new Map;for(let Oe of Me){let ss=Ye.get(Oe.subject),un=Ye.get(Oe.object),Sn=[ss&&Mo(Oe.subject,Ts,ss.property),Mo(Oe.subject,sc,Oe.viaY1),un&&Mo(Oe.object,Ts,un.property),Mo(Oe.object,sc,Oe.viaY2),Mo(Oe.viaY1,J,Oe.viaY2)].filter(d_=>typeof d_=="number"),oc=Ig(Sn,c_);oc!==null&&Ii.set(`${Oe.subject}\0${Oe.object}`,oc)}let Kn=Oe=>{if(Oe.predicate!==J)return X.find(Sn=>Sn.subject===Oe.subject&&Sn.object===Oe.object);let ss=ee.find(Sn=>Sn.subject===Oe.subject&&Sn.object===Oe.object);if(ss)return ss;let un=Me.find(Sn=>Sn.subject===Oe.subject&&Sn.object===Oe.object);return un?{subject:un.subject,predicate:J,object:un.object,provenance:a_,trust:Ii.get(`${un.subject}\0${un.object}`)}:void 0};for(let Oe of St){let ss=z(Oe,C,oe,$e,{maxHops:3});if(!ss)continue;let un=ss.map(Kn);if(un.every(Boolean)){let Sn=Ig(un.map(oc=>oc.trust),1);return{text:`yes \u2014 ${od(un)}`,replace:!0,...Sn!==null?{trust:Sn}:{}}}}}}let l_=Q(c,F),bd=p.filter(q=>l_.has(q.subject)).sort(f),An=F.trim(),so=En(y[2]).trim(),u_=St.some(q=>z(q,C,oe,xe,{maxHops:iU})),wd=await GU(e,a,d,An,N,C,so);if(wd?.text)return wd;let yd=!!wd?.budgetExhausted;if(bd.length){let q=bd.slice(0,3).map(se).join("; "),{ON_PROPERTY_PREDICATE:ke,SOME_VALUES_FROM_PREDICATE:ye}=await Promise.resolve().then(()=>(Ft(),mn)),Re=new Set,We=new Set;for(let Ye of d)Ye.predicate===ke?Re.add(Ye.subject):Ye.predicate===ye&&We.add(Ye.subject);let Bt=new Set([...Re].filter(Ye=>We.has(Ye))),$e=bd.some(Ye=>Bt.has(Ye.object))?`The facts to settle it are here, but reaching it means composing a restriction /syllogise doesn't follow. Run "/classify ${An}", then ask me again.`:u_?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${An}", then ask me again.`:`If it's true, teach me: "${An} is a kind of ${so}". If it isn't, teach me: "no ${An} is a ${so}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${An} is a ${so}. I do know: ${q}. ${$e}`,replace:!0,miss:!0,...yd?{budgetExhausted:!0}:{}}}let Ng=p.filter(q=>N.has(q.object)&&C.has(q.subject)).sort(f)[0];return Ng?{text:`I can't confirm that \u2014 what I know runs the other way: ${se(Ng)}. A kind doesn't reverse. If it's true, teach me: "every ${An} is a ${so}". If it isn't, teach me: "no ${An} is a ${so}".`,replace:!0,miss:!0,...yd?{budgetExhausted:!0}:{}}:!$t&&!B&&!jz(An)&&!d.some(q=>N.has(q.subject)||N.has(q.object))?{text:`I can't confirm that \u2014 I don't know "${An}" at all yet. If it's true, teach me: "${An} is a kind of ${so}". If it isn't, teach me: "no ${An} is a ${so}".`,replace:!0,miss:!0,...yd?{budgetExhausted:!0}:{}}:null}let S=l.match(qU);if(S){let[,C,F,N]=S,{SUBCLASS_PREDICATE:B,ON_PROPERTY_PREDICATE:z,buildCardinalityRestrictions:U,proveCardinalityAtLeast:G,CARDINALITY_RULE_CONFIDENCE:J,entailedTrustFrom:ae}=await Promise.resolve().then(()=>(Ft(),mn)),pe=_r,re=p.filter(te=>te.predicate===B&&pe(te)).map(te=>[te.subject,te.object]),ee=d.filter(te=>(te.predicate===z||fR.has(te.predicate))&&pe(te)),X=U(ee);if(X.length){let te=Q(c,C.trim()),oe=Q(c,N.trim()),Te=Number(F),ge=sR(te,oe,(Ie,Ee)=>G(re,X,Ie,Ee,Te,{}));if(ge){let Ie=d.find(de=>de.predicate===B&&de.subject===ge.viaClass&&de.object===ge.viaRestriction),Ee=Ie?.provenance?` (source: ${wg(Ie.provenance)})`:"",xe=ge.kind==="exactly"?"exactly":"at least",et=(de,ut)=>`${de}${ut===1?"":"s"}`,ce=[Ie?.trust,...ee.filter(de=>de.subject===ge.viaRestriction).map(de=>de.trust),...ge.viaClass!==ge.subject?[p.find(de=>de.predicate===B&&de.subject===ge.subject&&de.object===ge.viaClass)?.trust]:[]].filter(de=>typeof de=="number"),le=ae(ce,J);return{text:`yes \u2014 every ${ge.viaClass} has ${xe} ${ge.n} ${et(ge.object,ge.n)}${Ee}, so at least ${Te} follows.`,replace:!0,...le!==null?{trust:le}:{}}}}}let T=l.match(YU);if(T){let[,C,F]=T,{SUBCLASS_PREDICATE:N,ON_PROPERTY_PREDICATE:B,buildCardinalityRestrictions:z,proveMaxCardinalityZeroDenial:U,CAX_MAXC0_RULE_CONFIDENCE:G,entailedTrustFrom:J}=await Promise.resolve().then(()=>(Ft(),mn)),ae=_r,pe=p.filter(X=>X.predicate===N&&ae(X)).map(X=>[X.subject,X.object]),re=d.filter(X=>(X.predicate===B||fR.has(X.predicate))&&ae(X)),ee=z(re);if(ee.length){let X=Q(c,C.trim()),te=Q(c,F.trim()),oe=sR(X,te,(Te,ge)=>U(pe,ee,Te,ge,{}));if(oe){let Te=d.find(xe=>xe.predicate===N&&xe.subject===oe.viaClass&&xe.object===oe.viaRestriction),ge=Te?.provenance?` (source: ${wg(Te.provenance)})`:"",Ie=[Te?.trust,...re.filter(xe=>xe.subject===oe.viaRestriction).map(xe=>xe.trust),...oe.viaClass!==oe.subject?[p.find(xe=>xe.predicate===N&&xe.subject===oe.subject&&xe.object===oe.viaClass)?.trust]:[]].filter(xe=>typeof xe=="number"),Ee=J(Ie,G);return{text:`no \u2014 every ${oe.viaClass} has at most 0 ${oe.object}${ge}.`,replace:!0,...Ee!==null?{trust:Ee}:{}}}}}let v=l.match(XU);if(v){let C=Q(c,v[1]),F=d.filter(N=>N.predicate===ag&&C.has(N.subject)).sort(f);return F.length?h(F):null}let E=u.match(JU);if(E){let[,C,F]=E,N=Q(c,C.trim()),B=Q(c,F.replace(/^an?\s+/i,"").trim()),z=d.filter(U=>U.predicate===ag&&B.has(U.subject)&&N.has(U.object)).sort(f)[0];return z?{text:`yes \u2014 ${se(z)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} owns/maintains ${F.trim()}.`,replace:!0}}let I=u.match(QU);if(I){let[,C,F]=I,N=Q(c,C.replace(/^an?\s+/i,"").trim()),B=Q(c,F.trim()),z=d.filter(U=>U.predicate===ag&&N.has(U.subject)&&B.has(U.object)).sort(f)[0];return z?{text:`yes \u2014 ${se(z)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} is owned by ${F.trim()}.`,replace:!0}}let k=u.match(ZU);if(k){let[,C,F]=k,N=Q(c,C.trim()),B=Q(c,`${F.trim()} method`),z=d.filter(U=>U.predicate===wi&&N.has(U.subject)&&B.has(U.object)).sort(f)[0];return z?{text:`yes \u2014 ${se(z)}`,replace:!0}:null}let R=u.match(e2);if(R){let C=Q(c,R[1].trim()),F=d.filter(N=>N.predicate===wi&&C.has(N.subject)&&/ method$/.test(N.object)).sort(f);return F.length?h(F):null}let $=u.match(pR);if($){let C=$[1].trim(),F=mR.test(C)||hR.test(C)?null:eo.test(C)?r||null:C,N=$[2].trim().toLowerCase();if(F){let B=Q(c,F),z=new Map,U=null;if(o){let X=await nc(o,F);if(U=X,X)for(let te of ad(o,X.id))for(let oe of Q(c,te.label))!B.has(oe)&&!z.has(oe)&&z.set(oe,te.label),B.add(oe)}let G=X=>X.predicate===cd&&c(X.object)===N||X.predicate===`tmct:${N}`&&X.object==="true",J=c(F).split(/\s+/).filter(X=>X.length>=4&&!IR.has(X)),ae=X=>J.some(te=>new Set(String(X.subject||"").split(/\s+/)).has(te)),pe=X=>B.has(X.subject)||J.length&&ae(X),re=d.filter(X=>pe(X)&&G(X)).sort(f)[0];if(re){let X=z.get(re.subject);return{text:X?`yes \u2014 the code graph says ${U.label} inherits ${X}, and ${se(re)}`:`yes \u2014 ${se(re)}`,replace:!0}}let ee=LR(d,B,N,c);if(ee)return{text:`yes \u2014 ${ee.map(se).join("; ")}`,replace:!0};{let{findIsaChain:X,SUBCLASS_PREDICATE:te,TYPE_PREDICATE:oe}=await Promise.resolve().then(()=>(Ft(),mn)),Te=_r,ge=d.filter(le=>le.predicate===te&&Te(le)),Ie=d.filter(le=>le.predicate===oe&&Te(le)),Ee=ge.map(le=>[le.subject,le.object]),xe=Ie.map(le=>[le.subject,le.object]),et=le=>(le.predicate===te?ge:Ie).find(de=>de.subject===le.subject&&de.object===le.object),ce=Q(c,N);for(let le of B){let de=X(le,ce,xe,Ee,{maxHops:2});if(!de)continue;let ut=de.map(et);if(ut.every(Boolean))return{text:`yes \u2014 ${od(ut)}`,replace:!0}}}if(d.some(pe)&&!n?.parsed)return/^there\b/i.test(F)||t2.test(N)?null:{text:`I don't have a fact saying ${Zz(F)} is ${N}.`,replace:!0};if(!n?.parsed&&!Jj.test(N))return gR(F,N)}}let _=ud(l).match(Mz);if(_&&!dg.test(l)){let[,C,F,N]=_,B=F.toLowerCase();if(!ug.test(B)&&!fg.test(B)){let z=C.trim(),U=Bz(await ld(B),N),G=U.object.replace(/^an?\s+/i,"").trim();if(z&&G){let J=U.predicate,ae=Q(c,z),pe=Q(c,G),re=[J,ri(J)],ee=d.filter(te=>re.includes(te.predicate)&&ae.has(te.subject)&&pe.has(te.object)).sort(f)[0];if(ee)return{text:`${j$(ee.predicate)?"no":"yes"} \u2014 ${se(ee)}`,replace:!0,generalVerbQuery:!0};let X=d.filter(te=>re.includes(te.predicate)&&ae.has(te.subject));if(X.length){let te=X.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${to({subject:z,predicate:J,object:G})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let O=l.match(Fz);if(O&&!dg.test(l)){let[,C,F]=O,[N,B]=F.toLowerCase().split(/\s+/);if(!ug.test(N)&&!fg.test(N)){let z=C.trim();if(z){let U=await ld(N);B&&/^mgx:[a-z]+$/.test(U)&&(U=`${U}-${B}`);let G=Q(c,z),J=[U,ri(U)],ae=lt(d.filter(pe=>J.includes(pe.predicate)&&G.has(pe.subject)),i);if(ae.length)return{...h(ae),generalVerbQuery:!0}}}}let x=l.match(/^(?:what|who)\s+([a-z]+)\s+(on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside)\s+(.+?)[?.!\s]*$/i);if(x&&!dg.test(l)){let[,C,F,N]=x,B=C.toLowerCase();if(!ug.test(B)&&!fg.test(B)&&!Pz.test(B)){let z=await ld(B);/^mgx:[a-z]+$/.test(z)&&(z=`${z}-${F.toLowerCase()}`);let U=Q(c,N.replace(/^(?:an?|the)\s+/i,"").trim()),G=lt(d.filter(J=>J.predicate===z&&U.has(J.object)),i);if(G.length)return{...h(G),generalVerbQuery:!0}}}let j=l.match(KU);if(j){let C=Q(c,j[1]),F=lt(d.filter(J=>C.has(J.subject)||C.has(J.object)),i);if(!F.length)return null;let N=C.has(F[0].subject)?F[0].subject:F[0].object,B=F.map(J=>` ${se(J)}`),z=B.slice(0,_e),U=B.slice(_e),G=U.length?`
|
|
232
|
+
`)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}}let g=u.match(Hz);if(g){let C=xg(g[1].trim().toLowerCase()),F=g[2].trim(),N=Zs.test(F)?r||null:F;if(N){let{loadMemory:B,findRuleByName:z,RULE_KIND_PROP:U,RULE_KIND_RECURSIVE:G}=await Promise.resolve().then(()=>(Ue(),Js)),J=await B(e),ae=z(J,C),pe=ae?.attributes?.find(re=>re.prop===U)?.value;if(ae&&pe===G){let re=ae.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,ee=ae.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,X=c(N);if(re&&ee&&X){let te=ig(d),{findIsaChain:oe}=await Promise.resolve().then(()=>(Ft(),mn)),Te=et=>{let ce=String(et||"").trim().toLowerCase(),le=[];for(let de of d){let ut=dg(de.predicate);if(!ut)continue;if(ut===ce){le.push({fact:de,aliasFacts:[]});continue}let Ct=ag(oe,ut,new Set([ce]),te,{maxHops:2});if(!Ct)continue;let Yt=Ct.map(ie=>d.find(qe=>qe.predicate===No&&qe.subject===ie.subject&&qe.object===ie.object));Yt.every(Boolean)&&le.push({fact:de,aliasFacts:Yt})}return le},{findReachableSet:ge}=await Promise.resolve().then(()=>(Os(),wc)),xe=ge({entity:X,hop:0},et=>{let ce=et.hop===0?re:ee;return Te(ce).filter(le=>le.fact.subject===et.entity).map(le=>({action:le,nextState:{entity:le.fact.object,hop:et.hop+1}}))},{maxDepth:20,stateKey:et=>et.entity});if(xe.length)return{text:xe.map(({node:ce,path:le})=>{let de=new Set,ut=[];for(let Ct of le.actions){ut.push(se(Ct.fact));for(let Yt of Ct.aliasFacts){let ie=Yt.id||`${Yt.subject}|${Yt.predicate}|${Yt.object}`;de.has(ie)||(de.add(ie),ut.push(Lo(Yt)))}}return`${ce.entity} \u2014 ${ut.join("; ")}`}).join(`
|
|
233
|
+
`),replace:!0}}}return null}}let w=l.match(nR),y=l.match(Co)||wg(l)||w&&`is ${w[1].trim()} a ${w[2].trim()}`.match(Co);if(y){let C=Q(c,En(y[2])),F=r&&Zs.test(y[1].trim())?r:y[1],N=new Set(Q(c,F));if([...N].some(q=>C.has(q))){let q=En(y[2]).trim();return{text:`yes \u2014 ${_r(q)} ${q} is ${_r(q)} ${q}, trivially: every kind is a kind of itself.`,replace:!0}}let B=await KU(o,F);if(B)for(let q of Q(c,B))N.add(q);let{findIsaChain:z,buildSubClassSuccessors:U,deriveDisjointViolations:G,SUBCLASS_PREDICATE:J,TYPE_PREDICATE:ae,DISJOINT_PREDICATE:pe}=await Promise.resolve().then(()=>(Ft(),mn)),re=Rr,ee=p.filter(q=>q.predicate===J&&re(q)),X=p.filter(q=>q.predicate===ae&&re(q)),te=ee.map(q=>[q.subject,q.object]),oe=X.map(q=>[q.subject,q.object]),Te=p.filter(q=>q.predicate===J),ge=p.filter(q=>q.predicate===ae),Ie=ge.map(q=>[q.subject,q.object]),Ee=Te.map(q=>[q.subject,q.object]),xe=U(te),et=U(Ee),ce=d.filter(q=>q.predicate===pe&&re(q)),le=ce.map(q=>[q.subject,q.object]),de=ce.length?G(Ie.concat(Ee),Ee,le,{budget:20,focus:new Set([...N,...C])}):[],ut=q=>{let ke=de.find(We=>We.subject===q&&C.has(We.object));if(!ke)return null;let ye=p.filter(We=>C.has(We.object)&&(We.subject===ke.viaClass||We.subject===ke.subject)).sort(f)[0],Re=ce.find(We=>We.subject===ke.viaClass&&We.object===ke.object||We.subject===ke.object&&We.object===ke.viaClass);return!ye||!Re?null:Bz(ye,Re)},Ct=p.filter(q=>N.has(q.subject)&&C.has(q.object)).sort(f)[0],Yt=d.filter(q=>q.predicate===nl&&N.has(q.subject)&&C.has(q.object)).sort(f)[0],ie=ce.find(q=>N.has(q.subject)&&C.has(q.object)||N.has(q.object)&&C.has(q.subject));if(Ct&&!Yt){let q=ut(Ct.subject);if(q)return q}let qe=_R(Ct,Yt||ie);if(qe)return qe;if(ce.length){let q=Re=>{let We=new Set(Re),Bt=new Set(Re);for(let Me=0;Me<8&&Bt.size;Me+=1){let $e=new Set;for(let[Ye,Po]of Ee)Bt.has(Ye)&&!We.has(Po)&&$e.add(Po);if(!$e.size)break;for(let Ye of $e)We.add(Ye);Bt=$e}return We},ke=q(C),ye=de.find(Re=>N.has(Re.subject)&&ke.has(Re.object)&&!q([Re.viaClass]).has(Re.object)&&!q([Re.object]).has(Re.viaClass));if(ye){let Re=p.filter($e=>N.has($e.subject)&&$e.object===ye.viaClass).sort(f)[0],We=ce.find($e=>$e.subject===ye.viaClass&&$e.object===ye.object||$e.subject===ye.object&&$e.object===ye.viaClass),Bt=!C.has(ye.object),Me=Bt?p.filter($e=>C.has($e.subject)&&$e.object===ye.object).sort(f)[0]:null;if(Re&&We&&(!Bt||Me)){let $e=En(y[2]).trim();return{text:`no \u2014 ${[Re,...Me?[Me]:[]].map(se).join("; ")}; and ${Lo(We)} \u2014 so ${F} can never be ${_r($e)} ${$e}.`,replace:!0}}}}let $t=await nc(o,F);if($t){let q=new Map;for(let ye of id(o,$t.id))for(let Re of Q(c,ye.label))!N.has(Re)&&!q.has(Re)&&q.set(Re,ye.label);let ke=p.filter(ye=>q.has(ye.subject)&&C.has(ye.object)).sort(f)[0];if(ke)return{text:`yes \u2014 the code graph says ${$t.label} inherits ${q.get(ke.subject)}, and ${se(ke)}`,replace:!0}}let Ze=Rg(d,a),St=[...N].filter(q=>!RR(Ze,q,C)),Ir=q=>(q.predicate===J?ee:X).find(ke=>ke.subject===q.subject&&ke.object===q.object);for(let q of St){let ke=z(q,C,oe,xe,{maxHops:2});if(!ke)continue;let ye=ut(q);if(ye)return ye;let Re=ke.map(Ir);if(Re.every(Boolean))return{text:`yes \u2014 ${sd(Re)}`,replace:!0}}let A=q=>(q.predicate===J?Te:ge).find(ke=>ke.subject===q.subject&&ke.object===q.object);for(let q of St){let ke=z(q,C,Ie,et,{maxHops:2});if(!ke)continue;let ye=ut(q);if(ye)return ye;let Re=ke.map(A);if(Re.every(Boolean)&&Re.some(re))return{text:`yes \u2014 ${sd(Re)}`,replace:!0}}let me=F.match(/^(.*\S)\s+not$/i),Ce=me&&[me[0],r&&Zs.test(me[1].trim())?r:me[1]];if(Ce){let q=Q(c,Ce[1]),ke=C,ye=p.filter(Me=>q.has(Me.subject)&&ke.has(Me.object)).sort(f)[0];if(ye)return{text:`no \u2014 ${se(ye)}`,replace:!0};let Re=ce.find(Me=>q.has(Me.subject)&&ke.has(Me.object)||q.has(Me.object)&&ke.has(Me.subject));if(Re)return{text:`yes \u2014 ${se(Re)}`,replace:!0};let We=Ce[1].trim(),Bt=En(y[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${We} and ${Bt}. If no ${We} is a ${Bt}, teach me: "no ${We} is a ${Bt}".`,replace:!0,miss:!0}}if(ce.length){let q=G(oe.concat(te),te,le,{budget:10});for(let ke of N){let ye=q.find(Me=>Me.subject===ke&&C.has(Me.object));if(!ye)continue;let Re=X.concat(ee).find(Me=>Me.subject===ye.subject&&Me.object===ye.viaType),We=ce.find(Me=>Me.subject===ye.viaClass&&Me.object===ye.object||Me.subject===ye.object&&Me.object===ye.viaClass),Bt=[Re,We].filter(Boolean).map(se);return{text:`no \u2014 ${Bt.length?Bt.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:js,ON_PROPERTY_PREDICATE:Rs,SOME_VALUES_FROM_PREDICATE:sc,deriveSomeValuesFromSubsumption:o_,ENTAILED_SCM_SVF_PROVENANCE:r_,SCM_SVF_RULE_CONFIDENCE:i_,entailedTrustFrom:Tg}=await Promise.resolve().then(()=>(Ft(),mn)),Ag=d.filter(q=>q.predicate===Rs&&re(q)),Ig=d.filter(q=>q.predicate===sc&&re(q));if(Ag.length&&Ig.length){let q=new Map(Ig.map($e=>[$e.subject,$e.object])),ke=Ag.map($e=>({restriction:$e.subject,property:$e.object,target:q.get($e.subject)})).filter($e=>$e.target),ye=new Set([J,ae,pe,Rs,sc,"owl:intersectionOf"]),Re=d.filter($e=>re($e)&&!ye.has($e.predicate)),We=Re.map($e=>[$e.subject,$e.predicate,$e.object]),Bt=js(We,oe,te,ke,{budget:10});for(let $e of N){let Ye=Bt.find(Wn=>Wn.subject===$e&&C.has(Wn.object));if(!Ye)continue;let Po=Re.find(Wn=>Wn.subject===Ye.subject&&Wn.predicate===Ye.viaProperty&&Wn.object===Ye.viaValue),Mo=X.find(Wn=>Wn.subject===Ye.viaValue&&Wn.object===Ye.viaType),Ti=[Po,Mo].filter(Boolean).map(se);return{text:`yes \u2014 ${Ti.length?Ti.join("; "):`${Ye.subject} ${Ye.viaProperty} ${Ye.viaValue}, and ${Ye.viaValue} is a ${Ye.viaType}.`}`,replace:!0}}let Me=ke.length>1?o_(ke,te,{budget:10}):[];if(Me.length){let $e=U(te.concat(Me.map(Oe=>[Oe.subject,Oe.object]))),Ye=new Map(ke.map(Oe=>[Oe.restriction,Oe])),Po=new Map;for(let Oe of d)Po.set(`${Oe.subject}\0${Oe.predicate}\0${Oe.object}`,Oe.trust);let Mo=(Oe,ns,un)=>Po.get(`${Oe}\0${ns}\0${un}`),Ti=new Map;for(let Oe of Me){let ns=Ye.get(Oe.subject),un=Ye.get(Oe.object),Sn=[ns&&Mo(Oe.subject,Rs,ns.property),Mo(Oe.subject,sc,Oe.viaY1),un&&Mo(Oe.object,Rs,un.property),Mo(Oe.object,sc,Oe.viaY2),Mo(Oe.viaY1,J,Oe.viaY2)].filter(l_=>typeof l_=="number"),oc=Tg(Sn,i_);oc!==null&&Ti.set(`${Oe.subject}\0${Oe.object}`,oc)}let Wn=Oe=>{if(Oe.predicate!==J)return X.find(Sn=>Sn.subject===Oe.subject&&Sn.object===Oe.object);let ns=ee.find(Sn=>Sn.subject===Oe.subject&&Sn.object===Oe.object);if(ns)return ns;let un=Me.find(Sn=>Sn.subject===Oe.subject&&Sn.object===Oe.object);return un?{subject:un.subject,predicate:J,object:un.object,provenance:r_,trust:Ti.get(`${un.subject}\0${un.object}`)}:void 0};for(let Oe of St){let ns=z(Oe,C,oe,$e,{maxHops:3});if(!ns)continue;let un=ns.map(Wn);if(un.every(Boolean)){let Sn=Tg(un.map(oc=>oc.trust),1);return{text:`yes \u2014 ${sd(un)}`,replace:!0,...Sn!==null?{trust:Sn}:{}}}}}}let a_=Q(c,F),gd=p.filter(q=>a_.has(q.subject)).sort(f),An=F.trim(),no=En(y[2]).trim(),c_=St.some(q=>z(q,C,oe,xe,{maxHops:Yz})),bd=await CU(e,a,d,An,N,C,no);if(bd?.text)return bd;let wd=!!bd?.budgetExhausted;if(gd.length){let q=gd.slice(0,3).map(se).join("; "),{ON_PROPERTY_PREDICATE:ke,SOME_VALUES_FROM_PREDICATE:ye}=await Promise.resolve().then(()=>(Ft(),mn)),Re=new Set,We=new Set;for(let Ye of d)Ye.predicate===ke?Re.add(Ye.subject):Ye.predicate===ye&&We.add(Ye.subject);let Bt=new Set([...Re].filter(Ye=>We.has(Ye))),$e=gd.some(Ye=>Bt.has(Ye.object))?`The facts to settle it are here, but reaching it means composing a restriction /syllogise doesn't follow. Run "/classify ${An}", then ask me again.`:c_?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${An}", then ask me again.`:`If it's true, teach me: "${An} is a kind of ${no}". If it isn't, teach me: "no ${An} is a ${no}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${An} is a ${no}. I do know: ${q}. ${$e}`,replace:!0,miss:!0,...wd?{budgetExhausted:!0}:{}}}let Og=p.filter(q=>N.has(q.object)&&C.has(q.subject)).sort(f)[0];return Og?{text:`I can't confirm that \u2014 what I know runs the other way: ${se(Og)}. A kind doesn't reverse. If it's true, teach me: "every ${An} is a ${no}". If it isn't, teach me: "no ${An} is a ${no}".`,replace:!0,miss:!0,...wd?{budgetExhausted:!0}:{}}:!$t&&!B&&!mz(An)&&!d.some(q=>N.has(q.subject)||N.has(q.object))?{text:`I can't confirm that \u2014 I don't know "${An}" at all yet. If it's true, teach me: "${An} is a kind of ${no}". If it isn't, teach me: "no ${An} is a ${no}".`,replace:!0,miss:!0,...wd?{budgetExhausted:!0}:{}}:null}let S=l.match(MU);if(S){let[,C,F,N]=S,{SUBCLASS_PREDICATE:B,ON_PROPERTY_PREDICATE:z,buildCardinalityRestrictions:U,proveCardinalityAtLeast:G,CARDINALITY_RULE_CONFIDENCE:J,entailedTrustFrom:ae}=await Promise.resolve().then(()=>(Ft(),mn)),pe=Rr,re=p.filter(te=>te.predicate===B&&pe(te)).map(te=>[te.subject,te.object]),ee=d.filter(te=>(te.predicate===z||uR.has(te.predicate))&&pe(te)),X=U(ee);if(X.length){let te=Q(c,C.trim()),oe=Q(c,N.trim()),Te=Number(F),ge=tR(te,oe,(Ie,Ee)=>G(re,X,Ie,Ee,Te,{}));if(ge){let Ie=d.find(de=>de.predicate===B&&de.subject===ge.viaClass&&de.object===ge.viaRestriction),Ee=Ie?.provenance?` (source: ${gg(Ie.provenance)})`:"",xe=ge.kind==="exactly"?"exactly":"at least",et=(de,ut)=>`${de}${ut===1?"":"s"}`,ce=[Ie?.trust,...ee.filter(de=>de.subject===ge.viaRestriction).map(de=>de.trust),...ge.viaClass!==ge.subject?[p.find(de=>de.predicate===B&&de.subject===ge.subject&&de.object===ge.viaClass)?.trust]:[]].filter(de=>typeof de=="number"),le=ae(ce,J);return{text:`yes \u2014 every ${ge.viaClass} has ${xe} ${ge.n} ${et(ge.object,ge.n)}${Ee}, so at least ${Te} follows.`,replace:!0,...le!==null?{trust:le}:{}}}}}let T=l.match(FU);if(T){let[,C,F]=T,{SUBCLASS_PREDICATE:N,ON_PROPERTY_PREDICATE:B,buildCardinalityRestrictions:z,proveMaxCardinalityZeroDenial:U,CAX_MAXC0_RULE_CONFIDENCE:G,entailedTrustFrom:J}=await Promise.resolve().then(()=>(Ft(),mn)),ae=Rr,pe=p.filter(X=>X.predicate===N&&ae(X)).map(X=>[X.subject,X.object]),re=d.filter(X=>(X.predicate===B||uR.has(X.predicate))&&ae(X)),ee=z(re);if(ee.length){let X=Q(c,C.trim()),te=Q(c,F.trim()),oe=tR(X,te,(Te,ge)=>U(pe,ee,Te,ge,{}));if(oe){let Te=d.find(xe=>xe.predicate===N&&xe.subject===oe.viaClass&&xe.object===oe.viaRestriction),ge=Te?.provenance?` (source: ${gg(Te.provenance)})`:"",Ie=[Te?.trust,...re.filter(xe=>xe.subject===oe.viaRestriction).map(xe=>xe.trust),...oe.viaClass!==oe.subject?[p.find(xe=>xe.predicate===N&&xe.subject===oe.subject&&xe.object===oe.viaClass)?.trust]:[]].filter(xe=>typeof xe=="number"),Ee=J(Ie,G);return{text:`no \u2014 every ${oe.viaClass} has at most 0 ${oe.object}${ge}.`,replace:!0,...Ee!==null?{trust:Ee}:{}}}}}let v=l.match(DU);if(v){let C=Q(c,v[1]),F=d.filter(N=>N.predicate===rg&&C.has(N.subject)).sort(f);return F.length?h(F):null}let E=u.match(BU);if(E){let[,C,F]=E,N=Q(c,C.trim()),B=Q(c,F.replace(/^an?\s+/i,"").trim()),z=d.filter(U=>U.predicate===rg&&B.has(U.subject)&&N.has(U.object)).sort(f)[0];return z?{text:`yes \u2014 ${se(z)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} owns/maintains ${F.trim()}.`,replace:!0}}let I=u.match(zU);if(I){let[,C,F]=I,N=Q(c,C.replace(/^an?\s+/i,"").trim()),B=Q(c,F.trim()),z=d.filter(U=>U.predicate===rg&&N.has(U.subject)&&B.has(U.object)).sort(f)[0];return z?{text:`yes \u2014 ${se(z)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} is owned by ${F.trim()}.`,replace:!0}}let k=u.match(UU);if(k){let[,C,F]=k,N=Q(c,C.trim()),B=Q(c,`${F.trim()} method`),z=d.filter(U=>U.predicate===gi&&N.has(U.subject)&&B.has(U.object)).sort(f)[0];return z?{text:`yes \u2014 ${se(z)}`,replace:!0}:null}let R=u.match(WU);if(R){let C=Q(c,R[1].trim()),F=d.filter(N=>N.predicate===gi&&C.has(N.subject)&&/ method$/.test(N.object)).sort(f);return F.length?h(F):null}let $=u.match(dR);if($){let C=$[1].trim(),F=pR.test(C)||fR.test(C)?null:Zs.test(C)?r||null:C,N=$[2].trim().toLowerCase();if(F){let B=Q(c,F),z=new Map,U=null;if(o){let X=await nc(o,F);if(U=X,X)for(let te of id(o,X.id))for(let oe of Q(c,te.label))!B.has(oe)&&!z.has(oe)&&z.set(oe,te.label),B.add(oe)}let G=X=>X.predicate===ad&&c(X.object)===N||X.predicate===`tmct:${N}`&&X.object==="true",J=c(F).split(/\s+/).filter(X=>X.length>=4&&!TR.has(X)),ae=X=>J.some(te=>new Set(String(X.subject||"").split(/\s+/)).has(te)),pe=X=>B.has(X.subject)||J.length&&ae(X),re=d.filter(X=>pe(X)&&G(X)).sort(f)[0];if(re){let X=z.get(re.subject);return{text:X?`yes \u2014 the code graph says ${U.label} inherits ${X}, and ${se(re)}`:`yes \u2014 ${se(re)}`,replace:!0}}let ee=CR(d,B,N,c);if(ee)return{text:`yes \u2014 ${ee.map(se).join("; ")}`,replace:!0};{let{findIsaChain:X,SUBCLASS_PREDICATE:te,TYPE_PREDICATE:oe}=await Promise.resolve().then(()=>(Ft(),mn)),Te=Rr,ge=d.filter(le=>le.predicate===te&&Te(le)),Ie=d.filter(le=>le.predicate===oe&&Te(le)),Ee=ge.map(le=>[le.subject,le.object]),xe=Ie.map(le=>[le.subject,le.object]),et=le=>(le.predicate===te?ge:Ie).find(de=>de.subject===le.subject&&de.object===le.object),ce=Q(c,N);for(let le of B){let de=X(le,ce,xe,Ee,{maxHops:2});if(!de)continue;let ut=de.map(et);if(ut.every(Boolean))return{text:`yes \u2014 ${sd(ut)}`,replace:!0}}}if(d.some(pe)&&!n?.parsed)return/^there\b/i.test(F)||GU.test(N)?null:{text:`I don't have a fact saying ${Uz(F)} is ${N}.`,replace:!0};if(!n?.parsed&&!Yj.test(N))return hR(F,N)}}let _=ld(l).match(jz);if(_&&!lg.test(l)){let[,C,F,N]=_,B=F.toLowerCase();if(!cg.test(B)&&!ug.test(B)){let z=C.trim(),U=Tz(await cd(B),N),G=U.object.replace(/^an?\s+/i,"").trim();if(z&&G){let J=U.predicate,ae=Q(c,z),pe=Q(c,G),re=[J,oi(J)],ee=d.filter(te=>re.includes(te.predicate)&&ae.has(te.subject)&&pe.has(te.object)).sort(f)[0];if(ee)return{text:`${x$(ee.predicate)?"no":"yes"} \u2014 ${se(ee)}`,replace:!0,generalVerbQuery:!0};let X=d.filter(te=>re.includes(te.predicate)&&ae.has(te.subject));if(X.length){let te=X.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${eo({subject:z,predicate:J,object:G})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let O=l.match(Rz);if(O&&!lg.test(l)){let[,C,F]=O,[N,B]=F.toLowerCase().split(/\s+/);if(!cg.test(N)&&!ug.test(N)){let z=C.trim();if(z){let U=await cd(N);B&&/^mgx:[a-z]+$/.test(U)&&(U=`${U}-${B}`);let G=Q(c,z),J=[U,oi(U)],ae=lt(d.filter(pe=>J.includes(pe.predicate)&&G.has(pe.subject)),i);if(ae.length)return{...h(ae),generalVerbQuery:!0}}}}let x=l.match(/^(?:what|who)\s+([a-z]+)\s+(on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside)\s+(.+?)[?.!\s]*$/i);if(x&&!lg.test(l)){let[,C,F,N]=x,B=C.toLowerCase();if(!cg.test(B)&&!ug.test(B)&&!kz.test(B)){let z=await cd(B);/^mgx:[a-z]+$/.test(z)&&(z=`${z}-${F.toLowerCase()}`);let U=Q(c,N.replace(/^(?:an?|the)\s+/i,"").trim()),G=lt(d.filter(J=>J.predicate===z&&U.has(J.object)),i);if(G.length)return{...h(G),generalVerbQuery:!0}}}let j=l.match(LU);if(j){let C=Q(c,j[1]),F=lt(d.filter(J=>C.has(J.subject)||C.has(J.object)),i);if(!F.length)return null;let N=C.has(F[0].subject)?F[0].subject:F[0].object,B=F.map(J=>` ${se(J)}`),z=B.slice(0,_e),U=B.slice(_e),G=U.length?`
|
|
234
234
|
\u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:`${F.length} remembered fact${F.length===1?"":"s"} about ${N}:
|
|
235
235
|
${z.join(`
|
|
236
|
-
`)}${G}`,replace:!0,...U.length?{pending:{items:U.map(J=>J.trim()),noun:"facts"}}:{}}}let M=n?.parsed?.shape==="meta"?n.parsed.object:null,D=!1,H=null,Y=l.match(HU);if(Y)H=Y[1]?Y[1].trim():null,M=Y[2],D=!0;else if(!M&&!n?.parsed){let C=l.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);C&&(M=C[1])}if(!M)return null;let Z=Q(c,M),P=lt(p.filter(C=>Z.has(C.subject)),i),K=lt(p.filter(C=>Z.has(C.object)),i),W=D?P.length?P:K:K.length?K:P;if(!W.length)return null;if(H&&W===P){let C=Q(c,H),F=B=>p.find(z=>z.subject===B.object&&C.has(z.object)),N=W.map(B=>({hit:B,bridge:F(B)})).find(({bridge:B})=>B);if(N)return{text:`${se(N.hit)} \u2014 ${se(N.bridge)}`,replace:!0}}return h(W)}function mg(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}async function UR(e){let{resolveReasoningConfig:t}=await Promise.resolve().then(()=>(qj(),Hj));try{let{loadTomlConfig:n,normalizeConfig:s}=await Promise.resolve().then(()=>(Sa(),th)),o=await n(e),r=await s(o,{configDir:e});return t(r)}catch{return t(null)}}function bR(e,t,n){for(let s of t){if(e.has(s.subject))return s.subject;if(e.has(s.object))return s.object}return n}var kz,Eg,jz,Vn,sd,Yj,wR,Mse,Rz,Fse,Dse,yR,$R,SR,_z,Xj,Bse,zse,Use,Wse,Gse,kg,Vse,Tz,Je,ag,cd,No,vR,ER,Az,_r,Kse,Hse,qse,Yse,Xse,Jse,Qse,Zse,eoe,toe,noe,soe,ooe,roe,ioe,aoe,coe,loe,Jj,Cz,pd,Nz,uoe,doe,xR,foe,poe,hoe,moe,Lz,goe,ug,dg,Pz,boe,Mz,Fz,fg,Dz,zz,woe,kR,jR,Uz,yoe,$oe,RR,Soe,voe,Eoe,Wz,xoe,Gz,Ai,koe,joe,Roe,_R,_oe,Toe,Vz,Aoe,Ioe,Ooe,Coe,Qj,eR,Rg,to,Kz,Yz,id,eU,IR,Noe,yg,OR,tU,nU,fd,sU,oU,Co,$n,rU,iU,aU,cU,Sg,oR,lU,_e,dU,fU,pU,rR,hU,bU,wU,yU,$U,SU,vU,EU,xU,kU,jU,RU,_U,TU,aR,PR,IU,OU,NU,LU,PU,MU,FU,uR,DU,zU,KU,HU,qU,YU,fR,XU,JU,QU,ZU,e2,pR,eo,t2,hR,mR,gR,n2,o2,r2,Loe,zR,a2,c2,Poe,gg,vg,l2,Moe,Foe,WR,Doe,Boe,zoe,Uoe,Woe,hd,Goe,Voe,Koe,Hoe,u2,qoe,Yoe,Ua=L(()=>{Qe();YE();sn();Fe();us();ll();mu();gu();Pi();bu();ox();tr();Ue();di();rl();$u();tm();as();Ln();Hr();Oc();Hh();qh();Gr();ts();af();br();fm();jx();Ax();Ox();pm();Cx();gm();Au();Vx();Kx();qx();Cu();Jc();la();du();Qx();_u();ji();Dk();Uk();Wk();Ao();yj();kz=(e,t)=>e<t?-1:e>t?1:0;Cc(void 0);Ic(hu);Eg=new Set(["it","this","that","here"]),jz=e=>Eg.has(String(e||"").trim().toLowerCase()),Vn={imports:"understand a dependency/import relationship",uses:"understand a dependency/usage relationship (imports and/or calls)",calls:"understand a call relationship",callsSymbol:"understand a call relationship",defines:"locate what a module/class defines",contains:"understand class membership (methods/attributes)",tests:"assess test coverage",inherits:"understand a class hierarchy/inheritance relationship",touches:"understand commit/change history",touchesSymbol:"understand commit/change history",cochange:"understand change-coupling between modules",reexports:"understand a module's public exports/API surface",serves:"understand which component provides or backs another",denotes:"understand which vocabulary term names a code entity"},sd=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Yj="look up a taught fact about a subject/verb/object";wR={find:{tool:"tmct_search",arg:"query",help:"lexical search across the graph"},search:{tool:"tmct_search",arg:"query",help:"alias of /find"},context:{tool:"tmct_context",arg:"symbol",help:"the sized edit bundle for a symbol (start here to change code)"},snippet:{tool:"tmct_snippet",arg:"symbol",help:"exact source of one function/class/method"},describe:{tool:"tmct_describe",arg:"symbol",help:"a symbol's definition, kind and relations"},signature:{tool:"tmct_signature",arg:"symbol",help:"a symbol's signature only"},members:{tool:"tmct_members",arg:"class",help:"the methods/attributes of a class"},subclasses:{tool:"tmct_subclasses",arg:"class",help:"the subclasses of a class"},impact:{tool:"tmct_impact",arg:"module",help:"what a change to this module or symbol reaches (impact closure)"},callers:{tool:"tmct_callers",arg:"symbol",help:"functions that call this symbol"},callees:{tool:"tmct_callees",arg:"symbol",help:"functions this symbol calls"},tests:{tool:"tmct_tests_for",arg:"symbol",help:"the tests covering this symbol"},untested:{tool:"tmct_untested",arg:null,help:"symbols with no covering test"},history:{tool:"tmct_history",arg:"symbol",help:"the commit history of this symbol"},exports:{tool:"tmct_exports",arg:"module",help:"a module's public exports"},arch:{tool:"tmct_architecture",arg:"package",help:"the architecture overview (optional package filter)",optional:!0}},Mse=new Set(["stats","memory","focus",...Object.keys(wR)]),Rz=new Set(["have","has","holds","hold"]),Fse=new RegExp(`\\b(?:${[...Object.keys(he),...Object.keys(io)].filter(e=>!Rz.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),Dse=new Set([...qE.map(e=>e.name),...Object.values(wR).map(e=>e.tool)]),yR=new Set(["hi","hello","hey","yo","hiya","howdy","sup","greetings","g'day","gday","hey there","hi there","hello there","good morning","good afternoon","good evening","morning","alright","you alright","alright mate","morning all","yeah nah","hey y'all","howdy there","hiya there","good day","good day to you","salutations","good to meet you","pleased to meet you","yo yo","ayy","wassup","sup fam","heya","hiya!","gm","ge"]),$R=new Set(["thanks","thank you","thankyou","thx","ty","ta","cheers","nice one","much appreciated","cool thanks","many thanks","much obliged","ta very much","cheers mate","cheers for that","tks","sweet thanks","nice","brilliant","ta for that","cheers, that's everything for now, thanks","that's everything for now, thanks","that's all for now, thanks"]),SR=new Set(["bye","goodbye","quit","exit","see ya","see you","cya","later","farewell","peace","peace out","im off","i'm off","gtg","gotta go","catch you later","farewell then"]),_z=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Xj=e=>e.replace(/(.)\1+/g,"$1");Bse=xg(yR),zse=xg($R),Use=xg(SR),Wse=new RegExp(`^(?:${[..._z].map(at).join("|")})\\s+(.+)$`,"i"),Gse=[...yR,...$R,...SR,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],kg="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",Vse=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${kg})\\s+than\\s+(.+)$`,"i"),Tz=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${kg})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Je="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",ag="mgx:ownedBy",cd="mgx:hasProperty",No="rdfs:subClassOf",vR="rdf:type",ER="rdfs:subPropertyOf",Az=new Set(["operator","teach","entailed"]),_r=e=>!!e.sourceTypes?.some(t=>Az.has(t));Kse=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Hse=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),qse=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Je})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Yse=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${kg})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Xse=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Je})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Jse=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+may\\s+not\\s+be\\s+with\\s+the\\s+([a-z][\\w-]*)\\s+without\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i");Qse=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Je})\\s+([\\w-]+)[.!?]*$`,"i"),Zse=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Je})\\s+([\\w-]+)[.!?]*$`,"i"),eoe=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Je})\\s+([\\w-]+)[.!?]*$`,"i"),toe=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),noe=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Je})\\s+([\\w-]+)[?.!]*$`,"i"),soe=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Je})\\s+([\\w-]+)[?.!]*$`,"i"),ooe=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Je})\\s+([\\w-]+)$`,"i"),roe=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?what\\s+if\\s+([\\w-]+)\\s+(?:had\\s+)?(?:started|start|starts|begun|began|begins|was|were|is|had\\s+been|rested|rests|sat|sits|stood|stands|lay|lies|lain)(?:\\s+(?:out|off))?\\s+(?:${Je})\\s+([\\w-]+)(?:\\s+(?:instead|initially|to\\s+start\\s+with|at\\s+the\\s+start|from\\s+the\\s+start|at\\s+the\\s+beginning))?[?.!\\s]*$`,"i"),ioe=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:did\\s+you\\s+|do\\s+you\\s+|would\\s+you\\s+)?(?:choose\\s+to\\s+|decide\\s+to\\s+)?([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Je})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?|to\\s+begin(?:\\s+with)?))?\\s+(?:instead\\s+of|rather\\s+than|and\\s+not|not)\\s+([\\w-]+)[?.!\\s]*$`,"i"),aoe=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:not|didn'?t\\s+you|did\\s+you\\s+not|couldn'?t\\s+you)\\s+([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Je})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?))?[?.!\\s]*$`,"i"),coe=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Je})\\s+(.+?)[?.!\\s]*$`,"i"),loe=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Je}))?[?.!\\s]*$`,"i"),Jj=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,Cz=new Set(["bus","gas","plus","minus","surplus","lens","bias","atlas","canvas","virus","bonus","campus","census","chorus","circus","focus","status","iris","genius","sinus","walrus","cactus","fungus","radius","nucleus","alias","crocus","abacus","syllabus","octopus","platypus"]);pd="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",Nz="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",uoe=new RegExp(`^(.+?)\\s+(${Nz})\\s+(.+)$`,"i"),doe=new RegExp(`^([\\w'-]+)\\s+${pd}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),xR="with|to|from|by|of|in|on|for|as|about|into",foe=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${pd}(${al})\\s+(${xR})\\s+(.+)$`,"i"),poe=new RegExp(`^(the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${al})\\s+(${xR})\\s+(.+)$`,"i"),hoe=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Je})\\s+(.+?)[.!?]*$`,"i"),moe=new RegExp(`^(every|each|all)\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Je})\\s+(.+?)[.!?]*$`,"i"),Lz="(?:just\\s+)?(?:one|another)\\s+more|another",goe=new RegExp(`^(?:${Lz})\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Je})\\s+(.+?)[.!?]*$`,"i"),ug=/^(?:is|are|am|owns|maintains)$/i,dg=/\b(?:is|are|am|owns|maintains)\b/i,Pz=new RegExp("^(?:i|me|you|he|him|she|her|it|we|us|they|them|my|your|his|its|our|their|mine|yours|hers|ours|theirs|this|that|these|those|a|an|the|every|each|all|some|any|no|both|either|neither|in|on|at|to|from|by|with|for|of|about|into|onto|over|under|near|before|after|during|through|up|down|off|out|above|below|between|among|against|without|within|along|across|behind|beyond|upon|toward|towards|per|and|but|or|if|because|although|though|while|when|since|unless|until|whether|so|nor|than|as|what|who|whom|whose|which|where|why|how)$","i"),boe=new RegExp(`^(?:${Wo.filter(e=>!/\s/.test(e)).join("|")})$`,"i");Mz=new RegExp(`^(?:does|did)\\s+(?:(?:every|each|all|any)\\s+)?([\\w'-]+)\\s+${pd}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),Fz=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${pd}([a-z]+(?:\\s+(?:${Je}))?)[?.!\\s]*$`,"i"),fg=/^(?:be|own|maintain)$/i,Dz=new RegExp(`^(${Je})\\s+(.+)$`,"i");zz=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],woe=new RegExp(`^(?:${zz.join("|")})\\b\\s*,?\\s+`,"i"),kR=Object.freeze(["you","i","it","they","he","she","we"]),jR=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),Uz=Object.freeze([...jR,...kR]),yoe=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${Uz.join("|")})\\s+\\S+`,"i"),$oe=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${kR.join("|")})\\s+(?:is|are|am|was|were)|(${jR.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),RR="forget|unlearn|delete|remove",Soe=new RegExp(`^(?:${RR})\\s+(?:that\\s+)?(?:a\\s+|an\\s+)?([\\w-]+(?:\\s+[\\w-]+)?)\\s+(?:is|are)\\s+(?:an?\\s+)?(?:(?:kind|type)\\s+of\\s+)?([\\w-]+)$`,"i"),voe=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Je})\\s+([\\w-]+)$`,"i"),Eoe=new RegExp(`^(?:${RR})\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Je})\\s+([\\w-]+)$`,"i"),Wz="collection|set|group|family",xoe=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+an?\\s+(?:${Wz})\\s+of\\s+(?:the\\s+)?([\\w'-]+)[.!?]*$`,"i"),Gz=Object.freeze(["mgx:memberOf","mgx:partOf"]),Ai="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",koe=new RegExp(`^what\\s+does\\s+(.+?)${Ai}\\s+do${Ai}\\??$`,"i"),joe=new RegExp(`^what\\s+(.+?)${Ai}\\s+does${Ai}\\??$`,"i"),Roe=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${Ai}\\s+do${Ai}\\??$`,"i"),_R="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",_oe=new RegExp(`^who\\s+(?:is|was)\\s+${_R}$`,"i"),Toe=new RegExp(`^what\\s+(?:did|has)\\s+${_R}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),Vz="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",Aoe=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${Vz}\\b`,"i"),Ioe=new RegExp("^(?:what\\s+time\\s+is\\s+it(?:\\s+(?:now|right\\s+now))?|what(?:'s|s|\\s+is)\\s+the\\s+time(?:\\s+(?:now|right\\s+now))?|what\\s+day\\s+is\\s+it(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+(?:the\\s+)?(?:day|date)(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+today'?s\\s+date|what(?:'s|s|\\s+is)\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?|how'?s\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?)\\??$","i"),Ooe=Object.freeze({game:["higher","lower","warmer","colder","hotter","up","down","guess"],spiderFly:["watch","step","tick","move","board","web"],adventure:["help","xyzzy","wait","hint","plugh"]});Coe=new Set([...Object.keys(he).flatMap(e=>e.split(/[\s-]+/)),...vn,...Hn,"owns","maintains"].filter(e=>e.length>=3)),Qj=new Set(["mgx:hidden-in","mgx:is-objective","mgx:unlocks-with","mgx:is-npc","mgx:acts-on-turn","mgx:acts-toward","mgx:is-container","mgx:is-open"]);eR=new Set(["owl:onProperty","owl:someValuesFrom","owl:allValuesFrom"]),Rg=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]),to=e=>`${e.subject} ${cl(e.predicate)} ${e.object}`;Kz=Object.entries(Ks).filter(([e])=>!Rg.has(e)).map(([e,t])=>{let n=/^(?:is|are)\s+(.+)$/i.exec(t);return n?{predicate:e,marker:n[1].trim().toLowerCase()}:null}).filter(e=>e&&e.marker.length>1).sort((e,t)=>t.marker.length-e.marker.length);Yz=8;id=null;eU=/^(?:every|each|all|any)\s+/i;IR=new Set(["module","modules","class","classes","function","functions","method","methods","handler","handlers","controller","controllers","service","services","component","components","flow","flows","thing","things","item","items","object","objects","commit","commits"]),Noe=new Set([["interpreter","compiler"],["string","thread"],["heart","kernel"],["battalion","heap"],["bash","sock"],["command","skill"],["docker","longshoreman"],["name","list"],["list","number"]].map(([e,t])=>[e,t].sort().join("|"))),yg=/^(?:is|are|was|were)\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,OR=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,tU=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,nU=/^(who|what)'?s\s+/i,fd=e=>String(e).replace(nU,(t,n)=>`${n} is `),sU=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;oU=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Co=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,$n=new Set(["rdfs:subClassOf","rdf:type"]),rU=e=>[...e.filter(t=>$n.has(t.predicate)),...e.filter(t=>!$n.has(t.predicate))],iU=6,aU=/^why\s+(?=(?:is|are)\b)/i,cU=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Sg=new Set(["kind","sort","type","subclass","superclass"]),oR=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,lU=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,_e=32;dU=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,fU=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,pU=/^how\s+many\s+(.+?)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have[?.!\s]*$/i,rR=new Set(["mgx:hasA","tmct:has"]),hU=/^(?:can|could)\s+(?:all\s+|every\s+)?(?:an?\s+|the\s+)?(.+?)\s+be\s+([a-z][\w-]*)[?.!\s]*$/i;bU=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z]+)\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,wU=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,yU=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,$U=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,SU=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,vU=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,EU=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Je})\\s+(.+?)\\s*[?.!]*$`,"i"),xU=/^what(?:'s|\s+is|\s+are)\s+(?:the\s+)?(parts|members|contents)\s+of\s+(?:the\s+|an?\s+)?(.+?)\s*[?.!]*$/i,kU=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,jU=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,RU=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,_U=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,TU=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;aR=e=>String(e||"").replace(/\s+/g," ").trim();PR="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",IU=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${PR})[?.!\\s]*$`,"i"),OU=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${PR})\\s+([\\w'-]+)[?.!\\s]*$`,"i");NU=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),LU=Object.entries(Ks).filter(([e])=>!NU.has(e)&&!Rg.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${at(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),PU=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),MU=new Set(["mgx:partOf","mgx:memberOf"]),FU=Object.entries(Ks).filter(([e])=>!PU.has(e)&&!Rg.has(e)).map(([e,t])=>{let n;if(t==="can be")n=new RegExp("^can\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+be\\s+(.+?)[?.!\\s]*$","i");else if(t.startsWith("is ")){let s=at(t.slice(3));n=new RegExp(`^(?:is|are)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${s}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}else{let[s,...o]=t.split(" "),r=[nr(s),...o].map(at).join("\\s+");n=new RegExp(`^(?:does|do)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${r}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}return{predicate:e,phrase:t,re:n}}).sort((e,t)=>t.re.source.length-e.re.source.length),uR=/^what\s+(?:inherits?\s+(?:from\s+)?(?:an?\s+)?|is\s+(?:an?\s+)?(?:kind|sort|type)\s+of\s+|is\s+(?:an?\s+)?subclass\s+of\s+)(.+?)[?.!\s]*$/i,DU=new Set(["changed","change","changes","updated","modified","happened","occurred"]);zU=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"]);KU=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,HU=/^what\s+(?:kind|type)\s+of\s+(?:an?\s+)?([\w-]+(?:\s+[\w-]+)?)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,qU=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,YU=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,fR=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),XU=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,JU=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,QU=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,ZU=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,e2=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,pR=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,eo=/^(?:it|this|that)$/i,t2=/^(?:it|them|this|that|in|on|of|to|at)$/i,hR=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,mR=/^(?:you|i|they|he|she|we)\b/i,gR=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${dd(e)} is ${t}".`,replace:!0}),n2=/^(?:what\s+(?:did|have)\s+(?:i|we)\s+(?:told?|tell|said?|say)\s+(?:you|me|us)?(?:\s+(?:last\s+time|before|earlier|previously|already))?|what\s+facts?\s+do\s+you\s+(?:know|have|remember)|what\s+do\s+you\s+(?:know|remember)|what\s+have\s+you\s+(?:learned|learnt|remembered))[?.!\s]*$/i;o2=/inherit|supertype|subclass|extend|specializ/i,r2=8;Loe=new RegExp(`\\b(?:${[...Eg].join("|")})\\b`,"i"),zR=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,a2=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,c2=/^(?:please\s+|can\s+you\s+|could\s+you\s+)*(?:define|definition\s+of|give\s+me\s+the\s+definition\s+of)\s+(?:the\s+(?:term|word)\s+)?(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i;Poe=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(nt).join("|")})$`,"i"),gg="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",vg="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",l2=`(?:\\s+${vg})?`,Moe=[new RegExp(`^${gg}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${l2}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${gg}architecture\\s+(?:${vg}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${gg}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${vg}(?:\\s+here)?\\??$`,"i")],Foe={find:"locate a specific named entity",search:"locate a specific named entity",context:"gather the sized edit bundle for a symbol before changing code",snippet:"view a symbol's exact source",describe:"look up a symbol's definition and relations",signature:"view a symbol's signature",members:Vn.contains,subclasses:Vn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:Vn.calls,callees:Vn.calls,tests:Vn.tests,untested:Vn.tests,history:Vn.touches,exports:Vn.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",goals:"see the declared goals a trace is recognized against, and where each one came from",syllogise:"materialize the entailed facts that follow from what's remembered about one term",wiki:"toggle the live Wikipedia supplement for questions nothing local can answer",wikipedia:"choose which source the research lane fetches from",wikidata:"choose which source the research lane fetches from",export:"write the memory store to a file, in the standard JSONL shape",ingest:"read a local text file and store every fact the recognizer grounds from it",news:"surface or work the news feed built over this graph"},WR="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",Doe=new RegExp(`^what\\s+(?:would|will|might|could|does|do)?\\s*(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|is\\s+impacted|be\\s+impacted)\\s+if\\s+(?:i|we|you|one|someone)\\s+${WR}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),Boe=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${WR}\\s+(?:the\\s+)?(.+?),?\\s+what\\s+(?:would\\s+|will\\s+|might\\s+|could\\s+|does\\s+|do\\s+)?(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|would\\s+break|will\\s+break)[?.!\\s]*$`,"i"),zoe=new RegExp("^what\\s+(?:is|are|gets?|would\\s+be|will\\s+be)\\s+(?:affected|impacted|broken)\\s+(?:by|when|if)\\s+(?:i\\s+|we\\s+|you\\s+)?(?:chang(?:e|es|ing)|edit(?:s|ing)?|modif(?:y|ies|ying)|touch(?:es|ing)?|updat(?:e|es|ing)|delet(?:e|es|ing)|remov(?:e|es|ing)|a\\s+change\\s+to)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),Uoe=new RegExp("^(?:(?:can|could)\\s+(?:i|we|you|one|someone)\\s+safely|is\\s+it\\s+safe\\s+to)\\s+(?:change|edit|modify|touch|update|alter|delete|remove|drop)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),Woe=new RegExp("^(?:what(?:'s|\\s+is)\\s+the\\s+)?(?:blast\\s+radius|impact)\\s+(?:of|for)\\s+(?:chang(?:ing|es)\\s+|editing\\s+|modifying\\s+|touching\\s+|updating\\s+|deleting\\s+|removing\\s+)?(?:the\\s+)?(.+?)[?.!\\s]*$","i"),hd="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",Goe=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${hd}\\s*\\??$`,"i"),Voe=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${hd}\\s*\\??$`,"i"),Koe=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${hd}\\s*\\??$`,"i"),Hoe=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${hd}\\s*[.!]*$`,"i"),u2=Object.freeze([...Eg].filter(e=>e!=="here").concat("they")),qoe=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${u2.join("|")})\\b(\\s+\\S.*)?$`,"i"),Yoe=ne(".tmct","memory","corpus-seed.json")});Ua();Ue();Nn();tr();Cu();var md={uninformativeClassMaxShare:.35,uninformativeClassMinSubjects:12,entailedDepthPenalty:.2,minoritySensePenalty:.5,minScore:.05,groupSplitThreshold:4,openerConceptCount:2,maxObjectsPerBodySentence:4,maxBodySentences:4,closerRootCount:2,budget:{chatReply:5,researchPanel:10,cliDigest:12,ledgerTerm:8}};var f2=(e,t)=>e<t?-1:e>t?1:0,KR=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:memberOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),Ar=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),gd=e=>KR[e]||"other",p2=e=>Math.max(0,Math.min(1,e));function GR(e){let t=(e.sourceTypes||[]).map(n=>Os[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Os.entailed}function h2(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function VR(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function HR(e,t,n={},s={}){let o={...md,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(v=>v&&v.object&&v.object!==e),a=[],c=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,l=[];for(let v of i){if(gd(v.predicate)==="isa"){let E=VR(v.object,n);if(c&&E>o.uninformativeClassMaxShare){a.push({row:v,family:"isa",reason:"uninformative-class",share:E});continue}}l.push(v)}let u=l.filter(v=>gd(v.predicate)==="isa").map(v=>v.object),d=Ou(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),p=new Map,f=new Map;for(let v of d.clusters){let E=0;for(let I of v.objects){f.set(I,v.label);let k=l.find(R=>R.object===I&&gd(R.predicate)==="isa");E+=k?GR(k):0}p.set(v.label,E)}let h=null,m=-1;for(let[v,E]of[...p].sort((I,k)=>f2(I[0],k[0])))E>m&&(m=E,h=v);let b=[];for(let v of l){let E=gd(v.predicate),I=GR(v),k={provenance:I};if(h2(v)&&(I-=o.entailedDepthPenalty,k.entailed=!0),E==="isa"){let $=.6+.4*(1-VR(v.object,n));I*=$,k.informativeness=$;let _=f.get(v.object);h&&_&&_!==h&&(I-=o.minoritySensePenalty,k.minoritySense=_)}I=p2(I),b.push({row:v,family:E,score:I,reasons:k})}let g=[];for(let v of b)v.score<o.minScore?a.push({row:v.row,family:v.family,reason:"below-floor",score:v.score}):g.push(v);let w=new Map;for(let v of g)w.has(v.family)||w.set(v.family,[]),w.get(v.family).push(v);for(let v of w.values())v.sort((E,I)=>I.score-E.score||Zt(E.row,I.row));let y=Ar.filter(v=>w.has(v)).concat([...w.keys()].filter(v=>!Ar.includes(v)).sort()),S=[],T=!1;for(;S.length<r&&!T;){T=!0;for(let v of y){let E=w.get(v);if(E&&E.length&&(S.push(E.shift()),T=!1,S.length>=r))break}}for(let v of y)for(let E of w.get(v)||[])a.push({row:E.row,family:E.family,reason:"over-budget",score:E.score});return S.sort((v,E)=>{let I=Ar.indexOf(v.family),k=Ar.indexOf(E.family);return I-k||E.score-v.score||Zt(v.row,E.row)}),{term:e,selected:S,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:h}}}qi();Ve();var m2=new Set(["isa","location","partOf","capableOf","usedFor"]),g2=new Set(["single","several","chained","group","closer"]),qR=(e,t)=>`${e}:${t}`;function Ag(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!m2.has(n.family)||typeof n.form!="string"||!g2.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=qR(n.family,n.form);t.has(s)||t.set(s,{family:n.family,form:n.form,templates:[]});let o=t.get(s);o.templates.includes(n.template)||o.templates.push(n.template)}return t}var Ir=e=>`${Ds(e)} ${e}`;function b2(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Ir(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Hi(s.map(Ir))}`:n}function w2(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(c=>String(c||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:qr(o),A_TERM:Ir(o),A_TERM_CAP:qr(Ir(o)),TERMS:Lc(o),TERMS_CAP:qr(Lc(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Ir(a):"",OBJECT:i,A_OBJECT:i?Ir(i):"",OBJECTS_A:Hi(r.map(Ir)),OBJECTS_PLURAL:Hi(r.map(Lc)),OBJECTS_RAW:Hi(r),CHAIN:b2(n&&n.length?n:r.slice(0,1))}}function y2(e,t){return String(e).replace(/\{([A-Z_]+)\}/g,(n,s)=>s in t?t[s]:"").replace(/\s+/g," ").replace(/\s+([.,;])/g,"$1").trim()}function no(e,t,n,s={}){let o=(n||[]).filter(Boolean);if(!o.length)return null;let r=s.term??o[0].subject??"",i=s.form||(o.length>1?"several":"single"),a=e instanceof Map?e.get(qR(t,i)):null,c=a?a.templates:null;if(!c||!c.length)return null;let l=s.variantSeed??"",u=Yc(`${r}|${t}|${i}|${l}`)%c.length,d=s.objectsOverride||o.map(f=>f.object),p=y2(c[u],w2(r,d,s.chain,s.parent));return p?{text:p,rows:o,family:t,form:i}:null}qi();var $2=Ar.filter(e=>e!=="isa"&&e!=="other"),S2=(e,t)=>e<t?-1:e>t?1:0;function v2(e){let t=new Map;for(let n of e||[])t.has(n.family)||t.set(n.family,[]),t.get(n.family).push(n.row);return t}function YR(e,t){let n=Math.max(1,Math.trunc(t)||1),s=[];for(let o=0;o<(e||[]).length;o+=n)s.push(e.slice(o,o+n));return s}function E2(e,t){let n=c=>(t?.[c.object]||[])[1]||null,s=new Map;for(let c of e||[]){let l=n(c);l&&s.set(l,(s.get(l)||0)+1)}let o=new Map,r=[],i=[];for(let c of e||[]){let l=n(c);l&&s.get(l)>=2?(o.has(l)||(o.set(l,[]),r.push(l)),o.get(l).push(c)):i.push(c)}let a=r.map(c=>({parent:c,rows:o.get(c)}));return i.length&&a.push({parent:null,rows:i}),a}function x2(e,t,n){let s=new Map,o=new Map;for(let c of t||[]){let l=e?.[c.object];if(!Array.isArray(l)||l.length<2)continue;let u=l[l.length-1];!u||u===c.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(c))}let r=[...s.keys()].sort((c,l)=>s.get(l)-s.get(c)||S2(c,l)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let c of r)for(let l of o.get(c)||[])a.has(l.id)||(a.add(l.id),i.push(l));return{roots:r,rows:i}}function k2(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let p=t[e[0].object],f=p&&p.length>1?"chained":"single",h=no(s,"isa",e,{term:n,form:f,chain:p});return h&&r.push({...h,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let p=no(s,"isa",e,{term:n,form:"several"});return p&&r.push({...p,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),c=no(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});c&&r.push({...c,role:"names-term",paragraph:"definition"});let l=[];for(let p of E2(a,t))for(let f of YR(p.rows,o.maxObjectsPerBodySentence))l.push({parent:p.parent,rows:f});if(l.length>o.maxBodySentences){let p=l.slice(0,o.maxBodySentences),f=p[p.length-1];for(let h of l.slice(o.maxBodySentences))f.rows=f.rows.concat(h.rows);f.parent=null,l=p}for(let p of l){let f=p.parent?no(s,"isa",p.rows,{term:n,form:"group",parent:p.parent,variantSeed:p.parent}):no(s,"isa",p.rows,{term:n,form:"several",variantSeed:n});f&&r.push({...f,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=x2(t,e,o.closerRootCount);if(u.length){let p=no(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});p&&r.push({...p,role:"closes-isa",paragraph:"definition"})}return r}function j2(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=qr(`${Ds(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function R2(e,t){let n=[],s=null,o=null;for(let r of e)(!s||r.paragraph!==o||s.length>=t)&&(s=[],o=r.paragraph,n.push(s)),s.push(r);return n.map(r=>({sentences:r,text:r.map(i=>i.text).join(" ")}))}function XR(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...md,...n.config||{}},a=v2(e?.selected||[]),c=[];for(let u of k2(a.get("isa")||[],r,s,t,i))c.push(u);for(let u of $2){let d=a.get(u);if(!(!d||!d.length))for(let p of YR(d,i.maxObjectsPerBodySentence)){let f=no(t,u,p,{term:s});f&&c.push({...f,role:"describes",paragraph:"description"})}}j2(c,s);let l=new Map;for(let u of c)for(let d of u.rows)l.has(d.id)||l.set(d.id,d);return{term:s,sentences:c,paragraphs:R2(c,o),provenanceRows:[...l.values()]}}var _2=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function T2(e){let t=new Set,n=[];for(let s of e||[]){let o=s.provenance||(s.sourceTypes||[]).join(",");!o||t.has(o)||(t.add(o),n.push({provenance:s.provenance||"",sourceTypes:s.sourceTypes||[]}))}return n}var A2=Object.freeze({facts:"show the facts",chains:"show the chains"});function I2(e,t){let n=[...(e?.selected||[]).map(o=>o.row),...(e?.cut||[]).map(o=>o.row)].filter(Boolean),s=Object.entries(t||{}).filter(([,o])=>Array.isArray(o)&&o.length>1).map(([o,r])=>({object:o,chain:r}));return{escapes:A2,facts:n.map(_2),factCount:n.length,chains:s}}function JR(e,t,n={}){let s=t?.term||e?.term||"";return{kind:"term-article",term:s,headline:s,paragraphs:(t?.paragraphs||[]).map(o=>o.text).filter(Boolean),body:t?.paragraphs||[],sources:T2(t?.provenanceRows||[]),detail:I2(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function QR(e,t,n={},s=new Map,o={}){let r=HR(e,t,n,o),i=XR(r,s,o);return JR(r,i,o)}Cu();la();var ZR=new Set(["rdfs:subClassOf","rdf:type"]);function e_(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(ZR.has(i.predicate)?(n.add(i.subject),t.has(i.object)||t.set(i.object,new Set),t.get(i.object).add(i.subject),s.push([i.subject,i.object])):i.predicate==="owl:disjointWith"&&o.push([i.subject,i.object]));let r={};for(let[i,a]of t)r[i]=a.size;return{classSubjectCounts:r,totalSubjects:n.size,subClassEdges:s,disjointEdges:o}}function t_(e,t,n=6){let s=Wa(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Iu(r,s,{cap:n,stopAt:ul});i.length>1&&(o[r]=i)}return o}function n_(e){let t=[],n=new Set;for(let s of e||[])!s||!ZR.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Ue();Ua();function O2(e,t,n,s,o={}){let r=Ag(s||[]);if(!r||r.size===0)return null;let i=t||[],a=e_(n||i),c=t_(a.subClassEdges,n_(i));return QR(e,i,a,r,{...o,chains:c})}function s_(e,t,n,s={}){let o=gt(e||{individuals:[],objectProperties:[]}),r=Q(V,t),i=o.filter(c=>r.has(c.subject));if(!i.length)return null;let a=O2(t,i,o,n,s);return C2(a)}function C2(e){if(!e||!Array.isArray(e.paragraphs)||!e.paragraphs.length)return null;let t=e.detail&&Array.isArray(e.detail.facts)?e.detail.facts:[];return{term:e.term||"",paragraphs:e.paragraphs.slice(),sources:[...new Set((e.sources||[]).map(n=>n.provenance).filter(Boolean))],facts:t,factCount:e.detail&&Number.isInteger(e.detail.factCount)?e.detail.factCount:t.length}}var N2="no session is open on this page yet \u2014 await tmct.open() first",o_=Symbol.for("tmct.surface.fallback");function r_({open:e,ask:t=null,plan:n=null,turn:s=null,page:o={},fallback:r=!1,target:i=globalThis}={}){if(typeof e!="function")throw new Error("publishTmctSurface: `open` must be this page's session factory");let a=i.tmct;if(r&&a&&!a[o_])return a;let c=null,l=()=>{if(!c)throw new Error(N2);return c},u={async open(...d){return c=await e(...d),c},get session(){return c},async turn(d,p){let f=l();return s?s(d,p,f):typeof f.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:f.turn(d,p)},async ask(d,p){return t?t(d,p,l()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,p){return n?n(d,p,l()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[o_]=r,i.tmct=u,u}function L2({payload:e=null}={}){let t=ja();return e&&(t.payload=e),{memoryDir:t}}async function P2(e,t,n){let s=null;try{s=await MR(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await BR(n.memoryDir,e,null,!0,null)}catch{s=null}return s&&s.text?{answer:s.text,data:s,miss:!1}:{answer:null,data:null,miss:!0}}r_({open:L2,ask:P2,page:{normFactTerm:V,digestTermFromPayloadBrowser:s_},fallback:!0});})();
|
|
236
|
+
`)}${G}`,replace:!0,...U.length?{pending:{items:U.map(J=>J.trim()),noun:"facts"}}:{}}}let M=n?.parsed?.shape==="meta"?n.parsed.object:null,D=!1,H=null,Y=l.match(PU);if(Y)H=Y[1]?Y[1].trim():null,M=Y[2],D=!0;else if(!M&&!n?.parsed){let C=l.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);C&&(M=C[1])}if(!M)return null;let Z=Q(c,M),P=lt(p.filter(C=>Z.has(C.subject)),i),K=lt(p.filter(C=>Z.has(C.object)),i),W=D?P.length?P:K:K.length?K:P;if(!W.length)return null;if(H&&W===P){let C=Q(c,H),F=B=>p.find(z=>z.subject===B.object&&C.has(z.object)),N=W.map(B=>({hit:B,bridge:F(B)})).find(({bridge:B})=>B);if(N)return{text:`${se(N.hit)} \u2014 ${se(N.bridge)}`,replace:!0}}return h(W)}function pg(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}async function BR(e){let{resolveReasoningConfig:t}=await Promise.resolve().then(()=>(Kj(),Vj));try{let{loadTomlConfig:n,normalizeConfig:s}=await Promise.resolve().then(()=>(ya(),Zp)),o=await n(e),r=await s(o,{configDir:e});return t(r)}catch{return t(null)}}function mR(e,t,n){for(let s of t){if(e.has(s.subject))return s.subject;if(e.has(s.object))return s.object}return n}var hz,Sg,mz,Un,nd,Hj,gR,vse,gz,Ese,xse,bR,wR,yR,bz,qj,kse,jse,Rse,_se,Tse,Eg,Ase,wz,Je,rg,ad,No,$R,SR,yz,Rr,Ise,Ose,Cse,Nse,Lse,Pse,Mse,Fse,Dse,Bse,zse,Use,Wse,Gse,Vse,Kse,Hse,qse,Yj,vz,fd,Ez,Yse,Xse,vR,Jse,Qse,Zse,eoe,xz,toe,cg,lg,kz,noe,jz,Rz,ug,_z,Az,soe,ER,xR,Iz,ooe,roe,kR,ioe,aoe,coe,Oz,loe,Cz,_i,uoe,doe,foe,jR,poe,hoe,Nz,moe,goe,boe,woe,Xj,Qj,kg,eo,Lz,Fz,rd,Wz,TR,yoe,bg,AR,Gz,Vz,dd,Kz,Hz,Co,$n,qz,Yz,Xz,Jz,yg,nR,Qz,_e,eU,tU,nU,sR,sU,iU,aU,cU,lU,uU,dU,fU,pU,hU,mU,gU,bU,wU,rR,NR,$U,SU,EU,xU,kU,jU,RU,cR,_U,AU,LU,PU,MU,FU,uR,DU,BU,zU,UU,WU,dR,Zs,GU,fR,pR,hR,VU,HU,qU,$oe,DR,XU,JU,Soe,hg,$g,QU,voe,Eoe,zR,xoe,koe,joe,Roe,_oe,pd,Toe,Aoe,Ioe,Ooe,ZU,Coe,Noe,Ua=L(()=>{Qe();KE();sn();Fe();cs();ll();hu();mu();Ni();gu();tx();tr();Ue();ui();rl();yu();em();rs();Cn();Kr();Oc();Kh();Hh();Wr();es();rf();gr();dm();Ex();Rx();Tx();fm();Ax();mm();Tu();Ux();Wx();Vx();Ou();Jc();aa();uu();Yx();Ru();xi();Mk();Bk();zk();Ao();bj();hz=(e,t)=>e<t?-1:e>t?1:0;Cc(void 0);Ic(pu);Sg=new Set(["it","this","that","here"]),mz=e=>Sg.has(String(e||"").trim().toLowerCase()),Un={imports:"understand a dependency/import relationship",uses:"understand a dependency/usage relationship (imports and/or calls)",calls:"understand a call relationship",callsSymbol:"understand a call relationship",defines:"locate what a module/class defines",contains:"understand class membership (methods/attributes)",tests:"assess test coverage",inherits:"understand a class hierarchy/inheritance relationship",touches:"understand commit/change history",touchesSymbol:"understand commit/change history",cochange:"understand change-coupling between modules",reexports:"understand a module's public exports/API surface",serves:"understand which component provides or backs another",denotes:"understand which vocabulary term names a code entity"},nd=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Hj="look up a taught fact about a subject/verb/object";gR={find:{tool:"tmct_search",arg:"query",help:"lexical search across the graph"},search:{tool:"tmct_search",arg:"query",help:"alias of /find"},context:{tool:"tmct_context",arg:"symbol",help:"the sized edit bundle for a symbol (start here to change code)"},snippet:{tool:"tmct_snippet",arg:"symbol",help:"exact source of one function/class/method"},describe:{tool:"tmct_describe",arg:"symbol",help:"a symbol's definition, kind and relations"},signature:{tool:"tmct_signature",arg:"symbol",help:"a symbol's signature only"},members:{tool:"tmct_members",arg:"class",help:"the methods/attributes of a class"},subclasses:{tool:"tmct_subclasses",arg:"class",help:"the subclasses of a class"},impact:{tool:"tmct_impact",arg:"module",help:"what a change to this module or symbol reaches (impact closure)"},callers:{tool:"tmct_callers",arg:"symbol",help:"functions that call this symbol"},callees:{tool:"tmct_callees",arg:"symbol",help:"functions this symbol calls"},tests:{tool:"tmct_tests_for",arg:"symbol",help:"the tests covering this symbol"},untested:{tool:"tmct_untested",arg:null,help:"symbols with no covering test"},history:{tool:"tmct_history",arg:"symbol",help:"the commit history of this symbol"},exports:{tool:"tmct_exports",arg:"module",help:"a module's public exports"},arch:{tool:"tmct_architecture",arg:"package",help:"the architecture overview (optional package filter)",optional:!0}},vse=new Set(["stats","memory","focus",...Object.keys(gR)]),gz=new Set(["have","has","holds","hold"]),Ese=new RegExp(`\\b(?:${[...Object.keys(he),...Object.keys(ro)].filter(e=>!gz.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),xse=new Set([...VE.map(e=>e.name),...Object.values(gR).map(e=>e.tool)]),bR=new Set(["hi","hello","hey","yo","hiya","howdy","sup","greetings","g'day","gday","hey there","hi there","hello there","good morning","good afternoon","good evening","morning","alright","you alright","alright mate","morning all","yeah nah","hey y'all","howdy there","hiya there","good day","good day to you","salutations","good to meet you","pleased to meet you","yo yo","ayy","wassup","sup fam","heya","hiya!","gm","ge"]),wR=new Set(["thanks","thank you","thankyou","thx","ty","ta","cheers","nice one","much appreciated","cool thanks","many thanks","much obliged","ta very much","cheers mate","cheers for that","tks","sweet thanks","nice","brilliant","ta for that","cheers, that's everything for now, thanks","that's everything for now, thanks","that's all for now, thanks"]),yR=new Set(["bye","goodbye","quit","exit","see ya","see you","cya","later","farewell","peace","peace out","im off","i'm off","gtg","gotta go","catch you later","farewell then"]),bz=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),qj=e=>e.replace(/(.)\1+/g,"$1");kse=vg(bR),jse=vg(wR),Rse=vg(yR),_se=new RegExp(`^(?:${[...bz].map(at).join("|")})\\s+(.+)$`,"i"),Tse=[...bR,...wR,...yR,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],Eg="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",Ase=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${Eg})\\s+than\\s+(.+)$`,"i"),wz=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${Eg})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Je="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",rg="mgx:ownedBy",ad="mgx:hasProperty",No="rdfs:subClassOf",$R="rdf:type",SR="rdfs:subPropertyOf",yz=new Set(["operator","teach","entailed"]),Rr=e=>!!e.sourceTypes?.some(t=>yz.has(t));Ise=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Ose=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Cse=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Je})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Nse=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${Eg})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Lse=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Je})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Pse=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+may\\s+not\\s+be\\s+with\\s+the\\s+([a-z][\\w-]*)\\s+without\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i");Mse=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Je})\\s+([\\w-]+)[.!?]*$`,"i"),Fse=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Je})\\s+([\\w-]+)[.!?]*$`,"i"),Dse=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Je})\\s+([\\w-]+)[.!?]*$`,"i"),Bse=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Je})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),zse=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Je})\\s+([\\w-]+)[?.!]*$`,"i"),Use=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Je})\\s+([\\w-]+)[?.!]*$`,"i"),Wse=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Je})\\s+([\\w-]+)$`,"i"),Gse=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?what\\s+if\\s+([\\w-]+)\\s+(?:had\\s+)?(?:started|start|starts|begun|began|begins|was|were|is|had\\s+been|rested|rests|sat|sits|stood|stands|lay|lies|lain)(?:\\s+(?:out|off))?\\s+(?:${Je})\\s+([\\w-]+)(?:\\s+(?:instead|initially|to\\s+start\\s+with|at\\s+the\\s+start|from\\s+the\\s+start|at\\s+the\\s+beginning))?[?.!\\s]*$`,"i"),Vse=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:did\\s+you\\s+|do\\s+you\\s+|would\\s+you\\s+)?(?:choose\\s+to\\s+|decide\\s+to\\s+)?([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Je})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?|to\\s+begin(?:\\s+with)?))?\\s+(?:instead\\s+of|rather\\s+than|and\\s+not|not)\\s+([\\w-]+)[?.!\\s]*$`,"i"),Kse=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:not|didn'?t\\s+you|did\\s+you\\s+not|couldn'?t\\s+you)\\s+([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Je})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?))?[?.!\\s]*$`,"i"),Hse=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Je})\\s+(.+?)[?.!\\s]*$`,"i"),qse=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Je}))?[?.!\\s]*$`,"i"),Yj=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,vz=new Set(["bus","gas","plus","minus","surplus","lens","bias","atlas","canvas","virus","bonus","campus","census","chorus","circus","focus","status","iris","genius","sinus","walrus","cactus","fungus","radius","nucleus","alias","crocus","abacus","syllabus","octopus","platypus"]);fd="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",Ez="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",Yse=new RegExp(`^(.+?)\\s+(${Ez})\\s+(.+)$`,"i"),Xse=new RegExp(`^([\\w'-]+)\\s+${fd}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),vR="with|to|from|by|of|in|on|for|as|about|into",Jse=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${fd}(${al})\\s+(${vR})\\s+(.+)$`,"i"),Qse=new RegExp(`^(the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${al})\\s+(${vR})\\s+(.+)$`,"i"),Zse=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Je})\\s+(.+?)[.!?]*$`,"i"),eoe=new RegExp(`^(every|each|all)\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Je})\\s+(.+?)[.!?]*$`,"i"),xz="(?:just\\s+)?(?:one|another)\\s+more|another",toe=new RegExp(`^(?:${xz})\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Je})\\s+(.+?)[.!?]*$`,"i"),cg=/^(?:is|are|am|owns|maintains)$/i,lg=/\b(?:is|are|am|owns|maintains)\b/i,kz=new RegExp("^(?:i|me|you|he|him|she|her|it|we|us|they|them|my|your|his|its|our|their|mine|yours|hers|ours|theirs|this|that|these|those|a|an|the|every|each|all|some|any|no|both|either|neither|in|on|at|to|from|by|with|for|of|about|into|onto|over|under|near|before|after|during|through|up|down|off|out|above|below|between|among|against|without|within|along|across|behind|beyond|upon|toward|towards|per|and|but|or|if|because|although|though|while|when|since|unless|until|whether|so|nor|than|as|what|who|whom|whose|which|where|why|how)$","i"),noe=new RegExp(`^(?:${Wo.filter(e=>!/\s/.test(e)).join("|")})$`,"i");jz=new RegExp(`^(?:does|did)\\s+(?:(?:every|each|all|any)\\s+)?([\\w'-]+)\\s+${fd}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),Rz=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${fd}([a-z]+(?:\\s+(?:${Je}))?)[?.!\\s]*$`,"i"),ug=/^(?:be|own|maintain)$/i,_z=new RegExp(`^(${Je})\\s+(.+)$`,"i");Az=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],soe=new RegExp(`^(?:${Az.join("|")})\\b\\s*,?\\s+`,"i"),ER=Object.freeze(["you","i","it","they","he","she","we"]),xR=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),Iz=Object.freeze([...xR,...ER]),ooe=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${Iz.join("|")})\\s+\\S+`,"i"),roe=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${ER.join("|")})\\s+(?:is|are|am|was|were)|(${xR.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),kR="forget|unlearn|delete|remove",ioe=new RegExp(`^(?:${kR})\\s+(?:that\\s+)?(?:a\\s+|an\\s+)?([\\w-]+(?:\\s+[\\w-]+)?)\\s+(?:is|are)\\s+(?:an?\\s+)?(?:(?:kind|type)\\s+of\\s+)?([\\w-]+)$`,"i"),aoe=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Je})\\s+([\\w-]+)$`,"i"),coe=new RegExp(`^(?:${kR})\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Je})\\s+([\\w-]+)$`,"i"),Oz="collection|set|group|family",loe=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+an?\\s+(?:${Oz})\\s+of\\s+(?:the\\s+)?([\\w'-]+)[.!?]*$`,"i"),Cz=Object.freeze(["mgx:memberOf","mgx:partOf"]),_i="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",uoe=new RegExp(`^what\\s+does\\s+(.+?)${_i}\\s+do${_i}\\??$`,"i"),doe=new RegExp(`^what\\s+(.+?)${_i}\\s+does${_i}\\??$`,"i"),foe=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${_i}\\s+do${_i}\\??$`,"i"),jR="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",poe=new RegExp(`^who\\s+(?:is|was)\\s+${jR}$`,"i"),hoe=new RegExp(`^what\\s+(?:did|has)\\s+${jR}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),Nz="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",moe=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${Nz}\\b`,"i"),goe=new RegExp("^(?:what\\s+time\\s+is\\s+it(?:\\s+(?:now|right\\s+now))?|what(?:'s|s|\\s+is)\\s+the\\s+time(?:\\s+(?:now|right\\s+now))?|what\\s+day\\s+is\\s+it(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+(?:the\\s+)?(?:day|date)(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+today'?s\\s+date|what(?:'s|s|\\s+is)\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?|how'?s\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?)\\??$","i"),boe=Object.freeze({game:["higher","lower","warmer","colder","hotter","up","down","guess"],spiderFly:["watch","step","tick","move","board","web"],adventure:["help","xyzzy","wait","hint","plugh"]});woe=new Set([...Object.keys(he).flatMap(e=>e.split(/[\s-]+/)),...vn,...Gn,"owns","maintains"].filter(e=>e.length>=3)),Xj=new Set(["mgx:hidden-in","mgx:is-objective","mgx:unlocks-with","mgx:is-npc","mgx:acts-on-turn","mgx:acts-toward","mgx:is-container","mgx:is-open"]);Qj=new Set(["owl:onProperty","owl:someValuesFrom","owl:allValuesFrom"]),kg=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]),eo=e=>`${e.subject} ${cl(e.predicate)} ${e.object}`;Lz=Object.entries(Vs).filter(([e])=>!kg.has(e)).map(([e,t])=>{let n=/^(?:is|are)\s+(.+)$/i.exec(t);return n?{predicate:e,marker:n[1].trim().toLowerCase()}:null}).filter(e=>e&&e.marker.length>1).sort((e,t)=>t.marker.length-e.marker.length);Fz=8;rd=null;Wz=/^(?:every|each|all|any)\s+/i;TR=new Set(["module","modules","class","classes","function","functions","method","methods","handler","handlers","controller","controllers","service","services","component","components","flow","flows","thing","things","item","items","object","objects","commit","commits"]),yoe=new Set([["interpreter","compiler"],["string","thread"],["heart","kernel"],["battalion","heap"],["bash","sock"],["command","skill"],["docker","longshoreman"],["name","list"],["list","number"]].map(([e,t])=>[e,t].sort().join("|"))),bg=/^(?:is|are|was|were)\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,AR=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Gz=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,Vz=/^(who|what)'?s\s+/i,dd=e=>String(e).replace(Vz,(t,n)=>`${n} is `),Kz=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;Hz=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Co=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,$n=new Set(["rdfs:subClassOf","rdf:type"]),qz=e=>[...e.filter(t=>$n.has(t.predicate)),...e.filter(t=>!$n.has(t.predicate))],Yz=6,Xz=/^why\s+(?=(?:is|are)\b)/i,Jz=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;yg=new Set(["kind","sort","type","subclass","superclass"]),nR=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,Qz=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,_e=32;eU=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,tU=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,nU=/^how\s+many\s+(.+?)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have[?.!\s]*$/i,sR=new Set(["mgx:hasA","tmct:has"]),sU=/^(?:can|could)\s+(?:all\s+|every\s+)?(?:an?\s+|the\s+)?(.+?)\s+be\s+([a-z][\w-]*)[?.!\s]*$/i;iU=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z]+)\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,aU=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,cU=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,lU=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,uU=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,dU=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,fU=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Je})\\s+(.+?)\\s*[?.!]*$`,"i"),pU=/^what(?:'s|\s+is|\s+are)\s+(?:the\s+)?(parts|members|contents)\s+of\s+(?:the\s+|an?\s+)?(.+?)\s*[?.!]*$/i,hU=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,mU=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,gU=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,bU=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,wU=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;rR=e=>String(e||"").replace(/\s+/g," ").trim();NR="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",$U=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${NR})[?.!\\s]*$`,"i"),SU=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${NR})\\s+([\\w'-]+)[?.!\\s]*$`,"i");EU=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),xU=Object.entries(Vs).filter(([e])=>!EU.has(e)&&!kg.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${at(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),kU=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),jU=new Set(["mgx:partOf","mgx:memberOf"]),RU=Object.entries(Vs).filter(([e])=>!kU.has(e)&&!kg.has(e)).map(([e,t])=>{let n;if(t==="can be")n=new RegExp("^can\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+be\\s+(.+?)[?.!\\s]*$","i");else if(t.startsWith("is ")){let s=at(t.slice(3));n=new RegExp(`^(?:is|are)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${s}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}else{let[s,...o]=t.split(" "),r=[nr(s),...o].map(at).join("\\s+");n=new RegExp(`^(?:does|do)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${r}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}return{predicate:e,phrase:t,re:n}}).sort((e,t)=>t.re.source.length-e.re.source.length),cR=/^what\s+(?:inherits?\s+(?:from\s+)?(?:an?\s+)?|is\s+(?:an?\s+)?(?:kind|sort|type)\s+of\s+|is\s+(?:an?\s+)?subclass\s+of\s+)(.+?)[?.!\s]*$/i,_U=new Set(["changed","change","changes","updated","modified","happened","occurred"]);AU=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"]);LU=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,PU=/^what\s+(?:kind|type)\s+of\s+(?:an?\s+)?([\w-]+(?:\s+[\w-]+)?)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,MU=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,FU=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,uR=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),DU=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,BU=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,zU=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,UU=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,WU=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,dR=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,Zs=/^(?:it|this|that)$/i,GU=/^(?:it|them|this|that|in|on|of|to|at)$/i,fR=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,pR=/^(?:you|i|they|he|she|we)\b/i,hR=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${ud(e)} is ${t}".`,replace:!0}),VU=/^(?:what\s+(?:did|have)\s+(?:i|we)\s+(?:told?|tell|said?|say)\s+(?:you|me|us)?(?:\s+(?:last\s+time|before|earlier|previously|already))?|what\s+facts?\s+do\s+you\s+(?:know|have|remember)|what\s+do\s+you\s+(?:know|remember)|what\s+have\s+you\s+(?:learned|learnt|remembered))[?.!\s]*$/i;HU=/inherit|supertype|subclass|extend|specializ/i,qU=8;$oe=new RegExp(`\\b(?:${[...Sg].join("|")})\\b`,"i"),DR=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,XU=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,JU=/^(?:please\s+|can\s+you\s+|could\s+you\s+)*(?:define|definition\s+of|give\s+me\s+the\s+definition\s+of)\s+(?:the\s+(?:term|word)\s+)?(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i;Soe=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(nt).join("|")})$`,"i"),hg="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",$g="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",QU=`(?:\\s+${$g})?`,voe=[new RegExp(`^${hg}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${QU}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${hg}architecture\\s+(?:${$g}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${hg}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${$g}(?:\\s+here)?\\??$`,"i")],Eoe={find:"locate a specific named entity",search:"locate a specific named entity",context:"gather the sized edit bundle for a symbol before changing code",snippet:"view a symbol's exact source",describe:"look up a symbol's definition and relations",signature:"view a symbol's signature",members:Un.contains,subclasses:Un.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:Un.calls,callees:Un.calls,tests:Un.tests,untested:Un.tests,history:Un.touches,exports:Un.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",goals:"see the declared goals a trace is recognized against, and where each one came from",syllogise:"materialize the entailed facts that follow from what's remembered about one term",wiki:"toggle the live Wikipedia supplement for questions nothing local can answer",wikipedia:"choose which source the research lane fetches from",wikidata:"choose which source the research lane fetches from",export:"write the memory store to a file, in the standard JSONL shape",ingest:"read a local text file and store every fact the recognizer grounds from it",news:"surface or work the news feed built over this graph"},zR="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",xoe=new RegExp(`^what\\s+(?:would|will|might|could|does|do)?\\s*(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|is\\s+impacted|be\\s+impacted)\\s+if\\s+(?:i|we|you|one|someone)\\s+${zR}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),koe=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${zR}\\s+(?:the\\s+)?(.+?),?\\s+what\\s+(?:would\\s+|will\\s+|might\\s+|could\\s+|does\\s+|do\\s+)?(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|would\\s+break|will\\s+break)[?.!\\s]*$`,"i"),joe=new RegExp("^what\\s+(?:is|are|gets?|would\\s+be|will\\s+be)\\s+(?:affected|impacted|broken)\\s+(?:by|when|if)\\s+(?:i\\s+|we\\s+|you\\s+)?(?:chang(?:e|es|ing)|edit(?:s|ing)?|modif(?:y|ies|ying)|touch(?:es|ing)?|updat(?:e|es|ing)|delet(?:e|es|ing)|remov(?:e|es|ing)|a\\s+change\\s+to)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),Roe=new RegExp("^(?:(?:can|could)\\s+(?:i|we|you|one|someone)\\s+safely|is\\s+it\\s+safe\\s+to)\\s+(?:change|edit|modify|touch|update|alter|delete|remove|drop)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),_oe=new RegExp("^(?:what(?:'s|\\s+is)\\s+the\\s+)?(?:blast\\s+radius|impact)\\s+(?:of|for)\\s+(?:chang(?:ing|es)\\s+|editing\\s+|modifying\\s+|touching\\s+|updating\\s+|deleting\\s+|removing\\s+)?(?:the\\s+)?(.+?)[?.!\\s]*$","i"),pd="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",Toe=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${pd}\\s*\\??$`,"i"),Aoe=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${pd}\\s*\\??$`,"i"),Ioe=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${pd}\\s*\\??$`,"i"),Ooe=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${pd}\\s*[.!]*$`,"i"),ZU=Object.freeze([...Sg].filter(e=>e!=="here").concat("they")),Coe=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${ZU.join("|")})\\b(\\s+\\S.*)?$`,"i"),Noe=ne(".tmct","memory","corpus-seed.json")});Ua();Ue();qn();tr();Ou();var hd={uninformativeClassMaxShare:.35,uninformativeClassMinSubjects:12,entailedDepthPenalty:.2,minoritySensePenalty:.5,minScore:.05,groupSplitThreshold:4,openerConceptCount:2,maxObjectsPerBodySentence:4,maxBodySentences:4,closerRootCount:2,budget:{chatReply:5,researchPanel:10,cliDigest:12,ledgerTerm:8}};var t2=(e,t)=>e<t?-1:e>t?1:0,GR=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:memberOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),Tr=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),md=e=>GR[e]||"other",n2=e=>Math.max(0,Math.min(1,e));function UR(e){let t=(e.sourceTypes||[]).map(n=>Is[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Is.entailed}function s2(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function WR(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function VR(e,t,n={},s={}){let o={...hd,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(v=>v&&v.object&&v.object!==e),a=[],c=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,l=[];for(let v of i){if(md(v.predicate)==="isa"){let E=WR(v.object,n);if(c&&E>o.uninformativeClassMaxShare){a.push({row:v,family:"isa",reason:"uninformative-class",share:E});continue}}l.push(v)}let u=l.filter(v=>md(v.predicate)==="isa").map(v=>v.object),d=Iu(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),p=new Map,f=new Map;for(let v of d.clusters){let E=0;for(let I of v.objects){f.set(I,v.label);let k=l.find(R=>R.object===I&&md(R.predicate)==="isa");E+=k?UR(k):0}p.set(v.label,E)}let h=null,m=-1;for(let[v,E]of[...p].sort((I,k)=>t2(I[0],k[0])))E>m&&(m=E,h=v);let b=[];for(let v of l){let E=md(v.predicate),I=UR(v),k={provenance:I};if(s2(v)&&(I-=o.entailedDepthPenalty,k.entailed=!0),E==="isa"){let $=.6+.4*(1-WR(v.object,n));I*=$,k.informativeness=$;let _=f.get(v.object);h&&_&&_!==h&&(I-=o.minoritySensePenalty,k.minoritySense=_)}I=n2(I),b.push({row:v,family:E,score:I,reasons:k})}let g=[];for(let v of b)v.score<o.minScore?a.push({row:v.row,family:v.family,reason:"below-floor",score:v.score}):g.push(v);let w=new Map;for(let v of g)w.has(v.family)||w.set(v.family,[]),w.get(v.family).push(v);for(let v of w.values())v.sort((E,I)=>I.score-E.score||Zt(E.row,I.row));let y=Tr.filter(v=>w.has(v)).concat([...w.keys()].filter(v=>!Tr.includes(v)).sort()),S=[],T=!1;for(;S.length<r&&!T;){T=!0;for(let v of y){let E=w.get(v);if(E&&E.length&&(S.push(E.shift()),T=!1,S.length>=r))break}}for(let v of y)for(let E of w.get(v)||[])a.push({row:E.row,family:E.family,reason:"over-budget",score:E.score});return S.sort((v,E)=>{let I=Tr.indexOf(v.family),k=Tr.indexOf(E.family);return I-k||E.score-v.score||Zt(v.row,E.row)}),{term:e,selected:S,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:h}}}Ki();Ve();var o2=new Set(["isa","location","partOf","capableOf","usedFor"]),r2=new Set(["single","several","chained","group","closer"]),KR=(e,t)=>`${e}:${t}`;function _g(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!o2.has(n.family)||typeof n.form!="string"||!r2.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=KR(n.family,n.form);t.has(s)||t.set(s,{family:n.family,form:n.form,templates:[]});let o=t.get(s);o.templates.includes(n.template)||o.templates.push(n.template)}return t}var Ar=e=>`${Fs(e)} ${e}`;function i2(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Ar(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Vi(s.map(Ar))}`:n}function a2(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(c=>String(c||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Hr(o),A_TERM:Ar(o),A_TERM_CAP:Hr(Ar(o)),TERMS:Lc(o),TERMS_CAP:Hr(Lc(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Ar(a):"",OBJECT:i,A_OBJECT:i?Ar(i):"",OBJECTS_A:Vi(r.map(Ar)),OBJECTS_PLURAL:Vi(r.map(Lc)),OBJECTS_RAW:Vi(r),CHAIN:i2(n&&n.length?n:r.slice(0,1))}}function c2(e,t){return String(e).replace(/\{([A-Z_]+)\}/g,(n,s)=>s in t?t[s]:"").replace(/\s+/g," ").replace(/\s+([.,;])/g,"$1").trim()}function to(e,t,n,s={}){let o=(n||[]).filter(Boolean);if(!o.length)return null;let r=s.term??o[0].subject??"",i=s.form||(o.length>1?"several":"single"),a=e instanceof Map?e.get(KR(t,i)):null,c=a?a.templates:null;if(!c||!c.length)return null;let l=s.variantSeed??"",u=Yc(`${r}|${t}|${i}|${l}`)%c.length,d=s.objectsOverride||o.map(f=>f.object),p=c2(c[u],a2(r,d,s.chain,s.parent));return p?{text:p,rows:o,family:t,form:i}:null}Ki();var l2=Tr.filter(e=>e!=="isa"&&e!=="other"),u2=(e,t)=>e<t?-1:e>t?1:0;function d2(e){let t=new Map;for(let n of e||[])t.has(n.family)||t.set(n.family,[]),t.get(n.family).push(n.row);return t}function HR(e,t){let n=Math.max(1,Math.trunc(t)||1),s=[];for(let o=0;o<(e||[]).length;o+=n)s.push(e.slice(o,o+n));return s}function f2(e,t){let n=c=>(t?.[c.object]||[])[1]||null,s=new Map;for(let c of e||[]){let l=n(c);l&&s.set(l,(s.get(l)||0)+1)}let o=new Map,r=[],i=[];for(let c of e||[]){let l=n(c);l&&s.get(l)>=2?(o.has(l)||(o.set(l,[]),r.push(l)),o.get(l).push(c)):i.push(c)}let a=r.map(c=>({parent:c,rows:o.get(c)}));return i.length&&a.push({parent:null,rows:i}),a}function p2(e,t,n){let s=new Map,o=new Map;for(let c of t||[]){let l=e?.[c.object];if(!Array.isArray(l)||l.length<2)continue;let u=l[l.length-1];!u||u===c.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(c))}let r=[...s.keys()].sort((c,l)=>s.get(l)-s.get(c)||u2(c,l)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let c of r)for(let l of o.get(c)||[])a.has(l.id)||(a.add(l.id),i.push(l));return{roots:r,rows:i}}function h2(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let p=t[e[0].object],f=p&&p.length>1?"chained":"single",h=to(s,"isa",e,{term:n,form:f,chain:p});return h&&r.push({...h,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let p=to(s,"isa",e,{term:n,form:"several"});return p&&r.push({...p,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),c=to(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});c&&r.push({...c,role:"names-term",paragraph:"definition"});let l=[];for(let p of f2(a,t))for(let f of HR(p.rows,o.maxObjectsPerBodySentence))l.push({parent:p.parent,rows:f});if(l.length>o.maxBodySentences){let p=l.slice(0,o.maxBodySentences),f=p[p.length-1];for(let h of l.slice(o.maxBodySentences))f.rows=f.rows.concat(h.rows);f.parent=null,l=p}for(let p of l){let f=p.parent?to(s,"isa",p.rows,{term:n,form:"group",parent:p.parent,variantSeed:p.parent}):to(s,"isa",p.rows,{term:n,form:"several",variantSeed:n});f&&r.push({...f,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=p2(t,e,o.closerRootCount);if(u.length){let p=to(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});p&&r.push({...p,role:"closes-isa",paragraph:"definition"})}return r}function m2(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Hr(`${Fs(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function g2(e,t){let n=[],s=null,o=null;for(let r of e)(!s||r.paragraph!==o||s.length>=t)&&(s=[],o=r.paragraph,n.push(s)),s.push(r);return n.map(r=>({sentences:r,text:r.map(i=>i.text).join(" ")}))}function qR(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...hd,...n.config||{}},a=d2(e?.selected||[]),c=[];for(let u of h2(a.get("isa")||[],r,s,t,i))c.push(u);for(let u of l2){let d=a.get(u);if(!(!d||!d.length))for(let p of HR(d,i.maxObjectsPerBodySentence)){let f=to(t,u,p,{term:s});f&&c.push({...f,role:"describes",paragraph:"description"})}}m2(c,s);let l=new Map;for(let u of c)for(let d of u.rows)l.has(d.id)||l.set(d.id,d);return{term:s,sentences:c,paragraphs:g2(c,o),provenanceRows:[...l.values()]}}var b2=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function w2(e){let t=new Set,n=[];for(let s of e||[]){let o=s.provenance||(s.sourceTypes||[]).join(",");!o||t.has(o)||(t.add(o),n.push({provenance:s.provenance||"",sourceTypes:s.sourceTypes||[]}))}return n}var y2=Object.freeze({facts:"show the facts",chains:"show the chains"});function $2(e,t){let n=[...(e?.selected||[]).map(o=>o.row),...(e?.cut||[]).map(o=>o.row)].filter(Boolean),s=Object.entries(t||{}).filter(([,o])=>Array.isArray(o)&&o.length>1).map(([o,r])=>({object:o,chain:r}));return{escapes:y2,facts:n.map(b2),factCount:n.length,chains:s}}function YR(e,t,n={}){let s=t?.term||e?.term||"";return{kind:"term-article",term:s,headline:s,paragraphs:(t?.paragraphs||[]).map(o=>o.text).filter(Boolean),body:t?.paragraphs||[],sources:w2(t?.provenanceRows||[]),detail:$2(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function XR(e,t,n={},s=new Map,o={}){let r=VR(e,t,n,o),i=qR(r,s,o);return YR(r,i,o)}Ou();aa();var JR=new Set(["rdfs:subClassOf","rdf:type"]);function QR(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(JR.has(i.predicate)?(n.add(i.subject),t.has(i.object)||t.set(i.object,new Set),t.get(i.object).add(i.subject),s.push([i.subject,i.object])):i.predicate==="owl:disjointWith"&&o.push([i.subject,i.object]));let r={};for(let[i,a]of t)r[i]=a.size;return{classSubjectCounts:r,totalSubjects:n.size,subClassEdges:s,disjointEdges:o}}function ZR(e,t,n=6){let s=Wa(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Au(r,s,{cap:n,stopAt:ul});i.length>1&&(o[r]=i)}return o}function e_(e){let t=[],n=new Set;for(let s of e||[])!s||!JR.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Ue();Ua();function S2(e,t,n,s,o={}){let r=_g(s||[]);if(!r||r.size===0)return null;let i=t||[],a=QR(n||i),c=ZR(a.subClassEdges,e_(i));return XR(e,i,a,r,{...o,chains:c})}function t_(e,t,n,s={}){let o=gt(e||{individuals:[],objectProperties:[]}),r=Q(V,t),i=o.filter(c=>r.has(c.subject));if(!i.length)return null;let a=S2(t,i,o,n,s);return v2(a)}function v2(e){if(!e||!Array.isArray(e.paragraphs)||!e.paragraphs.length)return null;let t=e.detail&&Array.isArray(e.detail.facts)?e.detail.facts:[];return{term:e.term||"",paragraphs:e.paragraphs.slice(),sources:[...new Set((e.sources||[]).map(n=>n.provenance).filter(Boolean))],facts:t,factCount:e.detail&&Number.isInteger(e.detail.factCount)?e.detail.factCount:t.length}}var E2="no session is open on this page yet \u2014 await tmct.open() first",n_=Symbol.for("tmct.surface.fallback");function s_({open:e,ask:t=null,plan:n=null,turn:s=null,page:o={},fallback:r=!1,target:i=globalThis}={}){if(typeof e!="function")throw new Error("publishTmctSurface: `open` must be this page's session factory");let a=i.tmct;if(r&&a&&!a[n_])return a;let c=null,l=()=>{if(!c)throw new Error(E2);return c},u={async open(...d){return c=await e(...d),c},get session(){return c},async turn(d,p){let f=l();return s?s(d,p,f):typeof f.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:f.turn(d,p)},async ask(d,p){return t?t(d,p,l()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,p){return n?n(d,p,l()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[n_]=r,i.tmct=u,u}function x2({payload:e=null}={}){let t=ja();return e&&(t.payload=e),{memoryDir:t}}async function k2(e,t,n){let s=null;try{s=await LR(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await FR(n.memoryDir,e,null,!0,null)}catch{s=null}return s&&s.text?{answer:s.text,data:s,miss:!1}:{answer:null,data:null,miss:!0}}s_({open:x2,ask:k2,page:{normFactTerm:V,digestTermFromPayloadBrowser:t_},fallback:!0});})();
|