@polycode-projects/the-mechanical-code-talker 5.0.12 → 5.0.14

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.
@@ -1,41 +1,41 @@
1
- (()=>{var sv=Object.defineProperty;var O=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Wn=(e,t)=>{for(var n in t)sv(e,n,{get:t[n],enumerable:!0})};var ct,zO,UO,BO,WO,GO,VO,qO,HO,KO,YO,XO,JO,QO,ZO,eL,tL,J,$e,Qt,yp,nL,sL,oL,Ue=O(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},zO=ct("createRequire"),UO=ct("readFileSync"),BO=ct("access"),WO=ct("readFile"),GO=ct("writeFile"),VO=ct("appendFile"),qO=ct("mkdir"),HO=ct("mkdtemp"),KO=ct("rename"),YO=ct("unlink"),XO=ct("rm"),JO=ct("stat"),QO=ct("copyFile"),ZO=ct("readdir"),eL=ct("createReadStream"),tL=ct("createWriteStream"),J=(...e)=>e.join("/"),$e=e=>String(e).replace(/\/[^/]*$/,""),Qt=(...e)=>e.join("/"),yp="/",nL=ct("randomBytes"),sL=ct("spawnSync"),oL=ct("createInterface")});var lt,iL,aL,kc,ze,$r,ov,_n,rv,Ei,jc,iv,av,cL,cv,lL,uL,dL,pL,fL,_t=O(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},iL=lt("createRequire"),aL=lt("readFileSync"),kc=lt("access"),ze=lt("readFile"),$r=lt("writeFile"),ov=lt("appendFile"),_n=lt("mkdir"),rv=lt("mkdtemp"),Ei=lt("rename"),jc=lt("unlink"),iv=lt("rm"),av=lt("stat"),cL=lt("copyFile"),cv=lt("readdir"),lL=lt("createReadStream"),uL=lt("createWriteStream"),dL=lt("randomBytes"),pL=lt("spawnSync"),fL=lt("createInterface")});function ko(e){let t=uv.exec(String(e||""));return t?t[1].toLowerCase():null}function Si(e){return String(e||"").replace(dv,"$1")}function bs(e){return e.replace(pv,"").trim()}function en(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(hv,"").trim();if(s=s.replace(gv,"").trim(),s===t)break;t=s}return t}var $p,vr,Gs,vp,xp,lv,uv,xr,Zt,_c,dv,yn,Rc,pv,fv,hv,mv,gv,de,Er,ki,bv,Ep,Be,tn,ws,Sp,Tc,Ac,Ic,kp,Sr,Vs,jp,_p,qs,Gn,Vn,jo,Xe,Rp,Hs,Ks,ys,Rn,Tp,kr,_o,ji,Ro,Ap,qn=O(()=>{$p=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],vr={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","lives in","live in","is defined in","are defined in","is part of","are part of","sits in","sit in","sits inside","sit inside","containing"]},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",...$p]},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"]}},Gs=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"})}),vp=Object.freeze(Object.fromEntries(Object.entries(Gs).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),xp=Object.freeze(Object.values(Gs).map(e=>e.predicate)),lv=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),uv=new RegExp(`^mgx:[a-z]+-(${lv.join("|")})$`,"i");xr=Object.freeze([...$p,"is the superclass of","are the superclass of","is the parent class of"]),Zt=Object.freeze(["defined","declared","located","implemented"]),_c=Object.freeze(["now","currently","right now","at the moment","these days","today"]),dv=new RegExp(`\\s+(?:${[..._c].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");yn=Object.freeze(["mentioned","referenced"]),Rc=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),pv=new RegExp(`\\s+(?:${Rc.join("|")})\\s*[?.!]*$`,"i");fv=Object.freeze(["then","though","too"]),hv=new RegExp(`\\s+(?:${fv.join("|")})\\s*[?.!]*$`,"i"),mv=Object.freeze(["please explain","explain"]),gv=new RegExp(`,\\s*(?:${mv.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(vr).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Er=Object.freeze(new Set(["has","have","holds","hold"])),ki=Object.freeze(new Set(["search","describe","signature","impact","members","subclasses","exports","callers","callees","calls","tests","untested","history","cochanges","architecture","arch","related","sprite"])),bv=e=>!xr.includes(e),Ep=Object.freeze([...new Set(Object.keys(de).filter(bv).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),Be=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"}),tn=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),ws=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"}),Sp=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"}}),Tc=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"}),Ac=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"}),Ic=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"}),kp=/\b([a-z]{3,})in'/gi,Sr=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"]),Vs=Object.freeze(["this","it","that","here","this one","that one"]),jp=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]}`}]),_p=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`}]),qs=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),Gn=Object.freeze(["that","which","who"]),Vn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),jo=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"}),Xe=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}}),Rp=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Hs=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"]),Ks=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"]),ys=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"}),Rn=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"}}),Tp=Object.freeze({tests:"Module",test:"Module"}),kr=Object.freeze(["those","them","these"]),_o=Object.freeze(["contains","defines"]),ji=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"]),Ro=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),Ap=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 We,To,Cc=O(()=>{We="#000000",To=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${We}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${We}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${We}" 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="${We}" 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="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var wv,ln,Ip,Cp,Oc,Op,yL,$L,Lp=O(()=>{qn();Cc();wv=()=>Object.keys(To).sort(),ln=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Ip=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Cp=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),Oc=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:Zt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:ln("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:ln("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:Ip("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:Cp("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:Cp("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:wv(),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:Ip("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:ln("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:ln("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:ln("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:ln("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:ln("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:ln("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:ln("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:ln("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:ln("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:ln("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}}]),Op=Oc.filter(e=>e.tier==="hot"),yL=Oc.filter(e=>e.tier==="cold"),$L=Object.freeze(Oc.map(e=>e.name))});var Np,_e,Ut=O(()=>{Ue();Np=J(".tmct","graph.json"),_e=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function yv(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 Pp(e){let t=(Array.isArray(e)?e:[]).map((l,c)=>({file:l?.file,payload:l?.payload||{},name:l?.name!=null&&String(l.name).length?String(l.name):String(c)})),n=t.map(({payload:l})=>yv(l)),s=new Map;for(let l of n)for(let c of l)s.set(c,(s.get(c)||0)+1);let o=new Set([...s.entries()].filter(([,l])=>l>1).map(([l])=>l)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:l,name:c}of t){a=a&&!!l.bootstrap,typeof l.generated_at=="string"&&l.generated_at>i&&(i=l.generated_at);let u=f=>o.has(f)?`${c}/${f}`:f;Array.isArray(l.classes)&&r.classes.push(...l.classes),Array.isArray(l.vocabulary)&&r.vocabulary.push(...l.vocabulary);for(let f of Array.isArray(l.individuals)?l.individuals:[]){if(!f)continue;let p={...f};p.id&&(p.id=u(p.id)),Array.isArray(p.derived_from)&&(p.derived_from=p.derived_from.map(h=>u(h))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(h=>h&&h.id?{...h,id:u(h.id)}:h)),r.individuals.push(p)}for(let f of Array.isArray(l.objectProperties)?l.objectProperties:[]){if(!f)continue;let p={...f};Array.isArray(p.examples)&&(p.examples=p.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(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let h=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let m of Array.isArray(p)?p:[]){let g=u(m);h.includes(g)||h.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var Mp=O(()=>{});var Io={};Wn(Io,{clearCache:()=>$v,emptyEntities:()=>Lc,fetchEntities:()=>Sv,registerProvider:()=>vv});function $v(){Ao=null,jr=null}function vv(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=_i;return _i=e??null,Ao=null,t}function Lc(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function xv(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return Lc();throw new _e(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new _e(`graph artifact ${e} is not valid JSON`)}}async function Ev(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(jr&&jr.key===n)return jr.payload;let s=[];for(let r=0;r<t.length;r++){let i=await xv(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Pp(s);return jr={key:n,payload:o},o}async function Sv(e){if(_i){let s;try{s=await _i(e)}catch(o){throw o instanceof _e?o:new _e(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new _e("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return Ev(e);if(Ao&&Ao.file===e.graphFile)return Ao.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return Lc();throw new _e(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new _e(`graph artifact ${e.graphFile} is not valid JSON`)}return Ao={file:e.graphFile,payload:n},n}var Ao,jr,_i,_r=O(()=>{_t();Ut();Mp();Ao=null,jr=null,_i=null});function Tn(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<=Fp)}function Nc(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>Fp||kv.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=jv))break;return t}function Ri({name:e,doc:t}={}){return[...new Set([...Tn(e),...Nc(t)])].sort()}function Dp(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 Ys(e,t,{limit:n=10}={}){let s=[...new Set([...Tn(t),...Nc(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 zp(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 l of Object.keys(s)){let c=s[l];if(!c||typeof c!="object")continue;let u=c[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let f of d)i.add(f);a.add(l)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var kv,Fp,jv,$s=O(()=>{kv=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+/)),Fp=40,jv=120});function Up(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 _v(e){if(!e.startsWith(Wp))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Bp);if(o<0)return null;let r=n.slice(o+Bp.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Wp.length,o),createdAt:s}: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:Tv(r),pack:r,article:s.slice(o+1)}}if(t.startsWith("research:")){let s=t.slice(9),o=s.lastIndexOf("@");return{kind:"referenceLive",pack:"research",article:(o>=0?s.slice(0,o):s).trim()||"unknown"}}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:"))return{kind:"operator",...Up(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=_v(s);return o||{kind:"teach",...Up(s)}}return n.startsWith("web:")?{kind:"web",url:n.slice(4)}:n.startsWith("url:")?{kind:"web",url:n.slice(4)}:n.startsWith("optimistic-extract:")?{kind:"optimisticExtract",name:n.slice(19)||"unknown"}: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 Kp(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Vp;let n=Number(t);return Number.isFinite(n)?Math.max(Pc,Math.min(Hp,n)):Vp}function Yp(e,t=Date.now(),n=Av){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Gp+(1-Gp)*Math.pow(.5,o/n)}function Xp(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 p of o){if(r.has(p))continue;r.add(p);let h=t[p],m=Iv(h);if(!m)continue;i.push(m);let g=(Xs[m]??0)*Kp(h);a.push(Math.max(0,Math.min(1,g)))}let l=0,c=1;for(let p of a)c*=1-p;if(a.length&&(l=Math.min(1,1-c)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let p=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;l=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*p))}let u=Yp(e?.createdAt,s,n.halfLifeMs),d=Co(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Co(u)};return{score:d,inputs:f}}function Ai(e,t){let n=(Xs[e]??0)*Kp(t);return Co(Math.max(0,Math.min(1,n)))}function Cv(e){if(e==="operator")return 1;let t=Xs[e];return t===void 0?1:(t+1)/2}function Ii(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 l=Yp(a?.assertedAt,n,t.halfLifeMs),c=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,c*l)),f=o.get(u)||{complement:1,strongest:0};f.complement*=1-d,f.strongest=Math.max(f.strongest,d),o.set(u,f),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:c,recency:Co(l)})}let i=1;for(let[a,l]of o){let c=Math.max(Cv(a),l.strongest);i*=1-Math.min(1-l.complement,c)}return{score:s.length?Co(Math.min(1,1-i)):0,inputs:r}}function Jp(e){return Ii(e,{halfLifeMs:Ov})}function Qp({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+Lv),i=(o*r+1)/2;return Co(Pc+(Hp-Pc)*i)}var Oo,Ti,Je,vs,Bp,Wp,Rv,Tv,Xs,Mc,qp,Av,Gp,Pc,Hp,Vp,Co,Iv,Ov,Lv,Kn=O(()=>{Oo="mgx:trustScore",Ti="mgx:trustInputs",Je="mgx:createdAt",vs="mgx:updatedAt";Bp="#node:",Wp="peer:";Rv="wikipedia-live",Tv=e=>e===Rv?"referenceLive":"reference";Xs=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Mc=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"}}),qp=new Set(Object.entries(Mc).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),Av=720*60*60*1e3,Gp=.9,Pc=.5,Hp=1.5,Vp=1,Co=(e,t=6)=>Number(e.toFixed(t)),Iv=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";Ov=1/0;Lv=19});var Js,Fc=O(()=>{Js=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Dc(e,t){return Math.log(1+e/(1+t))}var Rr=O(()=>{});var Oi={};Wn(Oi,{bfsLevels:()=>Ci,findActionPath:()=>zc,findReachableSet:()=>Uc});function Zp(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function ef(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 zc(e,t,n,{maxDepth:s=50,stateKey:o=Zp}={}){if(t(e))return{actions:[],states:[e]};let r=ef(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let c of r)if(t(c.state))return{actions:c.actions,states:c.states};if(a===s)break;let l=[];for(let c of r){let u=o(c.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:f}of n(c.state)||[]){let p=o(f);i.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}}r=l}return null}function Uc(e,t,{maxDepth:n=50,stateKey:s=Zp}={}){let o=ef(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let l=[];for(let c of o){let u=s(c.state);if(!r.has(u)&&(r.add(u),i.push({node:c.state,path:{actions:c.actions,states:c.states}}),a!==n))for(let{action:d,nextState:f}of t(c.state)||[]){let p=s(f);r.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}o=l}return i}function*Ci(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=[],l=[];for(let c of r)for(let u of t(c)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),l.push(d))}r=l,yield a}}var Qs=O(()=>{});function Ni(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 Pi(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Qn(e){let t=String(e?.prop||"").toLowerCase();if(tf[t])return tf[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":null}function Xn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Bc(e){let t=Xn(e).split("/");return t[t.length-1]}function Nv(e){return(e?.derived_from||[]).filter(mf).length}function nf(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+Nv(e)}function nn(e,t){let n=Xn(t);if(!n)return{match:null,candidates:[]};let s=Bc(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Xn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(Bc(a)===s||Bc(a).replace(/\.[a-z]+$/,"")===s)?c=80:a.includes(n)&&(c=Math.max(10,50-(a.length-n.length))),c>0&&r.push({ind:i,score:c})}return r.sort((i,a)=>a.score-i.score||nf(a.ind)-nf(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 Rt(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 Pv(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 sf(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Jn(e){let t=e||"Entity",n=Tn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function ut(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Kc(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Jn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(mf);o.length&&s.push(`attestation: touched by ${o.length} commit(s)`);for(let l of t.attributes||[])s.push(`attribute: ${l.key} = ${l.value}${l.prop?` [${l.prop}]`:""}`);let{out:r,incoming:i}=Pv(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:l,edges:c}of r)s.push(` ${sf(l)} (${c.length}) \u2192 ${ut(c.map(u=>u.objectLabel||u.object),of)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${sf(l)} (${c.length}) by ${ut(c.map(u=>u.subjectLabel||u.subject),of)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${ut(a,Mv)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${Jn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(Fv(e)),s.join(`
2
- `)}function Fv(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 No(e,t,{maxDepth:n=8}={}){let s=new Map,o=new Map,r=(a,l,c,u)=>{!a||!l||a===l||(s.has(a)||s.set(a,[]),s.get(a).push({id:l,label:c,via:u}))};for(let a of e.relations){let l=Qn(a);if(l==="imports"||l==="calls")for(let c of a.edges)r(c.object,c.subject,c.subjectLabel||c.subject,a.predicate);else if(l==="callsSymbol")for(let c of a.edges){let u=Yn(e,c.subject),d=Yn(e,c.object);if(!u||!d)continue;let f=e.byId.get(u)?.label||u;r(d,u,f,a.predicate),u!==d&&r(c.object,u,f,a.predicate)}else if(l==="tests")for(let c of a.edges)o.has(c.object)||o.set(c.object,[]),o.get(c.object).push(c.subjectLabel||c.subject)}let i=[];for(let a of Ci(t.id,l=>s.get(l)||[],{maxDepth:n,keyOf:l=>l.id})){if(!a.length)continue;let l=a.map(c=>({...c,tests:o.get(c.id)||[]})).sort((c,u)=>String(c.label).localeCompare(String(u.label)));i.push(l)}return i}function gf(e,t,{maxDepth:n=8}={}){let s=No(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,l)=>a+l.length,0);s.length&&o.push(`total: ${r} dependent(s) across ${s.length} depth level(s) (lists capped for brevity).`),s.forEach((a,l)=>{if(l>=Dv){o.push(`depth ${l+1}: ${a.length} more dependent(s) (not listed)`);return}o.push(l===0?`depth 1 (${a.length} direct dependents):`:`depth ${l+1} (${a.length}):`);for(let c of a.slice(0,Wc)){let u=c.tests.length?`tests: ${ut(c.tests,zv)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Wc&&o.push(` \u2026+${a.length-Wc} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=Qn({predicate:a.predicate});return l==="imports"||l==="calls"||l==="callsSymbol"||l==="tests"});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 bf(e){let t=new Map;for(let n of e.relations)if(Qn(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 af(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function xf(e,t,n=null){let s=n||(i=>Yn(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 Ee(e,i))r(s(a.subject),s(a.object));return o}function xx(e,t,n){if(t.length<2)return;let s=new Map(t.map(c=>[c.ind.id,c])),o=new Map(t.map(c=>[c.ind.id,c.score])),r=c=>{if(!c.size)return[[],[]];let u=0;for(let h of c.values())u=Math.max(u,h);let d=[...c.entries()].sort((h,m)=>m[1]-h[1]),f=[],p=[];for(let[h,m]of d)m>=u*px&&f.length<n?f.push([h,m]):p.length<rf&&p.push([h,m]);return[f,p]},[i,a]=r(new Map(t.map(c=>[c.ind.id,c.score]))),l=new Set(i.map(([c])=>c));for(let c=0;c<mx&&i.length;c++){let u=new Map,d=[];for(let f of gx){let p=xf(e,f),h=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&h.set(w,Math.max(h.get(w)||0,y));let[m,g]=r(h);for(let[b,y]of m)u.set(b,Math.max(u.get(b)||0,y));d.push(...g)}a.push(...d);for(let[f,p]of u){if(l.has(f))continue;let h=s.get(f);h&&(h.score+=Math.min(p*fx,h.score*hx),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,rf).filter(([f])=>!l.has(f)))}}function Ex(e,t=[],{depth:n=yf,q:s=vf,nodeLimit:o=$f,kinds:r=bx,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(E=>[E.ind.id,E])),d=0;for(let E of t)d=Math.max(d,E.score);let f=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let h=xf(e,r,a),m=E=>h.get(E)?.size||0,g=[],b=(E,R)=>E.hop!==R.hop?E.hop<R.hop:E.deg!==R.deg?E.deg<R.deg:E.id<R.id,y=(E,R)=>{let j=g[E];g[E]=g[R],g[R]=j},w=E=>{g.push(E);let R=g.length-1;for(;R>0;){let j=R-1>>1;if(b(g[R],g[j]))y(R,j),R=j;else break}},v=()=>{let E=g[0],R=g.pop();if(g.length){g[0]=R;let j=0;for(;;){let A=2*j+1,F=2*j+2,T=j;if(A<g.length&&b(g[A],g[T])&&(T=A),F<g.length&&b(g[F],g[T])&&(T=F),T===j)break;y(j,T),j=T}}return E},_=new Set(p);for(let E of p)w({id:E,hop:0,deg:m(E)});let $=null,x=0,S=[];for(;g.length&&x<o;){let E=v();if(S.push({id:E.id,hop:E.hop}),!p.has(E.id)){if(f){let A=d*wx*Math.pow(yx,E.hop-1),F=u.get(E.id);if(F)F.score+=Math.min(A*$x,F.score*vx);else{let T=e.byId?.get?.(E.id);if(T&&i(T)){$||($=bf(e));let M=$.get(T.id)||[],z={ind:T,score:A,defineCount:M.length,matching:[],density:0};t.push(z),u.set(E.id,z)}}}x++}if(E.hop>=n||E.hop>0&&m(E.id)>c)continue;let R=[];for(let A of h.get(E.id)||[]){if(_.has(A))continue;let F=e.byId?.get?.(A);!F||!i(F)||R.push({id:A,deg:m(A)})}if(!R.length)continue;R.sort((A,F)=>A.deg-F.deg||(A.id<F.id?-1:A.id>F.id?1:0));let j=Math.max(1,Math.floor(s*R.length));for(let A=0;A<j;A++){let F=R[A];_.add(F.id),w({id:F.id,hop:E.hop+1,deg:F.deg})}}return S}function Ef(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:l=!1,proseLayers:c=!1,literalMention:u=!1,rawQuery:d=""}=n,f=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,p=bf(e),h=[];for(let v of e.individuals){if((v.class||"")!=="Module")continue;let _=String(v.label),$=_.toLowerCase(),x=p.get(v.id)||[],S=new Set(x.map(j=>j.toLowerCase())),E=new Set;for(let j of x)for(let A of af(j))E.add(A);let R=u?String((v.attributes||[]).find(j=>j.key==="dotted")?.value||"").toLowerCase():"";h.push({ind:v,label:_,labelLc:$,defines:x,symSet:S,symComps:E,dotted:R})}let m=h.length||1,g=new Map,b=v=>{let _=0;for(let $ of h)($.labelLc.includes(v)||$.symComps.has(v)||$.symSet.has(v))&&_++;return _},y=v=>(g.has(v)||g.set(v,Dc(m,b(v))),g.get(v));for(let v of t)y(v);let w=[];for(let v of h){let _=0,$=0,x=0,S=[];for(let F of t){let T=g.get(F)||0;T&&(v.symSet.has(F)?(_+=T*wf,x++):v.symComps.has(F)&&(S.push(T),x++),v.labelLc.includes(F)&&($+=T*Bv))}S.sort((F,T)=>T-F);let E=0;for(let F=0;F<Math.min(S.length,Gv);F++)E+=S[F]*Wv;let R=_+$+E;if(!R)continue;s&&(Js(v.labelLc)||Kv(v.labelLc))?R*=Hv:Js(v.labelLc)&&(R*=.4);let j=v.defines.filter(F=>{let T=F.toLowerCase(),M=af(F);return t.some(z=>T===z||M.has(z))}),A=v.defines.length?x/v.defines.length:0;w.push({ind:v.ind,score:R,defineCount:v.defines.length,matching:j,density:A})}if(u&&d&&w.length){let v=String(d).toLowerCase(),_=E=>E!=null&&/[a-z0-9_./]/.test(E),$=E=>{for(let R=v.indexOf(E);R!==-1;R=v.indexOf(E,R+1))if(!_(v[R-1])&&!_(v[R+E.length]))return!0;return!1},x=new Map(h.map(E=>[E.ind.id,E])),S=0;for(let E of w)S=Math.max(S,E.score);for(let E of w){let R=x.get(E.ind.id);if(!R)continue;let j=0;for(let A of new Set([R.dotted,R.labelLc])){if(!A||A.split(/[./]+/).filter(Boolean).length<cx||!$(A))continue;let F=[...new Set(A.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((M,z)=>z-M),T=0;for(let M=0;M<Math.min(F.length,lx);M++)T+=F[M]*ax;j=Math.max(j,T)}j&&(E.score+=Math.min(j*ux,S*dx))}}if(w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of Ee(e,"imports"))!v.has($.subject)&&!v.has($.object)||(_.has($.subject)||_.set($.subject,new Set),_.has($.object)||_.set($.object,new Set),_.get($.subject).add($.object),_.get($.object).add($.subject));for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*Vv,$.score*qv)}}if(o&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of["calls","callsSymbol"])for(let x of Ee(e,$)){let S=Yn(e,x.subject),E=Yn(e,x.object);!S||!E||S===E||!v.has(S)&&!v.has(E)||(_.has(S)||_.set(S,new Set),_.has(E)||_.set(E,new Set),_.get(S).add(E),_.get(E).add(S))}for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*Yv,$.score*Xv)}}if(r&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of e.individuals)($.class||"")==="Class"&&$.label&&_.set(String($.label),$);for(let $ of w){if(!Zv($.ind.label))continue;let x=0;for(let S of Ee(e,"inherits")){if(Yn(e,S.subject)!==$.ind.id||!ex(S.objectLabel))continue;let R=Yn(e,S.object);if(!R){let j=_.get(String(S.objectLabel||""));j&&(R=An(e,j))}R&&(x=Math.max(x,v.get(R)||0))}$.score+=Math.min(x*Jv,$.score*Qv)}}if(l&&w.length&&e.proseIndex){let v=Ys(e.proseIndex,t.join(" "),{limit:sx});if(v.length){let _=new Map;for(let{id:$,score:x}of v){let S=Yn(e,$);S&&_.set(S,(_.get(S)||0)+x)}for(let $ of w){let x=_.get($.ind.id)||0;x&&($.score+=Math.min(x*tx,$.score*nx))}}}if(c&&w.length&&e.proseIndex){let v=new Map(w.map(x=>[x.ind.id,x])),_=new Map(h.map(x=>[x.ind.id,x])),$=new Map;for(let x of new Set(t)){let S=g.get(x)||0;if(!S)continue;let{ids:E}=zp(e.proseIndex,x);if(!E.length)continue;let R=new Set;for(let j of E){let A=Yn(e,j);if(!A||R.has(A)||(R.add(A),!v.has(A)))continue;let F=_.get(A);F&&(F.symSet.has(x)||F.symComps.has(x)||F.labelLc.includes(x))||$.set(A,($.get(A)||0)+S*ix)}}for(let x of w){let S=$.get(x.ind.id)||0;S&&(x.score+=Math.min(S*ox,x.score*rx))}}return i&&w.length>1&&xx(e,w,f),a&&w.length&&Ex(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:yf,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:vf,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:$f}),w.sort((v,_)=>_.score-v.score||_.density-v.density||v.defineCount-_.defineCount||String(v.ind.label).length-String(_.ind.label).length),w}function Sf(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 Ef(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function kx(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let l=0;l<e.length;l++){let c=e[l];if(c==="\\"){let u=e[l+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),l+=1,r="",i=!1;continue}if(o){c==="]"&&(o=!1,r="]",i=!1);continue}if(c==="["){o=!0,r="[",i=!1;continue}if(c==="?"&&(r==="("||i)){r="?",i=!1;continue}if(c==="*"||c==="+"||c==="?"){a(),r=c;continue}if(c==="{"){let u=e.indexOf("}",l),d=u===-1?"":e.slice(l+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),l=u,r="}";continue}r="{",i=!1;continue}r=c,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function Yc(e,{now:t=Date.now}={}){let n=String(e);if(n.length>cf)return{error:`name pattern is ${n.length} characters; the limit is ${cf}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=kx(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>lf)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${lf}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(l){if(a===null)a=t()+uf;else if(t()>a)throw new Li(`name pattern "${n}" exceeded its ${uf}ms matching budget.`);return i.test(String(l).slice(0,Sx))}}}function kf(e,t,{limit:n=Mi,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),l=String(s||"").trim().toLowerCase(),c=String(o||"").trim().toLowerCase(),u=null;if(r){let h=Yc(r);if(h.error)return h.error;u=h}if(l&&l!=="module")try{return Ax(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(h){if(h instanceof Li)return h.message;throw h}if(!a.length&&!u&&!c)return"empty query";let d=Ef(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let f=d.slice(0,n),p=[`${d.length} module(s) match "${t}" (top ${f.length}):`];for(let{ind:h,defineCount:m,matching:g}of f){let b=g.length?` \u2014 matching: ${ut([...new Set(g)],Uv)}`:"";p.push(`- ${h.label} (defines ${m} symbol(s))${b}`)}return p.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),p.join(`
4
- `)}function Ee(e,t){let n=df.get(e);n||(n=new Map,df.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Qn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Yn(e,t){let n=e.byId?.get?.(t);if(n)return An(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function An(e,t){if((t?.class||"")==="Module")return t.id;let n=Rt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Xc(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function Lo(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function jf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Jn(t.class)} (id: ${t.id})`],o=Ee(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 l=e.byId.get(a.object),c=Xc(l?Rt(l):null),u=l?Lo(l):"",d=`${a.objectLabel||a.object}${c}${u?` @${u}`:""}`;((l?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${ut(r,pf)}`),i.length&&s.push(`attributes (${i.length}): ${ut(i,pf)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
- `)}function _f(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Rt(t),o=[`${t.label} \u2014 ${Jn(t.class)}${Xc(s)}`],r=Pe(t,"params"),i=Pe(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Pe(t,"isStatic")&&a.push("static"),Pe(t,"isAbstract")&&a.push("abstract"),Pe(t,"isConstant")&&a.push("constant");let l=Pe(t,"visibility");l&&a.push(l),a.length&&o.push(`flags: ${a.join(", ")}`);let c=Lo(t);c&&o.push(`decorators: @${c.split(", ").join(", @")}`);let u=Pe(t,"raises");u&&o.push(`raises: ${u}`);let d=Pe(t,"catches");d&&o.push(`catches: ${d}`);let f=Pe(t,"self_fields");f&&o.push(`self fields: ${f}`);let p=Pe(t,"value");p&&o.push(`value: ${p}`);let h=Pe(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 Rf(e,t){let n=Ee(e,"inherits"),s=n.filter(l=>l.subject===t.id).map(l=>l.objectLabel||l.object),o=new Map;for(let l of n)o.has(l.object)||o.set(l.object,[]),o.get(l.object).push({id:l.subject,label:l.subjectLabel||l.subject});let r=[`${t.label} \u2014 ${Jn(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${ut(s,ff)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Ci(t.id,c=>o.get(c)||[],{maxDepth:8,keyOf:c=>c.id}))l.length&&i.push(l.map(c=>c.label).sort((c,u)=>String(c).localeCompare(String(u))));let a=i.reduce((l,c)=>l+c.length,0);return a?(r.push(`subclasses: ${a} total across ${i.length} level(s).`),i.forEach((l,c)=>r.push(` depth ${c+1} (${l.length}): ${ut(l,ff)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
- `)}function Fi(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 Di(e,t=""){let n=Xn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Xn(s.label).startsWith(n)))}function Tf(e,{pkg:t=""}={}){let n=Xn(t),s=Di(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=Fi(s),r=new Map;for(let u of Ee(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,_x).map(([u,d])=>`${e.byId.get(u)?.label||u} (${d} importers)`),l=[...o.entries()].sort((u,d)=>d[1]-u[1]),c=[`Architecture${n?` of ${t}`:""}: ${s.length} module(s) in ${l.length} package(s).`];return c.push(`packages (by module count): ${ut(l.map(([u,d])=>`${u} (${d})`),jx)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
- `)}function If(e,t){let n=An(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||Rt(t)?.path||n,o=[...new Set(Ee(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
- ${ut(o,Af,`
1
+ (()=>{var iv=Object.defineProperty;var O=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Vn=(e,t)=>{for(var n in t)iv(e,n,{get:t[n],enumerable:!0})};var ct,qO,HO,KO,YO,XO,JO,QO,ZO,eL,tL,nL,sL,oL,rL,iL,aL,J,ye,Qt,xp,cL,lL,uL,Ue=O(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},qO=ct("createRequire"),HO=ct("readFileSync"),KO=ct("access"),YO=ct("readFile"),XO=ct("writeFile"),JO=ct("appendFile"),QO=ct("mkdir"),ZO=ct("mkdtemp"),eL=ct("rename"),tL=ct("unlink"),nL=ct("rm"),sL=ct("stat"),oL=ct("copyFile"),rL=ct("readdir"),iL=ct("createReadStream"),aL=ct("createWriteStream"),J=(...e)=>e.join("/"),ye=e=>String(e).replace(/\/[^/]*$/,""),Qt=(...e)=>e.join("/"),xp="/",cL=ct("randomBytes"),lL=ct("spawnSync"),uL=ct("createInterface")});var lt,pL,fL,_c,ze,vr,av,Rn,cv,Ei,Rc,lv,uv,hL,dv,mL,gL,bL,wL,yL,_t=O(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},pL=lt("createRequire"),fL=lt("readFileSync"),_c=lt("access"),ze=lt("readFile"),vr=lt("writeFile"),av=lt("appendFile"),Rn=lt("mkdir"),cv=lt("mkdtemp"),Ei=lt("rename"),Rc=lt("unlink"),lv=lt("rm"),uv=lt("stat"),hL=lt("copyFile"),dv=lt("readdir"),mL=lt("createReadStream"),gL=lt("createWriteStream"),bL=lt("randomBytes"),wL=lt("spawnSync"),yL=lt("createInterface")});function jo(e){let t=fv.exec(String(e||""));return t?t[1].toLowerCase():null}function Si(e){return String(e||"").replace(hv,"$1")}function ws(e){return e.replace(mv,"").trim()}function en(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(bv,"").trim();if(s=s.replace(yv,"").trim(),s===t)break;t=s}return t}var Ep,xr,Vs,Sp,kp,pv,fv,Er,Zt,Tc,hv,yn,Ac,mv,gv,bv,wv,yv,de,Sr,ki,$v,jp,Be,tn,ys,_p,Ic,Cc,Oc,Rp,kr,qs,Tp,Ap,Hs,qn,Hn,_o,Xe,Ip,Ks,Ys,$s,Tn,Cp,jr,Ro,ji,To,Op,Kn=O(()=>{Ep=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],xr={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","lives in","live in","is defined in","are defined in","is part of","are part of","sits in","sit in","sits inside","sit inside","containing"]},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",...Ep]},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"]}},Vs=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"})}),Sp=Object.freeze(Object.fromEntries(Object.entries(Vs).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),kp=Object.freeze(Object.values(Vs).map(e=>e.predicate)),pv=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),fv=new RegExp(`^mgx:[a-z]+-(${pv.join("|")})$`,"i");Er=Object.freeze([...Ep,"is the superclass of","are the superclass of","is the parent class of"]),Zt=Object.freeze(["defined","declared","located","implemented"]),Tc=Object.freeze(["now","currently","right now","at the moment","these days","today"]),hv=new RegExp(`\\s+(?:${[...Tc].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");yn=Object.freeze(["mentioned","referenced"]),Ac=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),mv=new RegExp(`\\s+(?:${Ac.join("|")})\\s*[?.!]*$`,"i");gv=Object.freeze(["then","though","too"]),bv=new RegExp(`\\s+(?:${gv.join("|")})\\s*[?.!]*$`,"i"),wv=Object.freeze(["please explain","explain"]),yv=new RegExp(`,\\s*(?:${wv.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(xr).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Sr=Object.freeze(new Set(["has","have","holds","hold"])),ki=Object.freeze(new Set(["search","describe","signature","impact","members","subclasses","exports","callers","callees","calls","tests","untested","history","cochanges","architecture","arch","related","sprite"])),$v=e=>!Er.includes(e),jp=Object.freeze([...new Set(Object.keys(de).filter($v).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),Be=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"}),tn=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),ys=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"}),_p=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"}}),Ic=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"}),Cc=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"}),Oc=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"}),Rp=/\b([a-z]{3,})in'/gi,kr=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"]),qs=Object.freeze(["this","it","that","here","this one","that one"]),Tp=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]}`}]),Ap=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`}]),Hs=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),qn=Object.freeze(["that","which","who"]),Hn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),_o=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"}),Xe=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}}),Ip=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Ks=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"]),Ys=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"]),$s=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"}),Tn=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"}}),Cp=Object.freeze({tests:"Module",test:"Module"}),jr=Object.freeze(["those","them","these"]),Ro=Object.freeze(["contains","defines"]),ji=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"]),To=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),Op=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 We,Ao,Lc=O(()=>{We="#000000",Ao=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${We}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${We}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${We}" 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="${We}" 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="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var vv,ln,Lp,Np,Nc,Pp,kL,jL,Mp=O(()=>{Kn();Lc();vv=()=>Object.keys(Ao).sort(),ln=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Lp=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Np=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),Nc=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:Zt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:ln("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:ln("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:Lp("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:Np("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:Np("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:vv(),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:Lp("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:ln("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:ln("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:ln("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:ln("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:ln("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:ln("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:ln("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:ln("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:ln("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:ln("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}}]),Pp=Nc.filter(e=>e.tier==="hot"),kL=Nc.filter(e=>e.tier==="cold"),jL=Object.freeze(Nc.map(e=>e.name))});var Fp,_e,Ut=O(()=>{Ue();Fp=J(".tmct","graph.json"),_e=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function xv(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 Dp(e){let t=(Array.isArray(e)?e:[]).map((l,c)=>({file:l?.file,payload:l?.payload||{},name:l?.name!=null&&String(l.name).length?String(l.name):String(c)})),n=t.map(({payload:l})=>xv(l)),s=new Map;for(let l of n)for(let c of l)s.set(c,(s.get(c)||0)+1);let o=new Set([...s.entries()].filter(([,l])=>l>1).map(([l])=>l)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:l,name:c}of t){a=a&&!!l.bootstrap,typeof l.generated_at=="string"&&l.generated_at>i&&(i=l.generated_at);let u=f=>o.has(f)?`${c}/${f}`:f;Array.isArray(l.classes)&&r.classes.push(...l.classes),Array.isArray(l.vocabulary)&&r.vocabulary.push(...l.vocabulary);for(let f of Array.isArray(l.individuals)?l.individuals:[]){if(!f)continue;let p={...f};p.id&&(p.id=u(p.id)),Array.isArray(p.derived_from)&&(p.derived_from=p.derived_from.map(h=>u(h))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(h=>h&&h.id?{...h,id:u(h.id)}:h)),r.individuals.push(p)}for(let f of Array.isArray(l.objectProperties)?l.objectProperties:[]){if(!f)continue;let p={...f};Array.isArray(p.examples)&&(p.examples=p.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(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let h=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let m of Array.isArray(p)?p:[]){let g=u(m);h.includes(g)||h.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var zp=O(()=>{});var Co={};Vn(Co,{clearCache:()=>Ev,emptyEntities:()=>Pc,fetchEntities:()=>_v,registerProvider:()=>Sv});function Ev(){Io=null,_r=null}function Sv(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=_i;return _i=e??null,Io=null,t}function Pc(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function kv(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return Pc();throw new _e(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new _e(`graph artifact ${e} is not valid JSON`)}}async function jv(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(_r&&_r.key===n)return _r.payload;let s=[];for(let r=0;r<t.length;r++){let i=await kv(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Dp(s);return _r={key:n,payload:o},o}async function _v(e){if(_i){let s;try{s=await _i(e)}catch(o){throw o instanceof _e?o:new _e(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new _e("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return jv(e);if(Io&&Io.file===e.graphFile)return Io.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return Pc();throw new _e(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new _e(`graph artifact ${e.graphFile} is not valid JSON`)}return Io={file:e.graphFile,payload:n},n}var Io,_r,_i,Rr=O(()=>{_t();Ut();zp();Io=null,_r=null,_i=null});function An(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<=Up)}function Mc(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>Up||Rv.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=Tv))break;return t}function Ri({name:e,doc:t}={}){return[...new Set([...An(e),...Mc(t)])].sort()}function Bp(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 Xs(e,t,{limit:n=10}={}){let s=[...new Set([...An(t),...Mc(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 Wp(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 l of Object.keys(s)){let c=s[l];if(!c||typeof c!="object")continue;let u=c[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let f of d)i.add(f);a.add(l)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var Rv,Up,Tv,vs=O(()=>{Rv=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+/)),Up=40,Tv=120});function Gp(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 Av(e){if(!e.startsWith(qp))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Vp);if(o<0)return null;let r=n.slice(o+Vp.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(qp.length,o),createdAt:s}:null}function Yn(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:Cv(r),pack:r,article:s.slice(o+1)}}if(t.startsWith("research:")){let s=t.slice(9),o=s.lastIndexOf("@");return{kind:"referenceLive",pack:"research",article:(o>=0?s.slice(0,o):s).trim()||"unknown"}}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:"))return{kind:"operator",...Gp(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=Av(s);return o||{kind:"teach",...Gp(s)}}return n.startsWith("web:")?{kind:"web",url:n.slice(4)}:n.startsWith("url:")?{kind:"web",url:n.slice(4)}:n.startsWith("optimistic-extract:")?{kind:"optimisticExtract",name:n.slice(19)||"unknown"}: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 Jp(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Kp;let n=Number(t);return Number.isFinite(n)?Math.max(Fc,Math.min(Xp,n)):Kp}function Qp(e,t=Date.now(),n=Ov){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Hp+(1-Hp)*Math.pow(.5,o/n)}function Zp(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 p of o){if(r.has(p))continue;r.add(p);let h=t[p],m=Lv(h);if(!m)continue;i.push(m);let g=(Js[m]??0)*Jp(h);a.push(Math.max(0,Math.min(1,g)))}let l=0,c=1;for(let p of a)c*=1-p;if(a.length&&(l=Math.min(1,1-c)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let p=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;l=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*p))}let u=Qp(e?.createdAt,s,n.halfLifeMs),d=Oo(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Oo(u)};return{score:d,inputs:f}}function Ai(e,t){let n=(Js[e]??0)*Jp(t);return Oo(Math.max(0,Math.min(1,n)))}function Nv(e){if(e==="operator")return 1;let t=Js[e];return t===void 0?1:(t+1)/2}function Ii(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 l=Qp(a?.assertedAt,n,t.halfLifeMs),c=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,c*l)),f=o.get(u)||{complement:1,strongest:0};f.complement*=1-d,f.strongest=Math.max(f.strongest,d),o.set(u,f),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:c,recency:Oo(l)})}let i=1;for(let[a,l]of o){let c=Math.max(Nv(a),l.strongest);i*=1-Math.min(1-l.complement,c)}return{score:s.length?Oo(Math.min(1,1-i)):0,inputs:r}}function ef(e){return Ii(e,{halfLifeMs:Pv})}function tf({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+Mv),i=(o*r+1)/2;return Oo(Fc+(Xp-Fc)*i)}var Lo,Ti,Je,xs,Vp,qp,Iv,Cv,Js,Dc,Yp,Ov,Hp,Fc,Xp,Kp,Oo,Lv,Pv,Mv,Xn=O(()=>{Lo="mgx:trustScore",Ti="mgx:trustInputs",Je="mgx:createdAt",xs="mgx:updatedAt";Vp="#node:",qp="peer:";Iv="wikipedia-live",Cv=e=>e===Iv?"referenceLive":"reference";Js=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Dc=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"}}),Yp=new Set(Object.entries(Dc).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),Ov=720*60*60*1e3,Hp=.9,Fc=.5,Xp=1.5,Kp=1,Oo=(e,t=6)=>Number(e.toFixed(t)),Lv=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";Pv=1/0;Mv=19});var Qs,zc=O(()=>{Qs=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Uc(e,t){return Math.log(1+e/(1+t))}var Tr=O(()=>{});var Oi={};Vn(Oi,{bfsLevels:()=>Ci,findActionPath:()=>Bc,findReachableSet:()=>Wc});function nf(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function sf(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 Bc(e,t,n,{maxDepth:s=50,stateKey:o=nf}={}){if(t(e))return{actions:[],states:[e]};let r=sf(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let c of r)if(t(c.state))return{actions:c.actions,states:c.states};if(a===s)break;let l=[];for(let c of r){let u=o(c.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:f}of n(c.state)||[]){let p=o(f);i.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}}r=l}return null}function Wc(e,t,{maxDepth:n=50,stateKey:s=nf}={}){let o=sf(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let l=[];for(let c of o){let u=s(c.state);if(!r.has(u)&&(r.add(u),i.push({node:c.state,path:{actions:c.actions,states:c.states}}),a!==n))for(let{action:d,nextState:f}of t(c.state)||[]){let p=s(f);r.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}o=l}return i}function*Ci(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=[],l=[];for(let c of r)for(let u of t(c)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),l.push(d))}r=l,yield a}}var Zs=O(()=>{});function Ni(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 Pi(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function es(e){let t=String(e?.prop||"").toLowerCase();if(of[t])return of[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":null}function Qn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Gc(e){let t=Qn(e).split("/");return t[t.length-1]}function Fv(e){return(e?.derived_from||[]).filter(wf).length}function rf(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+Fv(e)}function nn(e,t){let n=Qn(t);if(!n)return{match:null,candidates:[]};let s=Gc(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Qn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(Gc(a)===s||Gc(a).replace(/\.[a-z]+$/,"")===s)?c=80:a.includes(n)&&(c=Math.max(10,50-(a.length-n.length))),c>0&&r.push({ind:i,score:c})}return r.sort((i,a)=>a.score-i.score||rf(a.ind)-rf(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 Rt(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 Dv(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 af(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Zn(e){let t=e||"Entity",n=An(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function ut(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Xc(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Zn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(wf);o.length&&s.push(`attestation: touched by ${o.length} commit(s)`);for(let l of t.attributes||[])s.push(`attribute: ${l.key} = ${l.value}${l.prop?` [${l.prop}]`:""}`);let{out:r,incoming:i}=Dv(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:l,edges:c}of r)s.push(` ${af(l)} (${c.length}) \u2192 ${ut(c.map(u=>u.objectLabel||u.object),cf)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${af(l)} (${c.length}) by ${ut(c.map(u=>u.subjectLabel||u.subject),cf)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${ut(a,zv)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${Zn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(Uv(e)),s.join(`
2
+ `)}function Uv(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 Po(e,t,{maxDepth:n=8}={}){let s=new Map,o=new Map,r=(a,l,c,u)=>{!a||!l||a===l||(s.has(a)||s.set(a,[]),s.get(a).push({id:l,label:c,via:u}))};for(let a of e.relations){let l=es(a);if(l==="imports"||l==="calls")for(let c of a.edges)r(c.object,c.subject,c.subjectLabel||c.subject,a.predicate);else if(l==="callsSymbol")for(let c of a.edges){let u=Jn(e,c.subject),d=Jn(e,c.object);if(!u||!d)continue;let f=e.byId.get(u)?.label||u;r(d,u,f,a.predicate),u!==d&&r(c.object,u,f,a.predicate)}else if(l==="tests")for(let c of a.edges)o.has(c.object)||o.set(c.object,[]),o.get(c.object).push(c.subjectLabel||c.subject)}let i=[];for(let a of Ci(t.id,l=>s.get(l)||[],{maxDepth:n,keyOf:l=>l.id})){if(!a.length)continue;let l=a.map(c=>({...c,tests:o.get(c.id)||[]})).sort((c,u)=>String(c.label).localeCompare(String(u.label)));i.push(l)}return i}function yf(e,t,{maxDepth:n=8}={}){let s=Po(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,l)=>a+l.length,0);s.length&&o.push(`total: ${r} dependent(s) across ${s.length} depth level(s) (lists capped for brevity).`),s.forEach((a,l)=>{if(l>=Bv){o.push(`depth ${l+1}: ${a.length} more dependent(s) (not listed)`);return}o.push(l===0?`depth 1 (${a.length} direct dependents):`:`depth ${l+1} (${a.length}):`);for(let c of a.slice(0,Vc)){let u=c.tests.length?`tests: ${ut(c.tests,Wv)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Vc&&o.push(` \u2026+${a.length-Vc} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=es({predicate:a.predicate});return l==="imports"||l==="calls"||l==="callsSymbol"||l==="tests"});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 $f(e){let t=new Map;for(let n of e.relations)if(es(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 uf(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function kf(e,t,n=null){let s=n||(i=>Jn(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 Ee(e,i))r(s(a.subject),s(a.object));return o}function kx(e,t,n){if(t.length<2)return;let s=new Map(t.map(c=>[c.ind.id,c])),o=new Map(t.map(c=>[c.ind.id,c.score])),r=c=>{if(!c.size)return[[],[]];let u=0;for(let h of c.values())u=Math.max(u,h);let d=[...c.entries()].sort((h,m)=>m[1]-h[1]),f=[],p=[];for(let[h,m]of d)m>=u*mx&&f.length<n?f.push([h,m]):p.length<lf&&p.push([h,m]);return[f,p]},[i,a]=r(new Map(t.map(c=>[c.ind.id,c.score]))),l=new Set(i.map(([c])=>c));for(let c=0;c<wx&&i.length;c++){let u=new Map,d=[];for(let f of yx){let p=kf(e,f),h=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&h.set(w,Math.max(h.get(w)||0,y));let[m,g]=r(h);for(let[b,y]of m)u.set(b,Math.max(u.get(b)||0,y));d.push(...g)}a.push(...d);for(let[f,p]of u){if(l.has(f))continue;let h=s.get(f);h&&(h.score+=Math.min(p*gx,h.score*bx),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,lf).filter(([f])=>!l.has(f)))}}function jx(e,t=[],{depth:n=xf,q:s=Sf,nodeLimit:o=Ef,kinds:r=$x,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(E=>[E.ind.id,E])),d=0;for(let E of t)d=Math.max(d,E.score);let f=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let h=kf(e,r,a),m=E=>h.get(E)?.size||0,g=[],b=(E,R)=>E.hop!==R.hop?E.hop<R.hop:E.deg!==R.deg?E.deg<R.deg:E.id<R.id,y=(E,R)=>{let j=g[E];g[E]=g[R],g[R]=j},w=E=>{g.push(E);let R=g.length-1;for(;R>0;){let j=R-1>>1;if(b(g[R],g[j]))y(R,j),R=j;else break}},v=()=>{let E=g[0],R=g.pop();if(g.length){g[0]=R;let j=0;for(;;){let A=2*j+1,F=2*j+2,T=j;if(A<g.length&&b(g[A],g[T])&&(T=A),F<g.length&&b(g[F],g[T])&&(T=F),T===j)break;y(j,T),j=T}}return E},_=new Set(p);for(let E of p)w({id:E,hop:0,deg:m(E)});let $=null,x=0,S=[];for(;g.length&&x<o;){let E=v();if(S.push({id:E.id,hop:E.hop}),!p.has(E.id)){if(f){let A=d*vx*Math.pow(xx,E.hop-1),F=u.get(E.id);if(F)F.score+=Math.min(A*Ex,F.score*Sx);else{let T=e.byId?.get?.(E.id);if(T&&i(T)){$||($=$f(e));let P=$.get(T.id)||[],z={ind:T,score:A,defineCount:P.length,matching:[],density:0};t.push(z),u.set(E.id,z)}}}x++}if(E.hop>=n||E.hop>0&&m(E.id)>c)continue;let R=[];for(let A of h.get(E.id)||[]){if(_.has(A))continue;let F=e.byId?.get?.(A);!F||!i(F)||R.push({id:A,deg:m(A)})}if(!R.length)continue;R.sort((A,F)=>A.deg-F.deg||(A.id<F.id?-1:A.id>F.id?1:0));let j=Math.max(1,Math.floor(s*R.length));for(let A=0;A<j;A++){let F=R[A];_.add(F.id),w({id:F.id,hop:E.hop+1,deg:F.deg})}}return S}function jf(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:l=!1,proseLayers:c=!1,literalMention:u=!1,rawQuery:d=""}=n,f=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,p=$f(e),h=[];for(let v of e.individuals){if((v.class||"")!=="Module")continue;let _=String(v.label),$=_.toLowerCase(),x=p.get(v.id)||[],S=new Set(x.map(j=>j.toLowerCase())),E=new Set;for(let j of x)for(let A of uf(j))E.add(A);let R=u?String((v.attributes||[]).find(j=>j.key==="dotted")?.value||"").toLowerCase():"";h.push({ind:v,label:_,labelLc:$,defines:x,symSet:S,symComps:E,dotted:R})}let m=h.length||1,g=new Map,b=v=>{let _=0;for(let $ of h)($.labelLc.includes(v)||$.symComps.has(v)||$.symSet.has(v))&&_++;return _},y=v=>(g.has(v)||g.set(v,Uc(m,b(v))),g.get(v));for(let v of t)y(v);let w=[];for(let v of h){let _=0,$=0,x=0,S=[];for(let F of t){let T=g.get(F)||0;T&&(v.symSet.has(F)?(_+=T*vf,x++):v.symComps.has(F)&&(S.push(T),x++),v.labelLc.includes(F)&&($+=T*Vv))}S.sort((F,T)=>T-F);let E=0;for(let F=0;F<Math.min(S.length,Hv);F++)E+=S[F]*qv;let R=_+$+E;if(!R)continue;s&&(Qs(v.labelLc)||Jv(v.labelLc))?R*=Xv:Qs(v.labelLc)&&(R*=.4);let j=v.defines.filter(F=>{let T=F.toLowerCase(),P=uf(F);return t.some(z=>T===z||P.has(z))}),A=v.defines.length?x/v.defines.length:0;w.push({ind:v.ind,score:R,defineCount:v.defines.length,matching:j,density:A})}if(u&&d&&w.length){let v=String(d).toLowerCase(),_=E=>E!=null&&/[a-z0-9_./]/.test(E),$=E=>{for(let R=v.indexOf(E);R!==-1;R=v.indexOf(E,R+1))if(!_(v[R-1])&&!_(v[R+E.length]))return!0;return!1},x=new Map(h.map(E=>[E.ind.id,E])),S=0;for(let E of w)S=Math.max(S,E.score);for(let E of w){let R=x.get(E.ind.id);if(!R)continue;let j=0;for(let A of new Set([R.dotted,R.labelLc])){if(!A||A.split(/[./]+/).filter(Boolean).length<dx||!$(A))continue;let F=[...new Set(A.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((P,z)=>z-P),T=0;for(let P=0;P<Math.min(F.length,px);P++)T+=F[P]*ux;j=Math.max(j,T)}j&&(E.score+=Math.min(j*fx,S*hx))}}if(w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of Ee(e,"imports"))!v.has($.subject)&&!v.has($.object)||(_.has($.subject)||_.set($.subject,new Set),_.has($.object)||_.set($.object,new Set),_.get($.subject).add($.object),_.get($.object).add($.subject));for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*Kv,$.score*Yv)}}if(o&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of["calls","callsSymbol"])for(let x of Ee(e,$)){let S=Jn(e,x.subject),E=Jn(e,x.object);!S||!E||S===E||!v.has(S)&&!v.has(E)||(_.has(S)||_.set(S,new Set),_.has(E)||_.set(E,new Set),_.get(S).add(E),_.get(E).add(S))}for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*Qv,$.score*Zv)}}if(r&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of e.individuals)($.class||"")==="Class"&&$.label&&_.set(String($.label),$);for(let $ of w){if(!nx($.ind.label))continue;let x=0;for(let S of Ee(e,"inherits")){if(Jn(e,S.subject)!==$.ind.id||!sx(S.objectLabel))continue;let R=Jn(e,S.object);if(!R){let j=_.get(String(S.objectLabel||""));j&&(R=In(e,j))}R&&(x=Math.max(x,v.get(R)||0))}$.score+=Math.min(x*ex,$.score*tx)}}if(l&&w.length&&e.proseIndex){let v=Xs(e.proseIndex,t.join(" "),{limit:ix});if(v.length){let _=new Map;for(let{id:$,score:x}of v){let S=Jn(e,$);S&&_.set(S,(_.get(S)||0)+x)}for(let $ of w){let x=_.get($.ind.id)||0;x&&($.score+=Math.min(x*ox,$.score*rx))}}}if(c&&w.length&&e.proseIndex){let v=new Map(w.map(x=>[x.ind.id,x])),_=new Map(h.map(x=>[x.ind.id,x])),$=new Map;for(let x of new Set(t)){let S=g.get(x)||0;if(!S)continue;let{ids:E}=Wp(e.proseIndex,x);if(!E.length)continue;let R=new Set;for(let j of E){let A=Jn(e,j);if(!A||R.has(A)||(R.add(A),!v.has(A)))continue;let F=_.get(A);F&&(F.symSet.has(x)||F.symComps.has(x)||F.labelLc.includes(x))||$.set(A,($.get(A)||0)+S*lx)}}for(let x of w){let S=$.get(x.ind.id)||0;S&&(x.score+=Math.min(S*ax,x.score*cx))}}return i&&w.length>1&&kx(e,w,f),a&&w.length&&jx(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:xf,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:Sf,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:Ef}),w.sort((v,_)=>_.score-v.score||_.density-v.density||v.defineCount-_.defineCount||String(v.ind.label).length-String(_.ind.label).length),w}function _f(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 jf(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function Rx(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let l=0;l<e.length;l++){let c=e[l];if(c==="\\"){let u=e[l+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),l+=1,r="",i=!1;continue}if(o){c==="]"&&(o=!1,r="]",i=!1);continue}if(c==="["){o=!0,r="[",i=!1;continue}if(c==="?"&&(r==="("||i)){r="?",i=!1;continue}if(c==="*"||c==="+"||c==="?"){a(),r=c;continue}if(c==="{"){let u=e.indexOf("}",l),d=u===-1?"":e.slice(l+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),l=u,r="}";continue}r="{",i=!1;continue}r=c,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function Jc(e,{now:t=Date.now}={}){let n=String(e);if(n.length>df)return{error:`name pattern is ${n.length} characters; the limit is ${df}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=Rx(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>pf)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${pf}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(l){if(a===null)a=t()+ff;else if(t()>a)throw new Li(`name pattern "${n}" exceeded its ${ff}ms matching budget.`);return i.test(String(l).slice(0,_x))}}}function Rf(e,t,{limit:n=Mi,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),l=String(s||"").trim().toLowerCase(),c=String(o||"").trim().toLowerCase(),u=null;if(r){let h=Jc(r);if(h.error)return h.error;u=h}if(l&&l!=="module")try{return Ox(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(h){if(h instanceof Li)return h.message;throw h}if(!a.length&&!u&&!c)return"empty query";let d=jf(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let f=d.slice(0,n),p=[`${d.length} module(s) match "${t}" (top ${f.length}):`];for(let{ind:h,defineCount:m,matching:g}of f){let b=g.length?` \u2014 matching: ${ut([...new Set(g)],Gv)}`:"";p.push(`- ${h.label} (defines ${m} symbol(s))${b}`)}return p.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),p.join(`
4
+ `)}function Ee(e,t){let n=hf.get(e);n||(n=new Map,hf.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(es(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Jn(e,t){let n=e.byId?.get?.(t);if(n)return In(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function In(e,t){if((t?.class||"")==="Module")return t.id;let n=Rt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Qc(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function No(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function Tf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Zn(t.class)} (id: ${t.id})`],o=Ee(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 l=e.byId.get(a.object),c=Qc(l?Rt(l):null),u=l?No(l):"",d=`${a.objectLabel||a.object}${c}${u?` @${u}`:""}`;((l?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${ut(r,mf)}`),i.length&&s.push(`attributes (${i.length}): ${ut(i,mf)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
+ `)}function Af(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Rt(t),o=[`${t.label} \u2014 ${Zn(t.class)}${Qc(s)}`],r=Pe(t,"params"),i=Pe(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Pe(t,"isStatic")&&a.push("static"),Pe(t,"isAbstract")&&a.push("abstract"),Pe(t,"isConstant")&&a.push("constant");let l=Pe(t,"visibility");l&&a.push(l),a.length&&o.push(`flags: ${a.join(", ")}`);let c=No(t);c&&o.push(`decorators: @${c.split(", ").join(", @")}`);let u=Pe(t,"raises");u&&o.push(`raises: ${u}`);let d=Pe(t,"catches");d&&o.push(`catches: ${d}`);let f=Pe(t,"self_fields");f&&o.push(`self fields: ${f}`);let p=Pe(t,"value");p&&o.push(`value: ${p}`);let h=Pe(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 If(e,t){let n=Ee(e,"inherits"),s=n.filter(l=>l.subject===t.id).map(l=>l.objectLabel||l.object),o=new Map;for(let l of n)o.has(l.object)||o.set(l.object,[]),o.get(l.object).push({id:l.subject,label:l.subjectLabel||l.subject});let r=[`${t.label} \u2014 ${Zn(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${ut(s,gf)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Ci(t.id,c=>o.get(c)||[],{maxDepth:8,keyOf:c=>c.id}))l.length&&i.push(l.map(c=>c.label).sort((c,u)=>String(c).localeCompare(String(u))));let a=i.reduce((l,c)=>l+c.length,0);return a?(r.push(`subclasses: ${a} total across ${i.length} level(s).`),i.forEach((l,c)=>r.push(` depth ${c+1} (${l.length}): ${ut(l,gf)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
+ `)}function Fi(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 Di(e,t=""){let n=Qn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Qn(s.label).startsWith(n)))}function Cf(e,{pkg:t=""}={}){let n=Qn(t),s=Di(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=Fi(s),r=new Map;for(let u of Ee(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,Ax).map(([u,d])=>`${e.byId.get(u)?.label||u} (${d} importers)`),l=[...o.entries()].sort((u,d)=>d[1]-u[1]),c=[`Architecture${n?` of ${t}`:""}: ${s.length} module(s) in ${l.length} package(s).`];return c.push(`packages (by module count): ${ut(l.map(([u,d])=>`${u} (${d})`),Tx)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
+ `)}function Lf(e,t){let n=In(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||Rt(t)?.path||n,o=[...new Set(Ee(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
+ ${ut(o,Of,`
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
- ${Rx}`}function Cf(e){let t=new Set,n=new Set;for(let r of Ee(e,"tests"))t.add(r.object),n.add(r.subject);let s=e.individuals.filter(r=>(r.class||"")==="Module"&&!n.has(r.id)&&!Js(String(r.label).toLowerCase()));if(!s.length)return Pi(e)===0?`no modules to check for test coverage in this index. ${Hc}`:"no source modules to check for test coverage in this index \u2014 only test modules are recorded.";let o=s.filter(r=>!t.has(r.id)).map(r=>r.label).sort();return o.length?`${o.length} source module(s) with no covering test module:
13
- ${ut(o,Af,`
14
- `)}`:"every source module has at least one covering test module."}function Of(e,t){let n=An(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ee(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${ut(o,Bt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Nf(e,t,{toolNamePrefix:n="tmct_"}={}){if(Lf.has(t.class)){let i=[...new Set(Ee(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
- ${ut(i,Tr,`
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=An(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Ee(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
- ${ut(r,Tr,`
18
- `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function Pf(e,t){if(Lf.has(t.class)){let r=[...new Set(Ee(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
- ${ut(r,Tr,`
20
- `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=An(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Ee(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
- ${ut(o,Tr,`
22
- `)}`:`${s}: no recorded callees.`}function Mf(e,t){let n=e.byId.get(t.object),s=n?Rt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function Jc(e,t){if(!t?.id)return"";let n=Ee(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${ut(n.map(s=>Mf(e,s)),Tx)}`:""}function Ff(e,t){let n=Ee(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Jn(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=>Mf(e,o));return`${t.label} \u2014 ${Jn(t.class)} calls ${n.length} in-repo symbol(s):
23
- ${ut(s,Tr,`
24
- `)}`}function Df(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Pe(s,"commitDate")||Pe(s,"date"),i=Pe(s,"commitAuthor")||Pe(s,"author"),a=Pe(s,"commitMessage")||Pe(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function zf(e,t){let n=An(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ee(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,Bt).map(a=>` ${Df(e,a.subject,a.subjectLabel)}`),i=o.length>Bt?`
12
+ ${Ix}`}function Nf(e){let t=new Set,n=new Set;for(let r of Ee(e,"tests"))t.add(r.object),n.add(r.subject);let s=e.individuals.filter(r=>(r.class||"")==="Module"&&!n.has(r.id)&&!Qs(String(r.label).toLowerCase()));if(!s.length)return Pi(e)===0?`no modules to check for test coverage in this index. ${Yc}`:"no source modules to check for test coverage in this index \u2014 only test modules are recorded.";let o=s.filter(r=>!t.has(r.id)).map(r=>r.label).sort();return o.length?`${o.length} source module(s) with no covering test module:
13
+ ${ut(o,Of,`
14
+ `)}`:"every source module has at least one covering test module."}function Pf(e,t){let n=In(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ee(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${ut(o,Bt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Ff(e,t,{toolNamePrefix:n="tmct_"}={}){if(Mf.has(t.class)){let i=[...new Set(Ee(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
+ ${ut(i,Ar,`
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=In(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Ee(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
+ ${ut(r,Ar,`
18
+ `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function Df(e,t){if(Mf.has(t.class)){let r=[...new Set(Ee(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
+ ${ut(r,Ar,`
20
+ `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=In(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Ee(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
+ ${ut(o,Ar,`
22
+ `)}`:`${s}: no recorded callees.`}function zf(e,t){let n=e.byId.get(t.object),s=n?Rt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function Zc(e,t){if(!t?.id)return"";let n=Ee(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${ut(n.map(s=>zf(e,s)),Cx)}`:""}function Uf(e,t){let n=Ee(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Zn(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=>zf(e,o));return`${t.label} \u2014 ${Zn(t.class)} calls ${n.length} in-repo symbol(s):
23
+ ${ut(s,Ar,`
24
+ `)}`}function Bf(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Pe(s,"commitDate")||Pe(s,"date"),i=Pe(s,"commitAuthor")||Pe(s,"author"),a=Pe(s,"commitMessage")||Pe(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Wf(e,t){let n=In(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ee(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,Bt).map(a=>` ${Bf(e,a.subject,a.subjectLabel)}`),i=o.length>Bt?`
25
25
  \u2026+${o.length-Bt} more`:"";return`${s}: touched by ${o.length} recent commit(s):
26
26
  ${r.join(`
27
- `)}${i}`}function Uf(e,t){let n=Ee(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Jn(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,Bt).map(r=>` ${Df(e,r.subject,r.subjectLabel)}`),o=n.length>Bt?`
28
- \u2026+${n.length-Bt} more`:"";return`${t.label} \u2014 ${Jn(t.class)}: touched by ${n.length} commit(s):
27
+ `)}${i}`}function Gf(e,t){let n=Ee(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Zn(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,Bt).map(r=>` ${Bf(e,r.subject,r.subjectLabel)}`),o=n.length>Bt?`
28
+ \u2026+${n.length-Bt} more`:"";return`${t.label} \u2014 ${Zn(t.class)}: touched by ${n.length} commit(s):
29
29
  ${s.join(`
30
- `)}${o}`}function Bf(e,t){return Uf(e,t)}function Wf(e,t){return Uf(e,t)}function Qc(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Gf[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!Lo(a).toLowerCase().includes(s))continue;let l=String(a.label).toLowerCase(),c=t.length?0:1;for(let u of t)l.includes(u)&&(c+=5);t.length&&!c||i.push({ind:a,score:c})}return i.sort((a,l)=>l.score-a.score||String(a.ind.label).length-String(l.ind.label).length),i}function Ax(e,t,{limit:n=Mi,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Gf[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=Qc(e,t,{kind:s,decFilter:o,nameRe:r});if(!l.length)return`no ${s} matches the given filters.`;let c=l.slice(0,n),u=[`${l.length} ${s}(s) match (top ${c.length}):`];for(let{ind:d}of c)u.push(`- ${d.label}${Xc(Rt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
- `)}function zx(e){return{paramCount:zi(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function Ux(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>zi(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:Dx(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function Bx(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(zi(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 Wx(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Gc(f.decorators))r.set(p,(r.get(p)||0)+1);let i="",a=1;for(let[f,p]of r)p>a&&(a=p,i=f);let l=new Set(Gc(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(hf(n)),d=s?.start??null;for(let f of e){let p=Gc(f.decorators).some(b=>c.has(b))?1:0,h=hf(f.label).filter(b=>u.has(b)).length,m=Bx(f,o),g=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+h*50+m+g}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function Po(e,t){let n=An(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Ee(e,"defines").filter(j=>j.subject===n),r=new Map;for(let j of Ee(e,"callsSymbol"))r.has(j.subject)||r.set(j.subject,new Set),r.get(j.subject).add(j.object);let i=[],a=[],l=0;for(let j of o){let A=e.byId.get(j.object);if(!A)continue;let F=A.class||"",T=Rt(A);F==="GlobalVariable"?(a.push({label:A.label,value:(A.attributes||[]).find(M=>M.key==="value")?.value||"",site:T}),T&&(l=Math.max(l,T.end))):(F==="Function"||F==="Class")&&(i.push({id:A.id,label:A.label,class:F,site:T,decorators:Lo(A),raises:Pe(A,"raises"),doc:Pe(A,"doc"),params:Pe(A,"params"),returns:Pe(A,"returns"),callees:r.get(A.id)||new Set}),T&&(l=Math.max(l,T.end)))}let c=Rt(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:Lo(t),raises:Pe(t,"raises"),params:Pe(t,"params"),returns:Pe(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?zx(u):Ux(i);i=Wx(i,u||{label:t.label},f);let p=u?null:i.find(j=>j.site&&j.label!==t.label)||null,h=[...new Set(Ee(e,"tests").filter(j=>j.object===n).map(j=>j.subjectLabel||j.subject))].slice(0,Lx),m=Kf(e,n).slice(0,Ox),g=Ee(e,"reexports").filter(j=>j.subject===n).map(j=>j.objectLabel||j.object).slice(0,20),b=Pe(e.byId.get(n),"all"),y=Ee(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(j=>j.object===t.id)?.subject||null);let v=null;if(w){let j=e.byId.get(w),A=y.filter(F=>F.subject===w).map(F=>{let T=e.byId.get(F.object);return{label:F.objectLabel||T?.label||F.object,class:T?.class||"",site:T?Rt(T):null,decorators:T?Lo(T):"",params:T?Pe(T,"params"):"",returns:T?Pe(T,"returns"):"",raises:T?Pe(T,"raises"):""}}).slice(0,Cx);v={className:j?.label||String(w).replace(/^fn:.*#/,""),members:A,total:y.filter(F=>F.subject===w).length}}let _=null;for(let j of[...i,...a])j.site&&(!_||j.site.start>_.start)&&(_=j.site);let $=_?{start:_.start,end:_.end}:null,x=u||p,S=x?.id?e.byId.get(x.id):null,E=S?Jc(e,S):"",R=[];if(x?.callees)for(let j of x.callees){let A=e.byId.get(j),F=A?Rt(A):null;if(F&&R.push({label:A.label,site:F}),R.length>=Fx)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:h,cochange:m,exports:g,allExports:b,classMembers:v,insertion:l,insertionRegion:$,calleeBodies:R,callHint:E,siblingCap:Ix}}function Zs(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 Vf(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 Ui(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=zi(s.params);(i>Nx||a>Px||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?Rt(d):null;if(f&&f.path!==e.moduleLabel){l=!0;break}}let c=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=Mx;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:Zs(o),topup:o!=="TINY"}}function qf(e){let t=[`Additional context for ${e.moduleLabel} (sections omitted from the lean bundle):`];if(e.classMembers&&e.classMembers.members.length){t.push(`
30
+ `)}${o}`}function Vf(e,t){return Gf(e,t)}function qf(e,t){return Gf(e,t)}function el(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Hf[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!No(a).toLowerCase().includes(s))continue;let l=String(a.label).toLowerCase(),c=t.length?0:1;for(let u of t)l.includes(u)&&(c+=5);t.length&&!c||i.push({ind:a,score:c})}return i.sort((a,l)=>l.score-a.score||String(a.ind.label).length-String(l.ind.label).length),i}function Ox(e,t,{limit:n=Mi,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Hf[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=el(e,t,{kind:s,decFilter:o,nameRe:r});if(!l.length)return`no ${s} matches the given filters.`;let c=l.slice(0,n),u=[`${l.length} ${s}(s) match (top ${c.length}):`];for(let{ind:d}of c)u.push(`- ${d.label}${Qc(Rt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
+ `)}function Wx(e){return{paramCount:zi(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function Gx(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>zi(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:Bx(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function Vx(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(zi(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 qx(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of qc(f.decorators))r.set(p,(r.get(p)||0)+1);let i="",a=1;for(let[f,p]of r)p>a&&(a=p,i=f);let l=new Set(qc(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(bf(n)),d=s?.start??null;for(let f of e){let p=qc(f.decorators).some(b=>c.has(b))?1:0,h=bf(f.label).filter(b=>u.has(b)).length,m=Vx(f,o),g=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+h*50+m+g}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function Mo(e,t){let n=In(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Ee(e,"defines").filter(j=>j.subject===n),r=new Map;for(let j of Ee(e,"callsSymbol"))r.has(j.subject)||r.set(j.subject,new Set),r.get(j.subject).add(j.object);let i=[],a=[],l=0;for(let j of o){let A=e.byId.get(j.object);if(!A)continue;let F=A.class||"",T=Rt(A);F==="GlobalVariable"?(a.push({label:A.label,value:(A.attributes||[]).find(P=>P.key==="value")?.value||"",site:T}),T&&(l=Math.max(l,T.end))):(F==="Function"||F==="Class")&&(i.push({id:A.id,label:A.label,class:F,site:T,decorators:No(A),raises:Pe(A,"raises"),doc:Pe(A,"doc"),params:Pe(A,"params"),returns:Pe(A,"returns"),callees:r.get(A.id)||new Set}),T&&(l=Math.max(l,T.end)))}let c=Rt(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:No(t),raises:Pe(t,"raises"),params:Pe(t,"params"),returns:Pe(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?Wx(u):Gx(i);i=qx(i,u||{label:t.label},f);let p=u?null:i.find(j=>j.site&&j.label!==t.label)||null,h=[...new Set(Ee(e,"tests").filter(j=>j.object===n).map(j=>j.subjectLabel||j.subject))].slice(0,Mx),m=Jf(e,n).slice(0,Px),g=Ee(e,"reexports").filter(j=>j.subject===n).map(j=>j.objectLabel||j.object).slice(0,20),b=Pe(e.byId.get(n),"all"),y=Ee(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(j=>j.object===t.id)?.subject||null);let v=null;if(w){let j=e.byId.get(w),A=y.filter(F=>F.subject===w).map(F=>{let T=e.byId.get(F.object);return{label:F.objectLabel||T?.label||F.object,class:T?.class||"",site:T?Rt(T):null,decorators:T?No(T):"",params:T?Pe(T,"params"):"",returns:T?Pe(T,"returns"):"",raises:T?Pe(T,"raises"):""}}).slice(0,Nx);v={className:j?.label||String(w).replace(/^fn:.*#/,""),members:A,total:y.filter(F=>F.subject===w).length}}let _=null;for(let j of[...i,...a])j.site&&(!_||j.site.start>_.start)&&(_=j.site);let $=_?{start:_.start,end:_.end}:null,x=u||p,S=x?.id?e.byId.get(x.id):null,E=S?Zc(e,S):"",R=[];if(x?.callees)for(let j of x.callees){let A=e.byId.get(j),F=A?Rt(A):null;if(F&&R.push({label:A.label,site:F}),R.length>=Ux)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:h,cochange:m,exports:g,allExports:b,classMembers:v,insertion:l,insertionRegion:$,calleeBodies:R,callHint:E,siblingCap:Lx}}function eo(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 Kf(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 Ui(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=zi(s.params);(i>Fx||a>Dx||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?Rt(d):null;if(f&&f.path!==e.moduleLabel){l=!0;break}}let c=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=zx;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:eo(o),topup:o!=="TINY"}}function Yf(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 Hf(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(`
38
+ `)}function Xf(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 Kf(e,t){let n=[];for(let s of Ee(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 Yf(e,t){let n=An(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Kf(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,Vc).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
48
+ `)}function Jf(e,t){let n=[];for(let s of Ee(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 Qf(e,t){let n=In(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Jf(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,Hc).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>Vc?`
51
- \u2026+${o.length-Vc} more`:"")}function Xf(e,t){let n=An(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ee(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,qc).map(i=>{let a=e.byId.get(i.object),l=a?Rt(a):null,c=l?` \u2190 ${l.path}`:"";return`${i.objectLabel||i.object}${c}`});return`${s} \u2014 public API (${o.length} export(s)):
50
+ `)}`+(o.length>Hc?`
51
+ \u2026+${o.length-Hc} more`:"")}function Zf(e,t){let n=In(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ee(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,Kc).map(i=>{let a=e.byId.get(i.object),l=a?Rt(a):null,c=l?` \u2190 ${l.path}`:"";return`${i.objectLabel||i.object}${c}`});return`${s} \u2014 public API (${o.length} export(s)):
52
52
  ${r.join(`
53
- `)}`+(o.length>qc?`
54
- \u2026+${o.length-qc} more`:"")}var Hc,tf,mf,of,Mv,Dv,Wc,zv,Mi,Uv,Bv,Wv,wf,Gv,Vv,qv,Hv,Kv,Yv,Xv,Jv,Qv,Zv,ex,tx,nx,sx,ox,rx,ix,ax,cx,lx,ux,dx,px,fx,hx,rf,mx,gx,yf,$f,vf,bx,wx,yx,$x,vx,cf,lf,Sx,uf,Li,df,pf,ff,Tr,Pe,jx,_x,Af,Rx,Bt,Lf,Tx,Gf,Ix,Cx,Ox,Lx,Nx,Px,Mx,Fx,Gc,hf,zi,Dx,Vc,qc,Oe=O(()=>{$s();Kn();Fc();Rr();Qs();Hc="This store holds no code index, so it records no modules or commits to look through.",tf={"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"};mf=e=>/^(git|turn):/.test(String(e||""));of=30,Mv=8;Dv=2,Wc=25,zv=3;Mi=10,Uv=8,Bv=3,Wv=2,wf=5,Gv=4,Vv=.2,qv=.35,Hv=.15,Kv=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),Yv=.2,Xv=.35,Jv=.2,Qv=.35,Zv=e=>/\.cs$/i.test(e),ex=e=>/^I[A-Z]/.test(String(e||"")),tx=.2,nx=.35,sx=50,ox=.2,rx=.35,ix=.5,ax=wf,cx=3,lx=4,ux=1,dx=.9,px=.5,fx=.2,hx=.35,rf=4,mx=2,gx=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],yf=3,$f=12,vf=.9,bx=["imports","calls","callsSymbol","inherits"],wx=.5,yx=.6,$x=.2,vx=.35;cf=128,lf=4,Sx=64,uf=250,Li=class extends Error{};df=new WeakMap;pf=40,ff=40,Tr=30;Pe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";jx=25,_x=15;Af=40,Rx="tests edges are recorded module to module, so this is module-grain coverage.";Bt=15;Lf=new Set(["Function","Method"]);Tx=8;Gf={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};Ix=8,Cx=16,Ox=4,Lx=6,Nx=12,Px=2,Mx=8,Fx=3,Gc=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),hf=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),zi=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},Dx=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};Vc=20;qc=40});function Qe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function sh(e){let t=String(e||"");return Jf&&(t=t.replace(Jf," ")),t.replace(/\s+/g," ").trim()}function oh(e){let t=String(e||"");t=t.replace(iE," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(sE);if(o&&(t=o[1].trim()),o=t.match(oE),o&&(t=o[1].trim()),o=t.match(Qf),o&&(t=o[1].trim()),o=t.match(Zf),o&&(t=o[1].trim()),o=t.match(eh),o&&(t=o[1].trim()),o=t.match(rE),o&&(t=o[1].trim()),o=t.match(th),o&&(t=o[1].trim()),o=t.match(aE),o&&(t=o[1].trim()),o=t.match(cE),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(lE),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(uE),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(dE),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(pE),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(fE),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(hE),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(mE),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(gE),o&&(t=`what do you ${o[1].toLowerCase()} about ${o[2].trim()}`),o=t.match(bE),o){let r=o[1].trim();nE(r)||(t=!wE.test(r)&&(Zx.test(r)||xs.test(r))?r:`describe ${r}`)}if(o=t.match(yE),o){let r=o[1].trim();(xs.test(r)||$E.test(r)||th.test(r)||Qf.test(r)||eh.test(r)||Zf.test(r)||vE.test(r))&&(t=r)}if(t===s)break}return t}function SE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(xE);if(o&&(t=o[1].trim()),o=t.match(EE),o&&(t=o[1].trim()),t===s)break}return t}function jE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(kE);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function TE(e){let t=String(e||""),n=t.match(RE);if(n){let o=ih[n[1].toLowerCase()],r=rh[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(ah);return s?`which modules transitively import ${s[1].trim()}`:t}function Bi(e){return String(e||"").replace(Vx,t=>Tc[t.toLowerCase()])}function eo(e){let t=Bi(e);return t=t.replace(qx,n=>Ac[n.toLowerCase()]),t=t.replace(Hx,n=>Ic[n.toLowerCase()]),t=t.replace(Kx,"with"),t=t.replace(Yx,(n,s)=>`${s} for`),t=t.replace(Xx,(n,s)=>`for ${s}`),t=t.replace(Jx,(n,s)=>s),t=t.replace(AE,"$1$2"),t=t.replace(kp,"$1ing"),t=oh(t),t=jE(t),t=SE(t),t=TE(t),t=sh(t),t=en(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ar(e){for(let t of[..._p,...jp]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Zc(e){for(let t of IE){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function ch(e){let t=String(e||"").match(CE);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var Gx,Vx,nh,qx,Hx,Kx,Yx,Xx,Jx,Qx,Jf,Zx,xs,eE,tE,nE,sE,oE,Qf,Zf,eh,rE,iE,aE,cE,lE,uE,dE,pE,fE,hE,mE,gE,bE,wE,yE,$E,vE,th,xE,EE,kE,rh,ih,_E,RE,ah,AE,IE,CE,tt,Wt,fe,$n=O(()=>{qn();Gx=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b","gi"),Vx=Gx(Tc),nh=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),qx=nh(Ac),Hx=nh(Ic),Kx=/(?<=^|\s)w\/(?=\s|$)/gi,Yx=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,Xx=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,Jx=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,Qx=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),Jf=Sr.length?new RegExp("\\b("+[...Sr].sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b\\s*,?","gi"):null;Zx=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b","i"),xs=/^(?:which|what|who|whose|where|when|why|how)\b/i,eE=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),tE=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,nE=e=>{if(tE.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return eE.has((t[t.length-1]||"").toLowerCase())},sE=/^(?: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,oE=/^(?: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,Qf=/^(?:(?:ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|(?:just\s+)?(?:one|another)\s+more|another\s+one)[\s,]+)+(.+)$/i,Zf=/^(?: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,eh=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,rE=/^(?:please[\s,]+)+(.+)$/i,iE=/,?\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,aE=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,cE=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,lE=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,uE=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,dE=/^do\s+you\s+know\s+(.+?)\??$/i,pE=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,fE=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,hE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,mE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,gE=/^what\s+you\s+(know|remember)\s+about\s+(.+?)\??$/i,bE=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,wE=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,yE=/^(?:and|also|so|then|now|but)\s+(.+)$/i,$E=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,vE=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,th=/^(?:(?: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;xE=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,EE=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;kE=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;rh=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),ih=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),_E="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",RE=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(ih).join("|")+")\\s+("+Object.keys(rh).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+_E+")\\??$","i"),ah=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;AE=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${_c.map(Qe).join("|")})(\\s*[?.!]*)$`,"i");IE=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+(?:${Rc.map(Qe).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+(${Qx})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);CE=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");tt=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"]),Wt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),fe=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var uh,lh=O(()=>{uh={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","chapped","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","seifing","seiing","seined","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 Zn(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 l=1;l<=t.length;l+=1){let c=e[r-1]===t[l-1]?0:1,u=Math.min(o[l]+1,i[l-1]+1,o[l-1]+c);r>1&&l>1&&e[r-1]===t[l-2]&&e[r-2]===t[l-1]&&(u=Math.min(u,s[l-2]+c)),i[l]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function tl(e){return/^[a-z]+$/.test(e)&&!tt.has(e)&&!el.has(e)}function fh(e){return PE(e)?null:Wi(e,ph,es(e))}function Wi(e,t,n=es(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Zn(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 LE,es,el,dh,ph,NE,PE,Mo=O(()=>{qn();lh();$n();LE=["used"];es=e=>e.length<=5?1:2,el=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(tn),...LE].flatMap(e=>e.split(" "))),dh=4,ph=[...new Set([...Object.keys(de),...Object.keys(tn)].flatMap(e=>e.split(" ")).filter(e=>e.length>=dh))],NE=new Set(uh.words),PE=e=>NE.has(e)});function Fo(e){for(let t of zE){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Gi,ME,FE,DE,nl,zE,hh,Vi=O(()=>{qn();$n();Gi=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),ME=Object.keys(Be).sort((e,t)=>t.length-e.length).map(Qe).join("|"),FE=Object.keys(tn).sort((e,t)=>t.length-e.length).map(Qe).join("|"),DE=qs.slice().sort((e,t)=>t.length-e.length).map(Qe).join("|"),nl=(e,t)=>e==="defines"&&Er.has(t),zE=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Gi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(nl(n,t))return null;let s=e[1].trim(),o=e[3].trim();return xr.includes(t)&&([s,o]=[o,s]),{shape:"ask",entityType:null,modifier:"direct",kind:n,subject:s,object:o}}},{name:"reverse",re:new RegExp(`^which\\s+(${ME})\\s+(?:(${FE})\\s+)?(${Gi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return nl(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?tn[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Gi})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return nl(n,t)?null:{shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()}}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${DE})\\??$`,"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&&!Be[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&Ep.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:bs(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${yn.map(Qe).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+(?:${Zt.map(Qe).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+)?(${Gi})\\??$`,"i"),build:e=>de[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()})}];hh={id:"grammar",class:"graph-query",run(e){let t=Fo(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function mh(e){let t=e.trim().split(/\s+/);return t.length>1&&ki.has(t[0].toLowerCase())}function GE(e){return de[e.trim().toLowerCase()]==="calls"}function Tt(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,l)=>n.has(i+l)))&&r.every((a,l)=>e[i+l]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Cr(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(S=>S.toLowerCase());if(s.includes("where")&&!Tt(s,de)){let S=s.some(j=>yn.includes(j)),E=new Set([...Zt,...yn]),R=n.filter((j,A)=>!tt.has(s[A])&&!E.has(s[A])).join(" ").trim();if(R){let j=S?"mentions":"where";return{shape:j,entityType:null,modifier:"direct",kind:j,object:R}}}if(new Set(["has","have","had"]).has(s[0])){let S=s.length;for(;S>1&&(s[S-1]==="ever"||s[S-1]==="been");)S-=1;if((S>1?de[s[S-1]]:null)==="touches"){let R=n.slice(1,S-1).filter((j,A)=>!tt.has(s[1+A])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=Tt(s,de);if(!i&&t){let S=s.map(E=>{if(!tl(E))return E;let R=t.lemma(E);return el.has(R)?R:E});i=Tt(S,de),i&&(r=S)}let a=null;if(!i){let S=s.map(E=>E.length>=4&&tl(E)&&fh(E)||E);if(i=Tt(S,de),i){r=S;let E=s.slice(i.start,i.end).findIndex((j,A)=>j!==S[i.start+A]),R=i.start+Math.max(E,0);a={from:s[R],to:S[R]}}}let l=!1;if(!i)for(let S=0;S<s.length;S+=1){let E=ws[s[S]];if(!(E&&s[S]==="used"&&s[S+1]==="for")&&E&&s.slice(0,S).some(R=>Ir.has(R))){i={kind:E,start:S,end:S+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&ws[s[i.start]]&&s.slice(0,i.start).some(S=>Ir.has(S))&&(l=!0);let c=S=>a?{...S,fuzzyVerb:a}:S;if(t&&i.end-i.start===1){let S=i.start,E=s[S-1];if((E==="the"||E==="these"||E==="those")&&s[S+1]==="of"&&t.posTags(n)[S]==="NOUN"){let j=n.slice(S+2).filter((A,F)=>!tt.has(s[S+2+F])).join(" ").trim();if(j)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:j})}}let u=new Set,d=S=>{if(S)for(let E=S.start;E<S.end;E+=1)u.add(E)};d(i);for(let[S,E]of Object.entries(de)){if(E!==i.kind)continue;let R=S.split(" "),j=i.end;if(R.every((A,F)=>r[j+F]===A)){d({start:j,end:j+R.length});break}}let f=Tt(r,Be,u);d(f);let p=Tt(r,tn,u);d(p);let h=(S,E)=>n.slice(S,E).filter((R,j)=>!u.has(S+j)&&!tt.has(s[S+j])).join(" ").trim(),m=h(0,i.start),g=h(i.end,n.length);l&&!s.includes("by")&&WE.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?tn[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let S=m||g;if(S)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:S})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let S=m||g;if(S)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:S})}let v=s.indexOf("by"),_=s.slice(0,i.start).findIndex(S=>Ir.has(S)),$=_>=0,x=$&&_>v;if(v>=0&&!u.has(v)&&$){let S=(j,A)=>n.slice(j,A).filter((F,T)=>{let M=j+T,z=s[M];return!u.has(M)&&!tt.has(z)&&z!=="by"&&!Ir.has(z)&&!UE.has(z)&&!BE.has(z)}).join(" ").trim(),[E,R]=x?[S(_+1,n.length),S(v+1,_)]:[S(0,v),S(v+1,n.length)];if(E&&R)return b==="defines"&&Er.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:E});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(E)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:E})}if(l&&v<0&&g&&s[i.start]==="called")return null;if(m&&g){let S=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Er.has(S)||b==="calls"&&(mh(g)||GE(m)))return null;let E=m,R=g;return xr.includes(S)&&([E,R]=[R,E]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:E,object:R})}if(g){if(b==="calls"&&mh(g))return null;let S=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:S,modifier:w,kind:b,object:g})}if(b==="inherits"&&!m&&f&&f.start===i.end){let S=r.slice(f.start,f.end).join(" ");if(S)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:S})}if(m&&!g&&$&&i.end-i.start===1&&ws[s[i.start]]){if(m.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:m});let S=Ir.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:m,...S?{polar:!0}:{}})}return m?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:m}):null}var Ir,UE,BE,WE,gh,qi=O(()=>{qn();$n();Mo();Ir=new Set(["is","are","was","were","be","been","being","get","gets","got"]),UE=new Set(["which","what","who","whom","whose"]),BE=new Set(Vn.map(e=>e.toLowerCase())),WE=new Set(["recently","lately","yet","already","ever","again"]);gh={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Cr(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function qE(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],l=a.toLowerCase();!/^[a-z]+$/.test(a)||bh.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function HE(e,t=null){let n=Wt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!bh.has(a)&&(VE.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=qE(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var bh,VE,wh,yh=O(()=>{qn();$n();Vi();qi();bh=new Set([...tt,...fe(Vs),...fe(Object.keys(de)),...fe(Object.keys(Be)),...fe(Object.keys(tn)),...fe(Object.keys(Xe)),...fe(Hs),...fe(Ks),...fe(Object.keys(ys)),...fe(Object.keys(Rn)),...fe(Object.keys(jo)),...fe(Vn),...fe(kr),...fe(qs),...fe(Zt),...fe(yn),...fe(Gn),...fe(Object.keys(Ro))]),VE=new Set([...fe(Sr),...fe(ji)]);wh={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Fo(e))return null;let{text:n,dropped:s,maybeNoise:o}=HE(e,t.nlp||null);if(!s.length||!n)return null;let r=Fo(n)||Cr(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 $h=O(()=>{});var Hi,Ki=O(()=>{Hi=()=>{}});function xh(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Do(e.subject)===Do(t.subject)&&Do(e.object)===Do(t.object):Do(e.object)===Do(t.object)}function sl(e){let t=(e||[]).filter(c=>c&&Array.isArray(c.candidates)&&c.candidates.length);if(!t.length)return null;let n=[];for(let c of t)for(let u of c.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:c.strategyId,class:c.class});if(n.some(c=>!Eh(c))&&(n=n.filter(c=>!Eh(c))),!n.length)return null;let s=new Map;for(let c of n)s.has(c.class)||s.set(c.class,[]),s.get(c.class).push(c);let o=[];for(let[c,u]of s){let d=[];for(let f of u){let p=d.find(h=>xh(h.parsed,f.parsed)&&h.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),vh(f.parsed)<vh(p.parsed)&&(p.parsed=f.parsed);continue}d.push({...f,agreed:1})}d.length&&o.push({class:c,candidates:d})}if(!o.length)return null;let r=c=>Math.max(...c.candidates.map(u=>u.confidence)),i=o[0];for(let c of o)r(c)>r(i)&&(i=c);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(c=>c.parsed)},l=o.filter(c=>c!==i).map(c=>c.candidates[0]).filter(c=>!i.candidates.some(u=>xh(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function XE(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 Sh(e,{describe:t=XE,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 Do,KE,vh,YE,Eh,ol=O(()=>{Do=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),KE=/^\s*(?:the|a|an)\s+/i,vh=e=>[e?.subject,e?.object].filter(t=>KE.test(String(t||""))).length;YE=new Set(["fuzzy","lemma","spell"]),Eh=e=>YE.has(e.via)});function Yi(e){rl=e}function Xi(){return typeof rl=="function"?rl():null}var rl,zo=O(()=>{rl=null});function _h(e,t={},n=QE){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 JE,QE,Rh=O(()=>{$n();Vi();qi();yh();$h();Ki();ol();zo();JE=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],QE=[hh,gh,wh,...JE]});function Uo(e){return ZE.test(String(e||"").trim())?"an":"a"}function Ji(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 Bo(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Or(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 ZE,Qi=O(()=>{ZE=/^[aeiou]/i});var Lr,il=O(()=>{Lr=(e,t,n)=>n});var bm={};Wn(bm,{DYNAMIC_TAIL_OK_RE:()=>Ll,applyNegationFrames:()=>Ar,ask:()=>js,classDisplayName:()=>ts,degreeMetric:()=>cm,metaFallbackEntityAnswer:()=>tm,normalizeQuery:()=>eo,parseQuery:()=>Dr,parseQueryFull:()=>vl,render:()=>xn,rephraseHint:()=>Rl,resolveObject:()=>En,traverse:()=>Gt,worldRelationGraphPayload:()=>Hk});function Ke(e,t){let n=Th.get(e);n||(n=new Map,Th.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Qn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Me(e,t){let[n,s]=pl[e]||["result","results"];return t===1?n:s}function Ur(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Me(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function ts(e){let t=String(e||"");if(typeof Tn=="function"){let n=Tn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function to(e){return tS[e]||e}function iS(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||rS.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return fe(qs).includes(o)?t:e}function lS(e,t){if(!e||e.shape!=="where"||e.altObject||!aS.test(t))return e;let n=Si(t),s=Si(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=Wt(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||tt.has(i)||de[i]||i.endsWith("ing"))return o;let a=Wt(n).map(c=>c.toLowerCase());for(;a.length&&cS.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let l=r.slice(0,-1).join(" ");return{...e,object:l,altObject:s,verb:i}}function Dr(e,{nlp:t=void 0}={}){return vl(e,{nlp:t}).parsed}function vl(e,{nlp:t=void 0}={}){let n=t===void 0?Xi():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Zc(Ar(eo(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=dS(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=sl(_h(o,{nlp:n,raw:s}));return i?{parsed:lS(iS(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function hl(e,t){return t.length&&Vh.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function Vo(e,t){return Fo(e)||Cr(e,t)}function dS(e,t){let n=Wt(e),s=n.map(o=>o.toLowerCase());return IS(n,s)||OS(n,s)||mS(n,s,t)||Hh(e,t,0)||LS(n,s,t)||bS(n,s,t)||SS(n,s,t,0)||jS(n,s)||TS(n,s,t)||NS(n,s,t)||FS(n,s,t)||zS(n,s,t,0)||MS(n,s,t,0)||El(n,s,t,0)||yS(n,s,t)||fS(n,s)||Zh(n,s,t,0)}function fS(e,t){let n=0;pS.has(t[n])&&(n+=1);let s=At(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=h=>h+1<t.length?Sp[`${t[h]} ${t[h+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let h=a;h+1<t.length;h+=1){let m=r(h);if(m){l=h,c=m;break}}if(l<0)return null;let u=e.slice(a,l).join(" ").trim(),d=e.slice(l+2).join(" ").trim();if(!u||!d)return null;let f=(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},p=f(i,u);return p.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:p}},{op:"intersection",kind:"set",ast:{node:"clause",clause:f(c,d)}}]}}function ea(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function mS(e,t,n){if(!["do","does","did"].includes(t[0])||!hS.has(t[1]))return null;let s=At(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 l=Tt(a,de);if(!l)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((f,p)=>(p<l.start||p>=l.end)&&!tt.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=qo(`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:l.kind,object:u,complement:ea(o,{op:"difference",kind:"set",ast:d})}}function Hh(e,t,n=0){let s=ch(e);if(!s)return null;let o=At(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=Wt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Xe[d]))return ea(r,{op:"difference",kind:"qual",filters:a});let l=Tt(a,de);if(!l)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,f)=>(f<l.start||f>=l.end)&&!tt.has(a[f])&&a[f]!=="from").length)return ea(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=qo(`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"}:ea(r,{op:"difference",kind:"set",ast:u})}function bS(e,t,n){let s=0;for(;s<t.length&&gS.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=Tt(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!tt.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function Kh(e,t){let n=new Set;for(let s of t)for(let o of Ke(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Yh(e,t){let n=Lt(t),s=n.filter(r=>!Wh.has(r)),o=Kh(e,s.length?s:n);return o.size===1?[...o][0]:null}function qo(e,t,n){if(n>Gh)return{node:"miss",reason:"too deep to resolve"};let s=Hh(e,t,n);if(s)return s;let o=Wt(e),r=o.map(c=>c.toLowerCase()),i=El(o,r,t,n);if(i)return i;let a=Zh(o,r,t,n);if(a)return a;let l=Vo(e,t);return l?{node:"clause",clause:l}:null}function El(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Gn.includes(t[o]),i=!r&&qh(t[o]);if(!r&&!i||r&&o+1>=t.length||!At(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Xe[f.toLowerCase()]))continue;let c=Vo([...l,fl].join(" "),n);if(!c||c.shape!=="reverse"&&c.shape!=="forward"||c.modifier&&c.modifier!=="direct")continue;let u=`which ${t[o-1]} ${e.slice(r?o+1:o).join(" ")}`,d=qo(u,n,s+1);return!d||d.node==="miss"?d?{node:"miss",reason:d.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"}:{node:c.shape==="reverse"?"reverseSet":"forwardSet",kind:c.kind,entityType:c.entityType,inner:d}}return null}function yS(e,t,n){for(let s=0;s<t.length;s+=1){if(!wS.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!de[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),fl,...e.slice(s+1)],a=Vo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===fl&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function SS(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!$S.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(vS.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&&xS.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&ES.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Gn.includes(d)))return null;let l=xl.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=qo(l,n,s+1);if(!c||c.node==="miss")return c?{node:"miss",reason:c.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=At(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function jS(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!kS.has(t[n]))return null;let s=t[n],o=e.slice(n+1).join(" ").trim();return o?{node:"commitFilter",op:s,pivotRaw:o}:{node:"miss",reason:`"what changed ${s}" needs a date or commit afterward`}}function RS(e){let t=new Set,n=[];for(let s of e){if(!s||!_S.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function TS(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(!kr.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let f=t.slice(0,d).join(" ");if(d===t.length-1&&(Hs.includes(f)||Ks.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Hs.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=AS(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let l=o?s-1:s,c=RS(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function AS(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&uS.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Xe[a]))return{type:"qual",filters:r};if(o.length===1){let a=At(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=Vo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function IS(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?At(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 l=i.indexOf("in",1);if(l>0){let u=a.slice(1,l).join(" ").trim(),d=a.slice(l+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 c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:c,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:null,scopeModule:l}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function CS(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=bs(n).slice(e.length).trim(),o=Wt(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 OS(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let c=1;c<t.length;c+=1)if(Xe[t[c]]){n=c,s=t[c-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&ws[t[n]]){let c=o+1;for(;c<t.length&&(t[c]==="the"||t[c]==="a"||t[c]==="an");)c+=1;let u=t[c];if(u&&!Rp.has(u))return null}let r=CS(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 l=a>i?e.slice(i,a).join(" ").trim():"";return l?{node:"qualCheck",term:l,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function LS(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=Vo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function NS(e,t,n){let s=Hs.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&&Xe[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?At(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 l=e.slice(o),c=t.slice(o).some(d=>!tt.has(d)&&!Xh.has(d)),u;if(c){let d=qo(`which ${a} ${l.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 MS(e,t,n,s){let o=0,r=!1,i=null;for(let y of Jh){let w=y.split(" ");if(t.slice(0,w.length).join(" ")===y){i=y,o=w.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&Sl.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Xe[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?At(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Vn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Qh}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!tt.has(y)&&!Xh.has(y)),p=t.slice(o),h=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),h=h.slice(1));let m=r&&PS.has(p[0]);if(r&&(f&&!m||d.length===0))return null;let g,b=!1;if(f){let y=m?h:d,w=qo(`which ${[...a,u,...y].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};g=w,b=!0}else g={node:"allOfClass",entityType:c},a.length&&(g={node:"qualifier",filters:a,inner:g});return{node:"list",entityType:c,base:g,scoped:b}}function FS(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(ys[m]){s=ys[m],o=h;break}if(ys[t[h]]){s=ys[t[h]],o=h;break}}if(!s)return null;let r=null,i=null;for(let h=o;h<t.length;h+=1)if(Rn[t[h]]){r=Rn[t[h]],i=t[h];break}if(!r){for(let h=o-1;h>=0;h-=1)if(Rn[t[h]]){r=Rn[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]),l=["important","significant","central","key","core","essential","critical","principal"],c=t.some(h=>l.includes(h));!r&&(a||c)&&(r=Rn.connections,i="connections");let u,d=null;for(let h of t){let m=At(h);if(m&&!m.placeholder){u=m.entityType,d=h;break}}if(!d&&(u=i?Tp[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 f=["needs","need","needing","lacks","lack","lacking","misses","missing"],p=t.some(h=>f.includes(h))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:p}}function zS(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&Sl.has(t[o]);)o+=1;if(o>=t.length)return null;let r=At(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&DS.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=At(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=>Gn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Vn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Qh}`}:null}function US(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&Sl.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Gn.includes(t[i])){s=i;break}if(s<0)return null;let o=At(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 BS(e,t,n,s,o,r){let{branches:i,ops:a}=ta(n,s),l=null,c=[];for(let u=0;u<i.length;u+=1){let d=i[u],f=d.map(y=>y.toLowerCase()),p=u===0?"intersection":a[u-1],h=hl(d,f);if(h.blc.length&&h.blc.every(y=>Xe[y])){c.push({op:p,kind:"qual",filters:h.blc});continue}if(f[0]==="of"||f[0]==="in"){c.push({op:p,kind:"set",ast:{node:"membership",entityType:e,term:d.slice(1).join(" ")}});continue}let m=d,g=Tt(f,de);g?l=d.slice(g.start,g.end):l&&(m=[...l,...d]);let b=em(`${t} ${m.join(" ")}`,o,r);if(!b||b.node==="miss")return{miss:b&&b.reason||"a clause in the combination didn't parse"};c.push({op:p,kind:"set",ast:b})}return{atoms:c}}function Zh(e,t,n,s){let o=US(e,t);if(o){let{entityType:R,term:j,relIdx:A}=o,F=t.slice(A+1),T=e.slice(A+1);if(!F.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[A]}"`};let M=BS(R,`which ${t[A-1]}`,F,T,n,s+1);if(M.miss)return{node:"miss",reason:M.miss};let z=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:j}},...M.atoms];return z.length===1?z[0].ast:{node:"boolean",entityType:R,atoms:z}}let r=0;for(;r<t.length&&xl.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Xe[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?At(t[r]):null;if(!l){let R=r+1<t.length?At(t[r+1]):null;if(Ah.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Vh.has(t[r])){let j=r+1;j<t.length&&(t[j]==="the"||t[j]==="a"||t[j]==="an")&&(j+=1);let A=j+1<t.length?At(t[j+1]):null;if(Ah.has(t[j])&&A&&A.entityType==="Commit"&&j+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!tt.has(t[r])&&!Cl.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let c=l.entityType,u=t[r];r+=1;let d=t.slice(r),f=e.slice(r),p=!1;d.length&&Gn.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let h=d[0]==="of"||d[0]==="in",m=d.length>0&&qh(d[0]),g=f.length>0&&ta(d,f).branches.some(R=>{let{blc:j}=hl(R,R.map(A=>A.toLowerCase()));return j.length&&j.every(A=>Xe[A])}),b=f.length>0?ta(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(y=b.slice(1).every(A=>{let F=A.map(M=>M.toLowerCase()),T=Tt(F,de);return T&&T.start===0?T.kind===j.kind:!T}))}let w=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(w=b.slice(1).every(A=>{let F=A.map(M=>M.toLowerCase()),T=Tt(F,de);return!!T&&T.start===0&&T.end-T.start===1}))}if(!(a.length||p||h||m||g||y||w))return null;if(!f.length){let R={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:R,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let v=l.placeholder?"what":`which ${u}`,{branches:_,ops:$}=ta(d,f),x=null,S=[];for(let R=0;R<_.length;R+=1){let j=_[R],A=j.map(ce=>ce.toLowerCase()),F=R===0?"seed":$[R-1],T=hl(j,A);if(T.blc.length&&T.blc.every(ce=>Xe[ce])){S.push({op:F,kind:"qual",filters:T.blc});continue}if(A[0]==="of"||A[0]==="in"){S.push({op:F,kind:"set",ast:{node:"membership",entityType:c,term:j.slice(1).join(" ")}});continue}let M=j,z=Tt(A,de);z?x=j.slice(z.start,z.end):x&&(M=[...x,...j]);let K=em(`${v} ${M.join(" ")}`,n,s+1);if(!K||K.node==="miss")return{node:"miss",reason:K&&K.reason||"a clause in the combination didn't parse"};S.push({op:F,kind:"set",ast:K})}if(S[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let E;return S.length===1?E=S[0].ast:E={node:"boolean",entityType:c,atoms:S},a.length&&(E={node:"qualifier",filters:a,inner:E,entityType:c}),E}function em(e,t,n){if(n>Gh)return{node:"miss",reason:"too deep to resolve"};let s=Wt(e),o=s.map(a=>a.toLowerCase()),r=El(s,o,t,n);if(r)return r;let i=Vo(e,t);return i?{node:"clause",clause:i}:null}function ta(e,t){let n=Object.keys(jo).sort((a,l)=>l.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let l of n){let c=l.split(" ");if(e.slice(i,i+c.length).join(" ")===l){a={c:l,len:c.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(jo[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 kl(e,t,n,s){let o=Wo[t];if(o&&ks.has(n)){let u=Ke(e,o).filter(d=>s.has(d.object));return ss(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>ks.has(e.byId.get(u)?.class))?[...Lt(t),o]:Lt(t)).flatMap(u=>Ke(e,u)).filter(u=>s.has(u.object)),l=ss(a.map(u=>e.byId.get(u.subject)).filter(Boolean));if(!n||n==="Change")return l;let c=l.filter(u=>u.class===n);return c.length?c:n!=="Module"&&l.some(u=>u.class==="Module")?Tl(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function GS(e,t){let n=new Set(kl(e,"touches","Commit",t).map(s=>String(s.label||"").toLowerCase()));for(let s of t)for(let o of e.byId.get(s)?.derived_from||[]){let r=WS.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function Mr(e,t,n){let s=Lt(t).flatMap(o=>Ke(e,o)).filter(o=>n.has(o.subject));return ss(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function ss(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 VS(e,t){let n=Xn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Xn(o.label).startsWith(s))}function ml(e){let t=Ih.get(e);if(t)return t;let n=new Set;for(let i of Ke(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 Ke(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of Ke(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},Ih.set(e,t),t}function Go(e,t){return t?t.class==="Module"?t.id:ml(e).moduleOfSymbol.get(t.id)||null:null}function tm(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>qS.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Go(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Me(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Lr("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${l} ${a} in this codebase${c} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function gl(e,t,n){let s=ss(_o.flatMap(o=>Mr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function jl(e,t,n=null){let s=ns(e,t,n);if(!(s.match&&s.tier===1)){let o=VS(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 nm(e,t,n,s,o){let r=o||(()=>!0),i=gl(e,t,s).filter(r);if(i.length||!om(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of sm(e,t)){let l=e.byId.get(a);if(!l)continue;let c=gl(e,a,s).filter(r);if(c.length)return{own:i,inherited:c,viaId:a,viaLabel:l.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function no(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=ml(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=Go(e,t),o=ml(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Js(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function _l(e){return Ke(e,"inherits")}function bl(e,t){return _l(e).filter(n=>n.object===t).map(n=>n.subject)}function Ch(e,t){return _l(e).filter(n=>n.subject===t).map(n=>n.object)}function HS(e,t){let n=new Set,s=[...bl(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of bl(e,o))n.has(r)||s.push(r)}}return n}function sm(e,t){let n=new Set,s=[...Ch(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Ch(e,o))n.has(r)||s.push(r)}}return n}function om(e,t){let n=Oh.get(e);if(n||(n=new Map,Oh.set(e,n)),n.has(t))return n.get(t);let s=_l(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 Lh(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 Ph(e){return e.slice().sort((t,n)=>Nh[n.via]-Nh[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Mh(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=es(n);if(Zn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of so(e.label))if(Zn(o,n,s)<=s)return!0;return!1}function rm(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...so(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=om(e,t),i=[];for(let l of s){let c=Lh(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...HS(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Lh(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:Ph(i),broad:[]};let a=new Map;for(let l of s)for(let c of sm(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&Mh(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of bl(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Mh(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Ph([...a.values()])}}function KS(e){return[...Fi(Di(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function un(e,t,n){switch(t.node){case"clause":return Gt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?KS(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=rm(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Lt(t.kind).flatMap(o=>Ke(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=ns(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Yh(e,t.kind);if(!o)return[];let r=new Set(Mr(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"reverseSet":{let s=new Set(un(e,t.inner,n).map(o=>o.id));return kl(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(un(e,t.inner,n).map(o=>o.id));return Mr(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=jl(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(l=>l.id));return ss(_o.flatMap(l=>Mr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=nm(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?lm(e,t,n).matches:un(e,t.inner,n).filter(o=>t.filters.every(r=>no(e,o,Xe[r])));case"boolean":return im(e,t,n);case"anaphora":return am(e,t,n).matches;default:return[]}}function im(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=un(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>no(e,l,Xe[c])),a=l=>o.filters.every(c=>{let u=YS(Xe[c]);return u?no(e,l,u):!no(e,l,Xe[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(un(e,o.ast,n).map(i=>i.id));if(o.op==="intersection")s=s.filter(i=>r.has(i.id));else if(o.op==="difference")s=s.filter(i=>!r.has(i.id));else if(o.op==="union"){let i=new Set(s.map(a=>a.id));for(let a of un(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function XS(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=En(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 am(e,t,n){let o=XS(e,t.candidateTerms);if(!o){let d=n&&n.prev;if(!Array.isArray(d)||!d.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=d.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(d=>i.filters.every(f=>no(e,d,Xe[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=En(e,i.clause.object);if(!d.match)r=[];else{let f=Wo[i.clause.kind],p=[...Lt(i.clause.kind),...f?[f]:[]],h=new Set(p.flatMap(m=>Ke(e,m)).filter(m=>m.object===d.match.id).map(m=>m.subject));r=r.filter(m=>h.has(m.id))}}let a=d=>d.length&&d.every(f=>f.class===d[0].class)?d[0].class:null,l=i&&i.type==="entity"?i.entityType:a(o),c=r.length?a(r):l;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:c,matches:[]};let u=Ur(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function cm(e,t,n){let s=n.kind==="*"?JS:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of Ke(e,r)){let a=i.subject===t.id,l=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let c=e.byId.get(i.object);if(!c||c.class!==n.filter)continue}o+=1}else(n.dir==="in"&&l||n.dir==="both"&&(a||l))&&(o+=1)}return o}function QS(e){let t=e.individuals.filter(s=>s.class==="Commit"),n=s=>String((s.attributes||[]).find(o=>o.key==="date")?.value||"");return t.sort((s,o)=>n(o).localeCompare(n(s))),{compositeKind:"recentCommits",matches:t}}function ek(e,t){let{op:n,pivotRaw:s}=t,o=u=>String((u.attributes||[]).find(d=>d.key==="date")?.value||"").slice(0,10),r=null,i=null,a=null;if(ZS.test(s))r=s;else{let{match:u,ambiguous:d}=En(e,s,{expectedClass:"Commit"});u&&!d&&u.class==="Commit"&&o(u)&&(i=u.id,a=u.label,r=o(u))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let l=e.individuals.filter(u=>u.class==="Commit"&&u.id!==i&&o(u)).filter(u=>{let d=o(u);return n==="since"?d>=r:n==="before"?d<r:n==="after"?d>r:d===r}).sort((u,d)=>o(d).localeCompare(o(u))),c=[];return l.length&&c.push({kind:"set",class:"Commit",label:`${l.length} commit${l.length===1?"":"s"} ${n} ${s}`,ids:l.map(u=>u.id),attrs:{count:l.length,op:n,...i?{pivot:i}:{}},lane:"commitFilter"}),i&&c.push({kind:"event",class:"Commit",label:a,ids:[i],attrs:{date:r},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:l,referents:c}}function tk(e,t,n){let s=un(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size)return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0};let r=kl(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(l=>l.key==="date")?.value||"");return r.sort((a,l)=>i(l).localeCompare(i(a))),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function nk(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(Ke(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!Js(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:cm(e,a,t.metric)})).sort((a,l)=>t.extreme==="most"?l.score-a.score:a.score-l.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?Ur(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 lm(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?h=>s.filters.every(m=>no(e,h,Xe[m])):null,a=h=>Ur(r,h,"membership"),l=jl(e,o.term,n&&n.contextId);if(l.kind==="dir"){let h;if(!r||r==="Module")h=l.mods;else{let m=new Set(l.mods.map(g=>g.id));h=ss(_o.flatMap(g=>Mr(e,g,m))).filter(g=>g.class===r)}return i&&(h=h.filter(i)),{compositeKind:"set",matches:h,entityType:r,referents:a(h)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=nm(e,l.id,l.entityClass,r,i),f=!c.length&&u.length>0,p=f?u:c;return{compositeKind:"membership",entityType:r,matches:p,inheritedNotOwn:f,viaLabel:d,ownerLabel:l.label,referents:a(p)}}function sk(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=En(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=En(e,s,{expectedClass:n}),l=!r||a.match&&Go(e,a.match)===r.id,c=a.match&&l;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:c?[a.match]:[]}}let i=r?Tl(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 ok(e,t,n){let s=Go(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||gl(e,n.id).some(o=>o.id===t.id)}function rk(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=ns(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=jl(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!ok(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 l=no(e,a.match,Xe[o]),c=r?!l:l,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:c,matches:[a.match],referents:u}}function ik(e,t,n){let s=En(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=un(e,{node:"allOfClass",entityType:t.entityType},n),r=im(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 ak(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(un(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}=Gt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function ck(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return sk(e,t);if(t.node==="qualCheck")return rk(e,t,n);if(t.node==="universal")return ik(e,t,n);if(t.node==="count"){let i=ak(e,t.base,n);return i?{compositeKind:"count",count:GS(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:un(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:un(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return Gk(e,t);if(t.node==="superlative")return nk(e,t);if(t.node==="temporal")return tk(e,t,n);if(t.node==="recentCommits")return QS(e);if(t.node==="commitFilter")return ek(e,t);if(t.node==="anaphora")return am(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return lm(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=rm(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:i.length?i:a,broad:!i.length&&a.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 s=un(e,t,n),o=t.entityType||null,r=Ur(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function um(){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 lk(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=zr(e);return n?`${t} in ${n}`:t}function wl(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(wl):Array.isArray(e.filters)&&e.filters.some(t=>Xe[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(wl)}function uk(e,t){return!["Function","Method"].includes(t)||!wl(e)?null:"This index records tests edges module to module, so it holds no function-grain coverage to filter on \u2014 ask whether the module a function lives in is tested instead."}function dk(e,t,n){if(t.compositeMiss)return t.reason==="no-prev"?{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1}:{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${um()}.`,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=Me(t.entityType,1),o=Me(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=zr(i),l=i.class==="Module"?"":a?`, ${Lr("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${Es(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=Me(t.entityType,t.total),o=sS(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}: ${Es(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Me(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 ${Me(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>He?` \u2014 narrow with "${Me(t.entityType,2)} in <module>"`:"";return{content:`${Es(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=vn(t.asked),o=Gs[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)return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${Ss(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Me(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Es(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Es(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Me(t.entityType,1);if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?lk(t.matches[0]):Es(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Me(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,Bt).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Bt?` \u2026+${t.matches.length-Bt} 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.matches.length)return{content:`no commits recorded ${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,Bt).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Bt?` \u2026+${t.matches.length-Bt} 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 ${Me(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:`${Es(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?Me(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:`nothing in the index matches the inner set, so there is no change history to date. ${Ss(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. ${Ss(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 l=(i.attributes||[]).find(d=>d.key==="message")?.value||"",c=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 ${c}${l?` ("${l}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=uk(e,t.entityType)||Ss(n);return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${Es(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function Rl(){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). `+um()}function Ss(e=null){return e&&Pi(e)===0?Hc:`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function so(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function sa(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 dm(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function pk(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Nr(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(g=>g.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let g=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${g}`)||String(y.label).toLowerCase().startsWith(g)));if(b.length===1)return{match:b[0],candidates:[],tier:1,ambiguous:!1};if(b.length>1)return{match:b[0],candidates:b.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(g=>String(g.label).toLowerCase()===o||String(g.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let g of e.relations)for(let b of g.edges)if(String(b.object).toLowerCase()===l){c=b.object;break e}if(c&&!n)return{match:{id:c,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(g=>g.trim()).filter(Boolean);if(u.length>1){let g=new Set;for(let b of u){let y=Nr(e,b,{expectedClass:n});y.match&&!y.ambiguous&&g.add(y.match.id)}if(g.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],f=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(f){let g=o.split(".").pop();for(let b of r){let y=String(b.label||"").toLowerCase();b.class==="Module"?y.split("/").pop()===o&&d.push({ind:b,score:1e3-Math.abs(y.length-o.length)}):y.includes(o)?d.push({ind:b,score:2e3-Math.abs(y.length-o.length)}):y.endsWith(`.${g}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let g=[...so(s)],b=o.split(/\s+/).find($=>$.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,v=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,_=v?pk(s):null;for(let $ of r){let x=String($.label||"").toLowerCase(),S=x.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(S===o){d.push({ind:$,score:5e3});continue}if(o.length>=4&&(S.startsWith(o)||S.endsWith(o))){d.push({ind:$,score:4e3-Math.abs(S.length-o.length)});continue}if(v){let j=dm($.label);if(j&&j===_){d.push({ind:$,score:5e3});continue}let A=/[/_-]/.test($.label)||/\.[a-z0-9]+$/i.test(String($.label||""));if(j&&A&&_.length>=4&&j.includes(_)){d.push({ind:$,score:2e3-Math.abs(j.length-_.length)});continue}}if($.class==="Module"){let j=sa(o);if(j!==o&&j===sa(S)){let A=es(o);if(Zn(S,o,A)>A){d.push({ind:$,score:3e3-Math.abs(S.length-o.length)});continue}}}if(o.length>=4&&x.includes(o)){d.push({ind:$,score:1e3-Math.abs(x.length-o.length)});continue}let E=so($.label),R=g.filter(j=>E.has(j)).length;R>0&&(!y||E.has(y))&&d.push({ind:$,score:R/g.length*cl})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter(v=>v.score===g.score),w=g.score>=cl?b.filter(v=>v.score>=cl):b;return{match:g.ind,candidates:w.slice(0,4).map(v=>v.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),h=null,m=!p&&typeof Ys=="function"?Ys(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(m.length){let[g,...b]=m,y=e.byId.get(g.id);if(y){let w=b.filter(v=>v.score===g.score);if(h={match:y,candidates:b.slice(0,4).map(v=>e.byId.get(v.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!h.ambiguous&&g.via!=="spell")return h}}if(!i&&o.length>=4){let g=es(o),b=g+1,y=[];for(let w of r){let v=Zn(String(w.label||"").toLowerCase(),o,g);if(v>0)for(let _ of so(w.label)){if(v<=0)break;v=Math.min(v,Zn(_,o,g))}v<b?(b=v,y=[w]):v===b&&v<=g&&y.push(w)}if(b<=g&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=g&&y.length>1&&!h){let[w,...v]=y;return{match:w,candidates:v.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return h||{match:null,candidates:[],tier:null,ambiguous:!1}}function ll(e,t){let n=dm(t),s=[...so(t)],o=[];for(let r of so(e))n.includes(r)||s.some(i=>sa(i)===sa(r))||na.has(r)||hm.has(r)||o.push(r);return o}function Zi(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(ll(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),ll(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:vn(s.slice(0,4).map(r=>r.label))}:e}let n=ll(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function En(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(fk,"").trim(),i=r.match(hk);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=Zi(Nr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Zi(Nr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Zi(Nr(e,t,n),t)}return Zi(Nr(e,t,n),t)}function ns(e,t,n){if(Vs.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 En(e,t)}function Tl(e,t,n){let s=[];for(let o of Ke(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 mk(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||ks.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>Ke(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&ks.has(n)&&(l=l.filter(c=>c.class===n)),{matches:l,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function yk(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&Al.has(Fh(s.label))).map(s=>({ind:s,named:n.has(Fh(s.label))?1:0,depth:String(s.label).split("/").length,fixture:wk(s.label)?1:0})).sort((s,o)=>o.named-s.named||s.depth-o.depth||s.fixture-o.fixture||String(s.ind.label).localeCompare(String(o.ind.label))).map(s=>s.ind)}function $k(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function Il(e){return(e?.attributes||[]).find(t=>t.prop===vk)?.value||null}function xk(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Uo(e)} ${e} in this graph's vocabulary`}function Gt(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 ck(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(M=>{let z=Gt(e,M,{contextId:n,prev:s});return{parsed:M,result:z,rendered:xn(M,z,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:T}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let T=String(t.object||"").trim(),M=T.toLowerCase(),z=(e.individuals||[]).find(K=>{if(!Il(K))return!1;if(String(K.label).toLowerCase()===M)return!0;let ce=(K.attributes||[]).find(Z=>Z.key==="token")?.value;return ce&&String(ce).toLowerCase()===M});if(!z){let K=tm(e,T);return K?{matches:[K.hit],objMatch:K.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:K.text,traversal:`schema lookup for "${T}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}return{matches:[z],objMatch:z,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}if(r==="mentions"){let T=String(t.object||"").trim();return{matches:(typeof Ys=="function"?Ys(e.proseIndex,T):[]).map(K=>e.byId.get(K.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${T}"`}}if(r==="where"&&gk.test(String(t.object||"").trim())){let T=yk(e,t.object);return{matches:T,objMatch:T[0]||null,candidates:T.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...Al].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!$k(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 T=ns(e,t.subject,n),M=ns(e,t.object,n);if(!T.match||!M.match||T.ambiguous||M.ambiguous)return{matches:[],objMatch:M.match,candidates:M.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(T.unresolvedPronoun||M.unresolvedPronoun)};let[z,K]=[T.match,M.match];i==="touches"&&K.class==="Commit"&&z.class!=="Commit"&&([z,K]=[K,z]);let ce=Wo[i],Z=[...new Set(ce?[...Lt(i),ce]:Lt(i))],D=Z.flatMap(U=>Ke(e,U)).filter(U=>U.subject===z.id&&U.object===K.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:M.match,subjMatch:T.match,candidates:[],traversal:`${Z.join("+")} edge from ${z.label} to ${K.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=ns(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=ns(e,t.altObject,n),M=!!l.match&&!l.ambiguous,z=!!T.match&&!T.ambiguous;!M&&z?l=T:M&&z&&l.match.id!==T.match.id&&(l={...l,ambiguous:!0,candidates:[T.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let T=K=>K.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),M=T(String(t.object||"").trim().toLowerCase()),z=(e.individuals||[]).find(K=>{if(K.class!=="Module"||K.id===l.match.id)return!1;let ce=String(K.label||"").toLowerCase().split("/").pop();return ce!==T(ce)&&T(ce)===M});z&&(l={...l,ambiguous:!0,candidates:[z,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:h,nearestLabel:m}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:h,nearestLabel:m};if(d){let M=ss([c,...u||[]]).slice(0,He).map(z=>{let K=Gt(e,t,{contextId:n,prev:s,pinnedObjMatch:z});return{candidate:z,result:K,rendered:xn(t,K,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:M}}if(r==="where"){let T=(c.attributes||[]).find(M=>M.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:T,traversal:T?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let T=K=>String((K.attributes||[]).find(ce=>ce.key==="date")?.value||""),M;if(c.class==="Commit")M=[c];else{let K=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),ce=new Set;M=[];for(let Z of K){if(ce.has(Z.subject))continue;ce.add(Z.subject);let D=e.byId.get(Z.subject);D&&D.class==="Commit"&&M.push(D)}M.sort((Z,D)=>T(D).localeCompare(T(Z)))}let z=M.length&&T(M[0])?[{kind:"event",class:"Commit",label:M[0].label,ids:[M[0].id],attrs:{date:T(M[0]).slice(0,10)},lane:"when"}]:[];return{matches:M,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:z,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let T=Z=>String((Z.attributes||[]).find(D=>D.key==="date")?.value||""),M=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),z=new Set,K=[];for(let Z of M){if(z.has(Z.subject))continue;z.add(Z.subject);let D=e.byId.get(Z.subject);D&&D.class==="Commit"&&K.push(D)}K.sort((Z,D)=>T(D).localeCompare(T(Z)));let ce=K.length&&T(K[0])?[{kind:"event",class:"Commit",label:K[0].label,ids:[K[0].id],attrs:{date:T(K[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:K,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:ce,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return mk(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=Wo[i],z=!!(T&&c.class&&ks.has(c.class))?[...new Set([...Lt(i),T])]:Lt(i);if(a&&a!=="Change"){let G=Kh(e,z),I=al[a];if(G.size&&!G.has(a)&&!(I&&G.has(I)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...G],traversal:`${z.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${ts(a)})`}}let ce=z.flatMap(G=>Ke(e,G)).filter(G=>G.subject===c.id).map(G=>e.byId.get(G.object)).filter(Boolean),Z=ss(ce),D=Z,U="";if(a&&a!=="Change"){D=Z.filter(I=>I.class===a);let G=al[a];if(!D.length&&G){let I=Z.filter(L=>L.class===G);I.length&&(D=I,U=`, widened to ${G} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${z.join("+")} edges where subject = ${c.label}${U}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:No(e,c,{maxDepth:Dh}).flat().map(z=>e.byId.get(z.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Dh})`};let g=Wo[i]||Lt(i).find(T=>Wh.has(T))||null,b=!!(c.class&&ks.has(c.class));if(g&&(ks.has(a)||b)){let T=Ke(e,g).filter(U=>U.object===c.id),M=ss(T.map(U=>e.byId.get(U.subject)).filter(Boolean)),z=!a||a==="Change"?M:M.filter(U=>U.class===a),K="",ce=al[a];if(!z.length&&ce){let U=M.filter(G=>G.class===ce);U.length&&(z=U,K=`, widened to ${ce} subjects (no ${a} recorded)`)}let Z=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!Ke(e,"contains").some(U=>U.subject===c.id),D=Z?e.byId.get(Go(e,c)||""):null;if(z.length||!(Z&&D))return{matches:z,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${K}`,ambiguous:d,matchedVia:p}}let y=c,w=u,v=d,_=p,$="",x=Yh(e,i);if(x&&y.class&&y.class!==x){let T=En(e,t.object,{expectedClass:x});if(T.match&&!T.ambiguous)y=T.match,w=T.candidates,v=T.ambiguous,_=T.matchedVia;else if(x==="Module"){let M=Go(e,y),z=M&&e.byId.get(M);if(z)$=`, refined from ${y.label} to its containing module`,y=z;else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${ts(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${ts(x)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${ts(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${ts(x)})`}}let S=Lt(i).flatMap(T=>Ke(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(S=S.concat(Lt(i).flatMap(T=>Ke(e,T)).filter(T=>T.subject===y.id).map(T=>({...T,subject:T.object,object:T.subject}))));let E="";if(!S.length&&y.class){let T=`ext:${String(y.label).toLowerCase()}`;S=Lt(i).flatMap(M=>Ke(e,M)).filter(M=>String(M.object).toLowerCase()===T),S.length&&(E=` (by name, via unresolved ${T} references)`)}let R=[],j=new Set;for(let T of S){let M=e.byId.get(T.subject);M&&!j.has(M.id)&&(j.add(M.id),R.push(M))}let A,F="";if(!a||a==="Change")A=R;else{let T=R.filter(M=>M.class===a);if(T.length)A=T;else if(a!=="Module"&&R.some(M=>M.class==="Module")){let M=new Set(R.filter(z=>z.class==="Module").map(z=>z.id));A=Tl(e,M,a),F=`, then ${ts(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Lt(i).join("+")} edges where object = ${y.label}${E}${F}${$}`,ambiguous:v,matchedVia:_}}function zr(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 ul(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function Ek(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function vn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Pr(e){let t=e.object??e.subject??"?";return`${e.entityType?Me(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function yl(e){return vr[e]?.bare||e}function Sk(e){let t=yl(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function kk(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=Me(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 ${yl(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 ${yl(o.kind)} ${JSON.stringify(String(r))}`}function pm(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Pr).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>pm(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?kk(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 ":""}${to(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?Me(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${to(e.kind)}`:`${r}${to(e.kind)} "${e.object}"`}return{english:o,machine:s}}function xn(e,t,n=null){let s=fm(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function fm(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${Rl()}`,miss:!0,ambiguous:!1};if(e.node)return dk(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
55
- ${t.branches.map((l,c)=>`${c+1}) as ${Pr(l.parsed)}: ${l.rendered.content}`).join(`
53
+ `)}`+(o.length>Kc?`
54
+ \u2026+${o.length-Kc} more`:"")}var Yc,of,wf,cf,zv,Bv,Vc,Wv,Mi,Gv,Vv,qv,vf,Hv,Kv,Yv,Xv,Jv,Qv,Zv,ex,tx,nx,sx,ox,rx,ix,ax,cx,lx,ux,dx,px,fx,hx,mx,gx,bx,lf,wx,yx,xf,Ef,Sf,$x,vx,xx,Ex,Sx,df,pf,_x,ff,Li,hf,mf,gf,Ar,Pe,Tx,Ax,Of,Ix,Bt,Mf,Cx,Hf,Lx,Nx,Px,Mx,Fx,Dx,zx,Ux,qc,bf,zi,Bx,Hc,Kc,Oe=O(()=>{vs();Xn();zc();Tr();Zs();Yc="This store holds no code index, so it records no modules or commits to look through.",of={"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"};wf=e=>/^(git|turn):/.test(String(e||""));cf=30,zv=8;Bv=2,Vc=25,Wv=3;Mi=10,Gv=8,Vv=3,qv=2,vf=5,Hv=4,Kv=.2,Yv=.35,Xv=.15,Jv=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),Qv=.2,Zv=.35,ex=.2,tx=.35,nx=e=>/\.cs$/i.test(e),sx=e=>/^I[A-Z]/.test(String(e||"")),ox=.2,rx=.35,ix=50,ax=.2,cx=.35,lx=.5,ux=vf,dx=3,px=4,fx=1,hx=.9,mx=.5,gx=.2,bx=.35,lf=4,wx=2,yx=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],xf=3,Ef=12,Sf=.9,$x=["imports","calls","callsSymbol","inherits"],vx=.5,xx=.6,Ex=.2,Sx=.35;df=128,pf=4,_x=64,ff=250,Li=class extends Error{};hf=new WeakMap;mf=40,gf=40,Ar=30;Pe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";Tx=25,Ax=15;Of=40,Ix="tests edges are recorded module to module, so this is module-grain coverage.";Bt=15;Mf=new Set(["Function","Method"]);Cx=8;Hf={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};Lx=8,Nx=16,Px=4,Mx=6,Fx=12,Dx=2,zx=8,Ux=3,qc=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),bf=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),zi=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},Bx=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};Hc=20;Kc=40});function Qe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ih(e){let t=String(e||"");return eh&&(t=t.replace(eh," ")),t.replace(/\s+/g," ").trim()}function ah(e){let t=String(e||"");t=t.replace(lE," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(iE);if(o&&(t=o[1].trim()),o=t.match(aE),o&&(t=o[1].trim()),o=t.match(th),o&&(t=o[1].trim()),o=t.match(nh),o&&(t=o[1].trim()),o=t.match(sh),o&&(t=o[1].trim()),o=t.match(cE),o&&(t=o[1].trim()),o=t.match(oh),o&&(t=o[1].trim()),o=t.match(uE),o&&(t=o[1].trim()),o=t.match(dE),o&&Es.test(o[1].trim())&&(t=o[1].trim()),o=t.match(pE),o&&Es.test(o[1].trim())&&(t=o[1].trim()),o=t.match(fE),o&&Es.test(o[1].trim())&&(t=o[1].trim()),o=t.match(hE),o&&Es.test(o[1].trim())&&(t=o[1].trim()),o=t.match(mE),o&&Es.test(o[1].trim())&&(t=o[1].trim()),o=t.match(gE),o&&Es.test(o[1].trim())&&(t=o[1].trim()),o=t.match(bE),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(wE),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(yE),o&&(t=`what do you ${o[1].toLowerCase()} about ${o[2].trim()}`),o=t.match($E),o){let r=o[1].trim();rE(r)||(t=!vE.test(r)&&(nE.test(r)||Es.test(r))?r:`describe ${r}`)}if(o=t.match(xE),o){let r=o[1].trim();(Es.test(r)||EE.test(r)||oh.test(r)||th.test(r)||sh.test(r)||nh.test(r)||SE.test(r))&&(t=r)}if(t===s)break}return t}function _E(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(kE);if(o&&(t=o[1].trim()),o=t.match(jE),o&&(t=o[1].trim()),t===s)break}return t}function TE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(RE);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function CE(e){let t=String(e||""),n=t.match(IE);if(n){let o=lh[n[1].toLowerCase()],r=ch[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(uh);return s?`which modules transitively import ${s[1].trim()}`:t}function Bi(e){return String(e||"").replace(Kx,t=>Ic[t.toLowerCase()])}function to(e){let t=Bi(e);return t=t.replace(Yx,n=>Cc[n.toLowerCase()]),t=t.replace(Xx,n=>Oc[n.toLowerCase()]),t=t.replace(Jx,"with"),t=t.replace(Qx,(n,s)=>`${s} for`),t=t.replace(Zx,(n,s)=>`for ${s}`),t=t.replace(eE,(n,s)=>s),t=t.replace(OE,"$1$2"),t=t.replace(Rp,"$1ing"),t=ah(t),t=TE(t),t=_E(t),t=CE(t),t=ih(t),t=en(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ir(e){for(let t of[...Ap,...Tp]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function tl(e){for(let t of LE){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function dh(e){let t=String(e||"").match(NE);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var Hx,Kx,rh,Yx,Xx,Jx,Qx,Zx,eE,tE,eh,nE,Es,sE,oE,rE,iE,aE,th,nh,sh,cE,lE,uE,dE,pE,fE,hE,mE,gE,bE,wE,yE,$E,vE,xE,EE,SE,oh,kE,jE,RE,ch,lh,AE,IE,uh,OE,LE,NE,tt,Wt,fe,$n=O(()=>{Kn();Hx=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b","gi"),Kx=Hx(Ic),rh=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Yx=rh(Cc),Xx=rh(Oc),Jx=/(?<=^|\s)w\/(?=\s|$)/gi,Qx=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,Zx=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,eE=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,tE=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),eh=kr.length?new RegExp("\\b("+[...kr].sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b\\s*,?","gi"):null;nE=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b","i"),Es=/^(?:which|what|who|whose|where|when|why|how)\b/i,sE=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),oE=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,rE=e=>{if(oE.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return sE.has((t[t.length-1]||"").toLowerCase())},iE=/^(?: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,aE=/^(?: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,th=/^(?:(?:ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|(?:just\s+)?(?:one|another)\s+more|another\s+one)[\s,]+)+(.+)$/i,nh=/^(?: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,sh=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,cE=/^(?:please[\s,]+)+(.+)$/i,lE=/,?\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,uE=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,dE=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,pE=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,fE=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,hE=/^do\s+you\s+know\s+(.+?)\??$/i,mE=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,gE=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,bE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,wE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,yE=/^what\s+you\s+(know|remember)\s+about\s+(.+?)\??$/i,$E=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,vE=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,xE=/^(?:and|also|so|then|now|but)\s+(.+)$/i,EE=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,SE=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,oh=/^(?:(?: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;kE=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,jE=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;RE=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;ch=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),lh=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),AE="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",IE=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(lh).join("|")+")\\s+("+Object.keys(ch).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+AE+")\\??$","i"),uh=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;OE=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Tc.map(Qe).join("|")})(\\s*[?.!]*)$`,"i");LE=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+(?:${Ac.map(Qe).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+(${tE})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);NE=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");tt=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"]),Wt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),fe=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var fh,ph=O(()=>{fh={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","chapped","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","seifing","seiing","seined","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 ts(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 l=1;l<=t.length;l+=1){let c=e[r-1]===t[l-1]?0:1,u=Math.min(o[l]+1,i[l-1]+1,o[l-1]+c);r>1&&l>1&&e[r-1]===t[l-2]&&e[r-2]===t[l-1]&&(u=Math.min(u,s[l-2]+c)),i[l]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function sl(e){return/^[a-z]+$/.test(e)&&!tt.has(e)&&!nl.has(e)}function gh(e){return DE(e)?null:Wi(e,mh,ns(e))}function Wi(e,t,n=ns(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=ts(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 ME,ns,nl,hh,mh,FE,DE,Fo=O(()=>{Kn();ph();$n();ME=["used"];ns=e=>e.length<=5?1:2,nl=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(tn),...ME].flatMap(e=>e.split(" "))),hh=4,mh=[...new Set([...Object.keys(de),...Object.keys(tn)].flatMap(e=>e.split(" ")).filter(e=>e.length>=hh))],FE=new Set(fh.words),DE=e=>FE.has(e)});function Do(e){for(let t of WE){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Gi,zE,UE,BE,ol,WE,bh,Vi=O(()=>{Kn();$n();Gi=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),zE=Object.keys(Be).sort((e,t)=>t.length-e.length).map(Qe).join("|"),UE=Object.keys(tn).sort((e,t)=>t.length-e.length).map(Qe).join("|"),BE=Hs.slice().sort((e,t)=>t.length-e.length).map(Qe).join("|"),ol=(e,t)=>e==="defines"&&Sr.has(t),WE=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Gi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(ol(n,t))return null;let s=e[1].trim(),o=e[3].trim();return Er.includes(t)&&([s,o]=[o,s]),{shape:"ask",entityType:null,modifier:"direct",kind:n,subject:s,object:o}}},{name:"reverse",re:new RegExp(`^which\\s+(${zE})\\s+(?:(${UE})\\s+)?(${Gi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return ol(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?tn[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Gi})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return ol(n,t)?null:{shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()}}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${BE})\\??$`,"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&&!Be[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&jp.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:ws(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${yn.map(Qe).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+(?:${Zt.map(Qe).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+)?(${Gi})\\??$`,"i"),build:e=>de[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()})}];bh={id:"grammar",class:"graph-query",run(e){let t=Do(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function wh(e){let t=e.trim().split(/\s+/);return t.length>1&&ki.has(t[0].toLowerCase())}function HE(e){return de[e.trim().toLowerCase()]==="calls"}function Tt(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,l)=>n.has(i+l)))&&r.every((a,l)=>e[i+l]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Or(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(S=>S.toLowerCase());if(s.includes("where")&&!Tt(s,de)){let S=s.some(j=>yn.includes(j)),E=new Set([...Zt,...yn]),R=n.filter((j,A)=>!tt.has(s[A])&&!E.has(s[A])).join(" ").trim();if(R){let j=S?"mentions":"where";return{shape:j,entityType:null,modifier:"direct",kind:j,object:R}}}if(new Set(["has","have","had"]).has(s[0])){let S=s.length;for(;S>1&&(s[S-1]==="ever"||s[S-1]==="been");)S-=1;if((S>1?de[s[S-1]]:null)==="touches"){let R=n.slice(1,S-1).filter((j,A)=>!tt.has(s[1+A])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=Tt(s,de);if(!i&&t){let S=s.map(E=>{if(!sl(E))return E;let R=t.lemma(E);return nl.has(R)?R:E});i=Tt(S,de),i&&(r=S)}let a=null;if(!i){let S=s.map(E=>E.length>=4&&sl(E)&&gh(E)||E);if(i=Tt(S,de),i){r=S;let E=s.slice(i.start,i.end).findIndex((j,A)=>j!==S[i.start+A]),R=i.start+Math.max(E,0);a={from:s[R],to:S[R]}}}let l=!1;if(!i)for(let S=0;S<s.length;S+=1){let E=ys[s[S]];if(!(E&&s[S]==="used"&&s[S+1]==="for")&&E&&s.slice(0,S).some(R=>Cr.has(R))){i={kind:E,start:S,end:S+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&ys[s[i.start]]&&s.slice(0,i.start).some(S=>Cr.has(S))&&(l=!0);let c=S=>a?{...S,fuzzyVerb:a}:S;if(t&&i.end-i.start===1){let S=i.start,E=s[S-1];if((E==="the"||E==="these"||E==="those")&&s[S+1]==="of"&&t.posTags(n)[S]==="NOUN"){let j=n.slice(S+2).filter((A,F)=>!tt.has(s[S+2+F])).join(" ").trim();if(j)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:j})}}let u=new Set,d=S=>{if(S)for(let E=S.start;E<S.end;E+=1)u.add(E)};d(i);for(let[S,E]of Object.entries(de)){if(E!==i.kind)continue;let R=S.split(" "),j=i.end;if(R.every((A,F)=>r[j+F]===A)){d({start:j,end:j+R.length});break}}let f=Tt(r,Be,u);d(f);let p=Tt(r,tn,u);d(p);let h=(S,E)=>n.slice(S,E).filter((R,j)=>!u.has(S+j)&&!tt.has(s[S+j])).join(" ").trim(),m=h(0,i.start),g=h(i.end,n.length);l&&!s.includes("by")&&qE.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?tn[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let S=m||g;if(S)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:S})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let S=m||g;if(S)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:S})}let v=s.indexOf("by"),_=s.slice(0,i.start).findIndex(S=>Cr.has(S)),$=_>=0,x=$&&_>v;if(v>=0&&!u.has(v)&&$){let S=(j,A)=>n.slice(j,A).filter((F,T)=>{let P=j+T,z=s[P];return!u.has(P)&&!tt.has(z)&&z!=="by"&&!Cr.has(z)&&!GE.has(z)&&!VE.has(z)}).join(" ").trim(),[E,R]=x?[S(_+1,n.length),S(v+1,_)]:[S(0,v),S(v+1,n.length)];if(E&&R)return b==="defines"&&Sr.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:E});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(E)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:E})}if(l&&v<0&&g&&s[i.start]==="called")return null;if(m&&g){let S=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Sr.has(S)||b==="calls"&&(wh(g)||HE(m)))return null;let E=m,R=g;return Er.includes(S)&&([E,R]=[R,E]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:E,object:R})}if(g){if(b==="calls"&&wh(g))return null;let S=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:S,modifier:w,kind:b,object:g})}if(b==="inherits"&&!m&&f&&f.start===i.end){let S=r.slice(f.start,f.end).join(" ");if(S)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:S})}if(m&&!g&&$&&i.end-i.start===1&&ys[s[i.start]]){if(m.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:m});let S=Cr.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:m,...S?{polar:!0}:{}})}return m?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:m}):null}var Cr,GE,VE,qE,yh,qi=O(()=>{Kn();$n();Fo();Cr=new Set(["is","are","was","were","be","been","being","get","gets","got"]),GE=new Set(["which","what","who","whom","whose"]),VE=new Set(Hn.map(e=>e.toLowerCase())),qE=new Set(["recently","lately","yet","already","ever","again"]);yh={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Or(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function YE(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],l=a.toLowerCase();!/^[a-z]+$/.test(a)||$h.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function XE(e,t=null){let n=Wt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!$h.has(a)&&(KE.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=YE(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var $h,KE,vh,xh=O(()=>{Kn();$n();Vi();qi();$h=new Set([...tt,...fe(qs),...fe(Object.keys(de)),...fe(Object.keys(Be)),...fe(Object.keys(tn)),...fe(Object.keys(Xe)),...fe(Ks),...fe(Ys),...fe(Object.keys($s)),...fe(Object.keys(Tn)),...fe(Object.keys(_o)),...fe(Hn),...fe(jr),...fe(Hs),...fe(Zt),...fe(yn),...fe(qn),...fe(Object.keys(To))]),KE=new Set([...fe(kr),...fe(ji)]);vh={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Do(e))return null;let{text:n,dropped:s,maybeNoise:o}=XE(e,t.nlp||null);if(!s.length||!n)return null;let r=Do(n)||Or(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 Eh=O(()=>{});var Hi,Ki=O(()=>{Hi=()=>{}});function kh(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?zo(e.subject)===zo(t.subject)&&zo(e.object)===zo(t.object):zo(e.object)===zo(t.object)}function rl(e){let t=(e||[]).filter(c=>c&&Array.isArray(c.candidates)&&c.candidates.length);if(!t.length)return null;let n=[];for(let c of t)for(let u of c.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:c.strategyId,class:c.class});if(n.some(c=>!jh(c))&&(n=n.filter(c=>!jh(c))),!n.length)return null;let s=new Map;for(let c of n)s.has(c.class)||s.set(c.class,[]),s.get(c.class).push(c);let o=[];for(let[c,u]of s){let d=[];for(let f of u){let p=d.find(h=>kh(h.parsed,f.parsed)&&h.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),Sh(f.parsed)<Sh(p.parsed)&&(p.parsed=f.parsed);continue}d.push({...f,agreed:1})}d.length&&o.push({class:c,candidates:d})}if(!o.length)return null;let r=c=>Math.max(...c.candidates.map(u=>u.confidence)),i=o[0];for(let c of o)r(c)>r(i)&&(i=c);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(c=>c.parsed)},l=o.filter(c=>c!==i).map(c=>c.candidates[0]).filter(c=>!i.candidates.some(u=>kh(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function ZE(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 _h(e,{describe:t=ZE,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 zo,JE,Sh,QE,jh,il=O(()=>{zo=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),JE=/^\s*(?:the|a|an)\s+/i,Sh=e=>[e?.subject,e?.object].filter(t=>JE.test(String(t||""))).length;QE=new Set(["fuzzy","lemma","spell"]),jh=e=>QE.has(e.via)});function Yi(e){al=e}function Xi(){return typeof al=="function"?al():null}var al,Uo=O(()=>{al=null});function Ah(e,t={},n=tS){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 eS,tS,Ih=O(()=>{$n();Vi();qi();xh();Eh();Ki();il();Uo();eS=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],tS=[bh,yh,vh,...eS]});function Bo(e){return nS.test(String(e||"").trim())?"an":"a"}function Ji(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 Wo(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Lr(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 nS,Qi=O(()=>{nS=/^[aeiou]/i});var Nr,cl=O(()=>{Nr=(e,t,n)=>n});var $m={};Vn($m,{DYNAMIC_TAIL_OK_RE:()=>Pl,applyNegationFrames:()=>Ir,ask:()=>_s,classDisplayName:()=>ss,degreeMetric:()=>dm,metaFallbackEntityAnswer:()=>om,normalizeQuery:()=>to,parseQuery:()=>zr,parseQueryFull:()=>El,render:()=>xn,rephraseHint:()=>Al,resolveObject:()=>En,traverse:()=>Gt,worldRelationGraphPayload:()=>Xk});function Ke(e,t){let n=Ch.get(e);n||(n=new Map,Ch.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(es(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Me(e,t){let[n,s]=hl[e]||["result","results"];return t===1?n:s}function Br(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Me(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function ss(e){let t=String(e||"");if(typeof An=="function"){let n=An(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function no(e){return oS[e]||e}function lS(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||cS.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return fe(Hs).includes(o)?t:e}function pS(e,t){if(!e||e.shape!=="where"||e.altObject||!uS.test(t))return e;let n=Si(t),s=Si(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=Wt(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||tt.has(i)||de[i]||i.endsWith("ing"))return o;let a=Wt(n).map(c=>c.toLowerCase());for(;a.length&&dS.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let l=r.slice(0,-1).join(" ");return{...e,object:l,altObject:s,verb:i}}function zr(e,{nlp:t=void 0}={}){return El(e,{nlp:t}).parsed}function El(e,{nlp:t=void 0}={}){let n=t===void 0?Xi():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=tl(Ir(to(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=hS(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=rl(Ah(o,{nlp:n,raw:s}));return i?{parsed:pS(lS(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function gl(e,t){return t.length&&Kh.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function qo(e,t){return Do(e)||Or(e,t)}function hS(e,t){let n=Wt(e),s=n.map(o=>o.toLowerCase());return LS(n,s)||PS(n,s)||wS(n,s,t)||Xh(e,t,0)||MS(n,s,t)||$S(n,s,t)||_S(n,s,t,0)||TS(n,s)||CS(n,s,t)||FS(n,s,t)||US(n,s,t)||WS(n,s,t,0)||zS(n,s,t,0)||kl(n,s,t,0)||xS(n,s,t)||gS(n,s)||nm(n,s,t,0)}function gS(e,t){let n=0;mS.has(t[n])&&(n+=1);let s=At(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=h=>h+1<t.length?_p[`${t[h]} ${t[h+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let h=a;h+1<t.length;h+=1){let m=r(h);if(m){l=h,c=m;break}}if(l<0)return null;let u=e.slice(a,l).join(" ").trim(),d=e.slice(l+2).join(" ").trim();if(!u||!d)return null;let f=(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},p=f(i,u);return p.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:p}},{op:"intersection",kind:"set",ast:{node:"clause",clause:f(c,d)}}]}}function ea(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function wS(e,t,n){if(!["do","does","did"].includes(t[0])||!bS.has(t[1]))return null;let s=At(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 l=Tt(a,de);if(!l)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((f,p)=>(p<l.start||p>=l.end)&&!tt.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=Ho(`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:l.kind,object:u,complement:ea(o,{op:"difference",kind:"set",ast:d})}}function Xh(e,t,n=0){let s=dh(e);if(!s)return null;let o=At(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=Wt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Xe[d]))return ea(r,{op:"difference",kind:"qual",filters:a});let l=Tt(a,de);if(!l)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,f)=>(f<l.start||f>=l.end)&&!tt.has(a[f])&&a[f]!=="from").length)return ea(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=Ho(`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"}:ea(r,{op:"difference",kind:"set",ast:u})}function $S(e,t,n){let s=0;for(;s<t.length&&yS.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=Tt(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!tt.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function Jh(e,t){let n=new Set;for(let s of t)for(let o of Ke(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Qh(e,t){let n=Lt(t),s=n.filter(r=>!qh.has(r)),o=Jh(e,s.length?s:n);return o.size===1?[...o][0]:null}function Ho(e,t,n){if(n>Hh)return{node:"miss",reason:"too deep to resolve"};let s=Xh(e,t,n);if(s)return s;let o=Wt(e),r=o.map(c=>c.toLowerCase()),i=kl(o,r,t,n);if(i)return i;let a=nm(o,r,t,n);if(a)return a;let l=qo(e,t);return l?{node:"clause",clause:l}:null}function kl(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=qn.includes(t[o]),i=!r&&Yh(t[o]);if(!r&&!i||r&&o+1>=t.length||!At(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Xe[f.toLowerCase()]))continue;let c=qo([...l,ml].join(" "),n);if(!c||c.shape!=="reverse"&&c.shape!=="forward"||c.modifier&&c.modifier!=="direct")continue;let u=`which ${t[o-1]} ${e.slice(r?o+1:o).join(" ")}`,d=Ho(u,n,s+1);return!d||d.node==="miss"?d?{node:"miss",reason:d.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"}:{node:c.shape==="reverse"?"reverseSet":"forwardSet",kind:c.kind,entityType:c.entityType,inner:d}}return null}function xS(e,t,n){for(let s=0;s<t.length;s+=1){if(!vS.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!de[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),ml,...e.slice(s+1)],a=qo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===ml&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function _S(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!ES.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(SS.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&&kS.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&jS.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>qn.includes(d)))return null;let l=Sl.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=Ho(l,n,s+1);if(!c||c.node==="miss")return c?{node:"miss",reason:c.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=At(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function TS(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!RS.has(t[n]))return null;let s=t[n],o=e.slice(n+1).join(" ").trim();return o?{node:"commitFilter",op:s,pivotRaw:o}:{node:"miss",reason:`"what changed ${s}" needs a date or commit afterward`}}function IS(e){let t=new Set,n=[];for(let s of e){if(!s||!AS.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function CS(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(!jr.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let f=t.slice(0,d).join(" ");if(d===t.length-1&&(Ks.includes(f)||Ys.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Ks.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=OS(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let l=o?s-1:s,c=IS(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function OS(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&fS.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Xe[a]))return{type:"qual",filters:r};if(o.length===1){let a=At(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=qo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function LS(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?At(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 l=i.indexOf("in",1);if(l>0){let u=a.slice(1,l).join(" ").trim(),d=a.slice(l+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 c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:c,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:null,scopeModule:l}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function NS(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=ws(n).slice(e.length).trim(),o=Wt(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 PS(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let c=1;c<t.length;c+=1)if(Xe[t[c]]){n=c,s=t[c-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&ys[t[n]]){let c=o+1;for(;c<t.length&&(t[c]==="the"||t[c]==="a"||t[c]==="an");)c+=1;let u=t[c];if(u&&!Ip.has(u))return null}let r=NS(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 l=a>i?e.slice(i,a).join(" ").trim():"";return l?{node:"qualCheck",term:l,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function MS(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=qo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function FS(e,t,n){let s=Ks.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&&Xe[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?At(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 l=e.slice(o),c=t.slice(o).some(d=>!tt.has(d)&&!Zh.has(d)),u;if(c){let d=Ho(`which ${a} ${l.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 zS(e,t,n,s){let o=0,r=!1,i=null;for(let y of em){let w=y.split(" ");if(t.slice(0,w.length).join(" ")===y){i=y,o=w.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&jl.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Xe[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?At(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Hn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${tm}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!tt.has(y)&&!Zh.has(y)),p=t.slice(o),h=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),h=h.slice(1));let m=r&&DS.has(p[0]);if(r&&(f&&!m||d.length===0))return null;let g,b=!1;if(f){let y=m?h:d,w=Ho(`which ${[...a,u,...y].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};g=w,b=!0}else g={node:"allOfClass",entityType:c},a.length&&(g={node:"qualifier",filters:a,inner:g});return{node:"list",entityType:c,base:g,scoped:b}}function US(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($s[m]){s=$s[m],o=h;break}if($s[t[h]]){s=$s[t[h]],o=h;break}}if(!s)return null;let r=null,i=null;for(let h=o;h<t.length;h+=1)if(Tn[t[h]]){r=Tn[t[h]],i=t[h];break}if(!r){for(let h=o-1;h>=0;h-=1)if(Tn[t[h]]){r=Tn[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]),l=["important","significant","central","key","core","essential","critical","principal"],c=t.some(h=>l.includes(h));!r&&(a||c)&&(r=Tn.connections,i="connections");let u,d=null;for(let h of t){let m=At(h);if(m&&!m.placeholder){u=m.entityType,d=h;break}}if(!d&&(u=i?Cp[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 f=["needs","need","needing","lacks","lack","lacking","misses","missing"],p=t.some(h=>f.includes(h))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:p}}function WS(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&jl.has(t[o]);)o+=1;if(o>=t.length)return null;let r=At(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&BS.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=At(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=>qn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Hn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${tm}`}:null}function GS(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&jl.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(qn.includes(t[i])){s=i;break}if(s<0)return null;let o=At(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 VS(e,t,n,s,o,r){let{branches:i,ops:a}=ta(n,s),l=null,c=[];for(let u=0;u<i.length;u+=1){let d=i[u],f=d.map(y=>y.toLowerCase()),p=u===0?"intersection":a[u-1],h=gl(d,f);if(h.blc.length&&h.blc.every(y=>Xe[y])){c.push({op:p,kind:"qual",filters:h.blc});continue}if(f[0]==="of"||f[0]==="in"){c.push({op:p,kind:"set",ast:{node:"membership",entityType:e,term:d.slice(1).join(" ")}});continue}let m=d,g=Tt(f,de);g?l=d.slice(g.start,g.end):l&&(m=[...l,...d]);let b=sm(`${t} ${m.join(" ")}`,o,r);if(!b||b.node==="miss")return{miss:b&&b.reason||"a clause in the combination didn't parse"};c.push({op:p,kind:"set",ast:b})}return{atoms:c}}function nm(e,t,n,s){let o=GS(e,t);if(o){let{entityType:R,term:j,relIdx:A}=o,F=t.slice(A+1),T=e.slice(A+1);if(!F.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[A]}"`};let P=VS(R,`which ${t[A-1]}`,F,T,n,s+1);if(P.miss)return{node:"miss",reason:P.miss};let z=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:j}},...P.atoms];return z.length===1?z[0].ast:{node:"boolean",entityType:R,atoms:z}}let r=0;for(;r<t.length&&Sl.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Xe[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?At(t[r]):null;if(!l){let R=r+1<t.length?At(t[r+1]):null;if(Oh.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Kh.has(t[r])){let j=r+1;j<t.length&&(t[j]==="the"||t[j]==="a"||t[j]==="an")&&(j+=1);let A=j+1<t.length?At(t[j+1]):null;if(Oh.has(t[j])&&A&&A.entityType==="Commit"&&j+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!tt.has(t[r])&&!Ll.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let c=l.entityType,u=t[r];r+=1;let d=t.slice(r),f=e.slice(r),p=!1;d.length&&qn.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let h=d[0]==="of"||d[0]==="in",m=d.length>0&&Yh(d[0]),g=f.length>0&&ta(d,f).branches.some(R=>{let{blc:j}=gl(R,R.map(A=>A.toLowerCase()));return j.length&&j.every(A=>Xe[A])}),b=f.length>0?ta(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(y=b.slice(1).every(A=>{let F=A.map(P=>P.toLowerCase()),T=Tt(F,de);return T&&T.start===0?T.kind===j.kind:!T}))}let w=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(w=b.slice(1).every(A=>{let F=A.map(P=>P.toLowerCase()),T=Tt(F,de);return!!T&&T.start===0&&T.end-T.start===1}))}if(!(a.length||p||h||m||g||y||w))return null;if(!f.length){let R={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:R,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let v=l.placeholder?"what":`which ${u}`,{branches:_,ops:$}=ta(d,f),x=null,S=[];for(let R=0;R<_.length;R+=1){let j=_[R],A=j.map(ce=>ce.toLowerCase()),F=R===0?"seed":$[R-1],T=gl(j,A);if(T.blc.length&&T.blc.every(ce=>Xe[ce])){S.push({op:F,kind:"qual",filters:T.blc});continue}if(A[0]==="of"||A[0]==="in"){S.push({op:F,kind:"set",ast:{node:"membership",entityType:c,term:j.slice(1).join(" ")}});continue}let P=j,z=Tt(A,de);z?x=j.slice(z.start,z.end):x&&(P=[...x,...j]);let X=sm(`${v} ${P.join(" ")}`,n,s+1);if(!X||X.node==="miss")return{node:"miss",reason:X&&X.reason||"a clause in the combination didn't parse"};S.push({op:F,kind:"set",ast:X})}if(S[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let E;return S.length===1?E=S[0].ast:E={node:"boolean",entityType:c,atoms:S},a.length&&(E={node:"qualifier",filters:a,inner:E,entityType:c}),E}function sm(e,t,n){if(n>Hh)return{node:"miss",reason:"too deep to resolve"};let s=Wt(e),o=s.map(a=>a.toLowerCase()),r=kl(s,o,t,n);if(r)return r;let i=qo(e,t);return i?{node:"clause",clause:i}:null}function ta(e,t){let n=Object.keys(_o).sort((a,l)=>l.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let l of n){let c=l.split(" ");if(e.slice(i,i+c.length).join(" ")===l){a={c:l,len:c.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(_o[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 _l(e,t,n,s){let o=Go[t];if(o&&js.has(n)){let u=Ke(e,o).filter(d=>s.has(d.object));return rs(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>js.has(e.byId.get(u)?.class))?[...Lt(t),o]:Lt(t)).flatMap(u=>Ke(e,u)).filter(u=>s.has(u.object)),l=rs(a.map(u=>e.byId.get(u.subject)).filter(Boolean));if(!n||n==="Change")return l;let c=l.filter(u=>u.class===n);return c.length?c:n!=="Module"&&l.some(u=>u.class==="Module")?Il(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function HS(e,t){let n=new Set(_l(e,"touches","Commit",t).map(s=>String(s.label||"").toLowerCase()));for(let s of t)for(let o of e.byId.get(s)?.derived_from||[]){let r=qS.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function Fr(e,t,n){let s=Lt(t).flatMap(o=>Ke(e,o)).filter(o=>n.has(o.subject));return rs(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function rs(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 KS(e,t){let n=Qn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Qn(o.label).startsWith(s))}function bl(e){let t=Lh.get(e);if(t)return t;let n=new Set;for(let i of Ke(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 Ke(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of Ke(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},Lh.set(e,t),t}function Vo(e,t){return t?t.class==="Module"?t.id:bl(e).moduleOfSymbol.get(t.id)||null:null}function om(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>YS.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Vo(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Me(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Nr("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${l} ${a} in this codebase${c} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function wl(e,t,n){let s=rs(Ro.flatMap(o=>Fr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function Rl(e,t,n=null){let s=os(e,t,n);if(!(s.match&&s.tier===1)){let o=KS(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 rm(e,t,n,s,o){let r=o||(()=>!0),i=wl(e,t,s).filter(r);if(i.length||!am(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of im(e,t)){let l=e.byId.get(a);if(!l)continue;let c=wl(e,a,s).filter(r);if(c.length)return{own:i,inherited:c,viaId:a,viaLabel:l.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function so(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=bl(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=Vo(e,t),o=bl(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Qs(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function Tl(e){return Ke(e,"inherits")}function yl(e,t){return Tl(e).filter(n=>n.object===t).map(n=>n.subject)}function Nh(e,t){return Tl(e).filter(n=>n.subject===t).map(n=>n.object)}function XS(e,t){let n=new Set,s=[...yl(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of yl(e,o))n.has(r)||s.push(r)}}return n}function im(e,t){let n=new Set,s=[...Nh(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Nh(e,o))n.has(r)||s.push(r)}}return n}function am(e,t){let n=Ph.get(e);if(n||(n=new Map,Ph.set(e,n)),n.has(t))return n.get(t);let s=Tl(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 Mh(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 Dh(e){return e.slice().sort((t,n)=>Fh[n.via]-Fh[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function zh(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=ns(n);if(ts(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of oo(e.label))if(ts(o,n,s)<=s)return!0;return!1}function cm(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...oo(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=am(e,t),i=[];for(let l of s){let c=Mh(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...XS(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Mh(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:Dh(i),broad:[]};let a=new Map;for(let l of s)for(let c of im(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&zh(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of yl(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&zh(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Dh([...a.values()])}}function JS(e){return[...Fi(Di(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function un(e,t,n){switch(t.node){case"clause":return Gt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?JS(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=cm(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Lt(t.kind).flatMap(o=>Ke(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=os(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Qh(e,t.kind);if(!o)return[];let r=new Set(Fr(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"reverseSet":{let s=new Set(un(e,t.inner,n).map(o=>o.id));return _l(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(un(e,t.inner,n).map(o=>o.id));return Fr(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=Rl(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(l=>l.id));return rs(Ro.flatMap(l=>Fr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=rm(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?pm(e,t,n).matches:un(e,t.inner,n).filter(o=>t.filters.every(r=>so(e,o,Xe[r])));case"boolean":return lm(e,t,n);case"anaphora":return um(e,t,n).matches;default:return[]}}function lm(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=un(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>so(e,l,Xe[c])),a=l=>o.filters.every(c=>{let u=QS(Xe[c]);return u?so(e,l,u):!so(e,l,Xe[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(un(e,o.ast,n).map(i=>i.id));if(o.op==="intersection")s=s.filter(i=>r.has(i.id));else if(o.op==="difference")s=s.filter(i=>!r.has(i.id));else if(o.op==="union"){let i=new Set(s.map(a=>a.id));for(let a of un(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function ZS(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=En(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 um(e,t,n){let o=ZS(e,t.candidateTerms);if(!o){let d=n&&n.prev;if(!Array.isArray(d)||!d.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=d.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(d=>i.filters.every(f=>so(e,d,Xe[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=En(e,i.clause.object);if(!d.match)r=[];else{let f=Go[i.clause.kind],p=[...Lt(i.clause.kind),...f?[f]:[]],h=new Set(p.flatMap(m=>Ke(e,m)).filter(m=>m.object===d.match.id).map(m=>m.subject));r=r.filter(m=>h.has(m.id))}}let a=d=>d.length&&d.every(f=>f.class===d[0].class)?d[0].class:null,l=i&&i.type==="entity"?i.entityType:a(o),c=r.length?a(r):l;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:c,matches:[]};let u=Br(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function dm(e,t,n){let s=n.kind==="*"?ek:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of Ke(e,r)){let a=i.subject===t.id,l=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let c=e.byId.get(i.object);if(!c||c.class!==n.filter)continue}o+=1}else(n.dir==="in"&&l||n.dir==="both"&&(a||l))&&(o+=1)}return o}function tk(e){let t=e.individuals.filter(s=>s.class==="Commit"),n=s=>String((s.attributes||[]).find(o=>o.key==="date")?.value||"");return t.sort((s,o)=>n(o).localeCompare(n(s))),{compositeKind:"recentCommits",matches:t}}function sk(e,t){let{op:n,pivotRaw:s}=t,o=u=>String((u.attributes||[]).find(d=>d.key==="date")?.value||"").slice(0,10),r=null,i=null,a=null;if(nk.test(s))r=s;else{let{match:u,ambiguous:d}=En(e,s,{expectedClass:"Commit"});u&&!d&&u.class==="Commit"&&o(u)&&(i=u.id,a=u.label,r=o(u))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let l=e.individuals.filter(u=>u.class==="Commit"&&u.id!==i&&o(u)).filter(u=>{let d=o(u);return n==="since"?d>=r:n==="before"?d<r:n==="after"?d>r:d===r}).sort((u,d)=>o(d).localeCompare(o(u))),c=[];return l.length&&c.push({kind:"set",class:"Commit",label:`${l.length} commit${l.length===1?"":"s"} ${n} ${s}`,ids:l.map(u=>u.id),attrs:{count:l.length,op:n,...i?{pivot:i}:{}},lane:"commitFilter"}),i&&c.push({kind:"event",class:"Commit",label:a,ids:[i],attrs:{date:r},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:l,referents:c}}function ok(e,t,n){let s=un(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size)return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0};let r=_l(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(l=>l.key==="date")?.value||"");return r.sort((a,l)=>i(l).localeCompare(i(a))),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function rk(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(Ke(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!Qs(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:dm(e,a,t.metric)})).sort((a,l)=>t.extreme==="most"?l.score-a.score:a.score-l.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?Br(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 pm(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?h=>s.filters.every(m=>so(e,h,Xe[m])):null,a=h=>Br(r,h,"membership"),l=Rl(e,o.term,n&&n.contextId);if(l.kind==="dir"){let h;if(!r||r==="Module")h=l.mods;else{let m=new Set(l.mods.map(g=>g.id));h=rs(Ro.flatMap(g=>Fr(e,g,m))).filter(g=>g.class===r)}return i&&(h=h.filter(i)),{compositeKind:"set",matches:h,entityType:r,referents:a(h)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=rm(e,l.id,l.entityClass,r,i),f=!c.length&&u.length>0,p=f?u:c;return{compositeKind:"membership",entityType:r,matches:p,inheritedNotOwn:f,viaLabel:d,ownerLabel:l.label,referents:a(p)}}function ik(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=En(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=En(e,s,{expectedClass:n}),l=!r||a.match&&Vo(e,a.match)===r.id,c=a.match&&l;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:c?[a.match]:[]}}let i=r?Il(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 ak(e,t,n){let s=Vo(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||wl(e,n.id).some(o=>o.id===t.id)}function ck(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=os(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=Rl(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!ak(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 l=so(e,a.match,Xe[o]),c=r?!l:l,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:c,matches:[a.match],referents:u}}function lk(e,t,n){let s=En(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=un(e,{node:"allOfClass",entityType:t.entityType},n),r=lm(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 uk(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(un(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}=Gt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function dk(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return ik(e,t);if(t.node==="qualCheck")return ck(e,t,n);if(t.node==="universal")return lk(e,t,n);if(t.node==="count"){let i=uk(e,t.base,n);return i?{compositeKind:"count",count:HS(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:un(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:un(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return Hk(e,t);if(t.node==="superlative")return rk(e,t);if(t.node==="temporal")return ok(e,t,n);if(t.node==="recentCommits")return tk(e);if(t.node==="commitFilter")return sk(e,t);if(t.node==="anaphora")return um(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return pm(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=cm(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:i.length?i:a,broad:!i.length&&a.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 s=un(e,t,n),o=t.entityType||null,r=Br(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function fm(){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 pk(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=Ur(e);return n?`${t} in ${n}`:t}function $l(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some($l):Array.isArray(e.filters)&&e.filters.some(t=>Xe[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some($l)}function fk(e,t){return!["Function","Method"].includes(t)||!$l(e)?null:"This index records tests edges module to module, so it holds no function-grain coverage to filter on \u2014 ask whether the module a function lives in is tested instead."}function hk(e,t,n){if(t.compositeMiss)return t.reason==="no-prev"?{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1}:{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${fm()}.`,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=Me(t.entityType,1),o=Me(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=Ur(i),l=i.class==="Module"?"":a?`, ${Nr("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${Ss(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=Me(t.entityType,t.total),o=iS(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}: ${Ss(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Me(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 ${Me(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>He?` \u2014 narrow with "${Me(t.entityType,2)} in <module>"`:"";return{content:`${Ss(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=vn(t.asked),o=Vs[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)return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${ks(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Me(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Ss(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Ss(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Me(t.entityType,1);if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?pk(t.matches[0]):Ss(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Me(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,Bt).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Bt?` \u2026+${t.matches.length-Bt} 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.matches.length)return{content:`no commits recorded ${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,Bt).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Bt?` \u2026+${t.matches.length-Bt} 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 ${Me(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:`${Ss(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?Me(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:`nothing in the index matches the inner set, so there is no change history to date. ${ks(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. ${ks(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 l=(i.attributes||[]).find(d=>d.key==="message")?.value||"",c=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 ${c}${l?` ("${l}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=fk(e,t.entityType)||ks(n);return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${Ss(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function Al(){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). `+fm()}function ks(e=null){return e&&Pi(e)===0?Yc:`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function oo(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function sa(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 hm(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function mk(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Pr(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(g=>g.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let g=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${g}`)||String(y.label).toLowerCase().startsWith(g)));if(b.length===1)return{match:b[0],candidates:[],tier:1,ambiguous:!1};if(b.length>1)return{match:b[0],candidates:b.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(g=>String(g.label).toLowerCase()===o||String(g.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let g of e.relations)for(let b of g.edges)if(String(b.object).toLowerCase()===l){c=b.object;break e}if(c&&!n)return{match:{id:c,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(g=>g.trim()).filter(Boolean);if(u.length>1){let g=new Set;for(let b of u){let y=Pr(e,b,{expectedClass:n});y.match&&!y.ambiguous&&g.add(y.match.id)}if(g.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],f=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(f){let g=o.split(".").pop();for(let b of r){let y=String(b.label||"").toLowerCase();b.class==="Module"?y.split("/").pop()===o&&d.push({ind:b,score:1e3-Math.abs(y.length-o.length)}):y.includes(o)?d.push({ind:b,score:2e3-Math.abs(y.length-o.length)}):y.endsWith(`.${g}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let g=[...oo(s)],b=o.split(/\s+/).find($=>$.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,v=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,_=v?mk(s):null;for(let $ of r){let x=String($.label||"").toLowerCase(),S=x.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(S===o){d.push({ind:$,score:5e3});continue}if(o.length>=4&&(S.startsWith(o)||S.endsWith(o))){d.push({ind:$,score:4e3-Math.abs(S.length-o.length)});continue}if(v){let j=hm($.label);if(j&&j===_){d.push({ind:$,score:5e3});continue}let A=/[/_-]/.test($.label)||/\.[a-z0-9]+$/i.test(String($.label||""));if(j&&A&&_.length>=4&&j.includes(_)){d.push({ind:$,score:2e3-Math.abs(j.length-_.length)});continue}}if($.class==="Module"){let j=sa(o);if(j!==o&&j===sa(S)){let A=ns(o);if(ts(S,o,A)>A){d.push({ind:$,score:3e3-Math.abs(S.length-o.length)});continue}}}if(o.length>=4&&x.includes(o)){d.push({ind:$,score:1e3-Math.abs(x.length-o.length)});continue}let E=oo($.label),R=g.filter(j=>E.has(j)).length;R>0&&(!y||E.has(y))&&d.push({ind:$,score:R/g.length*ul})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter(v=>v.score===g.score),w=g.score>=ul?b.filter(v=>v.score>=ul):b;return{match:g.ind,candidates:w.slice(0,4).map(v=>v.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),h=null,m=!p&&typeof Xs=="function"?Xs(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(m.length){let[g,...b]=m,y=e.byId.get(g.id);if(y){let w=b.filter(v=>v.score===g.score);if(h={match:y,candidates:b.slice(0,4).map(v=>e.byId.get(v.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!h.ambiguous&&g.via!=="spell")return h}}if(!i&&o.length>=4){let g=ns(o),b=g+1,y=[];for(let w of r){let v=ts(String(w.label||"").toLowerCase(),o,g);if(v>0)for(let _ of oo(w.label)){if(v<=0)break;v=Math.min(v,ts(_,o,g))}v<b?(b=v,y=[w]):v===b&&v<=g&&y.push(w)}if(b<=g&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=g&&y.length>1&&!h){let[w,...v]=y;return{match:w,candidates:v.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return h||{match:null,candidates:[],tier:null,ambiguous:!1}}function dl(e,t){let n=hm(t),s=[...oo(t)],o=[];for(let r of oo(e))n.includes(r)||s.some(i=>sa(i)===sa(r))||na.has(r)||bm.has(r)||o.push(r);return o}function Zi(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(dl(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),dl(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:vn(s.slice(0,4).map(r=>r.label))}:e}let n=dl(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function En(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(gk,"").trim(),i=r.match(bk);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=Zi(Pr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Zi(Pr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Zi(Pr(e,t,n),t)}return Zi(Pr(e,t,n),t)}function os(e,t,n){if(qs.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 En(e,t)}function Il(e,t,n){let s=[];for(let o of Ke(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 wk(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||js.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>Ke(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&js.has(n)&&(l=l.filter(c=>c.class===n)),{matches:l,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function xk(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&Cl.has(Uh(s.label))).map(s=>({ind:s,named:n.has(Uh(s.label))?1:0,depth:String(s.label).split("/").length,fixture:vk(s.label)?1:0})).sort((s,o)=>o.named-s.named||s.depth-o.depth||s.fixture-o.fixture||String(s.ind.label).localeCompare(String(o.ind.label))).map(s=>s.ind)}function Ek(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function Ol(e){return(e?.attributes||[]).find(t=>t.prop===Sk)?.value||null}function kk(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Bo(e)} ${e} in this graph's vocabulary`}function Gt(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 dk(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(P=>{let z=Gt(e,P,{contextId:n,prev:s});return{parsed:P,result:z,rendered:xn(P,z,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:T}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let T=String(t.object||"").trim(),P=T.toLowerCase(),z=(e.individuals||[]).find(X=>{if(!Ol(X))return!1;if(String(X.label).toLowerCase()===P)return!0;let ce=(X.attributes||[]).find(te=>te.key==="token")?.value;return ce&&String(ce).toLowerCase()===P});if(!z){let X=om(e,T);return X?{matches:[X.hit],objMatch:X.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:X.text,traversal:`schema lookup for "${T}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}return{matches:[z],objMatch:z,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}if(r==="mentions"){let T=String(t.object||"").trim();return{matches:(typeof Xs=="function"?Xs(e.proseIndex,T):[]).map(X=>e.byId.get(X.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${T}"`}}if(r==="where"&&yk.test(String(t.object||"").trim())){let T=xk(e,t.object);return{matches:T,objMatch:T[0]||null,candidates:T.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...Cl].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!Ek(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 T=os(e,t.subject,n),P=os(e,t.object,n);if(!T.match||!P.match||T.ambiguous||P.ambiguous)return{matches:[],objMatch:P.match,candidates:P.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(T.unresolvedPronoun||P.unresolvedPronoun)};let[z,X]=[T.match,P.match];i==="touches"&&X.class==="Commit"&&z.class!=="Commit"&&([z,X]=[X,z]);let ce=Go[i],te=[...new Set(ce?[...Lt(i),ce]:Lt(i))],D=te.flatMap(U=>Ke(e,U)).filter(U=>U.subject===z.id&&U.object===X.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:P.match,subjMatch:T.match,candidates:[],traversal:`${te.join("+")} edge from ${z.label} to ${X.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=os(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=os(e,t.altObject,n),P=!!l.match&&!l.ambiguous,z=!!T.match&&!T.ambiguous;!P&&z?l=T:P&&z&&l.match.id!==T.match.id&&(l={...l,ambiguous:!0,candidates:[T.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let T=X=>X.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),P=T(String(t.object||"").trim().toLowerCase()),z=(e.individuals||[]).find(X=>{if(X.class!=="Module"||X.id===l.match.id)return!1;let ce=String(X.label||"").toLowerCase().split("/").pop();return ce!==T(ce)&&T(ce)===P});z&&(l={...l,ambiguous:!0,candidates:[z,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:h,nearestLabel:m}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:h,nearestLabel:m};if(d){let P=rs([c,...u||[]]).slice(0,He).map(z=>{let X=Gt(e,t,{contextId:n,prev:s,pinnedObjMatch:z});return{candidate:z,result:X,rendered:xn(t,X,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:P}}if(r==="where"){let T=(c.attributes||[]).find(P=>P.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:T,traversal:T?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let T=X=>String((X.attributes||[]).find(ce=>ce.key==="date")?.value||""),P;if(c.class==="Commit")P=[c];else{let X=["touches","touchesSymbol"].flatMap(te=>Ke(e,te)).filter(te=>te.object===c.id),ce=new Set;P=[];for(let te of X){if(ce.has(te.subject))continue;ce.add(te.subject);let D=e.byId.get(te.subject);D&&D.class==="Commit"&&P.push(D)}P.sort((te,D)=>T(D).localeCompare(T(te)))}let z=P.length&&T(P[0])?[{kind:"event",class:"Commit",label:P[0].label,ids:[P[0].id],attrs:{date:T(P[0]).slice(0,10)},lane:"when"}]:[];return{matches:P,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:z,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let T=te=>String((te.attributes||[]).find(D=>D.key==="date")?.value||""),P=["touches","touchesSymbol"].flatMap(te=>Ke(e,te)).filter(te=>te.object===c.id),z=new Set,X=[];for(let te of P){if(z.has(te.subject))continue;z.add(te.subject);let D=e.byId.get(te.subject);D&&D.class==="Commit"&&X.push(D)}X.sort((te,D)=>T(D).localeCompare(T(te)));let ce=X.length&&T(X[0])?[{kind:"event",class:"Commit",label:X[0].label,ids:[X[0].id],attrs:{date:T(X[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:X,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:ce,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return wk(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=Go[i],z=!!(T&&c.class&&js.has(c.class))?[...new Set([...Lt(i),T])]:Lt(i);if(a&&a!=="Change"){let W=Jh(e,z),I=ll[a];if(W.size&&!W.has(a)&&!(I&&W.has(I)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...W],traversal:`${z.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${ss(a)})`}}let ce=z.flatMap(W=>Ke(e,W)).filter(W=>W.subject===c.id).map(W=>e.byId.get(W.object)).filter(Boolean),te=rs(ce),D=te,U="";if(a&&a!=="Change"){D=te.filter(I=>I.class===a);let W=ll[a];if(!D.length&&W){let I=te.filter(L=>L.class===W);I.length&&(D=I,U=`, widened to ${W} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${z.join("+")} edges where subject = ${c.label}${U}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:Po(e,c,{maxDepth:Bh}).flat().map(z=>e.byId.get(z.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Bh})`};let g=Go[i]||Lt(i).find(T=>qh.has(T))||null,b=!!(c.class&&js.has(c.class));if(g&&(js.has(a)||b)){let T=Ke(e,g).filter(U=>U.object===c.id),P=rs(T.map(U=>e.byId.get(U.subject)).filter(Boolean)),z=!a||a==="Change"?P:P.filter(U=>U.class===a),X="",ce=ll[a];if(!z.length&&ce){let U=P.filter(W=>W.class===ce);U.length&&(z=U,X=`, widened to ${ce} subjects (no ${a} recorded)`)}let te=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!Ke(e,"contains").some(U=>U.subject===c.id),D=te?e.byId.get(Vo(e,c)||""):null;if(z.length||!(te&&D))return{matches:z,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${X}`,ambiguous:d,matchedVia:p}}let y=c,w=u,v=d,_=p,$="",x=Qh(e,i);if(x&&y.class&&y.class!==x){let T=En(e,t.object,{expectedClass:x});if(T.match&&!T.ambiguous)y=T.match,w=T.candidates,v=T.ambiguous,_=T.matchedVia;else if(x==="Module"){let P=Vo(e,y),z=P&&e.byId.get(P);if(z)$=`, refined from ${y.label} to its containing module`,y=z;else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${ss(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${ss(x)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${ss(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${ss(x)})`}}let S=Lt(i).flatMap(T=>Ke(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(S=S.concat(Lt(i).flatMap(T=>Ke(e,T)).filter(T=>T.subject===y.id).map(T=>({...T,subject:T.object,object:T.subject}))));let E="";if(!S.length&&y.class){let T=`ext:${String(y.label).toLowerCase()}`;S=Lt(i).flatMap(P=>Ke(e,P)).filter(P=>String(P.object).toLowerCase()===T),S.length&&(E=` (by name, via unresolved ${T} references)`)}let R=[],j=new Set;for(let T of S){let P=e.byId.get(T.subject);P&&!j.has(P.id)&&(j.add(P.id),R.push(P))}let A,F="";if(!a||a==="Change")A=R;else{let T=R.filter(P=>P.class===a);if(T.length)A=T;else if(a!=="Module"&&R.some(P=>P.class==="Module")){let P=new Set(R.filter(z=>z.class==="Module").map(z=>z.id));A=Il(e,P,a),F=`, then ${ss(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Lt(i).join("+")} edges where object = ${y.label}${E}${F}${$}`,ambiguous:v,matchedVia:_}}function Ur(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 pl(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function jk(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function vn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Mr(e){let t=e.object??e.subject??"?";return`${e.entityType?Me(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function vl(e){return xr[e]?.bare||e}function _k(e){let t=vl(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function Rk(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=Me(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 ${vl(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 ${vl(o.kind)} ${JSON.stringify(String(r))}`}function mm(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Mr).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>mm(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?Rk(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 ":""}${no(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?Me(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${no(e.kind)}`:`${r}${no(e.kind)} "${e.object}"`}return{english:o,machine:s}}function xn(e,t,n=null){let s=gm(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function gm(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${Al()}`,miss:!0,ambiguous:!1};if(e.node)return hk(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
55
+ ${t.branches.map((l,c)=>`${c+1}) as ${Mr(l.parsed)}: ${l.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(Pr),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${Pr(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Pr),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?Me(t.objMatch.class,1):"term",a=Me(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=>Me(a,2));return{content:`${t.objMatch.label}'s "${to(e.kind)}" relation in this index never produces ${Me(e.entityType,2)} \u2014 only ${vn(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=Il(t.objMatch)||"";return{content:`${t.objMatch.label} is ${xk(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,He).map(l=>`${l.label} (${Me(l.class,1)})`),a=t.matches.length>He?`, \u2026and ${t.matches.length-He} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${vn(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 ${vn([...Al])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,He).map(d=>d.label),c=a.length>He?`, \u2026and ${a.length-He} more`:"",u=a.length?` \u2014 also matched: ${vn(l)}${c}`:"";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&&pl[e.entityType]?Me(e.entityType,1):"module",l=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let c=vn(t.unplacedWords.map(f=>`"${f}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${l} matching "${e.object}" found in the index. ${c} ${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 ${l} matching "${e.object}" found in the index. ${Ss(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(b=>b.class==="Commit")){let b=w=>!["Commit","Session","Source","Utterance"].includes(w?.class),y=i.filter(b);y.length&&(i=y,a?.length&&(a=a.filter(w=>b(w.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let b=String(e.object||"").toLowerCase(),y=new Set(Tn(String(e.object||"")).filter(x=>x.length>=3)),w=new Set(i.map(x=>x.id)),v=null,_=0,$=1/0;if(y.size)for(let x of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(x.class)||w.has(x.id))continue;let S=Tn(String(x.label)).filter(R=>y.has(R)).length;if(!S||S<_)continue;let E=Zn(String(x.label).toLowerCase(),b,8);(S>_||E<$)&&(v=x,_=S,$=E)}if(v&&(i=[...i,v],a)){let x=Gt(n,e,{pinnedObjMatch:v});a=[...a,{candidate:v,result:x,rendered:xn(e,x,n)}]}}let l=i.length&&i.every(b=>b.class===i[0].class)?i[0].class:null,c=l?pl[l]?Me(l,1):ts(l):"module",u=i.slice(0,He).map(b=>b.label),d=i.length>He?`, \u2026and ${i.length-He} more`:"",f=`"${e.object}" matches more than one ${c} ambiguously \u2014 did you mean ${vn(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,p=String(e.object||""),h=p?new RegExp(`\\b${Qe(p)}\\b`,"gi"):null,m=b=>{let y=String(b.candidate.label||"");return!h||!y?b.rendered.content:b.rendered.content.split(y).map(w=>w.replace(h,y)).join(y)};return{content:a&&a.length?`${f}
57
+ (ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Mr),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${Mr(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Mr),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?Me(t.objMatch.class,1):"term",a=Me(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=>Me(a,2));return{content:`${t.objMatch.label}'s "${no(e.kind)}" relation in this index never produces ${Me(e.entityType,2)} \u2014 only ${vn(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=Ol(t.objMatch)||"";return{content:`${t.objMatch.label} is ${kk(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,He).map(l=>`${l.label} (${Me(l.class,1)})`),a=t.matches.length>He?`, \u2026and ${t.matches.length-He} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${vn(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 ${vn([...Cl])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,He).map(d=>d.label),c=a.length>He?`, \u2026and ${a.length-He} more`:"",u=a.length?` \u2014 also matched: ${vn(l)}${c}`:"";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&&hl[e.entityType]?Me(e.entityType,1):"module",l=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let c=vn(t.unplacedWords.map(f=>`"${f}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${l} matching "${e.object}" found in the index. ${c} ${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 ${l} matching "${e.object}" found in the index. ${ks(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(b=>b.class==="Commit")){let b=w=>!["Commit","Session","Source","Utterance"].includes(w?.class),y=i.filter(b);y.length&&(i=y,a?.length&&(a=a.filter(w=>b(w.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let b=String(e.object||"").toLowerCase(),y=new Set(An(String(e.object||"")).filter(x=>x.length>=3)),w=new Set(i.map(x=>x.id)),v=null,_=0,$=1/0;if(y.size)for(let x of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(x.class)||w.has(x.id))continue;let S=An(String(x.label)).filter(R=>y.has(R)).length;if(!S||S<_)continue;let E=ts(String(x.label).toLowerCase(),b,8);(S>_||E<$)&&(v=x,_=S,$=E)}if(v&&(i=[...i,v],a)){let x=Gt(n,e,{pinnedObjMatch:v});a=[...a,{candidate:v,result:x,rendered:xn(e,x,n)}]}}let l=i.length&&i.every(b=>b.class===i[0].class)?i[0].class:null,c=l?hl[l]?Me(l,1):ss(l):"module",u=i.slice(0,He).map(b=>b.label),d=i.length>He?`, \u2026and ${i.length-He} more`:"",f=`"${e.object}" matches more than one ${c} ambiguously \u2014 did you mean ${vn(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,p=String(e.object||""),h=p?new RegExp(`\\b${Qe(p)}\\b`,"gi"):null,m=b=>{let y=String(b.candidate.label||"");return!h||!y?b.rendered.content:b.rendered.content.split(y).map(w=>w.replace(h,y)).join(y)};return{content:a&&a.length?`${f}
58
58
  ${a.map((b,y)=>`${y+1}) ${b.candidate.label}: ${m(b)}`).join(`
59
- `)}`:f,miss:!1,ambiguous:!0,candidates:i.map(b=>b.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=String(t.site||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(a){let c=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${ul(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=zr(i);return l?{content:`${ul(i)} is defined in ${l} (no line span recorded in this index).`,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. ${Ss(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(f=>f.key==="date")?.value||"";if(!l)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 c=(a.attributes||[]).find(f=>f.key==="message")?.value||"",u=String(l).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Lr("is-dated",a.id,"is dated")} ${u}${c?` ("${c}")`:""}.`,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}${c?` ("${c}")`:""}${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. ${Ss(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!l)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 c=t.matches.length-1;return{content:`${i} was last touched by ${l} (commit ${a.label})${c?`; ${c} earlier commit${c===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,He)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let l=[...a.entries()].map(([u,d])=>`${Me(u,d.length)} ${vn(d)}`),c=t.matches.length>He?`; \u2026and ${t.matches.length-He} more`:"";return{content:`${i} touched ${l.join("; ")}${c}.`,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}.`,l=e.negated?a:i,c=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?l:c}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(_o.includes(e.kind)&&n&&t.objMatch)for(let l of _o){if(l===e.kind)continue;let c={...e,kind:l},u=Gt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return fm(c,u,n)}return{content:`${t.objMatch.label} has no ${to(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(oS,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Me(e.entityType||"Module",2),a=t.objMatch&&Vs.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${to(e.kind)} ${a}. ${Ss(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${Sk(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=>!ks.has(i.class))){let i=t.matches.slice(0,He).map(l=>l.class==="Commit"?Ek(l):l.label),a=t.matches.length>He?`, \u2026and ${t.matches.length-He} 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,He)){let a=zr(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(ul(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=vn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>He?` \u2026and ${t.matches.length-He} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function mm(e){if(e.length<4||Rk.has(e))return null;let t=es(e),n=t+1,s=null,o=!1;for(let r of _k){let i=Zn(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 zh(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!Il(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=mm(n);return!!s&&s!==n&&!!Be[s]}function gm(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=ns(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||zh(s,t.object))return!1;if(t.shape==="ask"){let o=ns(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!zh(o,t.subject))}return!0}function Tk(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return Ap.includes(t)}function Ak(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ar(eo(String(t||""))),i=Wt(r);if(!i.length)return null;let a=[],l=[],c=j=>{let A=En(e,j);return!!A.match&&A.tier!=null&&A.tier<=2},u=j=>{let A=En(e,j);return!!A.match&&A.tier!=null&&A.tier<=3},d=j=>{let A=String(j||"").trim().toLowerCase();return Vs.includes(A)?!0:Wt(A).some(F=>{let T=F.toLowerCase();return!na.has(T)&&!$l.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=j=>{let A=j.join(" "),F=Dr(A,{nlp:n});return gm(e,F,s)!==!0||F&&!F.node&&f.has(F.shape)&&(F.object!=null&&!d(F.object)||F.shape==="ask"&&F.subject!=null&&!d(F.subject))||xn(F,Gt(e,F,{contextId:s,prev:o}),e).miss?null:{parsed:F,text:A}},h=j=>({parsed:j.parsed,from:r,to:j.text,dropped:[...a],steps:l}),m=0,g=Math.max(i.length,1)+12;for(;m<g;m+=1){let j=-1;for(let T=0;T<i.length;T+=1){let M=i[T].toLowerCase();if(Cl.has(M)&&!na.has(M)&&!c(i[T])){j=T;break}}if(j<0)break;let A=i[j];i=i.filter((T,M)=>M!==j),a.push(A),l.push(`strip noise "${A}" \u2192 "${i.join(" ")}"`);let F=p(i);if(F)return h(F)}let b=Dr(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let j of[b.object,b.subject])for(let A of Wt(String(j||"").toLowerCase()))y.add(A);let w=[],v=[],_=[];for(let j of i){let A=j.toLowerCase();if(!/^[a-z]+$/.test(A)||na.has(A)||$l.has(A)||u(j)){w.push(j);continue}let T=mm(A);if(T&&T!==A){w.push(T),_.push(`${j}\u2192${T}`);continue}if(y.has(A)){w.push(j);continue}v.push(j)}if((_.length||v.length)&&w.length){i=w,a.push(...v),_.length&&l.push(`fuzzy-correct ${JSON.stringify(_)} \u2192 "${i.join(" ")}"`),v.length&&l.push(`drop unmatched ${JSON.stringify(v)} \u2192 "${i.join(" ")}"`);let j=p(i);if(j)return h(j)}let $=!1,x=i.map(j=>{let A=j.toLowerCase();return Ro[A]&&!u(j)?($=!0,Ro[A]):j});if($){l.push(`normalise synonyms \u2192 "${x.join(" ")}"`);let j=p(x);if(j)return h(j)}let S=Wt(r).map(j=>j.toLowerCase()),E=[],R=[];for(let j of S){if(hm.has(j))continue;let A=Be[j];A&&A!=="Change"?E.push(j):R.push(j)}if(E.length===1&&R.length===0){let j=p(["count",E[0]]);if(j)return l.push(`bare kind "${E[0]}" \u2192 count`),h(j)}return null}function Ck(e,t){let n=String(t||"");if(!e||!Uh.test(n))return n;let s=e.individuals.filter(l=>l.class==="Commit");if(!s.length)return n;let o=l=>String((l.attributes||[]).find(c=>c.key==="date")?.value||""),r=[...s].sort((l,c)=>o(c).localeCompare(o(l)))[0];if(!r)return n;let i=n.replace(Uh,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return Ik.test(a)?`${a} touched`:i}function Ok(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 Ol(e,t){let n=Ok(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function Pk(e,t){let n=String(t||"").trim(),s=n.match(Lk),o=s?null:n.match(Nk),r=s||o;if(!r||!Ll.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=Ol(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 Mk(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=Ol(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function Uk(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 Bk(e,t){let n=Si(String(t||"").trim()),s=n.match(Fk),o=s?vp[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(Dk)?.[1]||n.match(zk)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Gs[o].predicate},a=Mk(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let l=Uk(e,r);return l?{...i,subjects:[l],asked:[l]}:null}function Wk(e,t){return Gs[e].matchesLocativePredicates?ko(Fr(t.prop))||ko(Fr(t.predicate)):null}function Gk(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Gs[t.relation],r=Fr(o.predicate),i=new Map,a=new Map;for(let c of e?.relations||[]){let u=Fr(c.prop),d=Fr(c.predicate),f=u===r||d===r,p=f?null:Wk(t.relation,c);if(!(!f&&!p))for(let h of c.edges||[]){let m=e.byId?.get(h.subject);if(!m||!(s?s.has(h.subject):n.has(m.class)))continue;let b={subject:m,object:h.object,reads:f?o.reads:`is ${p}`};f?i.set(h.subject,b):a.set(`${u||d}\0${h.subject}`,b)}}let l=[...i.values(),...[...a.values()].filter(c=>!i.has(c.subject.id))].sort((c,u)=>String(c.subject.id).localeCompare(String(u.subject.id))||String(c.object).localeCompare(String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:l,matches:l.map(c=>c.subject)}}function dl(e){let t=Vk.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 Hk(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(dl(a.subject).base,String(a.object));let s=new Set(xp),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:l,epoch:c,stamp:u}=dl(a.subject),d=n.get(l)||t(l);if(!d)continue;let f=`${a.predicate}\0${l}`;qk(r.get(f),c,u)&&(o.set(l,{id:l,label:l,class:d}),r.set(f,{epoch:c,stamp:u,predicate:a.predicate,subject:l,object:dl(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 Xk(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=Ol(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(l=>l.id));if(i.size<2)return!1;let a=new Map;for(let l of e?.individuals||[])l?.id&&(a.has(l.id)||a.set(l.id,new Set),a.get(l.id).add(l.class));return[...i].every(l=>l===o||a.get(l)?.has(o))}function js(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(Tk(t))return{content:Rl(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=Ck(e,t);let r=vl(t,{nlp:s}),i=r.parsed,a=i,l=null;if(gm(e,i,n)===!1){let f=Ak(e,t,{nlp:s,contextId:n,prev:o});f&&(a=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let c=Gt(e,a,{contextId:n,prev:o}),u=xn(a,c,e);if(Bh(e,a,c,u)){let f=Pk(e,t);if(f){let p=Gt(e,f,{contextId:n,prev:o}),h=xn(f,p,e);h.miss||(a=f,c=p,u=h,l=null)}}if(Bh(e,a,c,u)){let f=Bk(e,t);if(f){let p=Gt(e,f,{contextId:n,prev:o}),h=xn(f,p,e);h.miss||(a=f,c=p,u=h,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Bi(String(t||"")).trim().match(Kk)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let h=Dr(`what is a ${p}`,{nlp:s});h?.shape==="meta"&&(c=Gt(e,h,{contextId:n,prev:o}),u=xn(h,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=eo(String(t||"")).match(Yk)?.[1]?.trim();if(p){let h=Dr(`what is a ${p}`,{nlp:s});if(h?.shape==="meta"){let m=Gt(e,h,{contextId:n,prev:o}),g=xn(h,m,e);!g.miss&&!g.ambiguous&&(c=m,u=g)}}}let d=l&&!u.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${u.content}`:u.content;if(!l&&!u.miss&&!u.ambiguous&&r.alternates.length){let f=r.alternates.map(p=>{let h=Gt(e,p.parsed,{contextId:n,prev:o}),m=xn(p.parsed,h,e);return m.miss?null:{a:p,text:m.content}}).filter(Boolean);if(f.length){let p=Sh(f.map(h=>h.a),{answerFor:h=>f.find(m=>m.a===h)?.text||null});d=`${d}
59
+ `)}`:f,miss:!1,ambiguous:!0,candidates:i.map(b=>b.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=String(t.site||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(a){let c=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${pl(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=Ur(i);return l?{content:`${pl(i)} is defined in ${l} (no line span recorded in this index).`,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. ${ks(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(f=>f.key==="date")?.value||"";if(!l)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 c=(a.attributes||[]).find(f=>f.key==="message")?.value||"",u=String(l).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Nr("is-dated",a.id,"is dated")} ${u}${c?` ("${c}")`:""}.`,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}${c?` ("${c}")`:""}${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. ${ks(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!l)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 c=t.matches.length-1;return{content:`${i} was last touched by ${l} (commit ${a.label})${c?`; ${c} earlier commit${c===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,He)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let l=[...a.entries()].map(([u,d])=>`${Me(u,d.length)} ${vn(d)}`),c=t.matches.length>He?`; \u2026and ${t.matches.length-He} more`:"";return{content:`${i} touched ${l.join("; ")}${c}.`,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}.`,l=e.negated?a:i,c=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?l:c}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(Ro.includes(e.kind)&&n&&t.objMatch)for(let l of Ro){if(l===e.kind)continue;let c={...e,kind:l},u=Gt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return gm(c,u,n)}return{content:`${t.objMatch.label} has no ${no(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(aS,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Me(e.entityType||"Module",2),a=t.objMatch&&qs.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${no(e.kind)} ${a}. ${ks(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${_k(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=>!js.has(i.class))){let i=t.matches.slice(0,He).map(l=>l.class==="Commit"?jk(l):l.label),a=t.matches.length>He?`, \u2026and ${t.matches.length-He} 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,He)){let a=Ur(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(pl(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=vn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>He?` \u2026and ${t.matches.length-He} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function wm(e){if(e.length<4||Ik.has(e))return null;let t=ns(e),n=t+1,s=null,o=!1;for(let r of Ak){let i=ts(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 Wh(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!Ol(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=wm(n);return!!s&&s!==n&&!!Be[s]}function ym(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=os(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Wh(s,t.object))return!1;if(t.shape==="ask"){let o=os(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Wh(o,t.subject))}return!0}function Ck(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return Op.includes(t)}function Ok(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ir(to(String(t||""))),i=Wt(r);if(!i.length)return null;let a=[],l=[],c=j=>{let A=En(e,j);return!!A.match&&A.tier!=null&&A.tier<=2},u=j=>{let A=En(e,j);return!!A.match&&A.tier!=null&&A.tier<=3},d=j=>{let A=String(j||"").trim().toLowerCase();return qs.includes(A)?!0:Wt(A).some(F=>{let T=F.toLowerCase();return!na.has(T)&&!xl.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=j=>{let A=j.join(" "),F=zr(A,{nlp:n});return ym(e,F,s)!==!0||F&&!F.node&&f.has(F.shape)&&(F.object!=null&&!d(F.object)||F.shape==="ask"&&F.subject!=null&&!d(F.subject))||xn(F,Gt(e,F,{contextId:s,prev:o}),e).miss?null:{parsed:F,text:A}},h=j=>({parsed:j.parsed,from:r,to:j.text,dropped:[...a],steps:l}),m=0,g=Math.max(i.length,1)+12;for(;m<g;m+=1){let j=-1;for(let T=0;T<i.length;T+=1){let P=i[T].toLowerCase();if(Ll.has(P)&&!na.has(P)&&!c(i[T])){j=T;break}}if(j<0)break;let A=i[j];i=i.filter((T,P)=>P!==j),a.push(A),l.push(`strip noise "${A}" \u2192 "${i.join(" ")}"`);let F=p(i);if(F)return h(F)}let b=zr(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let j of[b.object,b.subject])for(let A of Wt(String(j||"").toLowerCase()))y.add(A);let w=[],v=[],_=[];for(let j of i){let A=j.toLowerCase();if(!/^[a-z]+$/.test(A)||na.has(A)||xl.has(A)||u(j)){w.push(j);continue}let T=wm(A);if(T&&T!==A){w.push(T),_.push(`${j}\u2192${T}`);continue}if(y.has(A)){w.push(j);continue}v.push(j)}if((_.length||v.length)&&w.length){i=w,a.push(...v),_.length&&l.push(`fuzzy-correct ${JSON.stringify(_)} \u2192 "${i.join(" ")}"`),v.length&&l.push(`drop unmatched ${JSON.stringify(v)} \u2192 "${i.join(" ")}"`);let j=p(i);if(j)return h(j)}let $=!1,x=i.map(j=>{let A=j.toLowerCase();return To[A]&&!u(j)?($=!0,To[A]):j});if($){l.push(`normalise synonyms \u2192 "${x.join(" ")}"`);let j=p(x);if(j)return h(j)}let S=Wt(r).map(j=>j.toLowerCase()),E=[],R=[];for(let j of S){if(bm.has(j))continue;let A=Be[j];A&&A!=="Change"?E.push(j):R.push(j)}if(E.length===1&&R.length===0){let j=p(["count",E[0]]);if(j)return l.push(`bare kind "${E[0]}" \u2192 count`),h(j)}return null}function Nk(e,t){let n=String(t||"");if(!e||!Gh.test(n))return n;let s=e.individuals.filter(l=>l.class==="Commit");if(!s.length)return n;let o=l=>String((l.attributes||[]).find(c=>c.key==="date")?.value||""),r=[...s].sort((l,c)=>o(c).localeCompare(o(l)))[0];if(!r)return n;let i=n.replace(Gh,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return Lk.test(a)?`${a} touched`:i}function Pk(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 Nl(e,t){let n=Pk(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function Dk(e,t){let n=String(t||"").trim(),s=n.match(Mk),o=s?null:n.match(Fk),r=s||o;if(!r||!Pl.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=Nl(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 zk(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=Nl(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function Gk(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 Vk(e,t){let n=Si(String(t||"").trim()),s=n.match(Uk),o=s?Sp[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(Bk)?.[1]||n.match(Wk)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Vs[o].predicate},a=zk(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let l=Gk(e,r);return l?{...i,subjects:[l],asked:[l]}:null}function qk(e,t){return Vs[e].matchesLocativePredicates?jo(Dr(t.prop))||jo(Dr(t.predicate)):null}function Hk(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Vs[t.relation],r=Dr(o.predicate),i=new Map,a=new Map;for(let c of e?.relations||[]){let u=Dr(c.prop),d=Dr(c.predicate),f=u===r||d===r,p=f?null:qk(t.relation,c);if(!(!f&&!p))for(let h of c.edges||[]){let m=e.byId?.get(h.subject);if(!m||!(s?s.has(h.subject):n.has(m.class)))continue;let b={subject:m,object:h.object,reads:f?o.reads:`is ${p}`};f?i.set(h.subject,b):a.set(`${u||d}\0${h.subject}`,b)}}let l=[...i.values(),...[...a.values()].filter(c=>!i.has(c.subject.id))].sort((c,u)=>String(c.subject.id).localeCompare(String(u.subject.id))||String(c.object).localeCompare(String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:l,matches:l.map(c=>c.subject)}}function fl(e){let t=Kk.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 Xk(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(fl(a.subject).base,String(a.object));let s=new Set(kp),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:l,epoch:c,stamp:u}=fl(a.subject),d=n.get(l)||t(l);if(!d)continue;let f=`${a.predicate}\0${l}`;Yk(r.get(f),c,u)&&(o.set(l,{id:l,label:l,class:d}),r.set(f,{epoch:c,stamp:u,predicate:a.predicate,subject:l,object:fl(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 Zk(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=Nl(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(l=>l.id));if(i.size<2)return!1;let a=new Map;for(let l of e?.individuals||[])l?.id&&(a.has(l.id)||a.set(l.id,new Set),a.get(l.id).add(l.class));return[...i].every(l=>l===o||a.get(l)?.has(o))}function _s(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(Ck(t))return{content:Al(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=Nk(e,t);let r=El(t,{nlp:s}),i=r.parsed,a=i,l=null;if(ym(e,i,n)===!1){let f=Ok(e,t,{nlp:s,contextId:n,prev:o});f&&(a=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let c=Gt(e,a,{contextId:n,prev:o}),u=xn(a,c,e);if(Vh(e,a,c,u)){let f=Dk(e,t);if(f){let p=Gt(e,f,{contextId:n,prev:o}),h=xn(f,p,e);h.miss||(a=f,c=p,u=h,l=null)}}if(Vh(e,a,c,u)){let f=Vk(e,t);if(f){let p=Gt(e,f,{contextId:n,prev:o}),h=xn(f,p,e);h.miss||(a=f,c=p,u=h,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Bi(String(t||"")).trim().match(Jk)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let h=zr(`what is a ${p}`,{nlp:s});h?.shape==="meta"&&(c=Gt(e,h,{contextId:n,prev:o}),u=xn(h,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=to(String(t||"")).match(Qk)?.[1]?.trim();if(p){let h=zr(`what is a ${p}`,{nlp:s});if(h?.shape==="meta"){let m=Gt(e,h,{contextId:n,prev:o}),g=xn(h,m,e);!g.miss&&!g.ambiguous&&(c=m,u=g)}}}let d=l&&!u.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${u.content}`:u.content;if(!l&&!u.miss&&!u.ambiguous&&r.alternates.length){let f=r.alternates.map(p=>{let h=Gt(e,p.parsed,{contextId:n,prev:o}),m=xn(p.parsed,h,e);return m.miss?null:{a:p,text:m.content}}).filter(Boolean);if(f.length){let p=_h(f.map(h=>h.a),{answerFor:h=>f.find(m=>m.a===h)?.text||null});d=`${d}
60
60
  ${p.join(`
61
61
  `)}`}}if(!u.ambiguous&&c.objMatch&&Array.isArray(c.candidates)&&c.candidates.length){let f=new Set((c.matches||[]).map(h=>h&&h.id)),p=c.candidates.filter(h=>h&&h.id&&h.id!==c.objMatch.id&&!f.has(h.id));if(p.length){let h=p.slice(0,3).map(b=>b.label).filter(Boolean),m=p.length-h.length,g=h.join(", ")+(m>0?`, +${m} more`:"");d=`${d}
62
- (answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${g})`}}return!Array.isArray(c.referents)&&!u.miss&&!u.ambiguous&&(a?.shape==="reverse"||a?.shape==="forward")&&a.entityType&&Array.isArray(c.matches)&&c.matches.length&&c.matches.every(f=>f&&f.class===a.entityType)&&(c={...c,referents:Ur(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:pm(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?zr(f):void 0})),traversal:c.traversal||null,miss:!!u.miss,ambiguous:!!u.ambiguous,relaxed:l,matchedVia:c.matchedVia||null,...Array.isArray(c.referents)&&c.referents.length?{discourse:c.referents}:{},...u.ambiguous?{candidates:u.candidates,candidateParses:u.candidateParses}:{}}}}var Th,Wo,ks,al,eS,Lt,Wh,He,pl,tS,nS,sS,oS,rS,aS,cS,Gh,fl,uS,xl,Vh,At,qh,pS,hS,gS,wS,$S,vS,xS,ES,kS,_S,Xh,Sl,Jh,Qh,PS,DS,Ah,WS,Ih,qS,Oh,Nh,YS,JS,ZS,Es,cl,fk,hk,gk,Al,bk,Fh,wk,Dh,vk,na,$l,Cl,hm,jk,_k,Rk,Uh,Ik,Lk,Nk,Ll,Fk,Dk,zk,Fr,Vk,qk,Kk,Yk,Bh,_s=O(()=>{Oe();Fc();qn();$n();Mo();Vi();qi();Rh();ol();$s();Qi();il();zo();Th=new WeakMap;Wo={calls:"callsSymbol",touches:"touchesSymbol"},ks=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),al={Function:"Method",Method:"Function"},eS={uses:["imports","calls","callsSymbol"]},Lt=e=>eS[e]||[e],Wh=new Set(Object.values(Wo)),He=12,pl={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"]};tS={cochange:"cochanges",reexports:"export"};nS={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"},sS=e=>nS[e]||to(e),oS=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),rS=new Set(["imports"]);aS=/^where\s+(?:does|do|did)\s+/i,cS=new Set(fe(Zt));Gh=4,fl="zzinnerset",uS=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),xl=new Set(["which","what","who","list","show","find","give","me","us","all"]),Vh=new Set(["are","is","was","were"]);At=e=>Be[e]?{entityType:Be[e],placeholder:!1}:Vn.includes(e)?{entityType:null,placeholder:!0}:null,qh=e=>!!de[e]&&e.endsWith("ing");pS=new Set(["which","the","all"]);hS=new Set(["all","every","each"]);gS=new Set(["what","which","thing","things","one","ones","stuff"]);wS=new Set(["those","them"]);$S=new Set(["did","was","were","do","does","has","have","had"]),vS=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),xS=new Set(["last","recently","ever","get","got","been","then","now","already"]),ES=new Set(["the","a","an","all","those","these","any"]);kS=new Set(["since","before","after","on"]);_S=/\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/;Xh=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);Sl=new Set(["the","a","an","all","me","us"]),Jh=[...Ks].sort((e,t)=>t.split(" ").length-e.split(" ").length),Qh="functions, classes, methods, modules, packages, attributes, variables, or commits",PS=new Set(["in","inside","under"]);DS=new Set(["called","named","about","like","containing","matching","with"]);Ah=new Set(["recent","latest","newest"]);WS=/^git:(.+)$/i;Ih=new WeakMap;qS=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);Oh=new WeakMap;Nh={label:3,chain:2,attr:1};YS=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;JS=["imports","calls","callsSymbol","inherits","contains","tests"];ZS=/^\d{4}-\d{2}-\d{2}$/;Es=e=>vn(e.slice(0,He).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>He?`, \u2026and ${e.length-He} more`:"");cl=10;fk=/^(?:the|a|an)\s+/i,hk=new RegExp(`\\s+(${Object.keys(Be).join("|")})$`,"i");gk=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,Al=new Set(["index","main","app","server","cli","__main__"]),bk=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Fh=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),wk=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>bk.has(t));Dh=8,vk="mgx:schemaDoc";na=new Set([...fe(Object.keys(de)),...fe(Object.keys(Be)),...fe(Object.keys(tn)),...fe(Object.keys(Xe)),...fe(Hs),...fe(Object.keys(ys)),...fe(Object.keys(Rn)),...fe(Object.keys(jo)),...fe(Vn),...fe(kr),...fe(qs),...fe(Zt),...fe(yn),...fe(Gn),...fe(Object.keys(Ro)),...fe([...ki])]),$l=new Set([...tt,...xl,...Vs]),Cl=new Set(fe(ji)),hm=new Set([...Cl,...$l]),jk=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],_k=[...new Set([...fe(Object.keys(de)),...Object.keys(Be),...jk])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!tt.has(e)),Rk=new Set(["impact","impacts","impacted"]);Uh=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,Ik=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;Lk=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,Nk=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,Ll=/^(?: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;Fk=new RegExp(`^(?:${Jh.map(Qe).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),Dk=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,zk=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Fr=e=>String(e||"").toLowerCase();Vk=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;qk=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;Kk=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Yk=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Bh=(e,t,n,s)=>s.ambiguous?Xk(e,t,n):!!s.miss});function Rs(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((l,c)=>`${o+c} ${l}`).join(`
63
- `);return{start:o,end:r,text:a,truncated:i}}async function os({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Qt(t),a=Qt(i,n);if(a!==i&&!a.startsWith(i+yp))throw new _e(`refusing to read outside the repository root: ${n}`);let c=(await e(a,"utf8")).split(`
64
- `);return s==null||o==null?{lines:c}:{lines:c,...Rs(c,s,o,r)}}var oa=O(()=>{Ue();Ut()});function yt(e){return{ok:!0,value:e}}function $t(e,{detail:t="",term:n=null}={}){if(!ot[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function In(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 ra(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 Pl,Jk,ot,Ml,PN,wm,Fl,Qk,Sn,Nl,It,MN,ym=O(()=>{Pl="1.1.0",Jk="urn:tmct:core",ot=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),Ml=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),PN=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"}),wm=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),Fl=Object.freeze(Object.values(wm).flat()),Qk=Object.freeze(new Set(wm.source));Sn="Individual",Nl="Edge",It="concurrent-safe: reads immutable graph truth; no shared mutable state",MN=Object.freeze({version:Pl,ontology:Jk,missReasons:Object.values(ot),edgeKinds:[...Ml],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: ${Sn}, candidates: ${Sn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,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: ${Sn}, out: ${Nl}[], incoming: ${Nl}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${Sn}[], attributes: ${Sn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${Sn}[], subclasses: ${Sn}[], levels: Array<${Sn}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:It,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: ${Sn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,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:It,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: ${Nl}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,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:It,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:It,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:It,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:It,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${Sn}[] }`,misses:[],concurrency:It,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:It,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:It,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: ${Sn}[] }`,misses:[],concurrency:It,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:It,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function Zk(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(ra(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(ra(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function ej(e,t){for(let n of e.relations)if(Qn(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function nj(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await os({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(Rs(o,i,a,Dl).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,l=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
66
- ## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${l} @ ${e.moduleLabel}:${i}-${a}`),r.push(Rs(o,i,a,Dl).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=tj;for(let a of e.calleeBodies){if(i<=0)break;let l=a.site.start,u=a.site.path===e.moduleLabel?o:null;if(!u)try{({lines:u}=await os({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=Rs(u,l,a.site.end,i);r.push(`
62
+ (answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${g})`}}return!Array.isArray(c.referents)&&!u.miss&&!u.ambiguous&&(a?.shape==="reverse"||a?.shape==="forward")&&a.entityType&&Array.isArray(c.matches)&&c.matches.length&&c.matches.every(f=>f&&f.class===a.entityType)&&(c={...c,referents:Br(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:mm(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?Ur(f):void 0})),traversal:c.traversal||null,miss:!!u.miss,ambiguous:!!u.ambiguous,relaxed:l,matchedVia:c.matchedVia||null,...Array.isArray(c.referents)&&c.referents.length?{discourse:c.referents}:{},...u.ambiguous?{candidates:u.candidates,candidateParses:u.candidateParses}:{}}}}var Ch,Go,js,ll,sS,Lt,qh,He,hl,oS,rS,iS,aS,cS,uS,dS,Hh,ml,fS,Sl,Kh,At,Yh,mS,bS,yS,vS,ES,SS,kS,jS,RS,AS,Zh,jl,em,tm,DS,BS,Oh,qS,Lh,YS,Ph,Fh,QS,ek,nk,Ss,ul,gk,bk,yk,Cl,$k,Uh,vk,Bh,Sk,na,xl,Ll,bm,Tk,Ak,Ik,Gh,Lk,Mk,Fk,Pl,Uk,Bk,Wk,Dr,Kk,Yk,Jk,Qk,Vh,Rs=O(()=>{Oe();zc();Kn();$n();Fo();Vi();qi();Ih();il();vs();Qi();cl();Uo();Ch=new WeakMap;Go={calls:"callsSymbol",touches:"touchesSymbol"},js=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),ll={Function:"Method",Method:"Function"},sS={uses:["imports","calls","callsSymbol"]},Lt=e=>sS[e]||[e],qh=new Set(Object.values(Go)),He=12,hl={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"]};oS={cochange:"cochanges",reexports:"export"};rS={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"},iS=e=>rS[e]||no(e),aS=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),cS=new Set(["imports"]);uS=/^where\s+(?:does|do|did)\s+/i,dS=new Set(fe(Zt));Hh=4,ml="zzinnerset",fS=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),Sl=new Set(["which","what","who","list","show","find","give","me","us","all"]),Kh=new Set(["are","is","was","were"]);At=e=>Be[e]?{entityType:Be[e],placeholder:!1}:Hn.includes(e)?{entityType:null,placeholder:!0}:null,Yh=e=>!!de[e]&&e.endsWith("ing");mS=new Set(["which","the","all"]);bS=new Set(["all","every","each"]);yS=new Set(["what","which","thing","things","one","ones","stuff"]);vS=new Set(["those","them"]);ES=new Set(["did","was","were","do","does","has","have","had"]),SS=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),kS=new Set(["last","recently","ever","get","got","been","then","now","already"]),jS=new Set(["the","a","an","all","those","these","any"]);RS=new Set(["since","before","after","on"]);AS=/\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/;Zh=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);jl=new Set(["the","a","an","all","me","us"]),em=[...Ys].sort((e,t)=>t.split(" ").length-e.split(" ").length),tm="functions, classes, methods, modules, packages, attributes, variables, or commits",DS=new Set(["in","inside","under"]);BS=new Set(["called","named","about","like","containing","matching","with"]);Oh=new Set(["recent","latest","newest"]);qS=/^git:(.+)$/i;Lh=new WeakMap;YS=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);Ph=new WeakMap;Fh={label:3,chain:2,attr:1};QS=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;ek=["imports","calls","callsSymbol","inherits","contains","tests"];nk=/^\d{4}-\d{2}-\d{2}$/;Ss=e=>vn(e.slice(0,He).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>He?`, \u2026and ${e.length-He} more`:"");ul=10;gk=/^(?:the|a|an)\s+/i,bk=new RegExp(`\\s+(${Object.keys(Be).join("|")})$`,"i");yk=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,Cl=new Set(["index","main","app","server","cli","__main__"]),$k=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Uh=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),vk=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>$k.has(t));Bh=8,Sk="mgx:schemaDoc";na=new Set([...fe(Object.keys(de)),...fe(Object.keys(Be)),...fe(Object.keys(tn)),...fe(Object.keys(Xe)),...fe(Ks),...fe(Object.keys($s)),...fe(Object.keys(Tn)),...fe(Object.keys(_o)),...fe(Hn),...fe(jr),...fe(Hs),...fe(Zt),...fe(yn),...fe(qn),...fe(Object.keys(To)),...fe([...ki])]),xl=new Set([...tt,...Sl,...qs]),Ll=new Set(fe(ji)),bm=new Set([...Ll,...xl]),Tk=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],Ak=[...new Set([...fe(Object.keys(de)),...Object.keys(Be),...Tk])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!tt.has(e)),Ik=new Set(["impact","impacts","impacted"]);Gh=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,Lk=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;Mk=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,Fk=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,Pl=/^(?: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;Uk=new RegExp(`^(?:${em.map(Qe).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),Bk=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,Wk=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Dr=e=>String(e||"").toLowerCase();Kk=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;Yk=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;Jk=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Qk=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Vh=(e,t,n,s)=>s.ambiguous?Zk(e,t,n):!!s.miss});function Ts(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((l,c)=>`${o+c} ${l}`).join(`
63
+ `);return{start:o,end:r,text:a,truncated:i}}async function is({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Qt(t),a=Qt(i,n);if(a!==i&&!a.startsWith(i+xp))throw new _e(`refusing to read outside the repository root: ${n}`);let c=(await e(a,"utf8")).split(`
64
+ `);return s==null||o==null?{lines:c}:{lines:c,...Ts(c,s,o,r)}}var oa=O(()=>{Ue();Ut()});function yt(e){return{ok:!0,value:e}}function $t(e,{detail:t="",term:n=null}={}){if(!rt[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function Cn(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 ra(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 Fl,ej,rt,Dl,BN,vm,zl,tj,Sn,Ml,It,WN,xm=O(()=>{Fl="1.1.0",ej="urn:tmct:core",rt=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),Dl=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),BN=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"}),vm=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),zl=Object.freeze(Object.values(vm).flat()),tj=Object.freeze(new Set(vm.source));Sn="Individual",Ml="Edge",It="concurrent-safe: reads immutable graph truth; no shared mutable state",WN=Object.freeze({version:Fl,ontology:ej,missReasons:Object.values(rt),edgeKinds:[...Dl],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: ${Sn}, candidates: ${Sn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,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: ${Sn}, out: ${Ml}[], incoming: ${Ml}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${Sn}[], attributes: ${Sn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${Sn}[], subclasses: ${Sn}[], levels: Array<${Sn}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:It,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: ${Sn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,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:It,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: ${Ml}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,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:It,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:It,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:It,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:It,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${Sn}[] }`,misses:[],concurrency:It,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:It,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:It,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: ${Sn}[] }`,misses:[],concurrency:It,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:It,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function nj(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(ra(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(ra(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function sj(e,t){for(let n of e.relations)if(es(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function rj(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await is({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(Ts(o,i,a,Ul).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,l=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
66
+ ## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${l} @ ${e.moduleLabel}:${i}-${a}`),r.push(Ts(o,i,a,Ul).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=oj;for(let a of e.calleeBodies){if(i<=0)break;let l=a.site.start,u=a.site.path===e.moduleLabel?o:null;if(!u)try{({lines:u}=await is({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=Ts(u,l,a.site.end,i);r.push(`
67
67
  ## inlined callee body (depth-1 in-repo call): ${a.label} @ ${a.site.path}:${l}-${a.site.end}`),r.push(d.text),i-=d.end-l+1}}return r.join(`
68
- `)}function ia(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=c=>i.get(c)||null,l={version:Pl,capabilities:[...Fl],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=nn(e,String(c??""));return u?yt({match:In(u),candidates:d.map(In)}):$t(ot.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return $t(ot.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=Zk(e,c);return yt({individual:In(u),out:d,incoming:f})},members(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=Ee(e,"contains").filter(h=>h.subject===c),f=[],p=[];for(let h of d){let m=i.get(h.object),g=m?In(m):{id:h.object,label:h.objectLabel||h.object,class:"Entity",attributes:[]};(m?.class||"")==="Attribute"?p.push(g):f.push(g)}return yt({methods:f,attributes:p})},subclasses(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=Ee(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?In(i.get(y.object)):{id:y.object,label:y.objectLabel||y.object,class:"Class",attributes:[]}),p=new Map;for(let y of d)p.has(y.object)||p.set(y.object,[]),p.get(y.object).push(y.subject);let h=new Set([c]),m=[],g=[],b=[c];for(let y=0;y<8&&b.length;y+=1){let w=[],v=[];for(let _ of b)for(let $ of p.get(_)||[]){if(h.has($))continue;h.add($);let x=i.get($),S=x?In(x):{id:$,label:$,class:"Class",attributes:[]};m.push(S),v.push(S),w.push($)}v.length&&g.push(v),b=w}return yt({bases:f,subclasses:m,levels:g})},exports(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let f=Ee(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?In(i.get(p.object)):{id:p.object,label:p.objectLabel||p.object,class:"Entity",attributes:[]});return yt({exports:f})},signature(c){let u=a(c);if(!u)return $t(ot.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,h]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Vt(u,p)&&d.push(h);let f=Vt(u,"visibility");return f&&d.push(f),yt({id:u.id,label:u.label,class:u.class||"Entity",params:Vt(u,"params"),returns:Vt(u,"returns"),raises:Vt(u,"raises"),decorators:Vt(u,"decorators"),doc:Vt(u,"doc"),selfFields:Vt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!Ml.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let h=ej(e,u),m=Ee(e,u).filter(g=>g.subject===c).map(g=>ra(g,h));return m=d==null?m.slice(f):m.slice(f,f+d),yt({kind:u,edges:m})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return $t(ot.UNRESOLVED_TERM,{term:c});let f=u==null?No(e,d):No(e,d,{maxDepth:u}),p=f.reduce((h,m)=>h+m.length,0);return yt({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return $t(ot.UNRESOLVED_TERM,{term:c});let d=Rt(u);if(!l.sourceAccess)return $t(ot.NO_SOURCE,{term:c,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 $t(ot.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await os({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Dl});return yt({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return $t(ot.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${f?.message||f}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=nn(e,String(c??""));if(!d)return $t(ot.UNRESOLVED_TERM,{term:String(c??"")});let f=Po(e,d),p=String(u||"auto").trim().toLowerCase(),h,m;p==="min"?(h="TINY",m=Zs("TINY")):p==="full"?(h="FULL",m=Zs("FULL")):{tier:h,mask:m}=Ui(f,e,{});let g=Hf(f,m);if(!l.sourceAccess)return yt({text:g,tier:h});let b=await nj(f,m,{readFile:s,repoRoot:n});return yt({text:b?`${g}
69
- ${b}`:g,tier:h})},architecture({package:c=""}={}){let u=String(c||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(b=>(b.class||"")==="Module"&&(!u||String(b.label||"").toLowerCase().startsWith(u))),f=new Map;for(let b of d){let y=b.label.includes("/")?b.label.slice(0,b.label.lastIndexOf("/")):"(root)";f.set(y,(f.get(y)||0)+1)}let p=new Set(d.map(b=>b.id)),h=new Map;for(let b of Ee(e,"imports"))p.has(b.object)&&h.set(b.object,(h.get(b.object)||0)+1);let m=[...h.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),g=[...f.entries()].sort((b,y)=>y[1]-b[1]);return yt({modules:d.length,packages:g,hubs:m})},untested(){let c=new Set(Ee(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(In);return yt({modules:u})},stats(){let c=new Map;for(let d of e.individuals){let f=d.class||"Entity";c.set(f,(c.get(f)||0)+1)}let u=[...c.entries()].map(([d,f])=>({class:d,count:f})).sort((d,f)=>f.count-d.count||d.class.localeCompare(f.class));return yt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=[...Ee(e,"touches"),...Ee(e,"touchesSymbol")].filter(h=>h.object===c),f=new Set,p=[];for(let h of d){if(f.has(h.subject))continue;f.add(h.subject);let m=i.get(h.subject);p.push({id:h.subject,label:h.subjectLabel||m?.label||h.subject,author:m?Vt(m,"author")??Vt(m,"commitAuthor"):null,date:m?Vt(m,"date")??Vt(m,"commitDate"):null,message:m?Vt(m,"message")??Vt(m,"commitMessage"):null})}return yt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Mi,offset:h=0}={}){let m=String(c||""),g=String(u||"").trim().toLowerCase(),b=String(d||"").trim(),y=String(f||"").trim().toLowerCase(),w;if(g&&g!=="module"){let _=null;if(b){let x=Yc(b);if(x.error)return $t(ot.UNRESOLVED_TERM,{term:b,detail:x.error});_=x}let $=m.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=Qc(e,$,{kind:g,decFilter:y,nameRe:_}).map(x=>x.ind)}catch(x){return $t(ot.UNRESOLVED_TERM,{term:b,detail:String(x?.message||x)})}}else{let _=new Map;for(let $ of e.individuals)($.class||"")==="Module"&&_.set($.label,$);w=Sf(e,m).map(({path:$})=>_.get($)).filter(Boolean)}let v=w.slice(h,h+p).map(In);return yt({results:v})},ask(c){if(typeof r!="function")return $t(ot.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return yt({content:u,tmct_ask:d})}};if(o)for(let c of Fl){let u=l[c];typeof u=="function"&&(l[c]=(...d)=>{let f=performance.now(),p=u.apply(l,d);return p&&typeof p.then=="function"?p.then(h=>($m(o,c,performance.now()-f,h),h)):($m(o,c,performance.now()-f,p),p)})}return l}function $m(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:sj(s)})}catch{}}function sj(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 Vt,Dl,tj,aa=O(()=>{Oe();oa();ym();Vt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Dl=200,tj=120});async function Br(e,t){let n=await t.fetchEntities(e),s=Ni(n);if(!s.individuals.length){let o=new _e(`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 ca=O(()=>{Ut();Oe()});function Ts({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function nt(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new _e(`${t} is required`);return n}function xt(e,t,n){let{match:s,candidates:o}=nn(e.graph,t);if(!s)throw new _e(`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 Wr,rt,Ge=O(()=>{Ut();Oe();Wr=200;rt=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=xt(s,nt(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function vm(e,{config:t,source:n=Io,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new _e("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,l=!!e?.untuned,c=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await Br(t,n),f=$e($e(t.graphFile)),p=ia(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:js}),{match:h}=xt(p,r,"symbol"),m=Po(d,h),g,b,y=!1;a||i==="min"?(g="TINY",b=Zs("TINY")):c||i==="full"?(g="FULL",b=Zs("FULL"),y=!0):{tier:g,mask:b,topup:y}=Ui(m,d,{untuned:l}),s&&!c&&(b=Vf(b));let w=null;if(m.moduleLabel)try{({lines:w}=await os({readFile:ze,repoRoot:f,path:m.moduleLabel}))}catch{w=null}let v=x=>w&&w[x-1]!=null?w[x-1].trim():"",_=(x,S)=>Rs(w,x,S,Wr).text,$=[`Edit context for ${m.moduleLabel} [${g}${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(b.anchor&&m.anchor?.site&&w){let{start:x,end:S}=m.anchor.site;$.push(`
68
+ `)}function ia(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=c=>i.get(c)||null,l={version:Fl,capabilities:[...zl],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=nn(e,String(c??""));return u?yt({match:Cn(u),candidates:d.map(Cn)}):$t(rt.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return $t(rt.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=nj(e,c);return yt({individual:Cn(u),out:d,incoming:f})},members(c){if(!a(c))return $t(rt.UNRESOLVED_TERM,{term:c});let d=Ee(e,"contains").filter(h=>h.subject===c),f=[],p=[];for(let h of d){let m=i.get(h.object),g=m?Cn(m):{id:h.object,label:h.objectLabel||h.object,class:"Entity",attributes:[]};(m?.class||"")==="Attribute"?p.push(g):f.push(g)}return yt({methods:f,attributes:p})},subclasses(c){if(!a(c))return $t(rt.UNRESOLVED_TERM,{term:c});let d=Ee(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?Cn(i.get(y.object)):{id:y.object,label:y.objectLabel||y.object,class:"Class",attributes:[]}),p=new Map;for(let y of d)p.has(y.object)||p.set(y.object,[]),p.get(y.object).push(y.subject);let h=new Set([c]),m=[],g=[],b=[c];for(let y=0;y<8&&b.length;y+=1){let w=[],v=[];for(let _ of b)for(let $ of p.get(_)||[]){if(h.has($))continue;h.add($);let x=i.get($),S=x?Cn(x):{id:$,label:$,class:"Class",attributes:[]};m.push(S),v.push(S),w.push($)}v.length&&g.push(v),b=w}return yt({bases:f,subclasses:m,levels:g})},exports(c){if(!a(c))return $t(rt.UNRESOLVED_TERM,{term:c});let f=Ee(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?Cn(i.get(p.object)):{id:p.object,label:p.objectLabel||p.object,class:"Entity",attributes:[]});return yt({exports:f})},signature(c){let u=a(c);if(!u)return $t(rt.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,h]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Vt(u,p)&&d.push(h);let f=Vt(u,"visibility");return f&&d.push(f),yt({id:u.id,label:u.label,class:u.class||"Entity",params:Vt(u,"params"),returns:Vt(u,"returns"),raises:Vt(u,"raises"),decorators:Vt(u,"decorators"),doc:Vt(u,"doc"),selfFields:Vt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!Dl.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return $t(rt.UNRESOLVED_TERM,{term:c});let h=sj(e,u),m=Ee(e,u).filter(g=>g.subject===c).map(g=>ra(g,h));return m=d==null?m.slice(f):m.slice(f,f+d),yt({kind:u,edges:m})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return $t(rt.UNRESOLVED_TERM,{term:c});let f=u==null?Po(e,d):Po(e,d,{maxDepth:u}),p=f.reduce((h,m)=>h+m.length,0);return yt({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return $t(rt.UNRESOLVED_TERM,{term:c});let d=Rt(u);if(!l.sourceAccess)return $t(rt.NO_SOURCE,{term:c,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 $t(rt.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await is({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Ul});return yt({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return $t(rt.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${f?.message||f}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=nn(e,String(c??""));if(!d)return $t(rt.UNRESOLVED_TERM,{term:String(c??"")});let f=Mo(e,d),p=String(u||"auto").trim().toLowerCase(),h,m;p==="min"?(h="TINY",m=eo("TINY")):p==="full"?(h="FULL",m=eo("FULL")):{tier:h,mask:m}=Ui(f,e,{});let g=Xf(f,m);if(!l.sourceAccess)return yt({text:g,tier:h});let b=await rj(f,m,{readFile:s,repoRoot:n});return yt({text:b?`${g}
69
+ ${b}`:g,tier:h})},architecture({package:c=""}={}){let u=String(c||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(b=>(b.class||"")==="Module"&&(!u||String(b.label||"").toLowerCase().startsWith(u))),f=new Map;for(let b of d){let y=b.label.includes("/")?b.label.slice(0,b.label.lastIndexOf("/")):"(root)";f.set(y,(f.get(y)||0)+1)}let p=new Set(d.map(b=>b.id)),h=new Map;for(let b of Ee(e,"imports"))p.has(b.object)&&h.set(b.object,(h.get(b.object)||0)+1);let m=[...h.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),g=[...f.entries()].sort((b,y)=>y[1]-b[1]);return yt({modules:d.length,packages:g,hubs:m})},untested(){let c=new Set(Ee(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(Cn);return yt({modules:u})},stats(){let c=new Map;for(let d of e.individuals){let f=d.class||"Entity";c.set(f,(c.get(f)||0)+1)}let u=[...c.entries()].map(([d,f])=>({class:d,count:f})).sort((d,f)=>f.count-d.count||d.class.localeCompare(f.class));return yt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return $t(rt.UNRESOLVED_TERM,{term:c});let d=[...Ee(e,"touches"),...Ee(e,"touchesSymbol")].filter(h=>h.object===c),f=new Set,p=[];for(let h of d){if(f.has(h.subject))continue;f.add(h.subject);let m=i.get(h.subject);p.push({id:h.subject,label:h.subjectLabel||m?.label||h.subject,author:m?Vt(m,"author")??Vt(m,"commitAuthor"):null,date:m?Vt(m,"date")??Vt(m,"commitDate"):null,message:m?Vt(m,"message")??Vt(m,"commitMessage"):null})}return yt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Mi,offset:h=0}={}){let m=String(c||""),g=String(u||"").trim().toLowerCase(),b=String(d||"").trim(),y=String(f||"").trim().toLowerCase(),w;if(g&&g!=="module"){let _=null;if(b){let x=Jc(b);if(x.error)return $t(rt.UNRESOLVED_TERM,{term:b,detail:x.error});_=x}let $=m.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=el(e,$,{kind:g,decFilter:y,nameRe:_}).map(x=>x.ind)}catch(x){return $t(rt.UNRESOLVED_TERM,{term:b,detail:String(x?.message||x)})}}else{let _=new Map;for(let $ of e.individuals)($.class||"")==="Module"&&_.set($.label,$);w=_f(e,m).map(({path:$})=>_.get($)).filter(Boolean)}let v=w.slice(h,h+p).map(Cn);return yt({results:v})},ask(c){if(typeof r!="function")return $t(rt.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return yt({content:u,tmct_ask:d})}};if(o)for(let c of zl){let u=l[c];typeof u=="function"&&(l[c]=(...d)=>{let f=performance.now(),p=u.apply(l,d);return p&&typeof p.then=="function"?p.then(h=>(Em(o,c,performance.now()-f,h),h)):(Em(o,c,performance.now()-f,p),p)})}return l}function Em(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:ij(s)})}catch{}}function ij(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 Vt,Ul,oj,aa=O(()=>{Oe();oa();xm();Vt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Ul=200,oj=120});async function Wr(e,t){let n=await t.fetchEntities(e),s=Ni(n);if(!s.individuals.length){let o=new _e(`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 ca=O(()=>{Ut();Oe()});function As({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function nt(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new _e(`${t} is required`);return n}function xt(e,t,n){let{match:s,candidates:o}=nn(e.graph,t);if(!s)throw new _e(`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 Gr,it,Ge=O(()=>{Ut();Oe();Gr=200;it=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=xt(s,nt(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function Sm(e,{config:t,source:n=Co,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new _e("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,l=!!e?.untuned,c=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await Wr(t,n),f=ye(ye(t.graphFile)),p=ia(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:_s}),{match:h}=xt(p,r,"symbol"),m=Mo(d,h),g,b,y=!1;a||i==="min"?(g="TINY",b=eo("TINY")):c||i==="full"?(g="FULL",b=eo("FULL"),y=!0):{tier:g,mask:b,topup:y}=Ui(m,d,{untuned:l}),s&&!c&&(b=Kf(b));let w=null;if(m.moduleLabel)try{({lines:w}=await is({readFile:ze,repoRoot:f,path:m.moduleLabel}))}catch{w=null}let v=x=>w&&w[x-1]!=null?w[x-1].trim():"",_=(x,S)=>Ts(w,x,S,Gr).text,$=[`Edit context for ${m.moduleLabel} [${g}${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(b.anchor&&m.anchor?.site&&w){let{start:x,end:S}=m.anchor.site;$.push(`
70
70
  ## anchor: ${m.anchor.label} (${m.anchor.class}) @ ${m.moduleLabel}:${x}-${S}`),$.push(_(x,S)),m.callHint&&$.push(m.callHint)}if(b.registration&&m.globals.length){$.push(`
71
71
  ## registration / module globals (replicate this pattern):`);for(let x of m.globals)$.push(` ${x.label} = ${x.value}${x.site?` [:${x.site.start}]`:""}`)}if(b.exemplar&&m.exemplar?.site&&w){let{start:x,end:S}=m.exemplar.site,E=m.exemplar.decorators?` @${m.exemplar.decorators}`:"";$.push(`
72
- ## closest example (full body) \u2014 copy this style: ${m.exemplar.label} (${m.exemplar.class})${E} @ ${m.moduleLabel}:${x}-${S}`),$.push(_(x,S)),m.callHint&&$.push(m.callHint)}if(b.inlinedCallees&&m.calleeBodies.length&&w){let x=120;for(let S of m.calleeBodies){if(x<=0)break;let E=S.site.start,j=S.site.path===m.moduleLabel&&w?w:await os({readFile:ze,repoRoot:f,path:S.site.path}).then(F=>F.lines).catch(()=>null);if(!j)continue;let A=Rs(j,E,S.site.end,x);$.push(`
72
+ ## closest example (full body) \u2014 copy this style: ${m.exemplar.label} (${m.exemplar.class})${E} @ ${m.moduleLabel}:${x}-${S}`),$.push(_(x,S)),m.callHint&&$.push(m.callHint)}if(b.inlinedCallees&&m.calleeBodies.length&&w){let x=120;for(let S of m.calleeBodies){if(x<=0)break;let E=S.site.start,j=S.site.path===m.moduleLabel&&w?w:await is({readFile:ze,repoRoot:f,path:S.site.path}).then(F=>F.lines).catch(()=>null);if(!j)continue;let A=Ts(j,E,S.site.end,x);$.push(`
73
73
  ## inlined callee body (depth-1 in-repo call): ${S.label} @ ${S.site.path}:${E}-${S.site.end}`),$.push(A.text),x-=A.end-E+1}}if(b.classMembers&&m.classMembers&&m.classMembers.members.length){$.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 x of m.classMembers.members){let S=String(x.label).split(".").pop(),E=x.params!=null&&x.params!==""?`(${x.params})${x.returns?` -> ${x.returns}`:""}`:"",R=x.decorators?`@${x.decorators} `:"",j=x.raises?` raises=${x.raises}`:"";$.push(` ${x.class} ${S}${x.site?` :${x.site.start}`:""} ${R}${S}${E}${j}`)}}if(b.siblings&&m.siblings.length){$.push(`
75
75
  ## sibling symbols to copy the style of (most relevant first; ${m.siblings.length} total):`);for(let x of m.siblings.slice(0,m.siblingCap)){let S=x.site?v(x.site.start):"",E=x.decorators?`@${x.decorators} `:"",R=x.raises?` raises=${x.raises}`:"";$.push(` ${x.class} ${x.label}${x.site?` :${x.site.start}`:""} ${E}${S}${R}`)}m.siblings.length>m.siblingCap&&$.push(` \u2026+${m.siblings.length-m.siblingCap} more (use ${u}search kind=function or ${u}snippet <name> for any of them)`)}if(b.allExports&&m.allExports&&$.push(`
@@ -82,29 +82,29 @@ ${b}`:g,tier:h})},architecture({package:c=""}={}){let u=String(c||"").trim().toL
82
82
  ## covering tests: ${m.tests.join(", ")}`),b.cochange&&m.cochange&&m.cochange.length&&$.push(`
83
83
  ## usually changed together (consider editing these too): ${m.cochange.map(x=>`${x.label} (\xD7${x.weight})`).join(", ")}`),$.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}.`),g!=="FULL"&&$.push(`(bundle tier ${g}; for any omitted sections run ${u}context_more {"symbol":"${r}"}, or ${u}context with depth="full".)`),{text:$.join(`
85
- `),tier:g,topup:y}}async function zl(e,{config:t,source:n,tel:s}){return(await vm(e,{config:t,source:n,tel:s})).text}var Ul=O(()=>{_t();Ue();Ut();oa();_r();Oe();_s();aa();ca();Ge();zl.ownsGraphLoad=!0});function xm(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"symbol"),"symbol");return qf(Po(t,s))}var Em=O(()=>{Oe();Ge()});function la(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 Gr(e){return la(e).toString(16).padStart(8,"0")}function rj(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 w=0;w<16;w+=1)i[w]=o.getUint32(u+w*4);for(let w=16;w<64;w+=1){let v=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,_=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+v+i[w-7]+_>>>0}let[d,f,p,h,m,g,b,y]=r;for(let w=0;w<64;w+=1){let v=a(m,6)^a(m,11)^a(m,25),_=m&g^~m&b,$=y+v+_+oj[w]+i[w]>>>0,x=a(d,2)^a(d,13)^a(d,22),S=d&f^d&p^f&p,E=x+S>>>0;y=b,b=g,g=m,m=h+$>>>0,h=p,p=f,f=d,d=$+E>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+f>>>0,r[2]=r[2]+p>>>0,r[3]=r[3]+h>>>0,r[4]=r[4]+m>>>0,r[5]=r[5]+g>>>0,r[6]=r[6]+b>>>0,r[7]=r[7]+y>>>0}let l=new Uint8Array(32),c=new DataView(l.buffer);for(let u=0;u<8;u+=1)c.setUint32(u*4,r[u]);return l}function ij(e,t){let n=rj(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function Q(e){let t=rs(e);return 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 is(e){let t=rs(e);return cj.get(t)??t}function me(e,t,n){return Ho(Q(e),is(t),Q(n))}var oj,aj,rs,cj,Ho,sn=O(()=>{oj=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]);aj=2e3,rs=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,aj);cj=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"]]);Ho=(e,t,n)=>`fact:${ij(`${e}\0${t}\0${n}`,8)}`});var dn={};Wn(dn,{CARDINALITY_RULE_CONFIDENCE:()=>mj,CAX_DW_RULE:()=>Wl,CAX_DW_RULE_CONFIDENCE:()=>Vl,CAX_MAXC0_RULE_CONFIDENCE:()=>bj,CLS_SVF1_RULE:()=>ql,CLS_SVF1_RULE_CONFIDENCE:()=>Kl,DEFAULT_MAX_ENVIRONMENTS:()=>ua,DISJOINT_PREDICATE:()=>Ko,ENTAILED_DISJOINT_PROVENANCE:()=>Gl,ENTAILED_PROVENANCE:()=>jm,ENTAILED_SCM_SVF_PROVENANCE:()=>Jl,ENTAILED_SVF1_PROVENANCE:()=>Hl,ENTAILED_TYPE_PROVENANCE:()=>Rm,ON_PROPERTY_PREDICATE:()=>Cn,SCM_SVF_RULE:()=>Xl,SCM_SVF_RULE_CONFIDENCE:()=>Ql,SOME_VALUES_FROM_PREDICATE:()=>On,SUBCLASS_PREDICATE:()=>De,TYPE_PREDICATE:()=>Nt,buildCardinalityRestrictions:()=>hj,buildRelevanceFrontier:()=>Bl,buildSubClassSuccessors:()=>da,deriveDisjointViolations:()=>Cm,deriveSomeValuesFromApplication:()=>Om,deriveSomeValuesFromSubsumption:()=>Lm,deriveSubClassClosure:()=>Tm,deriveSubClassClosureDelta:()=>Am,deriveTypePropagation:()=>Im,entailedTrustFrom:()=>uj,findConsistencyViolations:()=>yj,findIsaChain:()=>Zl,proveCardinalityAtLeast:()=>gj,proveMaxCardinalityZeroDenial:()=>wj,retractSubClassOf:()=>Sj,syllogise:()=>$j});function Sm(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 uj(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 as(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=Q(s);o&&n.add(o)}return n.size?n:null}function Tm(e,{depth:t=32,budget:n=50,focus:s=null}={}){let o=new Set,r=new Map;for(let[u,d]of e||[])!u||!d||u===d||(o.add(`${u}${Le}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:as(s),a=(u,d,f)=>!i||i.has(u)||i.has(d)||i.has(f),l=[],c=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[p,h]of r)for(let m of h){let g=r.get(m);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,m,b)&&d.push([p,m,b,y])}}if(!d.length)break;d.sort((p,h)=>p[0].localeCompare(h[0])||p[2].localeCompare(h[2])||p[1].localeCompare(h[1]));let f=!1;for(let[p,h,m,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:m,via:h}),r.has(p)||r.set(p,new Set),r.get(p).add(m),f=!0}if(l.length>=n||!f)break}return l}function Am(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[h,m]of e||[])!h||!m||h===m||(r.add(`${h}${Le}${m}`),i.has(h)||i.set(h,new Set),i.get(h).add(m),a.has(m)||a.set(m,new Set),a.get(m).add(h));let l=[],c=new Set;for(let[h,m]of t||[]){if(!h||!m||h===m)continue;let g=`${h}${Le}${m}`;c.has(g)||(c.add(g),l.push([h,m]))}let u=o instanceof Set?o.size?o:null:as(o),d=(h,m,g)=>!u||u.has(h)||u.has(m)||u.has(g),f=[],p=new Set;for(let h=0;h<n&&l.length;h+=1){let m=[],g=(w,v,_)=>{if(w===_)return;let $=`${w}${Le}${_}`;r.has($)||p.has($)||d(w,v,_)&&m.push([w,v,_,$])};for(let[w,v]of l){for(let _ of i.get(v)||[])g(w,v,_);for(let _ of a.get(w)||[])g(_,w,v)}if(!m.length)break;m.sort((w,v)=>w[0].localeCompare(v[0])||w[2].localeCompare(v[2])||w[1].localeCompare(v[1]));let b=!1,y=[];for(let[w,v,_,$]of m)if(!p.has($)){if(f.length>=s)break;p.add($),f.push({subject:w,object:_,via:v}),i.has(w)||i.set(w,new Set),i.get(w).add(_),a.has(_)||a.set(_,new Set),a.get(_).add(w),y.push([w,_]),b=!0}if(f.length>=s||!b)break;l=y}return f}function Ln(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 dj(e){return Ln((e||[]).map(([t,n])=>[n,t]))}function Bl(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(As(c.predicate)?n.push([c.subject,c.object]):ro(c.predicate)?s.push([c.subject,c.object]):Yo(c.predicate)?o.set(c.subject,c.object):qr(c.predicate)&&r.set(c.subject,c.object));let i=dj(n),a=new Set;for(let c of t||[]){let u=Q(c);if(u){a.add(u);for(let d of i(u))a.add(d)}}let l=new Set(a);for(let[c,u]of s)a.has(u)&&l.add(c);for(let[c,u]of r)o.has(c)&&a.has(u)&&l.add(c);return l}function Im(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=Ln(t),i=new Set,a=new Set;for(let[p,h]of o||[])p&&h&&i.add(`${p}${Le}${h}`);let l=s instanceof Set?s.size?s:null:as(s),c=(p,h,m)=>!l||l.has(p)||l.has(h)||l.has(m),u=[];for(let[p,h]of e||[]){if(!p||!h)continue;let m=`${p}${Le}${h}`;if(!a.has(m)){a.add(m);for(let g of r(h)){if(g===h||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,h,g)&&u.push([p,h,g,b])}}}u.sort((p,h)=>p[0].localeCompare(h[0])||p[2].localeCompare(h[2])||p[1].localeCompare(h[1]));let d=[],f=new Set;for(let[p,h,m,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:m,via:h})}return d}function Cm(e,t,n,{budget:s=50,focus:o=null}={}){let r=Ln(t),i=new Map,a=new Set;for(let[h,m]of n||[])!h||!m||h===m||(a.add(`${h}${Le}${m}`),a.add(`${m}${Le}${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 l=new Set,c=o instanceof Set?o.size?o:null:as(o),u=(h,m,g)=>!c||c.has(h)||c.has(m)||c.has(g),d=[];for(let[h,m]of e||[]){if(!h||!m)continue;let g=`${h}${Le}${m}`;if(!l.has(g)){l.add(g);for(let b of[m,...r(m)]){let y=i.get(b);if(y)for(let w of y){if(w===h)continue;let v=`${h}${Le}${w}`;a.has(v)||u(h,m,w)&&d.push([h,m,b,w,v])}}}}d.sort((h,m)=>h[0].localeCompare(m[0])||h[3].localeCompare(m[3])||h[2].localeCompare(m[2])||h[1].localeCompare(m[1]));let f=[],p=new Set;for(let[h,m,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:h,object:b,viaType:m,viaClass:g})}return f}function Om(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=Ln(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Le}${g.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(g.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[g,b]of t||[])!g||!b||(l.add(`${g}${Le}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:as(r),d=(g,b,y)=>!u||u.has(g)||u.has(b)||u.has(y),f=new Set,p=[];for(let[g,b,y]of e||[]){if(!g||!b||!y)continue;let w=Q(b),v=`${g}${Le}${w}${Le}${y}`;if(f.has(v))continue;f.add(v);let _=c.get(y);if(_)for(let $ of _)for(let x of[$,...i($)]){let S=a.get(`${w}${Le}${x}`);if(S)for(let E of S){if(g===E)continue;let R=`${g}${Le}${E}`;l.has(R)||d(g,y,E)&&p.push([g,b,w,y,$,x,E,R])}}}p.sort((g,b)=>g[0].localeCompare(b[0])||g[6].localeCompare(b[6])||g[1].localeCompare(b[1])||g[3].localeCompare(b[3]));let h=[],m=new Set;for(let[g,b,y,w,v,_,$,x]of p)if(!m.has(x)){if(h.length>=o)break;m.add(x),h.push({subject:g,object:$,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:v,viaTarget:_})}return h}function hj(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(Yo(r.predicate))t.set(r.subject,r.object);else if(lj(r.predicate))s.set(r.subject,r.object);else{let i=fj[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)!==pj)continue;let l=s.get(r);l&&o.push({restriction:r,kind:i,n:a,onClass:l})}return o.sort((r,i)=>r.restriction.localeCompare(i.restriction)),o}function Lm(e,t,{budget:n=50,focus:s=null}={}){let o=Ln(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=Q(f.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:f.restriction,target:f.target})}let i=new Set;for(let[f,p]of t||[])f&&p&&i.add(`${f}${Le}${p}`);let a=s instanceof Set?s.size?s:null:as(s),l=(f,p)=>!a||a.has(f)||a.has(p),c=[];for(let[,f]of r)if(!(f.length<2))for(let p of f)for(let h of f){if(p.restriction===h.restriction||p.target===h.target||!o(p.target).has(h.target))continue;let m=`${p.restriction}${Le}${h.restriction}`;i.has(m)||l(p.restriction,h.restriction)&&c.push([p.restriction,h.restriction,p.target,h.target,m])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,h,m,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:h,viaY2:m})}return u}function Nm(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=Ln(e),a=r instanceof Set?r.size?r:null:as(r),l=f=>!a||a.has(n)||a.has(f),c=new Map;for(let[f,p]of e||[])!f||!p||(c.has(f)||c.set(f,new Set),c.get(f).add(p));let u=new Map((t||[]).map(f=>[f.restriction,f])),d=0;for(let f of[n,...i(n)]){if(d>=o)break;if(d+=1,!!l(f))for(let p of c.get(f)||[]){let h=u.get(p);if(h&&s(h))return{viaClass:f,viaRestriction:p,record:h}}}return null}function gj(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Nm(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 wj(e,t,n,s,o={}){if(!s)return null;let r=Nm(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 yj(e,t,n,{budget:s=50,focus:o=null}={}){let r=Ln(t),i=new Map;for(let[p,h]of n||[])!p||!h||p===h||(i.has(p)||i.set(p,new Set),i.get(p).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(p));if(!i.size)return[];let a=new Map;for(let[p,h]of e||[])!p||!h||(a.has(p)||a.set(p,new Set),a.get(p).add(h));let l=o instanceof Set?o.size?o:null:as(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,h]of a){if(!c(p))continue;let m=[...h].sort();for(let g=0;g<m.length;g+=1)for(let b=g+1;b<m.length;b+=1){let[y,w]=[m[g],m[b]],v=[y,...r(y)],_=[w,...r(w)],$=null;for(let S of v){let E=i.get(S);if(E){for(let R of _)if(E.has(R)){$=[S,R];break}if($)break}}if(!$)continue;let x=`${p}${Le}${y}${Le}${w}`;d.has(x)||(d.add(x),u.push([p,y,w,$[0],$[1]]))}}u.sort((p,h)=>p[0].localeCompare(h[0])||p[1].localeCompare(h[1])||p[2].localeCompare(h[2]));let f=[];for(let[p,h,m,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:h,classB:m,viaA:g,viaB:b})}return f}async function $j(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=ua,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=Sm(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),h=p.filter(k=>As(k.predicate)).map(k=>[k.subject,k.object]),m=p.filter(k=>ro(k.predicate)).map(k=>[k.subject,k.object]),g=p.filter(k=>oo(k.predicate)).map(k=>[k.subject,k.object]),b=new Map,y=new Map,w=[];for(let k of p){let pe=String(k.predicate||"").trim().toLowerCase();Yo(k.predicate)?b.set(k.subject,k.object):qr(k.predicate)?y.set(k.subject,k.object):Yl.has(pe)||w.push([k.subject,k.predicate,k.object])}let v=[];for(let[k,pe]of b){let Re=y.get(k);Re&&v.push({restriction:k,property:pe,target:Re})}let _=as(s),$=o&&_?Bl(p,[..._]):_,x=$===null&&d?await a.loadSyllogiseState(e):null,S=new Set(p.map(k=>k.id)),E=Array.isArray(x?.factIds)?x.factIds.filter(k=>!S.has(k)):[],R=x&&Array.isArray(x.factIds)&&!E.length&&!i?"delta":"full",j=R==="delta"?new Set(x.factIds):null,A=R==="delta"?p.filter(k=>!j.has(k.id)):p,F=A.length,T=new Map;for(let k of p)T.set(`${k.subject}${Le}${k.predicate}${Le}${k.object}`,k.trust);let M=(k,pe,Re)=>T.get(`${k}${Le}${pe}${Le}${Re}`),z=(k,pe,Re)=>T.has(`${k}${Le}${pe}${Le}${Re}`),K=k=>k.filter(pe=>typeof pe=="number"),ce=R==="delta"&&!A.length,Z=R==="delta"?A.filter(k=>As(k.predicate)).map(k=>[k.subject,k.object]):[],D=R==="delta"?Z.length?Am(h,Z,{depth:t,budget:n,focus:$}):[]:Tm(h,{depth:t,budget:n,focus:$}),U=h.concat(D.map(k=>[k.subject,k.object])),G=$,I=null;if(R==="delta"&&!ce){let k=p.concat(D.map(Re=>({subject:Re.subject,predicate:De,object:Re.object}))),pe=[];for(let Re of A)pe.push(Re.subject,Re.object);I=Bl(k,pe),G=I}let L=k=>!I||I.has(k),C=I?m.filter(([k,pe])=>L(k)||L(pe)):m,P=new Set;if(I)for(let k of A)oo(k.predicate)&&(P.add(k.subject),P.add(k.object));let N=I&&P.size?Ln(U):null,B=I?m.filter(([k,pe])=>L(k)||L(pe)||N&&[...N(pe)].some(Re=>P.has(Re))):m,H=new Set;if(I){for(let k of A)if(Yo(k.predicate)||qr(k.predicate)){let pe=b.get(k.subject);pe&&H.add(Q(pe))}}let se=I?w.filter(([k,pe,Re])=>L(k)||L(Re)||H.has(Q(pe))):w,ae=Math.max(0,n-D.length),X=ae>0&&!ce?Im(C,U,{budget:ae,focus:G,presentTypeEdges:m}):[],ee=Math.max(0,n-D.length-X.length),V=ee>0&&!ce?Cm(B,U,g,{budget:ee,focus:G}):[],re=Math.max(0,n-D.length-X.length-V.length),oe=re>0&&v.length&&!ce?Om(se,m,U,v,{budget:re,focus:G}):[],ge=Math.max(0,n-D.length-X.length-V.length-oe.length),Te=ge>0&&v.length>1&&!ce?Lm(v,U,{budget:ge,focus:G}):[],ue=new Map(v.map(k=>[k.restriction,k])),Ae=[...D.map(k=>({subject:k.subject,predicate:De,object:k.object,provenance:jm,justification:[[me(k.subject,De,k.via),me(k.via,De,k.object)]]})),...X.map(k=>({subject:k.subject,predicate:Nt,object:k.object,provenance:Rm,justification:[[me(k.subject,Nt,k.via),me(k.via,De,k.object)]]})),...V.map(k=>{let pe=z(k.viaClass,Ko,k.object),[Re,cn]=pe?[k.viaClass,k.object]:[k.object,k.viaClass],Bn=K([M(k.subject,Nt,k.viaType),M(Re,Ko,cn),...k.viaClass!==k.viaType?[M(k.viaType,De,k.viaClass)]:[]]);return{subject:k.subject,predicate:Ko,object:k.object,provenance:Gl,justification:[[me(k.subject,Nt,k.viaType),me(Re,Ko,cn),...k.viaClass!==k.viaType?[me(k.viaType,De,k.viaClass)]:[]]],...Bn.length?{premiseTrusts:Bn,ruleConfidence:Vl}:{}}}),...oe.map(k=>{let pe=K([M(k.subject,k.viaProperty,k.viaValue),M(k.viaValue,Nt,k.viaType),M(k.object,Cn,k.viaPropertyKey),M(k.object,On,k.viaTarget),...k.viaType!==k.viaTarget?[M(k.viaType,De,k.viaTarget)]:[]]);return{subject:k.subject,predicate:Nt,object:k.object,provenance:Hl,justification:[[me(k.subject,k.viaProperty,k.viaValue),me(k.viaValue,Nt,k.viaType),me(k.object,Cn,k.viaPropertyKey),me(k.object,On,k.viaTarget),...k.viaType!==k.viaTarget?[me(k.viaType,De,k.viaTarget)]:[]]],...pe.length?{premiseTrusts:pe,ruleConfidence:Kl}:{}}}),...Te.map(k=>{let pe=ue.get(k.subject),Re=ue.get(k.object),cn=K([pe&&M(k.subject,Cn,pe.property),M(k.subject,On,k.viaY1),Re&&M(k.object,Cn,Re.property),M(k.object,On,k.viaY2),M(k.viaY1,De,k.viaY2)]);return{subject:k.subject,predicate:De,object:k.object,provenance:Jl,justification:[[...pe?[me(k.subject,Cn,pe.property)]:[],me(k.subject,On,k.viaY1),...Re?[me(k.object,Cn,Re.property)]:[],me(k.object,On,k.viaY2),me(k.viaY1,De,k.viaY2)]],...cn.length?{premiseTrusts:cn,ruleConfidence:Ql}:{}}})],Ie=Ae.map(k=>({id:me(k.subject,k.predicate,k.object),subject:k.subject,predicate:k.predicate,object:k.object,environments:k.justification,write:k})),ne=Mm(p.concat(Ie.map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object})))),ke=new Map(p.map(k=>[k.id,k])),le=k=>As(k)||ro(k)||oo(k),q=k=>R!=="delta"||I!==null&&(I.has(k.subject)||I.has(k.object)),te=p.filter(k=>le(k.predicate)&&Pm(k.provenance)&&Vr(k).length<r&&q(k)).map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object,environments:Vr(k),provenance:k.provenance})),qe=[...Ie,...te].sort((k,pe)=>k.subject.localeCompare(pe.subject)||k.predicate.localeCompare(pe.predicate)||k.object.localeCompare(pe.object)),Fe=0,et=!1,rn=0;for(let k of qe){if(rn>=n){et=!0;break}rn+=1;let pe=ne(k,{maxEnvironments:r+1}),{kept:Re,truncated:cn}=xj(k.environments,pe,r);if(cn&&(et=!0),!(Re.length<=k.environments.length)){if(Fe+=Re.length-k.environments.length,k.write){k.write.justification=Re;continue}Ae.push({subject:k.subject,predicate:k.predicate,object:k.object,justification:Re,...Fm(k.provenance,Re,Bn=>ke.get(Bn)?.trust)||{}})}}let{ids:Yt}=await u(e,Ae),Xt=[],an=0;for(let k of D)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.via,rule:km}),an+=1;for(let k of X)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.via,rule:_m}),an+=1;for(let k of V)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.viaClass,rule:Wl}),an+=1;for(let k of oe)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.viaValue,rule:ql}),an+=1;for(let k of Te)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.viaY1,rule:Xl}),an+=1;let $i=Xt.length>=n;if($===null&&d&&!$i){let k=new Set(S);for(let pe of Yt)k.add(pe);await a.saveSyllogiseState(e,{version:1,factIds:[...k].sort(),completedAt:new Date().toISOString()})}return{derived:Xt,count:Xt.length,budget:n,depth:t,truncated:$i,mode:R,deltaSize:F,environmentsAdded:Fe,alternatesTruncated:et}}function Pm(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function vj(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();As(u.predicate)?t.push([u.subject,u.object]):ro(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):oo(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)):Yo(u.predicate)?o.set(u.subject,u.object):qr(u.predicate)?r.set(u.subject,u.object):Yl.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([Q(u.predicate),u.object]))}let a=Ln(t),l=(u,d)=>u!==d&&a(u).has(d),c=u=>{let d=o.get(u),f=r.get(u);return d&&f?{property:Q(d),target:f}:null};return u=>{if(As(u.predicate)){if(l(u.subject,u.object))return!0;let d=c(u.subject),f=c(u.object);return!!(d&&f&&d.property===f.property&&l(d.target,f.target))}if(ro(u.predicate)){for(let f of n.get(u.subject)||[])if(l(f,u.object))return!0;let d=c(u.object);if(d){for(let[f,p]of i.get(u.subject)||[])if(f===d.property){for(let h of n.get(p)||[])if(h===d.target||l(h,d.target))return!0}}return!1}if(oo(u.predicate)){for(let d of n.get(u.subject)||[])for(let f of[d,...a(d)])if(s.get(f)?.has(u.object))return!0;return!1}return!0}}function Mm(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,l=new Map,c=new Map;for(let p of e){if(!p||!p.subject||!p.predicate||!p.object)continue;p.id&&t.add(p.id);let h=String(p.predicate||"").trim().toLowerCase();As(p.predicate)?(n.push([p.subject,p.object]),s.has(p.subject)||s.set(p.subject,new Set),s.get(p.subject).add(p.object)):ro(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):oo(p.predicate)?(r.add(`${p.subject}${Le}${p.object}`),i.has(p.subject)||i.set(p.subject,new Set),i.get(p.subject).add(p.object),i.has(p.object)||i.set(p.object,new Set),i.get(p.object).add(p.subject)):Yo(p.predicate)?a.set(p.subject,p.object):qr(p.predicate)?l.set(p.subject,p.object):Yl.has(h)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=Ln(n),d=p=>s.get(p)||new Set,f=p=>{let h=a.get(p),m=l.get(p);return h&&m?{property:h,propertyKey:Q(h),target:m}:null};return(p,{maxEnvironments:h=ua}={})=>{let m=[],g=new Set,b=y=>{if(m.length>=h||p.id&&y.includes(p.id)||!y.every(v=>t.has(v)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),m.push(y))};if(As(p.predicate)){for(let y of[...d(p.subject)].sort()){if(m.length>=h)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([me(p.subject,De,y),me(y,De,p.object)])}if(m.length<h){let y=f(p.subject),w=f(p.object);y&&w&&y.propertyKey===w.propertyKey&&y.target!==w.target&&d(y.target).has(w.target)&&b([me(p.subject,Cn,y.property),me(p.subject,On,y.target),me(p.object,Cn,w.property),me(p.object,On,w.target),me(y.target,De,w.target)])}return m}if(ro(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(m.length>=h)break;w!==p.object&&d(w).has(p.object)&&b([me(p.subject,Nt,w),me(w,De,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([v])=>Q(v)===y.propertyKey).sort((v,_)=>v[0].localeCompare(_[0])||v[1].localeCompare(_[1]));for(let[v,_]of w){if(m.length>=h)break;for(let $ of[...o.get(_)||[]].sort()){if(m.length>=h)break;$!==y.target&&!d($).has(y.target)||b([me(p.subject,v,_),me(_,Nt,$),me(p.object,Cn,y.propertyKey),me(p.object,On,y.target),...$!==y.target?[me($,De,y.target)]:[]])}}}return m}if(oo(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let v of[w,...u(w)])(i.get(v)||new Set).has(p.object)&&y.push([w,v]);y.sort((w,v)=>w[0].localeCompare(v[0])||w[1].localeCompare(v[1]));for(let[w,v]of y){if(m.length>=h)break;let _=r.has(`${v}${Le}${p.object}`),[$,x]=_?[v,p.object]:[p.object,v];b([me(p.subject,Nt,w),me($,Ko,x),...v!==w?[me(w,De,v)]:[]])}return m}return m}}function xj(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 Fm(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=Ej.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(c=>n(c)).filter(c=>typeof c=="number");if(a.length!==i.length)continue;let l=Math.min(...a);l>r&&(r=l,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function Sj(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=ua,store:i,sourceTags:a=[]}={}){let{loadMemory:l,readFactRows:c,removeFacts:u}=Sm(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),d=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,p=(a||[]).filter(Boolean);if(p.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let h=Q(t),m=Q(n),g=me(h,De,m),b=await l(e),y=c(b),w=new Map(y.map(M=>[M.id,M]));if(!w.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let v=w.get(g).sourceIds||[],_=p.map(M=>f(g,M).slice(g.length+1)),$=p.length?v.filter(M=>_.includes(M)):[],x=!p.length||$.length>0;if(p.length&&!x)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let S=p.length>0&&$.length<v.length,E=new Set([g]),R=[g],j=new Map,A=!1;if(!S){let M=y.filter(Z=>Vr(Z).length&&Pm(Z.provenance)),z=new Map;for(let Z of M)for(let D of Vr(Z))for(let U of D)z.has(U)||z.set(U,new Set),z.get(U).add(Z.id);let K=0,ce=[g];for(;K<o;K+=1){let Z=new Set;for(let N of ce)for(let B of z.get(N)||[])E.has(B)||Z.add(B);let D=[...Z].map(N=>w.get(N)).sort((N,B)=>N.subject.localeCompare(B.subject)||N.predicate.localeCompare(B.predicate)||N.object.localeCompare(B.object));if(!D.length)break;let U=y.filter(N=>!E.has(N.id)&&!Z.has(N.id)),G=new Set(U.map(N=>N.id)),I=Mm(U),L=vj(U),C=!1,P=!1;ce=[];for(let N of D){if(E.size>=s){P=!0;break}let B=Vr(N),H=B.filter(ae=>ae.every(X=>G.has(X)));if(H.length){H.length!==B.length&&j.set(N.id,H);continue}let se=I(N,{maxEnvironments:r});if(se.length){j.set(N.id,se);continue}L(N)||(E.add(N.id),R.push(N.id),ce.push(N.id),C=!0)}if(P){A=!0;break}if(!C)break}!A&&K>=o&&(A=M.some(Z=>!E.has(Z.id)&&Z.justification.some(D=>E.has(D))))}let F=p.length?[...$.map(M=>`${g}@${M}`),...R.slice(1)]:R,{removed:T}=await u(e,F);if(d){let M=[...j.entries()].filter(([z])=>!E.has(z)).sort((z,K)=>z[0].localeCompare(K[0])).map(([z,K])=>{let ce=w.get(z);return{subject:ce.subject,predicate:ce.predicate,object:ce.object,justification:K,...Fm(ce.provenance,K,Z=>w.get(Z)?.trust)||{}}});M.length&&await d(e,M)}return{retracted:T,count:T.length,budget:s,depth:o,truncated:A,found:!0,...p.length?{ownRecord:!0,stillStands:S}:{}}}function da(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 Zl(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=s instanceof Map?s:da(s),a=[];for(let[c,u]of n||[])c===e&&u&&a.push({node:u,path:[{subject:c,predicate:Nt,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:De,object:c}]});let l=new Set([e]);for(let c=1;c<=o&&a.length;c+=1){for(let{node:d,path:f}of a)if(r.has(d))return f;if(c===o)break;let u=[];for(let{node:d,path:f}of a)if(!l.has(d)){l.add(d);for(let p of i.get(d)||[])l.has(p)||u.push({node:p,path:[...f,{subject:d,predicate:De,object:p}]})}a=u}return null}var De,km,jm,Nt,_m,Rm,Ko,Wl,Gl,Vl,Cn,On,ql,Hl,Kl,ua,Le,As,ro,oo,Yo,qr,lj,Yl,pj,fj,Xl,Jl,Ql,mj,bj,Vr,Ej,qt=O(()=>{sn();De="rdfs:subClassOf",km="subClassOf",jm=`entailed:${km}`,Nt="rdf:type",_m="type",Rm=`entailed:${_m}`,Ko="owl:disjointWith",Wl="disjointWith",Gl=`entailed:${Wl}`,Vl=.95,Cn="owl:onProperty",On="owl:someValuesFrom",ql="someValuesFrom",Hl=`entailed:${ql}`,Kl=.95,ua=4,Le="\u241F",As=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",ro=e=>String(e||"").trim().toLowerCase()==="rdf:type",oo=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Yo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",qr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",lj=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Yl=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);pj="has",fj={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Xl="someValuesFromSubsumption",Jl=`entailed:${Xl}`,Ql=.95;mj=.95;bj=.95;Vr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);Ej=new Map([[Gl,Vl],[Hl,Kl],[Jl,Ql]])});function Zo(e){let t=String(e||""),n=Dm.get(t);return n||(t.startsWith(eu)?Xo+t.slice(eu.length):t)}function zm(e){let t=String(e||""),n=kj.get(t);return n||(t.startsWith(Xo)?eu+t.slice(Xo.length):null)}function Wm(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Zl(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function ha(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassSucc:l}=Bm(i),c=i.filter(b=>(b.predicate===fa||b.predicate===Jo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===Jo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=Wm(o,b.subject,a,l,s);w&&w.length&&u.push({fact:b,polarity:y,hops:w.length,chain:w})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:nu(o,r,i,{maxHops:s})};u.sort((b,y)=>b.hops-y.hops||(y.fact.trust||0)-(b.fact.trust||0));let d=u[0].hops,f=u.filter(b=>b.hops===d),p=f.filter(b=>b.polarity==="positive").map(b=>b.fact),h=f.filter(b=>b.polarity==="negative").map(b=>b.fact),m=h.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==m)||null;return{verdict:p.length&&h.length?"both":h.length?"no":"yes",hops:d,positive:p,negative:h,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function nu(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],a=i.filter(m=>m.predicate===De||m.predicate===Nt),l=a.filter(m=>o.has(m.subject)).map(m=>m.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(m=>m.object===c&&!o.has(m.subject)).map(m=>m.subject))],d=m=>{let g=i.find(b=>b.subject===m&&r.has(b.object)&&(b.predicate===fa||b.predicate===Jo));return g?{name:m,polarity:g.predicate===Jo?"negative":"positive",fact:g}:{name:m,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassSucc:h}=Bm(i);return{klass:c,kinds:u.length,positive:f.filter(m=>m.polarity==="positive"),negative:f.filter(m=>m.polarity==="negative"),unknown:f.filter(m=>m.polarity==="unknown"),chain:Wm(o,c,p,h,s)}}function su(e,t,{exclude:n=[],maxHops:s=3}={}){let o=Qo(e),r=Qo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==fa||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),ha(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(jj)}var Xo,eu,pa,Dm,kj,Um,fa,Jo,tu,jj,Qo,Bm,ma=O(()=>{qt();Xo="mgxneg:",eu="mgx:",pa="mgxneg:subClassOf",Dm=new Map([[De,pa]]),kj=new Map([...Dm].map(([e,t])=>[t,e]));Um=e=>String(e||"").startsWith(Xo),fa="mgx:capableOf",Jo=Zo(fa),tu=6,jj=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),Qo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Bm=e=>{let t=e.filter(s=>s.predicate===Nt).map(s=>[s.subject,s.object]),n=e.filter(s=>s.predicate===De).map(s=>[s.subject,s.object]);return{typeEdges:t,subClassSucc:da(n)}}});function ga(e){let t=String(e||"");return iu.has(t)?ou:Rj.has(t)||Tj.test(t)?Hr:Aj.has(t)?Gm:ru}function Ij(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(qp.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function Cj(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(Ij(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function au(e,t){let n=t===Gm;if(!n&&t!==Hr)return null;let s=(e||[]).map(r=>({row:r,at:Cj(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[l,c]=[String(r.row.object),String(i.row.object)];return l<c?-1:l>c?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 ou,Hr,Gm,ru,_j,iu,Rj,Tj,Aj,Vm=O(()=>{ma();Kn();ou="merge",Hr="latest-observation-wins",Gm="first-claim-wins",ru="contradiction",_j=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","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"],iu=new Set(_j.flatMap(e=>[e,Zo(e)])),Rj=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"]),Tj=/^mgx:has-exit-([a-z]+)$/,Aj=new Set(["mgx:playedBy"])});function Xr(e){let t=String(e||""),n=t.indexOf(ba);return n<0?"":t.slice(n+ba.length)}function Mj(e){let t=1,n=0;for(let s of e)t*=1-Nj(s),n+=1;return n?Pj(Math.min(1,1-t)):0}function Xm(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 Zm(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 eg(e,t="",n=""){let s=t,o=n;for(let r of e)s=Jm(s,r.assertedAt),o=Qm(o,r.assertedAt);return{earliest:s,latest:o}}function du({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let l=[...new Set(o)].filter(Boolean).sort(),c=a?Mj(l.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:Oj,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===er?"rollupSourceIds":"rollupRecordIds",value:l.join(" ")},{prop:Yr,key:"rollupCount",value:String(l.length)},{prop:Nn,key:"rollupEarliest",value:r},{prop:Pn,key:"rollupLatest",value:i},...c===void 0?[]:[{prop:tr,key:"rollupPrior",value:String(c)}]]}}function tg({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(Zm).slice(8);if(!i.length)return null;let{earliest:a,latest:l}=eg(i,Et(s,Nn),Et(s,Pn));return{rollup:du({id:cu(e,t),sourceKey:`rollup:${t}`,template:pu(i[0].record||s),idsProp:er,ids:[...$a(s),...i.map(u=>u.sourceId)],earliest:a,latest:l,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function ng({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(Zm),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:l}=eg(i,Et(s,Nn),Et(s,Pn));return{rollup:du({id:lu(e,t),sourceKey:t,template:pu(i[0].record||s),idsProp:Kr,ids:[...Lj(s),...i.map(u=>u.id)],earliest:a,latest:l}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function fu(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Is(s),r=o?er:Kr,i=a=>uu(Et(a,r));return du({id:s,sourceKey:Et(e,"mgx:sourceId")||Et(t,"mgx:sourceId"),template:pu(Et(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:Jm(Et(e,Nn),Et(t,Nn)),latest:Qm(Et(e,Pn),Et(t,Pn)),priorFor:o?n:void 0})}function sg(e,t){if(!t)return!1;for(let n of e||[])if($a(n).includes(t))return!0;return!1}var Oj,qm,Hm,wa,Km,er,Kr,Yr,Nn,Pn,tr,ba,Ym,cu,lu,Is,nr,ya,Et,uu,$a,Lj,Nj,Pj,Jm,Qm,pu,hu=O(()=>{Oj="Fact",qm=64,Hm=8,wa=8,Km=2,er="mgx:rollupSourceIds",Kr="mgx:rollupRecordIds",Yr="mgx:rollupCount",Nn="mgx:rollupEarliest",Pn="mgx:rollupLatest",tr="mgx:rollupPrior",ba="@rollup:",Ym="#rollup",cu=(e,t)=>`${e}${ba}${t}`,lu=(e,t)=>`${e}@${t}${Ym}`,Is=e=>String(e||"").includes(ba),nr=e=>String(e||"").endsWith(Ym),ya=e=>Is(e)||nr(e);Et=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",uu=e=>String(e||"").split(" ").filter(Boolean),$a=e=>uu(Et(e,er)),Lj=e=>uu(Et(e,Kr)),Nj=e=>Math.max(0,Math.min(1,Number(e)||0)),Pj=e=>Number(e.toFixed(6));Jm=(e,t)=>Xm(e,t,Math.min),Qm=(e,t)=>Xm(e,t,Math.max);pu=e=>({label:e?.label||"",subject:Et(e,"rdf:subject"),predicate:Et(e,"rdf:predicate"),object:Et(e,"rdf:object")})});function wu(e){let t=String(e||"");return bu(t)?t.slice(0,-Sa.length):""}function og(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 yu({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:on,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:xa,key:"retractedRecordIds",value:i.join(" ")},{prop:mu,key:"retractedCount",value:String(i.length)},{prop:Ea,key:"retractedAt",value:o||""},...a.length?[{prop:Jr,key:"provenance",value:a.join(" | ")}]:[]]}}function ig({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...io(o),...n].filter(Boolean);return a.length?yu({id:gu(e,t),sourceId:t,template:r||rg(o),ids:a,retractedAt:og(ao(o),s),tags:[...Qr(pn(o,Jr)),...Qr(i)]}):null}function ag(e,t){let n=rg(pn(e,"rdf:subject")?e:t);return yu({id:e?.id||t?.id,sourceId:pn(e,"mgx:sourceId")||pn(t,"mgx:sourceId"),template:n,ids:[...io(e),...io(t)],retractedAt:og(ao(e),ao(t)),tags:[...Qr(pn(e,Jr)),...Qr(pn(t,Jr))]})}function Dj(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function zj(e,t,n=""){return!e||!t||!io(e).includes(t)?!1:Dj(n,ao(e))}function ka(e,t,n=""){for(let s of e||[])if(zj(s,t,n))return!0;return!1}function Uj(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function Bj(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 ja(e){let t=wu(e?.id);return t?{id:e.id,subject:t,predicate:va,object:Uj(ao(e),io(e)),provenance:pn(e,Jr)}:null}function _a(e){if(!e||e.predicate!==va)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=Bj(e.object);return o.length?yu({id:`${t}${Sa}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Qr(e.provenance)}):null}var on,va,xa,Ea,mu,Sa,Jr,gu,bu,pn,Fj,Qr,io,ao,rg,$u=O(()=>{on="Retraction",va="mgx:retracted",xa="mgx:retractedRecordIds",Ea="mgx:retractedAt",mu="mgx:retractedCount",Sa="#retracted",Jr="mgx:factProvenance",gu=(e,t)=>`${e}@${t}${Sa}`,bu=e=>String(e||"").endsWith(Sa);pn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Fj=e=>String(e||"").split(" ").filter(Boolean),Qr=e=>String(e||"").split(" | ").filter(Boolean),io=e=>Fj(pn(e,xa)),ao=e=>pn(e,Ea);rg=e=>({label:e?.label||"",subject:pn(e,"rdf:subject"),predicate:pn(e,"rdf:predicate"),object:pn(e,"rdf:object")})});var Wj,Gj,Vj,qj,vu,w0,cg=O(()=>{Kn();Wj="mgx:worldName",Gj="mgx:nodeName",Vj="mgx:playedBy",qj="mgx:waved",vu="mgx:invitedBy",w0=Object.freeze([Wj,Gj,Vj,qj,vu])});function Ra(e){let t=new Set;for(let n of e||[])n?.predicate===vu&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function xu(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function Ta({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=xu(t,n);if(!o.length)return[];if(typeof s!="function")return[];let r=new Map;for(let a of o){let l=s(a);r.set(a,new Set([...l||[]].map(String)))}return[...new Set((e||[]).map(String).filter(Boolean))].sort().filter(a=>o.every(l=>r.get(l).has(a)))}var Eu=O(()=>{cg()});function cs(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function Qj(e,t){(!e?.class||!Hj.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function Zj(e,t){for(let i of["rdf:subject","rdf:predicate","rdf:object"])Zr(cs(e,i))||t.push(`a Fact needs a non-empty ${i}`);for(let i of["rdf:subject","rdf:object"]){let a=cs(e,i);a!==void 0&&Yj.test(a)&&t.push(`a Fact's ${i} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(a)})`)}let n=cs(e,"mgx:factProvenance");n!==void 0&&!Zr(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";Xj(s)&&!ug.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=cs(e,"mgx:sourceId");o!==void 0&&!Zr(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=cs(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)})`);for(let i of Jj){let a=cs(e,i);if(a===void 0)continue;let l=a.split(" ").filter(Boolean);l.length||t.push(`${i}, when present, must name at least one record id`);for(let c of l)ug.test(c)||t.push(`${i} must name Fact record ids (got ${JSON.stringify(c)})`)}}function e_(e,t){Zr(cs(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=cs(e,"mgx:ruleKind");if(!n||!lg.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...lg].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of Kj[n])Zr(cs(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function t_(e){let t=[];return Qj(e,t),e?.class==="Fact"&&Zj(e,t),e?.class==="Rule"&&e_(e,t),{ok:t.length===0,violations:t}}function Su(e){let t=t_(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 Hj,lg,Kj,Yj,ug,Xj,Jj,Zr,dg=O(()=>{Hj=new Set(["Utterance","Fact","Session","Source","Rule"]),lg=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),Kj={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"]},Yj=/[.!?]\s+\w/,ug=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,Xj=e=>e.includes("@")||/#v\d/.test(e),Jj=["mgx:supersedes","mgx:supersededBy"];Zr=e=>typeof e=="string"&&e.trim().length>0});var pg={};Wn(pg,{access:()=>o_,appendFile:()=>a_,basename:()=>E_,copyFile:()=>h_,createInterface:()=>R_,createReadStream:()=>g_,createRequire:()=>n_,createWriteStream:()=>b_,default:()=>A_,dirname:()=>$_,existsSync:()=>w_,fileURLToPath:()=>k_,isAbsolute:()=>x_,join:()=>y_,mkdir:()=>c_,mkdtemp:()=>l_,randomBytes:()=>j_,readFile:()=>r_,readFileSync:()=>s_,readdir:()=>m_,rename:()=>u_,resolve:()=>v_,rm:()=>p_,sep:()=>S_,spawnSync:()=>__,stat:()=>f_,tmpdir:()=>T_,unlink:()=>d_,writeFile:()=>i_});var dt,n_,s_,o_,r_,i_,a_,c_,l_,u_,d_,p_,f_,h_,m_,g_,b_,w_,y_,$_,v_,x_,E_,S_,k_,j_,__,R_,T_,A_,fg=O(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},n_=dt("createRequire"),s_=dt("readFileSync"),o_=dt("access"),r_=dt("readFile"),i_=dt("writeFile"),a_=dt("appendFile"),c_=dt("mkdir"),l_=dt("mkdtemp"),u_=dt("rename"),d_=dt("unlink"),p_=dt("rm"),f_=dt("stat"),h_=dt("copyFile"),m_=dt("readdir"),g_=dt("createReadStream"),b_=dt("createWriteStream"),w_=()=>!1,y_=(...e)=>e.join("/"),$_=e=>String(e).replace(/\/[^/]*$/,""),v_=(...e)=>e.join("/"),x_=e=>String(e).startsWith("/"),E_=e=>String(e).split("/").pop(),S_="/",k_=e=>String(e),j_=dt("randomBytes"),__=dt("spawnSync"),R_=dt("createInterface"),T_=()=>"/tmp",A_={}});var I_,ei,ku=O(()=>{I_=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,ei=class e extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,s=!0,o="Z";if(typeof t=="string"){let r=t.match(I_);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.#t=n,this.#n=s,this.#e=o)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let s=new e(t);return s.#e=n,s}static wrapAsLocalDateTime(t){let n=new e(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#t=!1,n.#e=null,n}}});function C_(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function O_(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:g,topup:y}}async function Bl(e,{config:t,source:n,tel:s}){return(await Sm(e,{config:t,source:n,tel:s})).text}var Wl=O(()=>{_t();Ue();Ut();oa();Rr();Oe();Rs();aa();ca();Ge();Bl.ownsGraphLoad=!0});function km(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"symbol"),"symbol");return Yf(Mo(t,s))}var jm=O(()=>{Oe();Ge()});function la(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 Vr(e){return la(e).toString(16).padStart(8,"0")}function cj(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 w=0;w<16;w+=1)i[w]=o.getUint32(u+w*4);for(let w=16;w<64;w+=1){let v=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,_=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+v+i[w-7]+_>>>0}let[d,f,p,h,m,g,b,y]=r;for(let w=0;w<64;w+=1){let v=a(m,6)^a(m,11)^a(m,25),_=m&g^~m&b,$=y+v+_+aj[w]+i[w]>>>0,x=a(d,2)^a(d,13)^a(d,22),S=d&f^d&p^f&p,E=x+S>>>0;y=b,b=g,g=m,m=h+$>>>0,h=p,p=f,f=d,d=$+E>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+f>>>0,r[2]=r[2]+p>>>0,r[3]=r[3]+h>>>0,r[4]=r[4]+m>>>0,r[5]=r[5]+g>>>0,r[6]=r[6]+b>>>0,r[7]=r[7]+y>>>0}let l=new Uint8Array(32),c=new DataView(l.buffer);for(let u=0;u<8;u+=1)c.setUint32(u*4,r[u]);return l}function lj(e,t){let n=cj(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function Q(e){let t=as(e);return 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 cs(e){let t=as(e);return dj.get(t)??t}function me(e,t,n){return Ko(Q(e),cs(t),Q(n))}var aj,uj,as,dj,Ko,sn=O(()=>{aj=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]);uj=2e3,as=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,uj);dj=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"]]);Ko=(e,t,n)=>`fact:${lj(`${e}\0${t}\0${n}`,8)}`});var dn={};Vn(dn,{CARDINALITY_RULE_CONFIDENCE:()=>wj,CAX_DW_RULE:()=>Vl,CAX_DW_RULE_CONFIDENCE:()=>Hl,CAX_MAXC0_RULE_CONFIDENCE:()=>$j,CLS_SVF1_RULE:()=>Kl,CLS_SVF1_RULE_CONFIDENCE:()=>Xl,DEFAULT_MAX_ENVIRONMENTS:()=>ua,DISJOINT_PREDICATE:()=>Yo,ENTAILED_DISJOINT_PROVENANCE:()=>ql,ENTAILED_PROVENANCE:()=>Tm,ENTAILED_SCM_SVF_PROVENANCE:()=>Zl,ENTAILED_SVF1_PROVENANCE:()=>Yl,ENTAILED_TYPE_PROVENANCE:()=>Im,ON_PROPERTY_PREDICATE:()=>On,SCM_SVF_RULE:()=>Ql,SCM_SVF_RULE_CONFIDENCE:()=>eu,SOME_VALUES_FROM_PREDICATE:()=>Ln,SUBCLASS_PREDICATE:()=>De,TYPE_PREDICATE:()=>Nt,buildCardinalityRestrictions:()=>bj,buildRelevanceFrontier:()=>Gl,buildSubClassSuccessors:()=>da,deriveDisjointViolations:()=>Nm,deriveSomeValuesFromApplication:()=>Pm,deriveSomeValuesFromSubsumption:()=>Mm,deriveSubClassClosure:()=>Cm,deriveSubClassClosureDelta:()=>Om,deriveTypePropagation:()=>Lm,entailedTrustFrom:()=>fj,findConsistencyViolations:()=>xj,findIsaChain:()=>tu,proveCardinalityAtLeast:()=>yj,proveMaxCardinalityZeroDenial:()=>vj,retractSubClassOf:()=>_j,syllogise:()=>Ej});function _m(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 fj(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 ls(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=Q(s);o&&n.add(o)}return n.size?n:null}function Cm(e,{depth:t=32,budget:n=50,focus:s=null}={}){let o=new Set,r=new Map;for(let[u,d]of e||[])!u||!d||u===d||(o.add(`${u}${Le}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:ls(s),a=(u,d,f)=>!i||i.has(u)||i.has(d)||i.has(f),l=[],c=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[p,h]of r)for(let m of h){let g=r.get(m);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,m,b)&&d.push([p,m,b,y])}}if(!d.length)break;d.sort((p,h)=>p[0].localeCompare(h[0])||p[2].localeCompare(h[2])||p[1].localeCompare(h[1]));let f=!1;for(let[p,h,m,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:m,via:h}),r.has(p)||r.set(p,new Set),r.get(p).add(m),f=!0}if(l.length>=n||!f)break}return l}function Om(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[h,m]of e||[])!h||!m||h===m||(r.add(`${h}${Le}${m}`),i.has(h)||i.set(h,new Set),i.get(h).add(m),a.has(m)||a.set(m,new Set),a.get(m).add(h));let l=[],c=new Set;for(let[h,m]of t||[]){if(!h||!m||h===m)continue;let g=`${h}${Le}${m}`;c.has(g)||(c.add(g),l.push([h,m]))}let u=o instanceof Set?o.size?o:null:ls(o),d=(h,m,g)=>!u||u.has(h)||u.has(m)||u.has(g),f=[],p=new Set;for(let h=0;h<n&&l.length;h+=1){let m=[],g=(w,v,_)=>{if(w===_)return;let $=`${w}${Le}${_}`;r.has($)||p.has($)||d(w,v,_)&&m.push([w,v,_,$])};for(let[w,v]of l){for(let _ of i.get(v)||[])g(w,v,_);for(let _ of a.get(w)||[])g(_,w,v)}if(!m.length)break;m.sort((w,v)=>w[0].localeCompare(v[0])||w[2].localeCompare(v[2])||w[1].localeCompare(v[1]));let b=!1,y=[];for(let[w,v,_,$]of m)if(!p.has($)){if(f.length>=s)break;p.add($),f.push({subject:w,object:_,via:v}),i.has(w)||i.set(w,new Set),i.get(w).add(_),a.has(_)||a.set(_,new Set),a.get(_).add(w),y.push([w,_]),b=!0}if(f.length>=s||!b)break;l=y}return f}function Nn(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 hj(e){return Nn((e||[]).map(([t,n])=>[n,t]))}function Gl(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(Is(c.predicate)?n.push([c.subject,c.object]):io(c.predicate)?s.push([c.subject,c.object]):Xo(c.predicate)?o.set(c.subject,c.object):Hr(c.predicate)&&r.set(c.subject,c.object));let i=hj(n),a=new Set;for(let c of t||[]){let u=Q(c);if(u){a.add(u);for(let d of i(u))a.add(d)}}let l=new Set(a);for(let[c,u]of s)a.has(u)&&l.add(c);for(let[c,u]of r)o.has(c)&&a.has(u)&&l.add(c);return l}function Lm(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=Nn(t),i=new Set,a=new Set;for(let[p,h]of o||[])p&&h&&i.add(`${p}${Le}${h}`);let l=s instanceof Set?s.size?s:null:ls(s),c=(p,h,m)=>!l||l.has(p)||l.has(h)||l.has(m),u=[];for(let[p,h]of e||[]){if(!p||!h)continue;let m=`${p}${Le}${h}`;if(!a.has(m)){a.add(m);for(let g of r(h)){if(g===h||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,h,g)&&u.push([p,h,g,b])}}}u.sort((p,h)=>p[0].localeCompare(h[0])||p[2].localeCompare(h[2])||p[1].localeCompare(h[1]));let d=[],f=new Set;for(let[p,h,m,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:m,via:h})}return d}function Nm(e,t,n,{budget:s=50,focus:o=null}={}){let r=Nn(t),i=new Map,a=new Set;for(let[h,m]of n||[])!h||!m||h===m||(a.add(`${h}${Le}${m}`),a.add(`${m}${Le}${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 l=new Set,c=o instanceof Set?o.size?o:null:ls(o),u=(h,m,g)=>!c||c.has(h)||c.has(m)||c.has(g),d=[];for(let[h,m]of e||[]){if(!h||!m)continue;let g=`${h}${Le}${m}`;if(!l.has(g)){l.add(g);for(let b of[m,...r(m)]){let y=i.get(b);if(y)for(let w of y){if(w===h)continue;let v=`${h}${Le}${w}`;a.has(v)||u(h,m,w)&&d.push([h,m,b,w,v])}}}}d.sort((h,m)=>h[0].localeCompare(m[0])||h[3].localeCompare(m[3])||h[2].localeCompare(m[2])||h[1].localeCompare(m[1]));let f=[],p=new Set;for(let[h,m,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:h,object:b,viaType:m,viaClass:g})}return f}function Pm(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=Nn(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Le}${g.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(g.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[g,b]of t||[])!g||!b||(l.add(`${g}${Le}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:ls(r),d=(g,b,y)=>!u||u.has(g)||u.has(b)||u.has(y),f=new Set,p=[];for(let[g,b,y]of e||[]){if(!g||!b||!y)continue;let w=Q(b),v=`${g}${Le}${w}${Le}${y}`;if(f.has(v))continue;f.add(v);let _=c.get(y);if(_)for(let $ of _)for(let x of[$,...i($)]){let S=a.get(`${w}${Le}${x}`);if(S)for(let E of S){if(g===E)continue;let R=`${g}${Le}${E}`;l.has(R)||d(g,y,E)&&p.push([g,b,w,y,$,x,E,R])}}}p.sort((g,b)=>g[0].localeCompare(b[0])||g[6].localeCompare(b[6])||g[1].localeCompare(b[1])||g[3].localeCompare(b[3]));let h=[],m=new Set;for(let[g,b,y,w,v,_,$,x]of p)if(!m.has(x)){if(h.length>=o)break;m.add(x),h.push({subject:g,object:$,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:v,viaTarget:_})}return h}function bj(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(Xo(r.predicate))t.set(r.subject,r.object);else if(pj(r.predicate))s.set(r.subject,r.object);else{let i=gj[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)!==mj)continue;let l=s.get(r);l&&o.push({restriction:r,kind:i,n:a,onClass:l})}return o.sort((r,i)=>r.restriction.localeCompare(i.restriction)),o}function Mm(e,t,{budget:n=50,focus:s=null}={}){let o=Nn(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=Q(f.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:f.restriction,target:f.target})}let i=new Set;for(let[f,p]of t||[])f&&p&&i.add(`${f}${Le}${p}`);let a=s instanceof Set?s.size?s:null:ls(s),l=(f,p)=>!a||a.has(f)||a.has(p),c=[];for(let[,f]of r)if(!(f.length<2))for(let p of f)for(let h of f){if(p.restriction===h.restriction||p.target===h.target||!o(p.target).has(h.target))continue;let m=`${p.restriction}${Le}${h.restriction}`;i.has(m)||l(p.restriction,h.restriction)&&c.push([p.restriction,h.restriction,p.target,h.target,m])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,h,m,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:h,viaY2:m})}return u}function Fm(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=Nn(e),a=r instanceof Set?r.size?r:null:ls(r),l=f=>!a||a.has(n)||a.has(f),c=new Map;for(let[f,p]of e||[])!f||!p||(c.has(f)||c.set(f,new Set),c.get(f).add(p));let u=new Map((t||[]).map(f=>[f.restriction,f])),d=0;for(let f of[n,...i(n)]){if(d>=o)break;if(d+=1,!!l(f))for(let p of c.get(f)||[]){let h=u.get(p);if(h&&s(h))return{viaClass:f,viaRestriction:p,record:h}}}return null}function yj(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Fm(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 vj(e,t,n,s,o={}){if(!s)return null;let r=Fm(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 xj(e,t,n,{budget:s=50,focus:o=null}={}){let r=Nn(t),i=new Map;for(let[p,h]of n||[])!p||!h||p===h||(i.has(p)||i.set(p,new Set),i.get(p).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(p));if(!i.size)return[];let a=new Map;for(let[p,h]of e||[])!p||!h||(a.has(p)||a.set(p,new Set),a.get(p).add(h));let l=o instanceof Set?o.size?o:null:ls(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,h]of a){if(!c(p))continue;let m=[...h].sort();for(let g=0;g<m.length;g+=1)for(let b=g+1;b<m.length;b+=1){let[y,w]=[m[g],m[b]],v=[y,...r(y)],_=[w,...r(w)],$=null;for(let S of v){let E=i.get(S);if(E){for(let R of _)if(E.has(R)){$=[S,R];break}if($)break}}if(!$)continue;let x=`${p}${Le}${y}${Le}${w}`;d.has(x)||(d.add(x),u.push([p,y,w,$[0],$[1]]))}}u.sort((p,h)=>p[0].localeCompare(h[0])||p[1].localeCompare(h[1])||p[2].localeCompare(h[2]));let f=[];for(let[p,h,m,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:h,classB:m,viaA:g,viaB:b})}return f}async function Ej(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=ua,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=_m(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),h=p.filter(k=>Is(k.predicate)).map(k=>[k.subject,k.object]),m=p.filter(k=>io(k.predicate)).map(k=>[k.subject,k.object]),g=p.filter(k=>ro(k.predicate)).map(k=>[k.subject,k.object]),b=new Map,y=new Map,w=[];for(let k of p){let pe=String(k.predicate||"").trim().toLowerCase();Xo(k.predicate)?b.set(k.subject,k.object):Hr(k.predicate)?y.set(k.subject,k.object):Jl.has(pe)||w.push([k.subject,k.predicate,k.object])}let v=[];for(let[k,pe]of b){let Te=y.get(k);Te&&v.push({restriction:k,property:pe,target:Te})}let _=ls(s),$=o&&_?Gl(p,[..._]):_,x=$===null&&d?await a.loadSyllogiseState(e):null,S=new Set(p.map(k=>k.id)),E=Array.isArray(x?.factIds)?x.factIds.filter(k=>!S.has(k)):[],R=x&&Array.isArray(x.factIds)&&!E.length&&!i?"delta":"full",j=R==="delta"?new Set(x.factIds):null,A=R==="delta"?p.filter(k=>!j.has(k.id)):p,F=A.length,T=new Map;for(let k of p)T.set(`${k.subject}${Le}${k.predicate}${Le}${k.object}`,k.trust);let P=(k,pe,Te)=>T.get(`${k}${Le}${pe}${Le}${Te}`),z=(k,pe,Te)=>T.has(`${k}${Le}${pe}${Le}${Te}`),X=k=>k.filter(pe=>typeof pe=="number"),ce=R==="delta"&&!A.length,te=R==="delta"?A.filter(k=>Is(k.predicate)).map(k=>[k.subject,k.object]):[],D=R==="delta"?te.length?Om(h,te,{depth:t,budget:n,focus:$}):[]:Cm(h,{depth:t,budget:n,focus:$}),U=h.concat(D.map(k=>[k.subject,k.object])),W=$,I=null;if(R==="delta"&&!ce){let k=p.concat(D.map(Te=>({subject:Te.subject,predicate:De,object:Te.object}))),pe=[];for(let Te of A)pe.push(Te.subject,Te.object);I=Gl(k,pe),W=I}let L=k=>!I||I.has(k),C=I?m.filter(([k,pe])=>L(k)||L(pe)):m,M=new Set;if(I)for(let k of A)ro(k.predicate)&&(M.add(k.subject),M.add(k.object));let N=I&&M.size?Nn(U):null,G=I?m.filter(([k,pe])=>L(k)||L(pe)||N&&[...N(pe)].some(Te=>M.has(Te))):m,q=new Set;if(I){for(let k of A)if(Xo(k.predicate)||Hr(k.predicate)){let pe=b.get(k.subject);pe&&q.add(Q(pe))}}let re=I?w.filter(([k,pe,Te])=>L(k)||L(Te)||q.has(Q(pe))):w,ae=Math.max(0,n-D.length),Z=ae>0&&!ce?Lm(C,U,{budget:ae,focus:W,presentTypeEdges:m}):[],ee=Math.max(0,n-D.length-Z.length),H=ee>0&&!ce?Nm(G,U,g,{budget:ee,focus:W}):[],K=Math.max(0,n-D.length-Z.length-H.length),ne=K>0&&v.length&&!ce?Pm(re,m,U,v,{budget:K,focus:W}):[],ve=Math.max(0,n-D.length-Z.length-H.length-ne.length),Re=ve>0&&v.length>1&&!ce?Mm(v,U,{budget:ve,focus:W}):[],ue=new Map(v.map(k=>[k.restriction,k])),Ae=[...D.map(k=>({subject:k.subject,predicate:De,object:k.object,provenance:Tm,justification:[[me(k.subject,De,k.via),me(k.via,De,k.object)]]})),...Z.map(k=>({subject:k.subject,predicate:Nt,object:k.object,provenance:Im,justification:[[me(k.subject,Nt,k.via),me(k.via,De,k.object)]]})),...H.map(k=>{let pe=z(k.viaClass,Yo,k.object),[Te,cn]=pe?[k.viaClass,k.object]:[k.object,k.viaClass],Gn=X([P(k.subject,Nt,k.viaType),P(Te,Yo,cn),...k.viaClass!==k.viaType?[P(k.viaType,De,k.viaClass)]:[]]);return{subject:k.subject,predicate:Yo,object:k.object,provenance:ql,justification:[[me(k.subject,Nt,k.viaType),me(Te,Yo,cn),...k.viaClass!==k.viaType?[me(k.viaType,De,k.viaClass)]:[]]],...Gn.length?{premiseTrusts:Gn,ruleConfidence:Hl}:{}}}),...ne.map(k=>{let pe=X([P(k.subject,k.viaProperty,k.viaValue),P(k.viaValue,Nt,k.viaType),P(k.object,On,k.viaPropertyKey),P(k.object,Ln,k.viaTarget),...k.viaType!==k.viaTarget?[P(k.viaType,De,k.viaTarget)]:[]]);return{subject:k.subject,predicate:Nt,object:k.object,provenance:Yl,justification:[[me(k.subject,k.viaProperty,k.viaValue),me(k.viaValue,Nt,k.viaType),me(k.object,On,k.viaPropertyKey),me(k.object,Ln,k.viaTarget),...k.viaType!==k.viaTarget?[me(k.viaType,De,k.viaTarget)]:[]]],...pe.length?{premiseTrusts:pe,ruleConfidence:Xl}:{}}}),...Re.map(k=>{let pe=ue.get(k.subject),Te=ue.get(k.object),cn=X([pe&&P(k.subject,On,pe.property),P(k.subject,Ln,k.viaY1),Te&&P(k.object,On,Te.property),P(k.object,Ln,k.viaY2),P(k.viaY1,De,k.viaY2)]);return{subject:k.subject,predicate:De,object:k.object,provenance:Zl,justification:[[...pe?[me(k.subject,On,pe.property)]:[],me(k.subject,Ln,k.viaY1),...Te?[me(k.object,On,Te.property)]:[],me(k.object,Ln,k.viaY2),me(k.viaY1,De,k.viaY2)]],...cn.length?{premiseTrusts:cn,ruleConfidence:eu}:{}}})],Ie=Ae.map(k=>({id:me(k.subject,k.predicate,k.object),subject:k.subject,predicate:k.predicate,object:k.object,environments:k.justification,write:k})),oe=zm(p.concat(Ie.map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object})))),ke=new Map(p.map(k=>[k.id,k])),le=k=>Is(k)||io(k)||ro(k),V=k=>R!=="delta"||I!==null&&(I.has(k.subject)||I.has(k.object)),se=p.filter(k=>le(k.predicate)&&Dm(k.provenance)&&qr(k).length<r&&V(k)).map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object,environments:qr(k),provenance:k.provenance})),qe=[...Ie,...se].sort((k,pe)=>k.subject.localeCompare(pe.subject)||k.predicate.localeCompare(pe.predicate)||k.object.localeCompare(pe.object)),Fe=0,et=!1,rn=0;for(let k of qe){if(rn>=n){et=!0;break}rn+=1;let pe=oe(k,{maxEnvironments:r+1}),{kept:Te,truncated:cn}=kj(k.environments,pe,r);if(cn&&(et=!0),!(Te.length<=k.environments.length)){if(Fe+=Te.length-k.environments.length,k.write){k.write.justification=Te;continue}Ae.push({subject:k.subject,predicate:k.predicate,object:k.object,justification:Te,...Um(k.provenance,Te,Gn=>ke.get(Gn)?.trust)||{}})}}let{ids:Yt}=await u(e,Ae),Xt=[],an=0;for(let k of D)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.via,rule:Rm}),an+=1;for(let k of Z)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.via,rule:Am}),an+=1;for(let k of H)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.viaClass,rule:Vl}),an+=1;for(let k of ne)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.viaValue,rule:Kl}),an+=1;for(let k of Re)Xt.push({id:Yt[an],subject:k.subject,object:k.object,via:k.viaY1,rule:Ql}),an+=1;let vi=Xt.length>=n;if($===null&&d&&!vi){let k=new Set(S);for(let pe of Yt)k.add(pe);await a.saveSyllogiseState(e,{version:1,factIds:[...k].sort(),completedAt:new Date().toISOString()})}return{derived:Xt,count:Xt.length,budget:n,depth:t,truncated:vi,mode:R,deltaSize:F,environmentsAdded:Fe,alternatesTruncated:et}}function Dm(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function Sj(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();Is(u.predicate)?t.push([u.subject,u.object]):io(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):ro(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)):Xo(u.predicate)?o.set(u.subject,u.object):Hr(u.predicate)?r.set(u.subject,u.object):Jl.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([Q(u.predicate),u.object]))}let a=Nn(t),l=(u,d)=>u!==d&&a(u).has(d),c=u=>{let d=o.get(u),f=r.get(u);return d&&f?{property:Q(d),target:f}:null};return u=>{if(Is(u.predicate)){if(l(u.subject,u.object))return!0;let d=c(u.subject),f=c(u.object);return!!(d&&f&&d.property===f.property&&l(d.target,f.target))}if(io(u.predicate)){for(let f of n.get(u.subject)||[])if(l(f,u.object))return!0;let d=c(u.object);if(d){for(let[f,p]of i.get(u.subject)||[])if(f===d.property){for(let h of n.get(p)||[])if(h===d.target||l(h,d.target))return!0}}return!1}if(ro(u.predicate)){for(let d of n.get(u.subject)||[])for(let f of[d,...a(d)])if(s.get(f)?.has(u.object))return!0;return!1}return!0}}function zm(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,l=new Map,c=new Map;for(let p of e){if(!p||!p.subject||!p.predicate||!p.object)continue;p.id&&t.add(p.id);let h=String(p.predicate||"").trim().toLowerCase();Is(p.predicate)?(n.push([p.subject,p.object]),s.has(p.subject)||s.set(p.subject,new Set),s.get(p.subject).add(p.object)):io(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):ro(p.predicate)?(r.add(`${p.subject}${Le}${p.object}`),i.has(p.subject)||i.set(p.subject,new Set),i.get(p.subject).add(p.object),i.has(p.object)||i.set(p.object,new Set),i.get(p.object).add(p.subject)):Xo(p.predicate)?a.set(p.subject,p.object):Hr(p.predicate)?l.set(p.subject,p.object):Jl.has(h)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=Nn(n),d=p=>s.get(p)||new Set,f=p=>{let h=a.get(p),m=l.get(p);return h&&m?{property:h,propertyKey:Q(h),target:m}:null};return(p,{maxEnvironments:h=ua}={})=>{let m=[],g=new Set,b=y=>{if(m.length>=h||p.id&&y.includes(p.id)||!y.every(v=>t.has(v)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),m.push(y))};if(Is(p.predicate)){for(let y of[...d(p.subject)].sort()){if(m.length>=h)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([me(p.subject,De,y),me(y,De,p.object)])}if(m.length<h){let y=f(p.subject),w=f(p.object);y&&w&&y.propertyKey===w.propertyKey&&y.target!==w.target&&d(y.target).has(w.target)&&b([me(p.subject,On,y.property),me(p.subject,Ln,y.target),me(p.object,On,w.property),me(p.object,Ln,w.target),me(y.target,De,w.target)])}return m}if(io(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(m.length>=h)break;w!==p.object&&d(w).has(p.object)&&b([me(p.subject,Nt,w),me(w,De,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([v])=>Q(v)===y.propertyKey).sort((v,_)=>v[0].localeCompare(_[0])||v[1].localeCompare(_[1]));for(let[v,_]of w){if(m.length>=h)break;for(let $ of[...o.get(_)||[]].sort()){if(m.length>=h)break;$!==y.target&&!d($).has(y.target)||b([me(p.subject,v,_),me(_,Nt,$),me(p.object,On,y.propertyKey),me(p.object,Ln,y.target),...$!==y.target?[me($,De,y.target)]:[]])}}}return m}if(ro(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let v of[w,...u(w)])(i.get(v)||new Set).has(p.object)&&y.push([w,v]);y.sort((w,v)=>w[0].localeCompare(v[0])||w[1].localeCompare(v[1]));for(let[w,v]of y){if(m.length>=h)break;let _=r.has(`${v}${Le}${p.object}`),[$,x]=_?[v,p.object]:[p.object,v];b([me(p.subject,Nt,w),me($,Yo,x),...v!==w?[me(w,De,v)]:[]])}return m}return m}}function kj(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 Um(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=jj.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(c=>n(c)).filter(c=>typeof c=="number");if(a.length!==i.length)continue;let l=Math.min(...a);l>r&&(r=l,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function _j(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=ua,store:i,sourceTags:a=[]}={}){let{loadMemory:l,readFactRows:c,removeFacts:u}=_m(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),d=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,p=(a||[]).filter(Boolean);if(p.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let h=Q(t),m=Q(n),g=me(h,De,m),b=await l(e),y=c(b),w=new Map(y.map(P=>[P.id,P]));if(!w.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let v=w.get(g).sourceIds||[],_=p.map(P=>f(g,P).slice(g.length+1)),$=p.length?v.filter(P=>_.includes(P)):[],x=!p.length||$.length>0;if(p.length&&!x)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let S=p.length>0&&$.length<v.length,E=new Set([g]),R=[g],j=new Map,A=!1;if(!S){let P=y.filter(te=>qr(te).length&&Dm(te.provenance)),z=new Map;for(let te of P)for(let D of qr(te))for(let U of D)z.has(U)||z.set(U,new Set),z.get(U).add(te.id);let X=0,ce=[g];for(;X<o;X+=1){let te=new Set;for(let N of ce)for(let G of z.get(N)||[])E.has(G)||te.add(G);let D=[...te].map(N=>w.get(N)).sort((N,G)=>N.subject.localeCompare(G.subject)||N.predicate.localeCompare(G.predicate)||N.object.localeCompare(G.object));if(!D.length)break;let U=y.filter(N=>!E.has(N.id)&&!te.has(N.id)),W=new Set(U.map(N=>N.id)),I=zm(U),L=Sj(U),C=!1,M=!1;ce=[];for(let N of D){if(E.size>=s){M=!0;break}let G=qr(N),q=G.filter(ae=>ae.every(Z=>W.has(Z)));if(q.length){q.length!==G.length&&j.set(N.id,q);continue}let re=I(N,{maxEnvironments:r});if(re.length){j.set(N.id,re);continue}L(N)||(E.add(N.id),R.push(N.id),ce.push(N.id),C=!0)}if(M){A=!0;break}if(!C)break}!A&&X>=o&&(A=P.some(te=>!E.has(te.id)&&te.justification.some(D=>E.has(D))))}let F=p.length?[...$.map(P=>`${g}@${P}`),...R.slice(1)]:R,{removed:T}=await u(e,F);if(d){let P=[...j.entries()].filter(([z])=>!E.has(z)).sort((z,X)=>z[0].localeCompare(X[0])).map(([z,X])=>{let ce=w.get(z);return{subject:ce.subject,predicate:ce.predicate,object:ce.object,justification:X,...Um(ce.provenance,X,te=>w.get(te)?.trust)||{}}});P.length&&await d(e,P)}return{retracted:T,count:T.length,budget:s,depth:o,truncated:A,found:!0,...p.length?{ownRecord:!0,stillStands:S}:{}}}function da(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 tu(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=s instanceof Map?s:da(s),a=[];for(let[c,u]of n||[])c===e&&u&&a.push({node:u,path:[{subject:c,predicate:Nt,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:De,object:c}]});let l=new Set([e]);for(let c=1;c<=o&&a.length;c+=1){for(let{node:d,path:f}of a)if(r.has(d))return f;if(c===o)break;let u=[];for(let{node:d,path:f}of a)if(!l.has(d)){l.add(d);for(let p of i.get(d)||[])l.has(p)||u.push({node:p,path:[...f,{subject:d,predicate:De,object:p}]})}a=u}return null}var De,Rm,Tm,Nt,Am,Im,Yo,Vl,ql,Hl,On,Ln,Kl,Yl,Xl,ua,Le,Is,io,ro,Xo,Hr,pj,Jl,mj,gj,Ql,Zl,eu,wj,$j,qr,jj,qt=O(()=>{sn();De="rdfs:subClassOf",Rm="subClassOf",Tm=`entailed:${Rm}`,Nt="rdf:type",Am="type",Im=`entailed:${Am}`,Yo="owl:disjointWith",Vl="disjointWith",ql=`entailed:${Vl}`,Hl=.95,On="owl:onProperty",Ln="owl:someValuesFrom",Kl="someValuesFrom",Yl=`entailed:${Kl}`,Xl=.95,ua=4,Le="\u241F",Is=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",io=e=>String(e||"").trim().toLowerCase()==="rdf:type",ro=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Xo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Hr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",pj=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Jl=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);mj="has",gj={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Ql="someValuesFromSubsumption",Zl=`entailed:${Ql}`,eu=.95;wj=.95;$j=.95;qr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);jj=new Map([[ql,Hl],[Yl,Xl],[Zl,eu]])});function er(e){let t=String(e||""),n=Bm.get(t);return n||(t.startsWith(nu)?Jo+t.slice(nu.length):t)}function Wm(e){let t=String(e||""),n=Rj.get(t);return n||(t.startsWith(Jo)?nu+t.slice(Jo.length):null)}function qm(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=tu(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function ha(e,t,n,{maxHops:s=3}={}){let o=Zo(e),r=Zo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassSucc:l}=Vm(i),c=i.filter(b=>(b.predicate===fa||b.predicate===Qo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===Qo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=qm(o,b.subject,a,l,s);w&&w.length&&u.push({fact:b,polarity:y,hops:w.length,chain:w})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:ou(o,r,i,{maxHops:s})};u.sort((b,y)=>b.hops-y.hops||(y.fact.trust||0)-(b.fact.trust||0));let d=u[0].hops,f=u.filter(b=>b.hops===d),p=f.filter(b=>b.polarity==="positive").map(b=>b.fact),h=f.filter(b=>b.polarity==="negative").map(b=>b.fact),m=h.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==m)||null;return{verdict:p.length&&h.length?"both":h.length?"no":"yes",hops:d,positive:p,negative:h,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function ou(e,t,n,{maxHops:s=3}={}){let o=Zo(e),r=Zo(t),i=Array.isArray(n)?n:[],a=i.filter(m=>m.predicate===De||m.predicate===Nt),l=a.filter(m=>o.has(m.subject)).map(m=>m.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(m=>m.object===c&&!o.has(m.subject)).map(m=>m.subject))],d=m=>{let g=i.find(b=>b.subject===m&&r.has(b.object)&&(b.predicate===fa||b.predicate===Qo));return g?{name:m,polarity:g.predicate===Qo?"negative":"positive",fact:g}:{name:m,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassSucc:h}=Vm(i);return{klass:c,kinds:u.length,positive:f.filter(m=>m.polarity==="positive"),negative:f.filter(m=>m.polarity==="negative"),unknown:f.filter(m=>m.polarity==="unknown"),chain:qm(o,c,p,h,s)}}function ru(e,t,{exclude:n=[],maxHops:s=3}={}){let o=Zo(e),r=Zo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==fa||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),ha(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(Tj)}var Jo,nu,pa,Bm,Rj,Gm,fa,Qo,su,Tj,Zo,Vm,ma=O(()=>{qt();Jo="mgxneg:",nu="mgx:",pa="mgxneg:subClassOf",Bm=new Map([[De,pa]]),Rj=new Map([...Bm].map(([e,t])=>[t,e]));Gm=e=>String(e||"").startsWith(Jo),fa="mgx:capableOf",Qo=er(fa),su=6,Tj=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),Zo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Vm=e=>{let t=e.filter(s=>s.predicate===Nt).map(s=>[s.subject,s.object]),n=e.filter(s=>s.predicate===De).map(s=>[s.subject,s.object]);return{typeEdges:t,subClassSucc:da(n)}}});function ga(e){let t=String(e||"");return cu.has(t)?iu:Ij.has(t)||Cj.test(t)?Kr:Oj.has(t)?Hm:au}function Lj(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(Yp.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function Nj(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(Lj(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function lu(e,t){let n=t===Hm;if(!n&&t!==Kr)return null;let s=(e||[]).map(r=>({row:r,at:Nj(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[l,c]=[String(r.row.object),String(i.row.object)];return l<c?-1:l>c?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 iu,Kr,Hm,au,Aj,cu,Ij,Cj,Oj,Km=O(()=>{ma();Xn();iu="merge",Kr="latest-observation-wins",Hm="first-claim-wins",au="contradiction",Aj=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","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"],cu=new Set(Aj.flatMap(e=>[e,er(e)])),Ij=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"]),Cj=/^mgx:has-exit-([a-z]+)$/,Oj=new Set(["mgx:playedBy"])});function Jr(e){let t=String(e||""),n=t.indexOf(ba);return n<0?"":t.slice(n+ba.length)}function zj(e){let t=1,n=0;for(let s of e)t*=1-Fj(s),n+=1;return n?Dj(Math.min(1,1-t)):0}function Zm(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 ng(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 sg(e,t="",n=""){let s=t,o=n;for(let r of e)s=eg(s,r.assertedAt),o=tg(o,r.assertedAt);return{earliest:s,latest:o}}function fu({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let l=[...new Set(o)].filter(Boolean).sort(),c=a?zj(l.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:Pj,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===tr?"rollupSourceIds":"rollupRecordIds",value:l.join(" ")},{prop:Xr,key:"rollupCount",value:String(l.length)},{prop:Pn,key:"rollupEarliest",value:r},{prop:Mn,key:"rollupLatest",value:i},...c===void 0?[]:[{prop:nr,key:"rollupPrior",value:String(c)}]]}}function og({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(ng).slice(8);if(!i.length)return null;let{earliest:a,latest:l}=sg(i,Et(s,Pn),Et(s,Mn));return{rollup:fu({id:uu(e,t),sourceKey:`rollup:${t}`,template:hu(i[0].record||s),idsProp:tr,ids:[...$a(s),...i.map(u=>u.sourceId)],earliest:a,latest:l,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function rg({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(ng),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:l}=sg(i,Et(s,Pn),Et(s,Mn));return{rollup:fu({id:du(e,t),sourceKey:t,template:hu(i[0].record||s),idsProp:Yr,ids:[...Mj(s),...i.map(u=>u.id)],earliest:a,latest:l}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function mu(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Cs(s),r=o?tr:Yr,i=a=>pu(Et(a,r));return fu({id:s,sourceKey:Et(e,"mgx:sourceId")||Et(t,"mgx:sourceId"),template:hu(Et(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:eg(Et(e,Pn),Et(t,Pn)),latest:tg(Et(e,Mn),Et(t,Mn)),priorFor:o?n:void 0})}function ig(e,t){if(!t)return!1;for(let n of e||[])if($a(n).includes(t))return!0;return!1}var Pj,Ym,Xm,wa,Jm,tr,Yr,Xr,Pn,Mn,nr,ba,Qm,uu,du,Cs,sr,ya,Et,pu,$a,Mj,Fj,Dj,eg,tg,hu,gu=O(()=>{Pj="Fact",Ym=64,Xm=8,wa=8,Jm=2,tr="mgx:rollupSourceIds",Yr="mgx:rollupRecordIds",Xr="mgx:rollupCount",Pn="mgx:rollupEarliest",Mn="mgx:rollupLatest",nr="mgx:rollupPrior",ba="@rollup:",Qm="#rollup",uu=(e,t)=>`${e}${ba}${t}`,du=(e,t)=>`${e}@${t}${Qm}`,Cs=e=>String(e||"").includes(ba),sr=e=>String(e||"").endsWith(Qm),ya=e=>Cs(e)||sr(e);Et=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",pu=e=>String(e||"").split(" ").filter(Boolean),$a=e=>pu(Et(e,tr)),Mj=e=>pu(Et(e,Yr)),Fj=e=>Math.max(0,Math.min(1,Number(e)||0)),Dj=e=>Number(e.toFixed(6));eg=(e,t)=>Zm(e,t,Math.min),tg=(e,t)=>Zm(e,t,Math.max);hu=e=>({label:e?.label||"",subject:Et(e,"rdf:subject"),predicate:Et(e,"rdf:predicate"),object:Et(e,"rdf:object")})});function $u(e){let t=String(e||"");return yu(t)?t.slice(0,-Sa.length):""}function ag(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 vu({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:on,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:xa,key:"retractedRecordIds",value:i.join(" ")},{prop:bu,key:"retractedCount",value:String(i.length)},{prop:Ea,key:"retractedAt",value:o||""},...a.length?[{prop:Qr,key:"provenance",value:a.join(" | ")}]:[]]}}function lg({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...ao(o),...n].filter(Boolean);return a.length?vu({id:wu(e,t),sourceId:t,template:r||cg(o),ids:a,retractedAt:ag(co(o),s),tags:[...Zr(pn(o,Qr)),...Zr(i)]}):null}function ug(e,t){let n=cg(pn(e,"rdf:subject")?e:t);return vu({id:e?.id||t?.id,sourceId:pn(e,"mgx:sourceId")||pn(t,"mgx:sourceId"),template:n,ids:[...ao(e),...ao(t)],retractedAt:ag(co(e),co(t)),tags:[...Zr(pn(e,Qr)),...Zr(pn(t,Qr))]})}function Bj(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function Wj(e,t,n=""){return!e||!t||!ao(e).includes(t)?!1:Bj(n,co(e))}function ka(e,t,n=""){for(let s of e||[])if(Wj(s,t,n))return!0;return!1}function Gj(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function Vj(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 ja(e){let t=$u(e?.id);return t?{id:e.id,subject:t,predicate:va,object:Gj(co(e),ao(e)),provenance:pn(e,Qr)}:null}function _a(e){if(!e||e.predicate!==va)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=Vj(e.object);return o.length?vu({id:`${t}${Sa}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Zr(e.provenance)}):null}var on,va,xa,Ea,bu,Sa,Qr,wu,yu,pn,Uj,Zr,ao,co,cg,xu=O(()=>{on="Retraction",va="mgx:retracted",xa="mgx:retractedRecordIds",Ea="mgx:retractedAt",bu="mgx:retractedCount",Sa="#retracted",Qr="mgx:factProvenance",wu=(e,t)=>`${e}@${t}${Sa}`,yu=e=>String(e||"").endsWith(Sa);pn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Uj=e=>String(e||"").split(" ").filter(Boolean),Zr=e=>String(e||"").split(" | ").filter(Boolean),ao=e=>Uj(pn(e,xa)),co=e=>pn(e,Ea);cg=e=>({label:e?.label||"",subject:pn(e,"rdf:subject"),predicate:pn(e,"rdf:predicate"),object:pn(e,"rdf:object")})});var qj,Hj,Kj,Yj,Eu,S0,dg=O(()=>{Xn();qj="mgx:worldName",Hj="mgx:nodeName",Kj="mgx:playedBy",Yj="mgx:waved",Eu="mgx:invitedBy",S0=Object.freeze([qj,Hj,Kj,Yj,Eu])});function Ra(e){let t=new Set;for(let n of e||[])n?.predicate===Eu&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function Su(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function Ta({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=Su(t,n);if(!o.length)return[];if(typeof s!="function")return[];let r=new Map;for(let a of o){let l=s(a);r.set(a,new Set([...l||[]].map(String)))}return[...new Set((e||[]).map(String).filter(Boolean))].sort().filter(a=>o.every(l=>r.get(l).has(a)))}var ku=O(()=>{dg()});function us(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function t_(e,t){(!e?.class||!Xj.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function n_(e,t){for(let i of["rdf:subject","rdf:predicate","rdf:object"])ei(us(e,i))||t.push(`a Fact needs a non-empty ${i}`);for(let i of["rdf:subject","rdf:object"]){let a=us(e,i);a!==void 0&&Qj.test(a)&&t.push(`a Fact's ${i} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(a)})`)}let n=us(e,"mgx:factProvenance");n!==void 0&&!ei(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";Zj(s)&&!fg.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=us(e,"mgx:sourceId");o!==void 0&&!ei(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=us(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)})`);for(let i of e_){let a=us(e,i);if(a===void 0)continue;let l=a.split(" ").filter(Boolean);l.length||t.push(`${i}, when present, must name at least one record id`);for(let c of l)fg.test(c)||t.push(`${i} must name Fact record ids (got ${JSON.stringify(c)})`)}}function s_(e,t){ei(us(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=us(e,"mgx:ruleKind");if(!n||!pg.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...pg].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of Jj[n])ei(us(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function o_(e){let t=[];return t_(e,t),e?.class==="Fact"&&n_(e,t),e?.class==="Rule"&&s_(e,t),{ok:t.length===0,violations:t}}function ju(e){let t=o_(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 Xj,pg,Jj,Qj,fg,Zj,e_,ei,hg=O(()=>{Xj=new Set(["Utterance","Fact","Session","Source","Rule"]),pg=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),Jj={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"]},Qj=/[.!?]\s+\w/,fg=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,Zj=e=>e.includes("@")||/#v\d/.test(e),e_=["mgx:supersedes","mgx:supersededBy"];ei=e=>typeof e=="string"&&e.trim().length>0});var mg={};Vn(mg,{access:()=>a_,appendFile:()=>u_,basename:()=>j_,copyFile:()=>b_,createInterface:()=>I_,createReadStream:()=>y_,createRequire:()=>r_,createWriteStream:()=>$_,default:()=>O_,dirname:()=>E_,existsSync:()=>v_,fileURLToPath:()=>R_,isAbsolute:()=>k_,join:()=>x_,mkdir:()=>d_,mkdtemp:()=>p_,randomBytes:()=>T_,readFile:()=>c_,readFileSync:()=>i_,readdir:()=>w_,rename:()=>f_,resolve:()=>S_,rm:()=>m_,sep:()=>__,spawnSync:()=>A_,stat:()=>g_,tmpdir:()=>C_,unlink:()=>h_,writeFile:()=>l_});var dt,r_,i_,a_,c_,l_,u_,d_,p_,f_,h_,m_,g_,b_,w_,y_,$_,v_,x_,E_,S_,k_,j_,__,R_,T_,A_,I_,C_,O_,gg=O(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},r_=dt("createRequire"),i_=dt("readFileSync"),a_=dt("access"),c_=dt("readFile"),l_=dt("writeFile"),u_=dt("appendFile"),d_=dt("mkdir"),p_=dt("mkdtemp"),f_=dt("rename"),h_=dt("unlink"),m_=dt("rm"),g_=dt("stat"),b_=dt("copyFile"),w_=dt("readdir"),y_=dt("createReadStream"),$_=dt("createWriteStream"),v_=()=>!1,x_=(...e)=>e.join("/"),E_=e=>String(e).replace(/\/[^/]*$/,""),S_=(...e)=>e.join("/"),k_=e=>String(e).startsWith("/"),j_=e=>String(e).split("/").pop(),__="/",R_=e=>String(e),T_=dt("randomBytes"),A_=dt("spawnSync"),I_=dt("createInterface"),C_=()=>"/tmp",O_={}});var L_,ti,_u=O(()=>{L_=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,ti=class e extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,s=!0,o="Z";if(typeof t=="string"){let r=t.match(L_);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.#t=n,this.#n=s,this.#e=o)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let s=new e(t);return s.#e=n,s}static wrapAsLocalDateTime(t){let n=new e(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#t=!1,n.#e=null,n}}});function N_(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function P_(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 he,co=O(()=>{he=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=C_(n.toml,n.ptr),r=O_(n.toml,s,o);super(`Invalid TOML document: ${t}
87
+ `))}return o}var he,lo=O(()=>{he=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=N_(n.toml,n.ptr),r=P_(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 Aa(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,l=0;for(let c=t;c<e.length;c++)if(n=e[c],r&&(n===`
92
92
  `||n==="\r"&&e[c+1]===`
93
93
  `))l=l&&3;else{if(n<" "&&n!==" "||n==="\x7F")throw new he("control characters are not allowed in strings",{toml:e,ptr:c});if((!l||l===3)&&n===s&&(!r||e[c+1]===s&&e[c+2]===s))return r&&(e[c+3]===s&&c++,e[c+3]===s&&c++),[l?i:i+e.slice(a,c),c+(r?3:1)];if(!l)!o&&n==="\\"&&(i+=e.slice(a,a=c),l=1);else if(l===1)if(n==="x"||n==="u"||n==="U"){let u=0,d=n==="x"?2:n==="u"?4:8;for(let f=0;f<d;f++,c++){let p=e.charCodeAt(c+1),h=p>=48&&p<=57?p-48:p>=65&&p<=70?p-65+10:p>=97&&p<=102?p-97+10:-1;if(h<0)throw new he("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});u=u<<4|h}if(u<0||u>1114111||u>=55296&&u<=57343)throw new he("invalid unicode escape",{toml:e,ptr:c});i+=String.fromCodePoint(u),a=c+1,l=0}else if(n===" "||n===" ")l=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 he("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new he("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new he("unfinished string",{toml:e,ptr:t})}function hg(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=L_.test(e);if(o||N_.test(e)){if(P_.test(e))throw new he("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new he("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new he("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new ei(e);if(!r.isValid())throw new he("invalid value",{toml:t,ptr:n});return r}var L_,N_,P_,ju=O(()=>{ku();co();L_=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,N_=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,P_=/^[+-]?0[0-9_]/});function Ia(e,t=0,n=e.length){let s=e.indexOf(`
95
- `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function sr(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
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 he("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new he("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new he("unfinished string",{toml:e,ptr:t})}function bg(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=M_.test(e);if(o||F_.test(e)){if(D_.test(e))throw new he("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new he("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new he("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new ti(e);if(!r.isValid())throw new he("invalid value",{toml:t,ptr:n});return r}var M_,F_,D_,Ru=O(()=>{_u();lo();M_=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,F_=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,D_=/^[+-]?0[0-9_]/});function Ia(e,t=0,n=e.length){let s=e.indexOf(`
95
+ `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function or(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 he("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function Mn(e,t,n,s){let o;for(;;){for(;(o=e[t])===" "||o===" "||!n&&(o===`
97
+ `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new he("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function Fn(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=sr(e,t)}return t}function mg(e,t,n,s,o=!1){if(!s)return t=Ia(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=Ia(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
99
+ `);)t++;if(s||o!=="#")break;t=or(e,t)}return t}function wg(e,t,n,s,o=!1){if(!s)return t=Ia(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=Ia(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 he("cannot find end of structure",{toml:e,ptr:t})}var Ca=O(()=>{co();});function M_(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(sr(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function ti(e,t,n,s,o){if(s===0)throw new he("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?bg(e,t,s,o):gg(e,t,s,o);if(n){if(c=Mn(e,c),e[c]===",")c++;else if(e[c]!==n)throw new he("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=Aa(e,t);if(n){if(c=Mn(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
- `&&e[c]!=="\r")throw new he("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=mg(e,t,",",n),a=M_(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new he("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=Mn(e,t+a[1]),e[i]===","&&i++),[hg(a[0],e,t,o),i]}var _u=O(()=>{ju();Ru();Ca();co();});function Oa(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new he("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 he("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=Aa(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=Ia(c);if(u>-1)throw new he("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new he("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new he("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(!F_.test(a))throw new he("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,Mn(e,r+1,!0,!0)]}function gg(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=sr(e,t);else if(i!==" "&&i!==" "&&i!==`
103
- `&&i!=="\r"){let a,l=o,c=!1,[u,d]=Oa(e,t-1);for(let h=0;h<u.length;h++){if(h&&(l=c?l[a]:l[a]={}),a=u[h],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||r.has(l[a])))throw new he("trying to redefine an already defined value",{toml:e,ptr:t});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:!0,configurable:!0,writable:!0})}if(c)throw new he("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=ti(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new he("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function bg(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=sr(e,t);else if(r!==" "&&r!==" "&&r!==`
104
- `&&r!=="\r"){let i=ti(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new he("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var F_,Ru=O(()=>{ju();_u();Ca();co();F_=/^[a-zA-Z0-9-_]+[ \t]*$/});function wg(e,t,n,s){let o=t,r=n,i,a=!1,l;for(let c=0;c<e.length;c++){if(c){if(o=a?o[i]:o[i]={},r=(l=r[i]).c,s===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=o.length-1;o=o[u],r=r[u].c}}if(i=e[c],(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:c<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(l=r[i],l.t!==s&&!(s===1&&l.t===3)||(s===2&&(l.d||(l.d=!0,o[i]=[]),o[i].push(o={}),l.c[l.i++]=l={t:1,d:!1,i:0,c:{}}),l.d))return null;if(l.d=!0,s===1)o=a?o[i]:o[i]={};else if(s===0&&a)return null;return[i,o,l.c]}function or(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=Mn(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=Oa(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new he("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=wg(c[0],s,o,l?2:1);if(!u)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});i=u[2],r=u[1],a=c[1]}else{let l=Oa(e,a),c=wg(l[0],r,i,0);if(!c)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=ti(e,l[1],void 0,t,n);c[1][c[0]]=u[0],a=u[1]}if(a=Mn(e,a,!0),e[a]&&e[a]!==`
105
- `&&e[a]!=="\r")throw new he("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=Mn(e,a)}return s}var yg=O(()=>{Ru();_u();Ca();co();});var $g=O(()=>{});var La=O(()=>{yg();$g();ku();co();});var Eg={};Wn(Eg,{CONFIG_FILE:()=>Pa,loadTomlConfig:()=>Tu,mergeEffective:()=>xg,normalizeConfig:()=>vg});async function Tu(e,{file:t}={}){let n=t||J(e,Pa),s;try{s=await ze(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return or(s)}catch(o){throw new Error(`Invalid ${Pa} at ${n}: ${o&&o.message?o.message:o}`)}}async function D_(e,t){let n;if(Array.isArray(e))n=e;else{let o=Qt(t,String(e));n=(await ze(o,"utf8")).split(`
106
- `)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Qt(t,r))}return s}async function vg(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await D_(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Qt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Qt(s,String(n.graph_file))),n.graph_files!==void 0){let w=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=w.map(v=>Qt(s,String(v)))}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||{},l={};a.enabled!==void 0&&(l.enabled=a.enabled),a.limit!==void 0&&(l.limit=a.limit),a.capture_unknown_context!==void 0&&(l.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(l.unknownContextLimit=a.unknown_context_limit),Object.keys(l).length&&(o.seed=l),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.discourse!==void 0&&(o.discourse=n.discourse);let c=n.index||{},u={};c.languages!==void 0&&(u.languages=c.languages),c.exclude!==void 0&&(u.exclude=c.exclude),c.secret_exclude!==void 0&&(u.secretExclude=c.secret_exclude),c.history_depth!==void 0&&(u.historyDepth=c.history_depth),c.include_text!==void 0&&(u.includeText=c.include_text),c.include_structure!==void 0&&(u.includeStructure=c.include_structure),c.respect_gitignore!==void 0&&(u.respectGitignore=c.respect_gitignore),c.markdown_sections!==void 0&&(u.markdownSections=c.markdown_sections),c.vue!==void 0&&(u.vue=c.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},f={};d.score_gap_k!==void 0&&(f.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(f.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(f.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(f.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(f.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(f.beamSearch=d.beam_search),d.beam_width!==void 0&&(f.beamWidth=d.beam_width),d.prose_layers!==void 0&&(f.proseLayers=d.prose_layers);let p=d.expansion||{},h={};p.strategy!==void 0&&(h.strategy=p.strategy),p.nodes!==void 0&&(h.nodes=p.nodes),p.q!==void 0&&(h.q=p.q),p.depth!==void 0&&(h.depth=p.depth),Object.keys(h).length&&(f.expansion=h),Object.keys(f).length&&(o.tune=f);let m=n.telemetry||{};m.enabled!==void 0&&(o.telemetry={enabled:m.enabled});let g=n.memory||{},b={};g.retention_versions!==void 0&&(b.retentionVersions=g.retention_versions),g.backend!==void 0&&(b.backend=g.backend),Object.keys(b).length&&(o.memory=b);let y=[];for(let[w,v]of z_)n[w]&&n[w][v]!==void 0&&y.push(`${w}.${v}`);return o.unwired=y,o}function Na(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:Na(o,r,n)}return n}function xg({args:e={},toml:t=null,defaults:n={}}={}){let s=Na(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Na(o):{},i=Na(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),l={},c={};for(let u of a)u in i?(l[u]=i[u],c[u]="arg"):u in r?(l[u]=r[u],c[u]="tmct.toml"):(l[u]=s[u],c[u]="default");return{effective:l,sources:c}}var Pa,z_,Ma=O(()=>{_t();Ue();La();Pa="tmct.toml";z_=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Ns={};Wn(Ns,{CANONICALISED_FROM_PROP:()=>Wu,CAPABLE_OF_PREDICATE:()=>XR,CHAIN_KEEP_DEPTH:()=>Km,CHAIN_ROLLUP_THRESHOLD:()=>wa,CREATED_AT_PROP:()=>Je,DEFAULT_RETENTION:()=>Nu,FACT_CLASS:()=>St,GROUP_ROLLUP_THRESHOLD:()=>qm,HAS_A_PREDICATE:()=>dr,IN_REPLY_TO_PROP:()=>Bu,MEMORY_DIR_REL:()=>ir,MEMORY_GRAPH_REL:()=>Fu,MEMORY_MANIFEST_REL:()=>Vg,MEMORY_SESSION_CLASS:()=>zu,MULTI_VALUED_PREDICATES:()=>JR,NODE_ID_REL:()=>Ku,OPERATOR_SOURCE_ID:()=>Fa,RETRACTED_AT_PROP:()=>Ea,RETRACTED_COUNT_PROP:()=>mu,RETRACTED_RECORD_IDS_PROP:()=>xa,RETRACTION_CLASS:()=>on,RETRACTION_PREDICATE:()=>va,ROLLUP_COUNT_PROP:()=>Yr,ROLLUP_EARLIEST_PROP:()=>Nn,ROLLUP_KEEP_PER_TYPE:()=>Hm,ROLLUP_LATEST_PROP:()=>Pn,ROLLUP_PRIOR_PROP:()=>tr,ROLLUP_RECORD_IDS_PROP:()=>Kr,ROLLUP_SOURCE_IDS_PROP:()=>er,RULE_CLASS:()=>cr,RULE_KIND_ACTION_CONSTRAINT:()=>td,RULE_KIND_ACTION_EFFECT:()=>ui,RULE_KIND_ACTION_PRECOND:()=>Ga,RULE_KIND_ACTION_SIGNATURE:()=>ed,RULE_KIND_COMPOSE2:()=>ci,RULE_KIND_FILTER:()=>li,RULE_KIND_PROP:()=>ur,RULE_KIND_RECURSIVE:()=>Zu,SAID_IN_SESSION_PROP:()=>Uu,SOURCE_CLASS:()=>ar,SOURCE_RELIABILITY_PROP:()=>_g,STATED_BY_PROP:()=>fn,SYLLOGISE_STATE_REL:()=>Hu,UPDATED_AT_PROP:()=>vs,UTTERANCE_CLASS:()=>Du,admittedNodes:()=>Ra,appendCanonicalisedFromEdges:()=>OR,appendFact:()=>MR,appendFacts:()=>po,appendRetractions:()=>qR,appendRule:()=>qa,appendUtterance:()=>CR,appendUtterances:()=>Qg,applySeedPayload:()=>Ag,attachFactHeads:()=>Fg,chainRollupIdFor:()=>lu,cloneMemoryPayload:()=>Ig,closeSqliteMemoryStore:()=>Bg,createInMemoryStore:()=>ii,createSqliteMemoryStore:()=>Ug,emptyMemory:()=>ri,factGroupId:()=>Pt,factHeadsOf:()=>Dg,factIdForTriple:()=>me,factRecordIdForTag:()=>V_,factRecordIdsFor:()=>uo,findContradictions:()=>ib,findRuleByName:()=>nd,findRulesByName:()=>BR,headRollupIdFor:()=>cu,isChainRollupId:()=>nr,isHeadRollupId:()=>Is,isMemoryOrSqliteHandle:()=>Vu,isRetractionId:()=>bu,isRollupId:()=>ya,loadMemory:()=>Ct,loadNodeId:()=>$R,loadSyllogiseState:()=>wR,normFactPredicate:()=>is,normFactTerm:()=>Q,openConfiguredMemoryBackend:()=>Ls,openExistingMemoryBackend:()=>nR,openMemoryBackend:()=>qu,peersToConvince:()=>xu,provSourceClassFor:()=>ER,provenanceTagToSource:()=>Hn,readFactRows:()=>vt,readObjectSupersessions:()=>Z_,readOnlyMemorySnapshot:()=>sR,readRetractions:()=>VR,readRuleRows:()=>sd,removeFacts:()=>GR,resolveMemoryGraphFile:()=>ni,resolveRelationChase:()=>od,resolveRelationChaseReverse:()=>rb,retirableRetractions:()=>HR,retireRetractions:()=>KR,retractedAtOf:()=>ao,retractedRecordIds:()=>io,retractionFromWire:()=>_a,retractionIdFor:()=>gu,retractionScopeOf:()=>wu,retractionWireFact:()=>ja,saveNodeId:()=>vR,saveSyllogiseState:()=>yR,snapshotMemory:()=>fR,stableRecordIds:()=>Ta});function ri(){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:W_.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function ni(e,t=null){if(Os(e)||Dn(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?J(e,Fu):J(e,ir,`graph.v${t}.json`)}function Os(e){return!!e&&typeof e=="object"&&e.backend===Gu}function Dn(e){return!!e&&typeof e=="object"&&e.backend===Tg}function Vu(e){return Os(e)||Dn(e)}function ii(){return{backend:Gu,payload:ri()}}function Ag(e,t){t&&(e.payload={...e.payload,...t})}function Ig(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function Cg(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Xu(Hn(t));if(n)return n}return{id:ls,type:""}}function Pt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function V_(e,t){return`${e}@${Og(t).id}`}function Og(e){return Xu(Hn(e))||{id:ls,type:""}}function Lg(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=Og(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(ls,{sourceId:ls,sourceType:"",tags:[]}),[...t.values()]}function Ou(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 lr(e,t="",n=Math.max){return Ou(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function q_(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 Ng(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=Cg(n("mgx:factProvenance")),o=n(ai).split(" ").filter(Boolean)[0]||null,r=Xr(e.id);return[e.id,Pt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(lo)||s.id,r||s.type,Number(n(r?tr:Oo))||0,n(Je),n(si)||null,o,t]}function H_(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(St))return;let t=e.prepare(Pg);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(St))t.run(...Ng(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function K_(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Fg(e,t){return e&&t&&(e[Mg]=t),e}function X_(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 zg(e,t,n,s){let o=e.prepare(Y_),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=us();for(let a of n){let l=t.groups.get(a);if(!l?.length){r.run(a),s?.delete(a);continue}let c=K_(id(a,l,t).assertions),u=Jp(c).score;o.run(a,u,JSON.stringify(c),i),s?.set(a,{trustBase:u,inputs:c})}}function J_(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(St))return;let n=rd(Wg(e));t.exec("BEGIN IMMEDIATE");try{zg(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function Q_(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=us();for(let i of n){let[a,l]=i.split("\0");if(ga(l)!==Hr)continue;let c=t.groupsByPair.get(i)||[];if(c.length<2)continue;let u=c.map(p=>{let h=id(p,t.groups.get(p),t);return h.trust=Ii(h.assertions).score,h});if(new Set(u.map(p=>p.object)).size<2)continue;let d=au(u,Hr)?.winner?.id;if(!d)continue;let f=s.get(a,l);f?.to_id!==d&&o.run(a,l,(f?.ord??-1)+1,f?.to_id||"",d,r)}}function Z_(e,{subject:t,predicate:n}={}){if(!Dn(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 tR(){if(kg)return;kg=!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 Ug(e){tR();let{DatabaseSync:t}=await Promise.resolve().then(()=>(fg(),pg)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(G_),H_(n);let s={backend:Tg,db:n,dbPath:e};return J_(s),s}function Bg(e){Dn(e)&&e.db.close()}async function qu(e,t){if(t===Gu)return{dir:ii(),close:async()=>{}};let n=J(e,".tmct","memory","graph.sqlite"),s=r=>kc(r).then(()=>!0,()=>!1);!await s(n)&&await s(J(e,Fu))&&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 _n($e(n),{recursive:!0});let o=await Ug(n);return{dir:o,close:async()=>Bg(o)}}async function nR(e,t=""){if(!e||typeof e!="string")return null;let n=J(e,".tmct","memory","graph.sqlite");try{await kc(n)}catch{return null}return qu(e,t)}async function sR(e){if(!e)return null;let t=ii();return Ag(t,Ig(await Ct(e))),t}async function Ls(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Ma(),Eg));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return qu(e,n)}function oR(e){let t=e.db.prepare("PRAGMA data_version").get()?.data_version;return e.cachedPayload&&e.cachedDataVersion!==t&&(e.cachedPayload=null),e.cachedPayload||(e.cachedPayload=Wg(e),e.cachedFactHeads=X_(e.db),e.cachedDataVersion=t),Fg(kn(e.cachedPayload),e.cachedFactHeads)}function Wg(e){let t=e.db,n=ri(),s=(a,l)=>{let c=t.prepare("SELECT v FROM meta WHERE k = ?").get(a);return c?JSON.parse(c.v):l},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(a=>JSON.parse(a.json)),r=t.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid"),i=t.prepare("SELECT prop, predicate, count FROM relations ORDER BY ord").all().map(a=>({predicate:a.predicate,prop:a.prop,count:a.count,examples:r.all(a.prop).map(l=>{let c={subject:l.subject,object:l.object,subjectLabel:l.subject_label,objectLabel:l.object_label};return l.extra&&Object.assign(c,JSON.parse(l.extra)),c})}));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:i,individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function rR(e,t){let n=kn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function iR(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function aR(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 cR(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,kn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function lR(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function uR(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function dR(e,t){let n=e.db,s=ri(),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=kn(t.generated_at??s.generated_at),o.memory=kn(t.memory??s.memory),o.prefixes=kn(t.prefixes??s.prefixes),o.vocabulary=kn(t.vocabulary??s.vocabulary),o.classes=kn(t.classes??s.classes),o.proseIndex=kn(t.proseIndex??s.proseIndex));let i=n.prepare("SELECT ord, json FROM individuals WHERE id = ?"),l=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM individuals").get().m+1,c=n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),u=n.prepare(Pg),d=new Set,f=new Set,p=new Set;for(let E of t.individuals||[]){d.add(E.id);let R=JSON.stringify(E),j=i.get(E.id);if(j&&j.json===R)continue;let A=j?j.ord:l++;c.run(E.id,A,E.class??null,E.label??null,R),E.class===St&&(u.run(...Ng(E,R)),f.add(Pt(E.id)),p.add(Lu(oi(E,"subject"),oi(E,"predicate")))),o&&rR(o,E)}let h=n.prepare("DELETE FROM individuals WHERE id = ?"),m=n.prepare("DELETE FROM facts WHERE id = ?"),g=n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?");for(let E of n.prepare("SELECT id FROM individuals").all()){if(d.has(E.id))continue;let R=g.get(E.id);R&&(f.add(R.triple_hash),p.add(Lu(R.subject,R.predicate))),h.run(E.id),m.run(E.id)}o&&iR(o,d);let b=n.prepare("SELECT ord FROM relations WHERE prop = ?"),w=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,v=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),_=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),$=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),x=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),S=new Set;for(let E of t.objectProperties||[]){S.add(E.prop);let R=_.all(E.prop),j=new Map(R.map(z=>[`${z.subject}\0${z.object}`,z])),A=new Set,F=o?aR(o,E.prop):null;for(let z of E.examples||[]){let K=`${z.subject}\0${z.object}`;A.add(K);let ce=Object.keys(z).filter(G=>!eR.has(G)),Z=ce.length?JSON.stringify(Object.fromEntries(ce.map(G=>[G,z[G]]))):null,D=j.get(K);D&&(D.subject_label??null)===(z.subjectLabel??null)&&(D.object_label??null)===(z.objectLabel??null)&&(D.extra??null)===(Z??null)||($.run(E.prop,z.subject,z.object,z.subjectLabel??null,z.objectLabel??null,Z),F&&cR(F,z,ce))}for(let z of j.keys()){if(A.has(z))continue;let[K,ce]=z.split("\0");x.run(E.prop,K,ce)}F&&lR(F,A);let T=Number.isFinite(E.count)?E.count:(E.examples||[]).length,M=b.get(E.prop)?.ord??w++;v.run(E.prop,M,E.predicate??null,T),F&&(F.predicate=E.predicate??null,F.count=T)}for(let E of n.prepare("SELECT prop FROM relations").all())S.has(E.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run(E.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run(E.prop));if(o&&uR(o,S),f.size){let E=rd(t);zg(n,E,f,e.cachedFactHeads),Q_(n,E,p)}n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}async function Gg(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await $r(n,t),await Ei(n,e)}async function Ua(e,t){await Gg(e,JSON.stringify(t))}async function fR(e,{retentionVersions:t}={}){if(Vu(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a memory/sqlite handle has no on-disk graph.json to snapshot");let n=ni(e),s;try{s=await ze(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=pR(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Nu}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Nu);let i=r.version,a=ni(e,i);await _n($e(a),{recursive:!0}),await Gg(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await jc(ni(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await Ua(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Ct(e){if(Os(e))return Au(e.payload);if(Dn(e))return Au(oR(e));let t;try{t=await ze(Cu(e),"utf8")}catch(n){if(n?.code==="ENOENT")return ri();throw n}return Au(JSON.parse(t))}function mR(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==St||!hR.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Ho(o("subject"),o("predicate"),o("object"));r!==s.id&&(t.set(s.id,r),s.id=r)}if(!t.size)return 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 gR(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(l=>l?.prop===fn),n=new Map;for(let l of t?.examples||[]){if(!l?.subject)continue;let c=n.get(l.subject);c?c.push(l):n.set(l.subject,[l])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let l of e.individuals){if(l?.class!==St||String(l.id||"").includes("@")){a.push(l);continue}let c=w=>(l.attributes||[]).find(v=>v?.prop===w)?.value||"",u=c("rdf:subject"),d=c("rdf:predicate"),f=c("rdf:object");if(!u||!d||!f){a.push(l);continue}let p=Ho(u,d,f),h=c(Je),m=c("mgx:factProvenance"),g=n.get(l.id)||[],b=m?Lg(m):[];for(let w of g)b.some(v=>v.sourceId===w.object)||b.push({sourceId:w.object,sourceType:"",tags:[]});b.length||b.push({sourceId:ls,sourceType:"",tags:[]});let y=[];for(let w of b){let v={id:`${p}@${w.sourceId}`,label:l.label,class:St,derived_from:kn(l.derived_from)||[],mentions:kn(l.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:f},{prop:Je,key:"createdAt",value:lr(w.tags,h,Math.min)||h||us()},{prop:lo,key:"sourceId",value:w.sourceId},...w.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.tags.join(" | ")}]:[],...c("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:c("mgx:hasProseTokens")}]:[],...c("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:c("mgx:factQuantifier")}]:[],...w.sourceType==="entailed"&&c("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:c("mgx:factJustification")}]:[]]};if(a.push(v),r.push(v),y.push(v.id),w.sourceId!==ls){let _=g.find($=>$?.object===w.sourceId);i.push({..._||{},subject:v.id,object:w.sourceId,subjectLabel:v.label,objectLabel:Ju(w.sourceId)})}}s.add(l.id),o.set(l.id,y)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(l=>!s.has(l?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:fn,count:i.length,examples:i}));for(let l of e.objectProperties||[]){if(l?.prop===fn||!l?.examples?.length)continue;let c=[];for(let u of l.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],f=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let p of d)for(let h of f)c.push({...u,subject:p,object:h})}l.examples=c,l.count=c.length}e.individuals=a,Kg(e);for(let l of r)rr(e,l);return zn(e),e}async function bR(e,t){if(Os(e)){e.payload=t;return}if(Dn(e)){dR(e,t);return}await _n($e(Cu(e)),{recursive:!0}),await Ua(Cu(e),t)}async function wR(e){if(Os(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Dn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(qg);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(J(e,Hu),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function yR(e,t){if(Os(e)){e.syllogiseState=structuredClone(t);return}if(Dn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(qg,JSON.stringify(t));return}let n=J(e,Hu);await _n($e(n),{recursive:!0}),await Ua(n,t)}async function $R(e){if(Os(e))return e.nodeId||null;if(Dn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Hg);return t?.v&&JSON.parse(t.v).nodeId||null}try{return JSON.parse(await ze(J(e,Ku),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function vR(e,t){if(Os(e)){e.nodeId=t;return}if(Dn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Hg,JSON.stringify({nodeId:t}));return}let n=J(e,Ku);await _n($e(n),{recursive:!0}),await Ua(n,{nodeId:t})}function Kg(e){let t=new Map,n=new Map,s=new Map,o=new Map,r=new Map;for(let a of e.individuals||[])if(a?.id&&(t.set(a.id,a),a.class===ar&&n.set(a.id,a),a.class===on&&Mu(r,a),a.class===St)){let l=Pt(a.id),c=o.get(l);c?c.push(a.id):o.set(l,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===fn);for(let a of i?.examples||[]){if(!a?.subject)continue;let l=s.get(a.subject);l?l.push(a.object):s.set(a.subject,[a.object])}return e[Pu]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[Pu]}function Mu(e,t){let n=Pt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function xR(e,t){let n=Mt(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===on&&Pt(s.id)===t)}async function ps(e,t){let n=await Ct(e);Kg(n);let s=await t(n)??n;return _R(s),TR(s),s.proseIndex=Dp(s.individuals),await bR(e,s),s}function Yu(e,t){return e?.attributes?.find(n=>n?.prop===Je)?.value||t||us()}function hn(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Xu(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Fa}:${e.sessionId}`:Fa,type:"operator"};case"teach":return{id:e.sessionId?`${Iu}:${e.sessionId}`:Iu,type:"teach"};case"teachNode":return{id:`${Rg}:${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}:${e.article}`,type:"reference"};case"referenceLive":return{id:`src:reference:${e.pack}:${e.article}`,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:${Gr(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 ER(e){return Mc[e]||null}function SR(e,t,n){let s=Xu(t);if(!s)return null;let o=Mt(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=Yu(r,t?.createdAt||n),a={id:s.id,label:Ju(s.id),class:ar,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Je,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},l=ds(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function Wa(e){let t=Mt(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===ar&&(n[s.id]=s);return n}function Yg(e,t){let n=Mt(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===fn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function kR(e,t,n=Date.now(),s={}){let o=Yg(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Je)?.value||"",{score:i,inputs:a}=Xp({sourceIds:o,createdAt:r},Wa(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});hn(t,Oo,"trustScore",String(i)),hn(t,Ti,"trustInputs",JSON.stringify(a)),hn(t,vs,"updatedAt",new Date(n).toISOString())}function jR(e,t,n=Date.now(),s={}){let[o]=Yg(e,t.id),r=o?Wa(e)[o]:null,i=(r?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||"",a=Ai(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let c=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*c))}let l=(t.attributes||[]).find(c=>c?.prop===Je)?.value||"";hn(t,Oo,"trustScore",String(a)),hn(t,Ti,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:l})),hn(t,vs,"updatedAt",new Date(n).toISOString())}function Xg(e,t,n,s){t?.class===St?jR(e,t,n,s):kR(e,t,n,s)}function rr(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Je)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Hn(i);if(!a)continue;let l=SR(e,a,r);l&&za(e,{predicate:"statedBy",prop:fn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:Ju(l)})}Xg(e,t,n,s)}function _R(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===fn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==St||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(rr(e,r,o),s=!0);s&&zn(e)}function TR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=vt(e),n=new Set;for(let a of ib(e))for(let l of a)n.add(l.id);let s=new Map;for(let a of t)for(let l of a.sourceIds){if(!RR(l))continue;let c=s.get(l)||{factsAsserted:0,factsContradicted:0};c.factsAsserted+=1,n.has(a.id)&&(c.factsContradicted+=1),s.set(l,c)}if(!s.size)return;let o=Mt(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(hn(c,_g,"sourceReliability",String(Qp(l))),hn(c,vs,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===fn),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let l=o?o.individualsById.get(a):e.individuals.find(c=>c?.id===a);l&&Xg(e,l)}}function AR(e,t,n){if(!ya(n?.id))return n;let s=Xr(n.id);if(!s)return fu(t,n);let o=Wa(e);return fu(t,n,{priorFor:r=>Ai(s,o[r])})}function jg(e,t,n){return n?.class===on?ag(t,n):AR(e,t,n)}function ds(e,t){let n=Mt(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,jg(e,o,t)),o.class===on&&Mu(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===on&&Mu(n.retractionsByGroup,t),t.class===St){let r=Pt(t.id),i=n.factRecordsByGroup.get(r);i?i.push(t.id):n.factRecordsByGroup.set(r,[t.id])}return t}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=jg(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function za(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(l=>l?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===fn?Mt(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||us()}),o.count=o.examples.length,l?l.push(s.object):r.statedByBySubject.set(s.subject,[s.object]);return}}let a=(o.examples||[]).find(l=>l?.subject===s.subject&&l?.object===s.object)?.createdAt||s.createdAt||us();if(o.examples=(o.examples||[]).filter(l=>!(l?.subject===s.subject&&l?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r){let l=r.statedByBySubject.get(s.subject)||[];l.includes(s.object)||l.push(s.object),r.statedByBySubject.set(s.subject,l)}}function zn(e){let t=[zu,Du,St,ar,cr];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 IR(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:zu,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Je,key:"createdAt",value:n||us()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Jg(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!B_.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 c=String(s||""),u=rs(n),d=`utt:${o}#${c}#${t}`,f=Ba(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=Ri({doc:u}),h=e.individuals.find(y=>y?.id===d),m=Yu(h,l||c),g={id:d,label:f,class:Du,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:c},{prop:Je,key:"createdAt",value:m},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};ds(e,g);let b=IR(e,o,r);if(za(e,{predicate:"saidInSession",prop:Uu},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&za(e,{predicate:"inReplyTo",prop:Bu},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function CR(e,t){let n;return await ps(e,s=>{n=Jg(s,t),zn(s)}),{id:n}}async function Qg(e,t){let n=[];return t?.length?(await ps(e,s=>{for(let o of t)n.push(Jg(s,o));zn(s)}),{ids:n}):{ids:n}}async function OR(e,t){t?.length&&await ps(e,n=>{for(let s of t)for(let o of uo(n,s.factId))za(n,{predicate:"canonicalisedFrom",prop:Wu},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function uo(e,t){let n=Mt(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===St&&Pt(s.id)===t).map(s=>s.id)}function Zg(e,t,n,s=""){let o=Lg(n);if(o.length===1&&o[0].sourceId===ls&&uo(e,t).length)return[];let r=xR(e,t);if(r.length&&(o=o.filter(a=>!ka(r,`${t}@${a.sourceId}`,lr(a.tags,s))),!o.length))return o;let i=LR(e,t);return i.length?o.filter(a=>!sg(i,a.sourceId)):o}function LR(e,t){let n=Mt(e),s=n?n.factRecordsByGroup.get(t):uo(e,t),o=[];for(let r of s||[]){if(!Is(r))continue;let i=Cs(e,r);i&&o.push(i)}return o}function eb(e,t,{quantifier:n,environments:s}){let o=uo(e,t).map(i=>Cs(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===ai)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(l=>l?.prop==="mgx:factJustification"));for(let a of i.length?i:o)hn(a,"mgx:factJustification","justification",s.map(l=>l.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(hn(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function NR(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Da)?.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 tb(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:l,createdAt:c,observedAt:u,quantifier:d,environments:f}=t,p=`${n}@${l.sourceId}`,h=Mt(e),m=h?h.individualsById.get(p):e.individuals.find(R=>R?.id===p),g=R=>(m?.attributes||[]).find(j=>j?.prop===R)?.value||"",b=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Ou(l.tags),observedAt:u},w=null,v=l.tags,_=y.assertedAt||c||us(),$=u,x=[],S=d;if(m){let R={assertedAt:Ou(b),observedAt:g(si)};q_(y,R)?(w={head:m,id:`${p}#v${NR(m)}`},x=[w.id]):(v=[...new Set([...b,...l.tags])],_=g(Je)||_,$=u||g(si),x=g(Da).split(" ").filter(Boolean)),S=d||g("mgx:factQuantifier")}return{candidate:{id:p,label:i,class:St,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:Je,key:"createdAt",value:_},{prop:lo,key:"sourceId",value:l.sourceId},...v.length?[{prop:"mgx:factProvenance",key:"provenance",value:v.join(" | ")}]:[],...$?[{prop:si,key:"observedAt",value:$}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...S?[{prop:"mgx:factQuantifier",key:"quantifier",value:S}]:[],...f?[{prop:"mgx:factJustification",key:"justification",value:f.map(R=>R.join(" ")).join(" | ")}]:[],...x.length?[{prop:Da,key:"supersedes",value:x.join(" ")}]:[]]},demote:w}}function PR(e,t){let n=`${t}@${ls}`,s=Mt(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 nb(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${ls}`)||PR(e,Pt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};hn(o,ai,"supersededBy",t.id),ds(e,o),s.push(o.id)}return ds(e,t),s.push(t.id),s}function Cs(e,t){let n=Mt(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Qu(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=Mt(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Pt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function sb(e,t){let n=Mt(e),s=(n?n.factRecordsByGroup.get(t):uo(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=Cs(e,u);if(!d)continue;let f=y=>(d.attributes||[]).find(w=>w?.prop===y)?.value||"";if(Is(u)){i.set(Xr(u),d);continue}if(nr(u)){a.set(f(lo),d);continue}let p=f("mgx:factProvenance"),h=Cg(p),m=p.split(" | ").filter(Boolean),g={id:u,sourceId:f(lo)||h.id,assertedAt:lr(m,f(Je)),record:d};if(f(ai)){let y=r.get(g.sourceId);y?y.push(g):r.set(g.sourceId,[g]);continue}if(!h.type)continue;let b=o.get(h.type);b?b.push(g):o.set(h.type,[g])}let l=Wa(e),c=[];for(let[u,d]of o){let f=tg({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:p=>Ai(u,l[p])});if(f){ds(e,f.rollup),c.push(...f.absorbed);for(let p of f.absorbedSourceIds){for(let m of r.get(p)||[])c.push(m.id);r.delete(p);let h=a.get(p);h&&c.push(h.id),a.delete(p)}}}for(let[u,d]of r){let f=ng({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!f)continue;ds(e,f.rollup),c.push(...f.absorbed);let p=Cs(e,f.rewire);p&&hn(p,Da,"supersedes",f.rollup.id)}return c}async function MR(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",premiseTrusts:l,ruleConfidence:c}={}){let u=Q(t),d=is(n),f=Q(s);if(!u||!d||!f)throw new Error("a fact needs subject, predicate and object");let p=Ho(u,d,f),h=`${u} ${d} ${f}`,m=Ri({doc:h}),g=rs(a);return await ps(e,async b=>{let y=Zg(b,p,rs(o),r);for(let w of y.length?[]:eb(b,p,{quantifier:g}))rr(b,Cs(b,w),void 0,{premiseTrusts:l,ruleConfidence:c});for(let w of y){let v=tb(b,{groupId:p,s:u,p:d,o:f,label:Ba(h),tokens:m,group:w,createdAt:r,observedAt:i,quantifier:g});await Su(v.candidate);for(let _ of nb(b,v))rr(b,Cs(b,_),void 0,_===v.candidate.id?{premiseTrusts:l,ruleConfidence:c}:void 0)}Qu(b,sb(b,p)),zn(b)}),{id:p}}function FR(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 po(e,t){let n=[],s=0;for(let r of t||[]){let i=Q(r?.subject),a=is(r?.predicate),l=Q(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:Ho(i,a,l),s:i,p:a,o:l,text:c,tokens:Ri({doc:c}),provenance:rs(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:rs(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:FR(r?.justification)})}let o=[];return n.length?(await ps(e,r=>{let i=[],a=new Set,l=new Map;for(let u of n){let d=Zg(r,u.id,u.provenance,u.createdAt);for(let f of d.length?[]:eb(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(f)||(a.add(f),i.push(f)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(f,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let f of d){let p=tb(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:Ba(u.text),tokens:u.tokens,group:f,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments});for(let h of nb(r,p))a.has(h)||(a.add(h),i.push(h));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(p.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)rr(r,Cs(r,u),void 0,l.get(u));let c=[];for(let u of new Set(o))c.push(...sb(r,u));Qu(r,c),zn(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function qa(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=ob[n];if(!i)throw new Error(`a rule kind must be one of ${DR.join(", ")}, got ${JSON.stringify(n)}`);let a=Q(t);if(!a)throw new Error("a rule needs a name");let l=zR[n]||new Set,c=i.map(([p])=>Q(s?.[p])),u=i.filter(([p],h)=>!l.has(p)&&!c[h]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([p])=>p).join(" + ")}`);if(n===ui){let p=c[i.findIndex(([m])=>m==="objectRole")],h=c[i.findIndex(([m])=>m==="value")];if(!p&&!h)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=UR(n,a,c),f=Ba(`${a} = ${n}(${c.join(", ")})`);return await ps(e,async p=>{let h=p.individuals.find(w=>w?.id===d),m=h?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...m.split(" | "),rs(o)].filter(Boolean))],b=Yu(h,r),y={id:d,label:f,class:cr,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Va,key:"ruleName",value:a},{prop:ur,key:"ruleKind",value:n},...i.map(([w,v],_)=>({prop:v,key:w,value:c[_],skip:!c[_]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...v})=>v),{prop:Je,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await Su(y),ds(p,y),rr(p,p.individuals.find(w=>w?.id===d)),zn(p)}),{id:d}}function nd(e,t){let n=Q(t);return(e?.individuals||[]).find(s=>s?.class===cr&&(s.attributes||[]).find(o=>o?.prop===Va)?.value===n)}function BR(e,t){let n=Q(t),s=o=>(o.attributes||[]).find(r=>r?.prop===ur)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===cr&&(o.attributes||[]).find(r=>r?.prop===Va)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function sd(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==cr)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(ur),r=ob[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Va)||"",kind:o,slots:i,provenance:s("mgx:factProvenance")||""})}return t.sort((n,s)=>n.name.localeCompare(s.name)||n.kind.localeCompare(s.kind)||String(n.id).localeCompare(String(s.id))),t}async function od(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:l,byTrust:c,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:f}=o,p=String(t||"").trim().toLowerCase(),h=l(Q,n),m=l(Q,s),g=r(p).filter(w=>h.has(w.fact.subject)&&m.has(w.fact.object));if(g.length){let w=g.slice().sort((v,_)=>c(v.fact,_.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map(v=>`${a(v)}${v.provenance?` (source: ${v.provenance})`:""}`)]}}let b=nd(e,p),y=b?.attributes?.find(w=>w.prop===ur)?.value;if(b&&y===ci){let w=b.attributes.find(F=>F.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(F=>F.prop==="mgx:ruleBase2")?.value,_=Q(n),$=Q(s);if(!w||!v||!_||!$)return null;let R=f({entity:_,hopsTaken:0},F=>F.hopsTaken===2&&F.entity===$,F=>{if(F.hopsTaken>=2)return[];let T=F.hopsTaken===0?w:v;return r(T).filter(M=>M.fact.subject===F.entity).map(M=>({action:M,nextState:{entity:M.fact.object,hopsTaken:F.hopsTaken+1}}))},{maxDepth:2,stateKey:F=>`${F.entity}#${F.hopsTaken}`});if(!R)return null;let j=new Set,A=[];for(let F of R.actions){A.push(i(F.fact));for(let T of F.aliasFacts){let M=T.id||`${T.subject}|${T.predicate}|${T.object}`;j.has(M)||(j.add(M),A.push(`${a(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{citation:A}}if(b&&y===li){let w=b.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(E=>E.prop==="mgx:ruleFilterProperty")?.value;if(!w||!v)return null;let _=await od(e,w,n,s,o);if(!_)return null;let $=Q(n),x=Q(v),S=u.find(E=>E.predicate===d&&E.subject===$&&Q(E.object)===x);return S?{citation:[..._.citation,i(S)]}:null}return null}async function rb(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:l,rows:c,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,f=String(t||"").trim().toLowerCase(),p=a(Q,n),h=o(f).filter(b=>p.has(b.fact.object));if(h.length){let b=new Map;for(let y of h)b.has(y.fact.subject)||b.set(y.fact.subject,[]),b.get(y.fact.subject).push(y);return[...b.entries()].map(([y,w])=>{let v=w.slice().sort((_,$)=>l(_.fact,$.fact))[0];return{subject:y,citation:[r(v.fact),...v.aliasFacts.map(_=>`${i(_)}${_.provenance?` (source: ${_.provenance})`:""}`)]}})}let m=nd(e,f),g=m?.attributes?.find(b=>b.prop===ur)?.value;if(m&&g===ci){let b=m.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=m.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=Q(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},x=>{if(x.hopsTaken>=2)return[];let S=x.hopsTaken===0?y:b;return o(S).filter(E=>E.fact.object===x.entity).map(E=>({action:E,nextState:{entity:E.fact.subject,hopsTaken:x.hopsTaken+1}}))},{maxDepth:2,stateKey:x=>`${x.entity}#${x.hopsTaken}`}).filter(x=>x.node.hopsTaken===2).map(({node:x,path:S})=>{let E=new Set,R=[];for(let j of S.actions.slice().reverse()){R.push(r(j.fact));for(let A of j.aliasFacts){let F=A.id||`${A.subject}|${A.predicate}|${A.object}`;E.has(F)||(E.add(F),R.push(`${i(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{subject:x.entity,citation:R}})}if(m&&g===li){let b=m.attributes.find($=>$.prop==="mgx:ruleBase1")?.value,y=m.attributes.find($=>$.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await rb(e,b,n,s),v=Q(y),_=[];for(let $ of w){let x=Q($.subject),S=c.find(E=>E.predicate===u&&E.subject===x&&Q(E.object)===v);S&&_.push({subject:$.subject,citation:[...$.citation,r(S)]})}return _}return[]}function vt(e,t={}){let n=rd(e),s=Dg(e),o=[];for(let[r,i]of n.groups){let a=id(r,i,n),l=s?.get(r);a.trust=Ii(l?l.inputs:a.assertions,t).score,o.push(a)}return o}function rd(e){let t=e?.individuals||[],n=new Map(t.filter(l=>l?.class===ar).map(l=>[l.id,l])),s=(e?.objectProperties||[]).find(l=>l?.prop===fn),o=new Map;for(let l of s?.examples||[])o.has(l.subject)||o.set(l.subject,[]),o.get(l.subject).push(l.object);let r=new Map,i=new Map;for(let l of t){if(l?.class===on){let d=Pt(l.id),f=i.get(d);f?f.push(l):i.set(d,[l]);continue}if(l?.class!==St||(l.attributes||[]).some(d=>d?.prop===ai)||nr(l.id))continue;let c=Pt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}for(let[l,c]of i){let u=r.get(l);if(!u)continue;let d=u.filter(f=>!ka(c,f.id,lr(Fn(f,"mgx:factProvenance").split(" | ").filter(Boolean),Fn(f,Je))));d.length!==u.length&&(d.length?r.set(l,d):r.delete(l))}let a=new Map;for(let[l,c]of r){c.sort((f,p)=>f.id<p.id?-1:f.id>p.id?1:0);let u=Lu(oi(c[0],"subject"),oi(c[0],"predicate")),d=a.get(u);d?d.push(l):a.set(u,[l])}return{groups:r,groupsByPair:a,statedByRecord:o,sourceTypeOf:l=>(n.get(l)?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||""}}function id(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=Fn,i=oi,a=[],l=[],c=[],u=new Set,d=[],f=new Set,p="";for(let g of t){if(Is(g.id)){let x=Xr(g.id),S=$a(g);for(let E of S)l.includes(E)||(l.push(E),x&&c.push(x));a.push({id:g.id,sourceId:"",sourceType:x,provenance:"",createdAt:r(g,Nn),ownTrust:Number(r(g,tr))||0,assertedAt:r(g,Pn),rollup:{count:Number(r(g,Yr))||S.length,sourceIds:S,earliest:r(g,Nn),latest:r(g,Pn)}});continue}let b=r(g,"mgx:factProvenance").split(" | ").filter(Boolean);for(let x of b)u.add(x);let[y]=s.get(g.id)||[],w=y||r(g,lo),v=o(w);y&&!l.includes(y)&&(l.push(y),v&&c.push(v));let _=r(g,Je),$=r(g,si);a.push({id:g.id,sourceId:w,sourceType:v,provenance:b.join(" | "),createdAt:_,...$?{observedAt:$}:{},ownTrust:Number(r(g,Oo))||0,assertedAt:lr(b,_)}),p=p||i(g,"quantifier");for(let x of i(g,"justification").split(" | ")){let S=x.split(" ").filter(Boolean);if(!S.length)continue;let E=S.join(" ");f.has(E)||(f.add(E),d.push(S))}}let h=[],m=new Set;for(let g of d)for(let b of g)m.has(b)||(m.add(b),h.push(b));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:p,sourceIds:l,sourceTypes:c,environments:d,justification:h,assertions:a}}function WR(e){let t=Fn(e,lo);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)}async function GR(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||us();return await ps(e,l=>{let c=new Set,u=new Set,d=new Map;l.individuals=(l.individuals||[]).filter(f=>{if(f?.class!==St)return!0;let p=Pt(f.id),h=o.has(f.id)?f.id:o.has(p)?p:"";if(!h)return!0;u.add(h),c.add(f.id);let m=WR(f),g=`${p}\0${m}`,b=Fn(f,"mgx:factProvenance"),y=d.get(g);return y?(y.ids.push(f.id),b&&y.tags.push(b)):d.set(g,{groupId:p,sourceId:m,ids:[f.id],tags:b?[b]:[],template:{label:f.label||"",subject:Fn(f,"rdf:subject"),predicate:Fn(f,"rdf:predicate"),object:Fn(f,"rdf:object")}}),!1});for(let f of u)r.push(f);if(r.length){for(let f of c)i.push(f);for(let f of l.objectProperties||[]){let p=f.examples||[];f.examples=p.filter(h=>!c.has(h?.subject)&&!c.has(h?.object)),f.count=f.examples.length}for(let f of d.values()){let p=ig({groupId:f.groupId,sourceId:f.sourceId,recordIds:f.ids,retractedAt:a,template:f.template,provenance:[...f.tags,n].filter(Boolean).join(" | ")});p&&ds(l,p)}zn(l)}}),{removed:r,records:i}}function VR(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==on)continue;let s=ja(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function qR(e,t){let n=[];for(let o of t||[]){let r=_a(o);r&&n.push(r)}let s=[];return n.length?(await ps(e,o=>{let r=new Map;for(let a of n){let l=ds(o,a),c=Pt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}let i=new Set;for(let[a,l]of r)for(let c of uo(o,a)){let u=Cs(o,c);if(!u)continue;let d=Fn(u,"mgx:factProvenance").split(" | ").filter(Boolean);ka(l,c,lr(d,Fn(u,Je)))&&i.add(c)}if(i.size){Qu(o,i);for(let a of i)s.push(a)}zn(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function HR(e,{self:t="",acknowledgedBy:n=null}={}){let s=Ra(vt(e)),o=[];for(let r of e?.individuals||[])r?.class===on&&r.id&&o.push(r.id);return{roster:s,retirable:Ta({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function KR(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await ps(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==on||!n.has(a.id)?!0:(r.add(a.id),!1)),!r.size)return;for(let a of r)s.push(a);let i=Mt(o);if(i)for(let a of r){i.individualsById.delete(a);let l=Pt(a),c=(i.retractionsByGroup.get(l)||[]).filter(u=>!r.has(u.id));c.length?i.retractionsByGroup.set(l,c):i.retractionsByGroup.delete(l)}zn(o)}),{retired:s}):{retired:s}}function ib(e,{floor:t=YR}={}){let n=vt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(ga(r.predicate)===ou)continue;let i=`${r.subject} ${r.predicate}`;s.has(i)||s.set(i,[]),s.get(i).push(r)}let o=[];for(let r of s.values()){if(new Set(r.map(a=>a.object)).size<2)continue;let i=ga(r[0].predicate);i!==ru&&!au(r,i).contested||o.push(r.slice().sort((a,l)=>l.trust-a.trust||a.object.localeCompare(l.object)))}return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var ir,Fu,Du,St,zu,ar,cr,Uu,Bu,U_,fn,Wu,_g,Fa,Iu,Rg,B_,Sg,W_,Cu,Gu,Tg,G_,ls,si,lo,Da,ai,Pg,Fn,oi,Lu,Mg,Dg,Y_,eR,kg,kn,Vg,Nu,pR,Au,hR,Hu,qg,Ku,Hg,Pu,Mt,Ba,us,Ju,RR,ci,li,Zu,ed,Ga,ui,td,DR,Va,ur,ob,zR,UR,YR,dr,XR,JR,Ve=O(()=>{_t();Ue();$s();sn();sn();Kn();Vm();Kn();ma();hu();$u();Eu();dg();hu();$u();Eu();ir=J(".tmct","memory"),Fu=J(ir,"graph.json"),Du="Utterance",St="Fact",zu="Session",ar="Source",cr="Rule",Uu="mgx:saidInSession",Bu="mgx:inReplyTo",U_="mgx:derivedFrom",fn="mgx:statedBy",Wu="mgx:canonicalisedFrom",_g="mgx:sourceReliability",Fa="src:operator-chat",Iu="src:teach-chat",Rg="src:teach-node",B_=new Set(["visitor","tmct"]),Sg=48,W_=[{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:Uu,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Bu,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: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 (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:Je,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:vs,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:U_,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:fn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Wu,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:Oo,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:Ti,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:Xo,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)"}];Cu=e=>ni(e),Gu="memory",Tg="sqlite";G_=`
101
+ `))return r}}throw new he("cannot find end of structure",{toml:e,ptr:t})}var Ca=O(()=>{lo();});function z_(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(or(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function ni(e,t,n,s,o){if(s===0)throw new he("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?$g(e,t,s,o):yg(e,t,s,o);if(n){if(c=Fn(e,c),e[c]===",")c++;else if(e[c]!==n)throw new he("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=Aa(e,t);if(n){if(c=Fn(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
+ `&&e[c]!=="\r")throw new he("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=wg(e,t,",",n),a=z_(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new he("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=Fn(e,t+a[1]),e[i]===","&&i++),[bg(a[0],e,t,o),i]}var Tu=O(()=>{Ru();Au();Ca();lo();});function Oa(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new he("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 he("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=Aa(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=Ia(c);if(u>-1)throw new he("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new he("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new he("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(!U_.test(a))throw new he("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,Fn(e,r+1,!0,!0)]}function yg(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=or(e,t);else if(i!==" "&&i!==" "&&i!==`
103
+ `&&i!=="\r"){let a,l=o,c=!1,[u,d]=Oa(e,t-1);for(let h=0;h<u.length;h++){if(h&&(l=c?l[a]:l[a]={}),a=u[h],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||r.has(l[a])))throw new he("trying to redefine an already defined value",{toml:e,ptr:t});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:!0,configurable:!0,writable:!0})}if(c)throw new he("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=ni(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new he("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function $g(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=or(e,t);else if(r!==" "&&r!==" "&&r!==`
104
+ `&&r!=="\r"){let i=ni(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new he("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var U_,Au=O(()=>{Ru();Tu();Ca();lo();U_=/^[a-zA-Z0-9-_]+[ \t]*$/});function vg(e,t,n,s){let o=t,r=n,i,a=!1,l;for(let c=0;c<e.length;c++){if(c){if(o=a?o[i]:o[i]={},r=(l=r[i]).c,s===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=o.length-1;o=o[u],r=r[u].c}}if(i=e[c],(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:c<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(l=r[i],l.t!==s&&!(s===1&&l.t===3)||(s===2&&(l.d||(l.d=!0,o[i]=[]),o[i].push(o={}),l.c[l.i++]=l={t:1,d:!1,i:0,c:{}}),l.d))return null;if(l.d=!0,s===1)o=a?o[i]:o[i]={};else if(s===0&&a)return null;return[i,o,l.c]}function rr(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=Fn(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=Oa(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new he("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=vg(c[0],s,o,l?2:1);if(!u)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});i=u[2],r=u[1],a=c[1]}else{let l=Oa(e,a),c=vg(l[0],r,i,0);if(!c)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=ni(e,l[1],void 0,t,n);c[1][c[0]]=u[0],a=u[1]}if(a=Fn(e,a,!0),e[a]&&e[a]!==`
105
+ `&&e[a]!=="\r")throw new he("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=Fn(e,a)}return s}var xg=O(()=>{Au();Tu();Ca();lo();});var Eg=O(()=>{});var La=O(()=>{xg();Eg();_u();lo();});var jg={};Vn(jg,{CONFIG_FILE:()=>Pa,loadTomlConfig:()=>Iu,mergeEffective:()=>kg,normalizeConfig:()=>Sg});async function Iu(e,{file:t}={}){let n=t||J(e,Pa),s;try{s=await ze(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return rr(s)}catch(o){throw new Error(`Invalid ${Pa} at ${n}: ${o&&o.message?o.message:o}`)}}async function B_(e,t){let n;if(Array.isArray(e))n=e;else{let o=Qt(t,String(e));n=(await ze(o,"utf8")).split(`
106
+ `)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Qt(t,r))}return s}async function Sg(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await B_(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Qt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Qt(s,String(n.graph_file))),n.graph_files!==void 0){let w=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=w.map(v=>Qt(s,String(v)))}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||{},l={};a.enabled!==void 0&&(l.enabled=a.enabled),a.limit!==void 0&&(l.limit=a.limit),a.capture_unknown_context!==void 0&&(l.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(l.unknownContextLimit=a.unknown_context_limit),Object.keys(l).length&&(o.seed=l),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.discourse!==void 0&&(o.discourse=n.discourse);let c=n.index||{},u={};c.languages!==void 0&&(u.languages=c.languages),c.exclude!==void 0&&(u.exclude=c.exclude),c.secret_exclude!==void 0&&(u.secretExclude=c.secret_exclude),c.history_depth!==void 0&&(u.historyDepth=c.history_depth),c.include_text!==void 0&&(u.includeText=c.include_text),c.include_structure!==void 0&&(u.includeStructure=c.include_structure),c.respect_gitignore!==void 0&&(u.respectGitignore=c.respect_gitignore),c.markdown_sections!==void 0&&(u.markdownSections=c.markdown_sections),c.vue!==void 0&&(u.vue=c.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},f={};d.score_gap_k!==void 0&&(f.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(f.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(f.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(f.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(f.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(f.beamSearch=d.beam_search),d.beam_width!==void 0&&(f.beamWidth=d.beam_width),d.prose_layers!==void 0&&(f.proseLayers=d.prose_layers);let p=d.expansion||{},h={};p.strategy!==void 0&&(h.strategy=p.strategy),p.nodes!==void 0&&(h.nodes=p.nodes),p.q!==void 0&&(h.q=p.q),p.depth!==void 0&&(h.depth=p.depth),Object.keys(h).length&&(f.expansion=h),Object.keys(f).length&&(o.tune=f);let m=n.telemetry||{};m.enabled!==void 0&&(o.telemetry={enabled:m.enabled});let g=n.memory||{},b={};g.retention_versions!==void 0&&(b.retentionVersions=g.retention_versions),g.backend!==void 0&&(b.backend=g.backend),Object.keys(b).length&&(o.memory=b);let y=[];for(let[w,v]of W_)n[w]&&n[w][v]!==void 0&&y.push(`${w}.${v}`);return o.unwired=y,o}function Na(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:Na(o,r,n)}return n}function kg({args:e={},toml:t=null,defaults:n={}}={}){let s=Na(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Na(o):{},i=Na(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),l={},c={};for(let u of a)u in i?(l[u]=i[u],c[u]="arg"):u in r?(l[u]=r[u],c[u]="tmct.toml"):(l[u]=s[u],c[u]="default");return{effective:l,sources:c}}var Pa,W_,Ma=O(()=>{_t();Ue();La();Pa="tmct.toml";W_=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Ps={};Vn(Ps,{CANONICALISED_FROM_PROP:()=>Vu,CAPABLE_OF_PREDICATE:()=>ZR,CHAIN_KEEP_DEPTH:()=>Jm,CHAIN_ROLLUP_THRESHOLD:()=>wa,CREATED_AT_PROP:()=>Je,DEFAULT_RETENTION:()=>Mu,FACT_CLASS:()=>St,GROUP_ROLLUP_THRESHOLD:()=>Ym,HAS_A_PREDICATE:()=>pr,IN_REPLY_TO_PROP:()=>Gu,MEMORY_DIR_REL:()=>ar,MEMORY_GRAPH_REL:()=>zu,MEMORY_MANIFEST_REL:()=>Kg,MEMORY_SESSION_CLASS:()=>Bu,MULTI_VALUED_PREDICATES:()=>eT,NODE_ID_REL:()=>Xu,OPERATOR_SOURCE_ID:()=>Fa,RETRACTED_AT_PROP:()=>Ea,RETRACTED_COUNT_PROP:()=>bu,RETRACTED_RECORD_IDS_PROP:()=>xa,RETRACTION_CLASS:()=>on,RETRACTION_PREDICATE:()=>va,ROLLUP_COUNT_PROP:()=>Xr,ROLLUP_EARLIEST_PROP:()=>Pn,ROLLUP_KEEP_PER_TYPE:()=>Xm,ROLLUP_LATEST_PROP:()=>Mn,ROLLUP_PRIOR_PROP:()=>nr,ROLLUP_RECORD_IDS_PROP:()=>Yr,ROLLUP_SOURCE_IDS_PROP:()=>tr,RULE_CLASS:()=>lr,RULE_KIND_ACTION_CONSTRAINT:()=>sd,RULE_KIND_ACTION_EFFECT:()=>di,RULE_KIND_ACTION_PRECOND:()=>Ga,RULE_KIND_ACTION_SIGNATURE:()=>nd,RULE_KIND_COMPOSE2:()=>li,RULE_KIND_FILTER:()=>ui,RULE_KIND_PROP:()=>dr,RULE_KIND_RECURSIVE:()=>td,SAID_IN_SESSION_PROP:()=>Wu,SOURCE_CLASS:()=>cr,SOURCE_RELIABILITY_PROP:()=>Ag,STATED_BY_PROP:()=>fn,SYLLOGISE_STATE_REL:()=>Yu,UPDATED_AT_PROP:()=>xs,UTTERANCE_CLASS:()=>Uu,admittedNodes:()=>Ra,appendCanonicalisedFromEdges:()=>PR,appendFact:()=>zR,appendFacts:()=>fo,appendRetractions:()=>YR,appendRule:()=>qa,appendUtterance:()=>NR,appendUtterances:()=>tb,applySeedPayload:()=>Og,attachFactHeads:()=>Ug,chainRollupIdFor:()=>du,cloneMemoryPayload:()=>Lg,closeSqliteMemoryStore:()=>Vg,createInMemoryStore:()=>ai,createSqliteMemoryStore:()=>Gg,emptyMemory:()=>ii,factGroupId:()=>Pt,factHeadsOf:()=>Bg,factIdForTriple:()=>me,factRecordIdForTag:()=>K_,factRecordIdsFor:()=>po,findContradictions:()=>lb,findRuleByName:()=>od,findRulesByName:()=>VR,headRollupIdFor:()=>uu,isChainRollupId:()=>sr,isHeadRollupId:()=>Cs,isMemoryOrSqliteHandle:()=>Hu,isRetractionId:()=>yu,isRollupId:()=>ya,loadMemory:()=>Ct,loadNodeId:()=>ER,loadSyllogiseState:()=>vR,normFactPredicate:()=>cs,normFactTerm:()=>Q,openConfiguredMemoryBackend:()=>Ns,openExistingMemoryBackend:()=>rR,openMemoryBackend:()=>Ku,peersToConvince:()=>Su,provSourceClassFor:()=>jR,provenanceTagToSource:()=>Yn,readFactRows:()=>vt,readObjectSupersessions:()=>nR,readOnlyMemorySnapshot:()=>iR,readRetractions:()=>KR,readRuleRows:()=>rd,removeFacts:()=>HR,resolveMemoryGraphFile:()=>si,resolveRelationChase:()=>id,resolveRelationChaseReverse:()=>cb,retirableRetractions:()=>XR,retireRetractions:()=>JR,retractedAtOf:()=>co,retractedRecordIds:()=>ao,retractionFromWire:()=>_a,retractionIdFor:()=>wu,retractionScopeOf:()=>$u,retractionWireFact:()=>ja,saveNodeId:()=>SR,saveSyllogiseState:()=>xR,snapshotMemory:()=>gR,stableRecordIds:()=>Ta});function ii(){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:q_.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function si(e,t=null){if(Ls(e)||zn(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?J(e,zu):J(e,ar,`graph.v${t}.json`)}function Ls(e){return!!e&&typeof e=="object"&&e.backend===qu}function zn(e){return!!e&&typeof e=="object"&&e.backend===Cg}function Hu(e){return Ls(e)||zn(e)}function ai(){return{backend:qu,payload:ii()}}function Og(e,t){t&&(e.payload={...e.payload,...t})}function Lg(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function Ng(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Qu(Yn(t));if(n)return n}return{id:ds,type:""}}function Pt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function K_(e,t){return`${e}@${Pg(t).id}`}function Pg(e){return Qu(Yn(e))||{id:ds,type:""}}function Mg(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=Pg(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(ds,{sourceId:ds,sourceType:"",tags:[]}),[...t.values()]}function Nu(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=Yn(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function ur(e,t="",n=Math.max){return Nu(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function Y_(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 Fg(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=Ng(n("mgx:factProvenance")),o=n(ci).split(" ").filter(Boolean)[0]||null,r=Jr(e.id);return[e.id,Pt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(uo)||s.id,r||s.type,Number(n(r?nr:Lo))||0,n(Je),n(oi)||null,o,t]}function X_(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(St))return;let t=e.prepare(Dg);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(St))t.run(...Fg(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function J_(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Ug(e,t){return e&&t&&(e[zg]=t),e}function Z_(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 Wg(e,t,n,s){let o=e.prepare(Q_),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=ps();for(let a of n){let l=t.groups.get(a);if(!l?.length){r.run(a),s?.delete(a);continue}let c=J_(cd(a,l,t).assertions),u=ef(c).score;o.run(a,u,JSON.stringify(c),i),s?.set(a,{trustBase:u,inputs:c})}}function eR(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(St))return;let n=ad(qg(e));t.exec("BEGIN IMMEDIATE");try{Wg(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function tR(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=ps();for(let i of n){let[a,l]=i.split("\0");if(ga(l)!==Kr)continue;let c=t.groupsByPair.get(i)||[];if(c.length<2)continue;let u=c.map(p=>{let h=cd(p,t.groups.get(p),t);return h.trust=Ii(h.assertions).score,h});if(new Set(u.map(p=>p.object)).size<2)continue;let d=lu(u,Kr)?.winner?.id;if(!d)continue;let f=s.get(a,l);f?.to_id!==d&&o.run(a,l,(f?.ord??-1)+1,f?.to_id||"",d,r)}}function nR(e,{subject:t,predicate:n}={}){if(!zn(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 oR(){if(Rg)return;Rg=!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 Gg(e){oR();let{DatabaseSync:t}=await Promise.resolve().then(()=>(gg(),mg)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(H_),X_(n);let s={backend:Cg,db:n,dbPath:e};return eR(s),s}function Vg(e){zn(e)&&e.db.close()}async function Ku(e,t){if(t===qu)return{dir:ai(),close:async()=>{}};let n=J(e,".tmct","memory","graph.sqlite"),s=r=>_c(r).then(()=>!0,()=>!1);!await s(n)&&await s(J(e,zu))&&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 Rn(ye(n),{recursive:!0});let o=await Gg(n);return{dir:o,close:async()=>Vg(o)}}async function rR(e,t=""){if(!e||typeof e!="string")return null;let n=J(e,".tmct","memory","graph.sqlite");try{await _c(n)}catch{return null}return Ku(e,t)}async function iR(e){if(!e)return null;let t=ai();return Og(t,Lg(await Ct(e))),t}async function Ns(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Ma(),jg));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Ku(e,n)}function aR(e){let t=e.db.prepare("PRAGMA data_version").get()?.data_version;return e.cachedPayload&&e.cachedDataVersion!==t&&(e.cachedPayload=null),e.cachedPayload||(e.cachedPayload=qg(e),e.cachedFactHeads=Z_(e.db),e.cachedDataVersion=t),Ug(kn(e.cachedPayload),e.cachedFactHeads)}function qg(e){let t=e.db,n=ii(),s=(a,l)=>{let c=t.prepare("SELECT v FROM meta WHERE k = ?").get(a);return c?JSON.parse(c.v):l},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(a=>JSON.parse(a.json)),r=t.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid"),i=t.prepare("SELECT prop, predicate, count FROM relations ORDER BY ord").all().map(a=>({predicate:a.predicate,prop:a.prop,count:a.count,examples:r.all(a.prop).map(l=>{let c={subject:l.subject,object:l.object,subjectLabel:l.subject_label,objectLabel:l.object_label};return l.extra&&Object.assign(c,JSON.parse(l.extra)),c})}));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:i,individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function cR(e,t){let n=kn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function lR(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function uR(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 dR(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,kn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function pR(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function fR(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function hR(e,t){let n=e.db,s=ii(),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=kn(t.generated_at??s.generated_at),o.memory=kn(t.memory??s.memory),o.prefixes=kn(t.prefixes??s.prefixes),o.vocabulary=kn(t.vocabulary??s.vocabulary),o.classes=kn(t.classes??s.classes),o.proseIndex=kn(t.proseIndex??s.proseIndex));let i=n.prepare("SELECT ord, json FROM individuals WHERE id = ?"),l=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM individuals").get().m+1,c=n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),u=n.prepare(Dg),d=new Set,f=new Set,p=new Set;for(let E of t.individuals||[]){d.add(E.id);let R=JSON.stringify(E),j=i.get(E.id);if(j&&j.json===R)continue;let A=j?j.ord:l++;c.run(E.id,A,E.class??null,E.label??null,R),E.class===St&&(u.run(...Fg(E,R)),f.add(Pt(E.id)),p.add(Pu(ri(E,"subject"),ri(E,"predicate")))),o&&cR(o,E)}let h=n.prepare("DELETE FROM individuals WHERE id = ?"),m=n.prepare("DELETE FROM facts WHERE id = ?"),g=n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?");for(let E of n.prepare("SELECT id FROM individuals").all()){if(d.has(E.id))continue;let R=g.get(E.id);R&&(f.add(R.triple_hash),p.add(Pu(R.subject,R.predicate))),h.run(E.id),m.run(E.id)}o&&lR(o,d);let b=n.prepare("SELECT ord FROM relations WHERE prop = ?"),w=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,v=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),_=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),$=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),x=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),S=new Set;for(let E of t.objectProperties||[]){S.add(E.prop);let R=_.all(E.prop),j=new Map(R.map(z=>[`${z.subject}\0${z.object}`,z])),A=new Set,F=o?uR(o,E.prop):null;for(let z of E.examples||[]){let X=`${z.subject}\0${z.object}`;A.add(X);let ce=Object.keys(z).filter(W=>!sR.has(W)),te=ce.length?JSON.stringify(Object.fromEntries(ce.map(W=>[W,z[W]]))):null,D=j.get(X);D&&(D.subject_label??null)===(z.subjectLabel??null)&&(D.object_label??null)===(z.objectLabel??null)&&(D.extra??null)===(te??null)||($.run(E.prop,z.subject,z.object,z.subjectLabel??null,z.objectLabel??null,te),F&&dR(F,z,ce))}for(let z of j.keys()){if(A.has(z))continue;let[X,ce]=z.split("\0");x.run(E.prop,X,ce)}F&&pR(F,A);let T=Number.isFinite(E.count)?E.count:(E.examples||[]).length,P=b.get(E.prop)?.ord??w++;v.run(E.prop,P,E.predicate??null,T),F&&(F.predicate=E.predicate??null,F.count=T)}for(let E of n.prepare("SELECT prop FROM relations").all())S.has(E.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run(E.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run(E.prop));if(o&&fR(o,S),f.size){let E=ad(t);Wg(n,E,f,e.cachedFactHeads),tR(n,E,p)}n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}async function Hg(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await vr(n,t),await Ei(n,e)}async function Ua(e,t){await Hg(e,JSON.stringify(t))}async function gR(e,{retentionVersions:t}={}){if(Hu(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a memory/sqlite handle has no on-disk graph.json to snapshot");let n=si(e),s;try{s=await ze(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=mR(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Mu}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Mu);let i=r.version,a=si(e,i);await Rn(ye(a),{recursive:!0}),await Hg(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await Rc(si(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await Ua(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Ct(e){if(Ls(e))return Cu(e.payload);if(zn(e))return Cu(aR(e));let t;try{t=await ze(Lu(e),"utf8")}catch(n){if(n?.code==="ENOENT")return ii();throw n}return Cu(JSON.parse(t))}function wR(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==St||!bR.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Ko(o("subject"),o("predicate"),o("object"));r!==s.id&&(t.set(s.id,r),s.id=r)}if(!t.size)return 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 yR(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(l=>l?.prop===fn),n=new Map;for(let l of t?.examples||[]){if(!l?.subject)continue;let c=n.get(l.subject);c?c.push(l):n.set(l.subject,[l])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let l of e.individuals){if(l?.class!==St||String(l.id||"").includes("@")){a.push(l);continue}let c=w=>(l.attributes||[]).find(v=>v?.prop===w)?.value||"",u=c("rdf:subject"),d=c("rdf:predicate"),f=c("rdf:object");if(!u||!d||!f){a.push(l);continue}let p=Ko(u,d,f),h=c(Je),m=c("mgx:factProvenance"),g=n.get(l.id)||[],b=m?Mg(m):[];for(let w of g)b.some(v=>v.sourceId===w.object)||b.push({sourceId:w.object,sourceType:"",tags:[]});b.length||b.push({sourceId:ds,sourceType:"",tags:[]});let y=[];for(let w of b){let v={id:`${p}@${w.sourceId}`,label:l.label,class:St,derived_from:kn(l.derived_from)||[],mentions:kn(l.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:f},{prop:Je,key:"createdAt",value:ur(w.tags,h,Math.min)||h||ps()},{prop:uo,key:"sourceId",value:w.sourceId},...w.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.tags.join(" | ")}]:[],...c("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:c("mgx:hasProseTokens")}]:[],...c("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:c("mgx:factQuantifier")}]:[],...w.sourceType==="entailed"&&c("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:c("mgx:factJustification")}]:[]]};if(a.push(v),r.push(v),y.push(v.id),w.sourceId!==ds){let _=g.find($=>$?.object===w.sourceId);i.push({..._||{},subject:v.id,object:w.sourceId,subjectLabel:v.label,objectLabel:Zu(w.sourceId)})}}s.add(l.id),o.set(l.id,y)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(l=>!s.has(l?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:fn,count:i.length,examples:i}));for(let l of e.objectProperties||[]){if(l?.prop===fn||!l?.examples?.length)continue;let c=[];for(let u of l.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],f=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let p of d)for(let h of f)c.push({...u,subject:p,object:h})}l.examples=c,l.count=c.length}e.individuals=a,Jg(e);for(let l of r)ir(e,l);return Un(e),e}async function $R(e,t){if(Ls(e)){e.payload=t;return}if(zn(e)){hR(e,t);return}await Rn(ye(Lu(e)),{recursive:!0}),await Ua(Lu(e),t)}async function vR(e){if(Ls(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(zn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Yg);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(J(e,Yu),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function xR(e,t){if(Ls(e)){e.syllogiseState=structuredClone(t);return}if(zn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Yg,JSON.stringify(t));return}let n=J(e,Yu);await Rn(ye(n),{recursive:!0}),await Ua(n,t)}async function ER(e){if(Ls(e))return e.nodeId||null;if(zn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Xg);return t?.v&&JSON.parse(t.v).nodeId||null}try{return JSON.parse(await ze(J(e,Xu),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function SR(e,t){if(Ls(e)){e.nodeId=t;return}if(zn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Xg,JSON.stringify({nodeId:t}));return}let n=J(e,Xu);await Rn(ye(n),{recursive:!0}),await Ua(n,{nodeId:t})}function Jg(e){let t=new Map,n=new Map,s=new Map,o=new Map,r=new Map;for(let a of e.individuals||[])if(a?.id&&(t.set(a.id,a),a.class===cr&&n.set(a.id,a),a.class===on&&Du(r,a),a.class===St)){let l=Pt(a.id),c=o.get(l);c?c.push(a.id):o.set(l,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===fn);for(let a of i?.examples||[]){if(!a?.subject)continue;let l=s.get(a.subject);l?l.push(a.object):s.set(a.subject,[a.object])}return e[Fu]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[Fu]}function Du(e,t){let n=Pt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function kR(e,t){let n=Mt(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===on&&Pt(s.id)===t)}async function hs(e,t){let n=await Ct(e);Jg(n);let s=await t(n)??n;return AR(s),CR(s),s.proseIndex=Bp(s.individuals),await $R(e,s),s}function Ju(e,t){return e?.attributes?.find(n=>n?.prop===Je)?.value||t||ps()}function hn(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Qu(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Fa}:${e.sessionId}`:Fa,type:"operator"};case"teach":return{id:e.sessionId?`${Ou}:${e.sessionId}`:Ou,type:"teach"};case"teachNode":return{id:`${Ig}:${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}:${e.article}`,type:"reference"};case"referenceLive":return{id:`src:reference:${e.pack}:${e.article}`,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:${Vr(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 jR(e){return Dc[e]||null}function _R(e,t,n){let s=Qu(t);if(!s)return null;let o=Mt(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=Ju(r,t?.createdAt||n),a={id:s.id,label:Zu(s.id),class:cr,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Je,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},l=fs(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function Wa(e){let t=Mt(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===cr&&(n[s.id]=s);return n}function Qg(e,t){let n=Mt(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===fn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function RR(e,t,n=Date.now(),s={}){let o=Qg(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Je)?.value||"",{score:i,inputs:a}=Zp({sourceIds:o,createdAt:r},Wa(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});hn(t,Lo,"trustScore",String(i)),hn(t,Ti,"trustInputs",JSON.stringify(a)),hn(t,xs,"updatedAt",new Date(n).toISOString())}function TR(e,t,n=Date.now(),s={}){let[o]=Qg(e,t.id),r=o?Wa(e)[o]:null,i=(r?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||"",a=Ai(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let c=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*c))}let l=(t.attributes||[]).find(c=>c?.prop===Je)?.value||"";hn(t,Lo,"trustScore",String(a)),hn(t,Ti,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:l})),hn(t,xs,"updatedAt",new Date(n).toISOString())}function Zg(e,t,n,s){t?.class===St?TR(e,t,n,s):RR(e,t,n,s)}function ir(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Je)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Yn(i);if(!a)continue;let l=_R(e,a,r);l&&za(e,{predicate:"statedBy",prop:fn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:Zu(l)})}Zg(e,t,n,s)}function AR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===fn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==St||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(ir(e,r,o),s=!0);s&&Un(e)}function CR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=vt(e),n=new Set;for(let a of lb(e))for(let l of a)n.add(l.id);let s=new Map;for(let a of t)for(let l of a.sourceIds){if(!IR(l))continue;let c=s.get(l)||{factsAsserted:0,factsContradicted:0};c.factsAsserted+=1,n.has(a.id)&&(c.factsContradicted+=1),s.set(l,c)}if(!s.size)return;let o=Mt(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(hn(c,Ag,"sourceReliability",String(tf(l))),hn(c,xs,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===fn),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let l=o?o.individualsById.get(a):e.individuals.find(c=>c?.id===a);l&&Zg(e,l)}}function OR(e,t,n){if(!ya(n?.id))return n;let s=Jr(n.id);if(!s)return mu(t,n);let o=Wa(e);return mu(t,n,{priorFor:r=>Ai(s,o[r])})}function Tg(e,t,n){return n?.class===on?ug(t,n):OR(e,t,n)}function fs(e,t){let n=Mt(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,Tg(e,o,t)),o.class===on&&Du(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===on&&Du(n.retractionsByGroup,t),t.class===St){let r=Pt(t.id),i=n.factRecordsByGroup.get(r);i?i.push(t.id):n.factRecordsByGroup.set(r,[t.id])}return t}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=Tg(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function za(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(l=>l?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===fn?Mt(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||ps()}),o.count=o.examples.length,l?l.push(s.object):r.statedByBySubject.set(s.subject,[s.object]);return}}let a=(o.examples||[]).find(l=>l?.subject===s.subject&&l?.object===s.object)?.createdAt||s.createdAt||ps();if(o.examples=(o.examples||[]).filter(l=>!(l?.subject===s.subject&&l?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r){let l=r.statedByBySubject.get(s.subject)||[];l.includes(s.object)||l.push(s.object),r.statedByBySubject.set(s.subject,l)}}function Un(e){let t=[Bu,Uu,St,cr,lr];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 LR(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:Bu,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Je,key:"createdAt",value:n||ps()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function eb(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!V_.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 c=String(s||""),u=as(n),d=`utt:${o}#${c}#${t}`,f=Ba(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=Ri({doc:u}),h=e.individuals.find(y=>y?.id===d),m=Ju(h,l||c),g={id:d,label:f,class:Uu,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:c},{prop:Je,key:"createdAt",value:m},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};fs(e,g);let b=LR(e,o,r);if(za(e,{predicate:"saidInSession",prop:Wu},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&za(e,{predicate:"inReplyTo",prop:Gu},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function NR(e,t){let n;return await hs(e,s=>{n=eb(s,t),Un(s)}),{id:n}}async function tb(e,t){let n=[];return t?.length?(await hs(e,s=>{for(let o of t)n.push(eb(s,o));Un(s)}),{ids:n}):{ids:n}}async function PR(e,t){t?.length&&await hs(e,n=>{for(let s of t)for(let o of po(n,s.factId))za(n,{predicate:"canonicalisedFrom",prop:Vu},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function po(e,t){let n=Mt(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===St&&Pt(s.id)===t).map(s=>s.id)}function nb(e,t,n,s=""){let o=Mg(n);if(o.length===1&&o[0].sourceId===ds&&po(e,t).length)return[];let r=kR(e,t);if(r.length&&(o=o.filter(a=>!ka(r,`${t}@${a.sourceId}`,ur(a.tags,s))),!o.length))return o;let i=MR(e,t);return i.length?o.filter(a=>!ig(i,a.sourceId)):o}function MR(e,t){let n=Mt(e),s=n?n.factRecordsByGroup.get(t):po(e,t),o=[];for(let r of s||[]){if(!Cs(r))continue;let i=Os(e,r);i&&o.push(i)}return o}function sb(e,t,{quantifier:n,environments:s}){let o=po(e,t).map(i=>Os(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===ci)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(l=>l?.prop==="mgx:factJustification"));for(let a of i.length?i:o)hn(a,"mgx:factJustification","justification",s.map(l=>l.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(hn(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function FR(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Da)?.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 ob(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:l,createdAt:c,observedAt:u,quantifier:d,environments:f}=t,p=`${n}@${l.sourceId}`,h=Mt(e),m=h?h.individualsById.get(p):e.individuals.find(R=>R?.id===p),g=R=>(m?.attributes||[]).find(j=>j?.prop===R)?.value||"",b=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Nu(l.tags),observedAt:u},w=null,v=l.tags,_=y.assertedAt||c||ps(),$=u,x=[],S=d;if(m){let R={assertedAt:Nu(b),observedAt:g(oi)};Y_(y,R)?(w={head:m,id:`${p}#v${FR(m)}`},x=[w.id]):(v=[...new Set([...b,...l.tags])],_=g(Je)||_,$=u||g(oi),x=g(Da).split(" ").filter(Boolean)),S=d||g("mgx:factQuantifier")}return{candidate:{id:p,label:i,class:St,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:Je,key:"createdAt",value:_},{prop:uo,key:"sourceId",value:l.sourceId},...v.length?[{prop:"mgx:factProvenance",key:"provenance",value:v.join(" | ")}]:[],...$?[{prop:oi,key:"observedAt",value:$}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...S?[{prop:"mgx:factQuantifier",key:"quantifier",value:S}]:[],...f?[{prop:"mgx:factJustification",key:"justification",value:f.map(R=>R.join(" ")).join(" | ")}]:[],...x.length?[{prop:Da,key:"supersedes",value:x.join(" ")}]:[]]},demote:w}}function DR(e,t){let n=`${t}@${ds}`,s=Mt(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 rb(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${ds}`)||DR(e,Pt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};hn(o,ci,"supersededBy",t.id),fs(e,o),s.push(o.id)}return fs(e,t),s.push(t.id),s}function Os(e,t){let n=Mt(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function ed(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=Mt(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Pt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function ib(e,t){let n=Mt(e),s=(n?n.factRecordsByGroup.get(t):po(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=Os(e,u);if(!d)continue;let f=y=>(d.attributes||[]).find(w=>w?.prop===y)?.value||"";if(Cs(u)){i.set(Jr(u),d);continue}if(sr(u)){a.set(f(uo),d);continue}let p=f("mgx:factProvenance"),h=Ng(p),m=p.split(" | ").filter(Boolean),g={id:u,sourceId:f(uo)||h.id,assertedAt:ur(m,f(Je)),record:d};if(f(ci)){let y=r.get(g.sourceId);y?y.push(g):r.set(g.sourceId,[g]);continue}if(!h.type)continue;let b=o.get(h.type);b?b.push(g):o.set(h.type,[g])}let l=Wa(e),c=[];for(let[u,d]of o){let f=og({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:p=>Ai(u,l[p])});if(f){fs(e,f.rollup),c.push(...f.absorbed);for(let p of f.absorbedSourceIds){for(let m of r.get(p)||[])c.push(m.id);r.delete(p);let h=a.get(p);h&&c.push(h.id),a.delete(p)}}}for(let[u,d]of r){let f=rg({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!f)continue;fs(e,f.rollup),c.push(...f.absorbed);let p=Os(e,f.rewire);p&&hn(p,Da,"supersedes",f.rollup.id)}return c}async function zR(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",premiseTrusts:l,ruleConfidence:c}={}){let u=Q(t),d=cs(n),f=Q(s);if(!u||!d||!f)throw new Error("a fact needs subject, predicate and object");let p=Ko(u,d,f),h=`${u} ${d} ${f}`,m=Ri({doc:h}),g=as(a);return await hs(e,async b=>{let y=nb(b,p,as(o),r);for(let w of y.length?[]:sb(b,p,{quantifier:g}))ir(b,Os(b,w),void 0,{premiseTrusts:l,ruleConfidence:c});for(let w of y){let v=ob(b,{groupId:p,s:u,p:d,o:f,label:Ba(h),tokens:m,group:w,createdAt:r,observedAt:i,quantifier:g});await ju(v.candidate);for(let _ of rb(b,v))ir(b,Os(b,_),void 0,_===v.candidate.id?{premiseTrusts:l,ruleConfidence:c}:void 0)}ed(b,ib(b,p)),Un(b)}),{id:p}}function UR(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 fo(e,t){let n=[],s=0;for(let r of t||[]){let i=Q(r?.subject),a=cs(r?.predicate),l=Q(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:Ko(i,a,l),s:i,p:a,o:l,text:c,tokens:Ri({doc:c}),provenance:as(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:as(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:UR(r?.justification)})}let o=[];return n.length?(await hs(e,r=>{let i=[],a=new Set,l=new Map;for(let u of n){let d=nb(r,u.id,u.provenance,u.createdAt);for(let f of d.length?[]:sb(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(f)||(a.add(f),i.push(f)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(f,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let f of d){let p=ob(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:Ba(u.text),tokens:u.tokens,group:f,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments});for(let h of rb(r,p))a.has(h)||(a.add(h),i.push(h));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(p.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)ir(r,Os(r,u),void 0,l.get(u));let c=[];for(let u of new Set(o))c.push(...ib(r,u));ed(r,c),Un(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function qa(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=ab[n];if(!i)throw new Error(`a rule kind must be one of ${BR.join(", ")}, got ${JSON.stringify(n)}`);let a=Q(t);if(!a)throw new Error("a rule needs a name");let l=WR[n]||new Set,c=i.map(([p])=>Q(s?.[p])),u=i.filter(([p],h)=>!l.has(p)&&!c[h]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([p])=>p).join(" + ")}`);if(n===di){let p=c[i.findIndex(([m])=>m==="objectRole")],h=c[i.findIndex(([m])=>m==="value")];if(!p&&!h)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=GR(n,a,c),f=Ba(`${a} = ${n}(${c.join(", ")})`);return await hs(e,async p=>{let h=p.individuals.find(w=>w?.id===d),m=h?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...m.split(" | "),as(o)].filter(Boolean))],b=Ju(h,r),y={id:d,label:f,class:lr,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Va,key:"ruleName",value:a},{prop:dr,key:"ruleKind",value:n},...i.map(([w,v],_)=>({prop:v,key:w,value:c[_],skip:!c[_]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...v})=>v),{prop:Je,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await ju(y),fs(p,y),ir(p,p.individuals.find(w=>w?.id===d)),Un(p)}),{id:d}}function od(e,t){let n=Q(t);return(e?.individuals||[]).find(s=>s?.class===lr&&(s.attributes||[]).find(o=>o?.prop===Va)?.value===n)}function VR(e,t){let n=Q(t),s=o=>(o.attributes||[]).find(r=>r?.prop===dr)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===lr&&(o.attributes||[]).find(r=>r?.prop===Va)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function rd(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==lr)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(dr),r=ab[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Va)||"",kind:o,slots:i,provenance:s("mgx:factProvenance")||""})}return t.sort((n,s)=>n.name.localeCompare(s.name)||n.kind.localeCompare(s.kind)||String(n.id).localeCompare(String(s.id))),t}async function id(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:l,byTrust:c,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:f}=o,p=String(t||"").trim().toLowerCase(),h=l(Q,n),m=l(Q,s),g=r(p).filter(w=>h.has(w.fact.subject)&&m.has(w.fact.object));if(g.length){let w=g.slice().sort((v,_)=>c(v.fact,_.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map(v=>`${a(v)}${v.provenance?` (source: ${v.provenance})`:""}`)]}}let b=od(e,p),y=b?.attributes?.find(w=>w.prop===dr)?.value;if(b&&y===li){let w=b.attributes.find(F=>F.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(F=>F.prop==="mgx:ruleBase2")?.value,_=Q(n),$=Q(s);if(!w||!v||!_||!$)return null;let R=f({entity:_,hopsTaken:0},F=>F.hopsTaken===2&&F.entity===$,F=>{if(F.hopsTaken>=2)return[];let T=F.hopsTaken===0?w:v;return r(T).filter(P=>P.fact.subject===F.entity).map(P=>({action:P,nextState:{entity:P.fact.object,hopsTaken:F.hopsTaken+1}}))},{maxDepth:2,stateKey:F=>`${F.entity}#${F.hopsTaken}`});if(!R)return null;let j=new Set,A=[];for(let F of R.actions){A.push(i(F.fact));for(let T of F.aliasFacts){let P=T.id||`${T.subject}|${T.predicate}|${T.object}`;j.has(P)||(j.add(P),A.push(`${a(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{citation:A}}if(b&&y===ui){let w=b.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(E=>E.prop==="mgx:ruleFilterProperty")?.value;if(!w||!v)return null;let _=await id(e,w,n,s,o);if(!_)return null;let $=Q(n),x=Q(v),S=u.find(E=>E.predicate===d&&E.subject===$&&Q(E.object)===x);return S?{citation:[..._.citation,i(S)]}:null}return null}async function cb(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:l,rows:c,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,f=String(t||"").trim().toLowerCase(),p=a(Q,n),h=o(f).filter(b=>p.has(b.fact.object));if(h.length){let b=new Map;for(let y of h)b.has(y.fact.subject)||b.set(y.fact.subject,[]),b.get(y.fact.subject).push(y);return[...b.entries()].map(([y,w])=>{let v=w.slice().sort((_,$)=>l(_.fact,$.fact))[0];return{subject:y,citation:[r(v.fact),...v.aliasFacts.map(_=>`${i(_)}${_.provenance?` (source: ${_.provenance})`:""}`)]}})}let m=od(e,f),g=m?.attributes?.find(b=>b.prop===dr)?.value;if(m&&g===li){let b=m.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=m.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=Q(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},x=>{if(x.hopsTaken>=2)return[];let S=x.hopsTaken===0?y:b;return o(S).filter(E=>E.fact.object===x.entity).map(E=>({action:E,nextState:{entity:E.fact.subject,hopsTaken:x.hopsTaken+1}}))},{maxDepth:2,stateKey:x=>`${x.entity}#${x.hopsTaken}`}).filter(x=>x.node.hopsTaken===2).map(({node:x,path:S})=>{let E=new Set,R=[];for(let j of S.actions.slice().reverse()){R.push(r(j.fact));for(let A of j.aliasFacts){let F=A.id||`${A.subject}|${A.predicate}|${A.object}`;E.has(F)||(E.add(F),R.push(`${i(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{subject:x.entity,citation:R}})}if(m&&g===ui){let b=m.attributes.find($=>$.prop==="mgx:ruleBase1")?.value,y=m.attributes.find($=>$.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await cb(e,b,n,s),v=Q(y),_=[];for(let $ of w){let x=Q($.subject),S=c.find(E=>E.predicate===u&&E.subject===x&&Q(E.object)===v);S&&_.push({subject:$.subject,citation:[...$.citation,r(S)]})}return _}return[]}function vt(e,t={}){let n=ad(e),s=Bg(e),o=[];for(let[r,i]of n.groups){let a=cd(r,i,n),l=s?.get(r);a.trust=Ii(l?l.inputs:a.assertions,t).score,o.push(a)}return o}function ad(e){let t=e?.individuals||[],n=new Map(t.filter(l=>l?.class===cr).map(l=>[l.id,l])),s=(e?.objectProperties||[]).find(l=>l?.prop===fn),o=new Map;for(let l of s?.examples||[])o.has(l.subject)||o.set(l.subject,[]),o.get(l.subject).push(l.object);let r=new Map,i=new Map;for(let l of t){if(l?.class===on){let d=Pt(l.id),f=i.get(d);f?f.push(l):i.set(d,[l]);continue}if(l?.class!==St||(l.attributes||[]).some(d=>d?.prop===ci)||sr(l.id))continue;let c=Pt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}for(let[l,c]of i){let u=r.get(l);if(!u)continue;let d=u.filter(f=>!ka(c,f.id,ur(Dn(f,"mgx:factProvenance").split(" | ").filter(Boolean),Dn(f,Je))));d.length!==u.length&&(d.length?r.set(l,d):r.delete(l))}let a=new Map;for(let[l,c]of r){c.sort((f,p)=>f.id<p.id?-1:f.id>p.id?1:0);let u=Pu(ri(c[0],"subject"),ri(c[0],"predicate")),d=a.get(u);d?d.push(l):a.set(u,[l])}return{groups:r,groupsByPair:a,statedByRecord:o,sourceTypeOf:l=>(n.get(l)?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||""}}function cd(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=Dn,i=ri,a=[],l=[],c=[],u=new Set,d=[],f=new Set,p="";for(let g of t){if(Cs(g.id)){let x=Jr(g.id),S=$a(g);for(let E of S)l.includes(E)||(l.push(E),x&&c.push(x));a.push({id:g.id,sourceId:"",sourceType:x,provenance:"",createdAt:r(g,Pn),ownTrust:Number(r(g,nr))||0,assertedAt:r(g,Mn),rollup:{count:Number(r(g,Xr))||S.length,sourceIds:S,earliest:r(g,Pn),latest:r(g,Mn)}});continue}let b=r(g,"mgx:factProvenance").split(" | ").filter(Boolean);for(let x of b)u.add(x);let[y]=s.get(g.id)||[],w=y||r(g,uo),v=o(w);y&&!l.includes(y)&&(l.push(y),v&&c.push(v));let _=r(g,Je),$=r(g,oi);a.push({id:g.id,sourceId:w,sourceType:v,provenance:b.join(" | "),createdAt:_,...$?{observedAt:$}:{},ownTrust:Number(r(g,Lo))||0,assertedAt:ur(b,_)}),p=p||i(g,"quantifier");for(let x of i(g,"justification").split(" | ")){let S=x.split(" ").filter(Boolean);if(!S.length)continue;let E=S.join(" ");f.has(E)||(f.add(E),d.push(S))}}let h=[],m=new Set;for(let g of d)for(let b of g)m.has(b)||(m.add(b),h.push(b));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:p,sourceIds:l,sourceTypes:c,environments:d,justification:h,assertions:a}}function qR(e){let t=Dn(e,uo);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)}async function HR(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||ps();return await hs(e,l=>{let c=new Set,u=new Set,d=new Map;l.individuals=(l.individuals||[]).filter(f=>{if(f?.class!==St)return!0;let p=Pt(f.id),h=o.has(f.id)?f.id:o.has(p)?p:"";if(!h)return!0;u.add(h),c.add(f.id);let m=qR(f),g=`${p}\0${m}`,b=Dn(f,"mgx:factProvenance"),y=d.get(g);return y?(y.ids.push(f.id),b&&y.tags.push(b)):d.set(g,{groupId:p,sourceId:m,ids:[f.id],tags:b?[b]:[],template:{label:f.label||"",subject:Dn(f,"rdf:subject"),predicate:Dn(f,"rdf:predicate"),object:Dn(f,"rdf:object")}}),!1});for(let f of u)r.push(f);if(r.length){for(let f of c)i.push(f);for(let f of l.objectProperties||[]){let p=f.examples||[];f.examples=p.filter(h=>!c.has(h?.subject)&&!c.has(h?.object)),f.count=f.examples.length}for(let f of d.values()){let p=lg({groupId:f.groupId,sourceId:f.sourceId,recordIds:f.ids,retractedAt:a,template:f.template,provenance:[...f.tags,n].filter(Boolean).join(" | ")});p&&fs(l,p)}Un(l)}}),{removed:r,records:i}}function KR(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==on)continue;let s=ja(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function YR(e,t){let n=[];for(let o of t||[]){let r=_a(o);r&&n.push(r)}let s=[];return n.length?(await hs(e,o=>{let r=new Map;for(let a of n){let l=fs(o,a),c=Pt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}let i=new Set;for(let[a,l]of r)for(let c of po(o,a)){let u=Os(o,c);if(!u)continue;let d=Dn(u,"mgx:factProvenance").split(" | ").filter(Boolean);ka(l,c,ur(d,Dn(u,Je)))&&i.add(c)}if(i.size){ed(o,i);for(let a of i)s.push(a)}Un(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function XR(e,{self:t="",acknowledgedBy:n=null}={}){let s=Ra(vt(e)),o=[];for(let r of e?.individuals||[])r?.class===on&&r.id&&o.push(r.id);return{roster:s,retirable:Ta({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function JR(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await hs(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==on||!n.has(a.id)?!0:(r.add(a.id),!1)),!r.size)return;for(let a of r)s.push(a);let i=Mt(o);if(i)for(let a of r){i.individualsById.delete(a);let l=Pt(a),c=(i.retractionsByGroup.get(l)||[]).filter(u=>!r.has(u.id));c.length?i.retractionsByGroup.set(l,c):i.retractionsByGroup.delete(l)}Un(o)}),{retired:s}):{retired:s}}function lb(e,{floor:t=QR}={}){let n=vt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(ga(r.predicate)===iu)continue;let i=`${r.subject} ${r.predicate}`;s.has(i)||s.set(i,[]),s.get(i).push(r)}let o=[];for(let r of s.values()){if(new Set(r.map(a=>a.object)).size<2)continue;let i=ga(r[0].predicate);i!==au&&!lu(r,i).contested||o.push(r.slice().sort((a,l)=>l.trust-a.trust||a.object.localeCompare(l.object)))}return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var ar,zu,Uu,St,Bu,cr,lr,Wu,Gu,G_,fn,Vu,Ag,Fa,Ou,Ig,V_,_g,q_,Lu,qu,Cg,H_,ds,oi,uo,Da,ci,Dg,Dn,ri,Pu,zg,Bg,Q_,sR,Rg,kn,Kg,Mu,mR,Cu,bR,Yu,Yg,Xu,Xg,Fu,Mt,Ba,ps,Zu,IR,li,ui,td,nd,Ga,di,sd,BR,Va,dr,ab,WR,GR,QR,pr,ZR,eT,Ve=O(()=>{_t();Ue();vs();sn();sn();Xn();Km();Xn();ma();gu();xu();ku();hg();gu();xu();ku();ar=J(".tmct","memory"),zu=J(ar,"graph.json"),Uu="Utterance",St="Fact",Bu="Session",cr="Source",lr="Rule",Wu="mgx:saidInSession",Gu="mgx:inReplyTo",G_="mgx:derivedFrom",fn="mgx:statedBy",Vu="mgx:canonicalisedFrom",Ag="mgx:sourceReliability",Fa="src:operator-chat",Ou="src:teach-chat",Ig="src:teach-node",V_=new Set(["visitor","tmct"]),_g=48,q_=[{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:Wu,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Gu,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: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 (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:Je,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:xs,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:G_,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:fn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Vu,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:Lo,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:Ti,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:Jo,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)"}];Lu=e=>si(e),qu="memory",Cg="sqlite";H_=`
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,85 +143,85 @@ 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
- `,ls="src:none",si="mgx:observedAt",lo="mgx:sourceId",Da="mgx:supersedes",ai="mgx:supersededBy";Pg="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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";Fn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",oi=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Lu=(e,t)=>`${e}\0${t}`;Mg=Symbol("materialised fact_heads index");Dg=e=>e?.[Mg]||null,Y_="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";eR=new Set(["subject","object","subjectLabel","objectLabel"]),kg=!1;kn=e=>e===void 0?e:structuredClone(e);Vg=J(ir,"manifest.json"),Nu=5,pR=e=>J(e,Vg);Au=e=>gR(mR(e)),hR=/^fact:[0-9a-f]{8}$/;Hu=J(ir,"syllogise-state.json"),qg="syllogiseState";Ku=J(ir,"node-id.json"),Hg="nodeId";Pu=Symbol("mutateMemory lookup index");Mt=e=>e?.[Pu]||null;Ba=e=>e.length>Sg?e.slice(0,Sg-1)+"\u2026":e,us=()=>new Date().toISOString();Ju=e=>String(e).replace(/^src:/,"");RR=e=>typeof e=="string"&&(e.startsWith(`${Fa}:`)||e.startsWith(`${Iu}:`)||e.startsWith(`${Rg}:`));ci="compose2",li="filter",Zu="recursive",ed="action-signature",Ga="action-precond",ui="action-effect",td="action-constraint",DR=Object.freeze([ci,li,Zu,ed,Ga,ui,td]),Va="mgx:ruleName",ur="mgx:ruleKind",ob={[ci]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[li]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Zu]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[ed]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Ga]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[ui]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[td]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},zR={[Ga]:new Set(["value","negate"]),[ui]:new Set(["objectRole","value"])},UR=(e,t,n)=>`rule:${Gr([e,t,...n].join("\0"))}`;YR=.5,dr="mgx:hasA",XR="mgx:capableOf",JR=iu});async function mn(e,t=null){try{if(t)return vt(await Ct(t));let{dir:n,close:s}=await Ls($e($e(e.graphFile)));try{return vt(await Ct(n))}finally{await s()}}catch{return[]}}function cb(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 Ha(e,t){let n=Q(t),s=e.filter(a=>ab.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,fo),i=o.length>fo?`
147
- \u2026+${o.length-fo} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
146
+ `,ds="src:none",oi="mgx:observedAt",uo="mgx:sourceId",Da="mgx:supersedes",ci="mgx:supersededBy";Dg="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||"",ri=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Pu=(e,t)=>`${e}\0${t}`;zg=Symbol("materialised fact_heads index");Bg=e=>e?.[zg]||null,Q_="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";sR=new Set(["subject","object","subjectLabel","objectLabel"]),Rg=!1;kn=e=>e===void 0?e:structuredClone(e);Kg=J(ar,"manifest.json"),Mu=5,mR=e=>J(e,Kg);Cu=e=>yR(wR(e)),bR=/^fact:[0-9a-f]{8}$/;Yu=J(ar,"syllogise-state.json"),Yg="syllogiseState";Xu=J(ar,"node-id.json"),Xg="nodeId";Fu=Symbol("mutateMemory lookup index");Mt=e=>e?.[Fu]||null;Ba=e=>e.length>_g?e.slice(0,_g-1)+"\u2026":e,ps=()=>new Date().toISOString();Zu=e=>String(e).replace(/^src:/,"");IR=e=>typeof e=="string"&&(e.startsWith(`${Fa}:`)||e.startsWith(`${Ou}:`)||e.startsWith(`${Ig}:`));li="compose2",ui="filter",td="recursive",nd="action-signature",Ga="action-precond",di="action-effect",sd="action-constraint",BR=Object.freeze([li,ui,td,nd,Ga,di,sd]),Va="mgx:ruleName",dr="mgx:ruleKind",ab={[li]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[ui]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[td]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[nd]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Ga]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[di]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[sd]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},WR={[Ga]:new Set(["value","negate"]),[di]:new Set(["objectRole","value"])},GR=(e,t,n)=>`rule:${Vr([e,t,...n].join("\0"))}`;QR=.5,pr="mgx:hasA",ZR="mgx:capableOf",eT=cu});async function mn(e,t=null){try{if(t)return vt(await Ct(t));let{dir:n,close:s}=await Ns(ye(ye(e.graphFile)));try{return vt(await Ct(n))}finally{await s()}}catch{return[]}}function db(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 Ha(e,t){let n=Q(t),s=e.filter(a=>ub.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,ho),i=o.length>ho?`
147
+ \u2026+${o.length-ho} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
148
148
  ${r.join(`
149
149
  `)}${i}
150
- (${cb(s)})`}function Ka(e,t){let n=Q(t),s=e.filter(a=>ab.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,fo).join(", ")}`),r.length){let a=r.length>fo?`, +${r.length-fo} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,fo).join(", ")}${a}`)}return i.push(`(${cb(s)})`),i.join(`
151
- `)}var ab,fo,ho=O(()=>{Ue();Ve();ab=new Set(["rdfs:subClassOf","rdf:type"]),fo=40});async function lb(e,{graph:t,svc:n,config:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=nn(n.graph,o);if(r)return Kc(t,r,{candidates:i});let a=Ka(await mn(s),o);if(a)return a;xt(n,o,"symbol")}var ub=O(()=>{Oe();ho();Ge()});async function db(e,{graph:t,svc:n,repoRoot:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=xt(n,o,"symbol"),a=Rt(r);if(!a)throw new _e(`"${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 l;try{l=await os({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Wr})}catch(g){throw g instanceof _e?g:new _e(`could not read ${a.path} (${g?.code||g?.message||g})`)}let{text:c,truncated:u}=l,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,f=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,p=u?`
152
- \u2026 (truncated to ${Wr} lines; full span ${d})`:"",h=i.length?`
153
- (other matches: ${i.map(g=>g.label).join(", ")})`:"",m=Jc(t,r);return`${f}
150
+ (${db(s)})`}function Ka(e,t){let n=Q(t),s=e.filter(a=>ub.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,ho).join(", ")}`),r.length){let a=r.length>ho?`, +${r.length-ho} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,ho).join(", ")}${a}`)}return i.push(`(${db(s)})`),i.join(`
151
+ `)}var ub,ho,mo=O(()=>{Ue();Ve();ub=new Set(["rdfs:subClassOf","rdf:type"]),ho=40});async function pb(e,{graph:t,svc:n,config:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=nn(n.graph,o);if(r)return Xc(t,r,{candidates:i});let a=Ka(await mn(s),o);if(a)return a;xt(n,o,"symbol")}var fb=O(()=>{Oe();mo();Ge()});async function hb(e,{graph:t,svc:n,repoRoot:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=xt(n,o,"symbol"),a=Rt(r);if(!a)throw new _e(`"${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 l;try{l=await is({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Gr})}catch(g){throw g instanceof _e?g:new _e(`could not read ${a.path} (${g?.code||g?.message||g})`)}let{text:c,truncated:u}=l,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,f=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,p=u?`
152
+ \u2026 (truncated to ${Gr} lines; full span ${d})`:"",h=i.length?`
153
+ (other matches: ${i.map(g=>g.label).join(", ")})`:"",m=Zc(t,r);return`${f}
154
154
  ${c}${p}${m?`
155
- ${m}`:""}${h}`}var pb=O(()=>{_t();Ut();oa();Oe();Ge()});var fb,hb=O(()=>{Oe();Ge();fb=rt(_f)});function mb(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return gf(t,s)}var gb=O(()=>{Oe();Ge()});async function bb(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new _e("query is required");let r=kf(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=Ka(await mn(n),s);if(i)return i}return r}var wb=O(()=>{Ut();Oe();ho()});async function yb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=nn(n.graph,o);if(r)return jf(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Ha(await mn(s),o);if(i)return i;xt(n,o,"class")}var $b=O(()=>{Oe();ho();Ge()});async function vb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=nn(n.graph,o);if(r)return Rf(t,r);let i=Ha(await mn(s),o);if(i)return i;xt(n,o,"class")}var xb=O(()=>{Oe();ho();Ge()});function eT(e,{conceptBase:t="concept:",relationMap:n=ZR}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=g=>{r.has(g)||r.set(g,g)},a=g=>{let b=g;for(;r.get(b)!==b;)b=r.get(b);for(;r.get(g)!==b;){let y=r.get(g);r.set(g,b),g=y}return b},l=(g,b)=>{let y=a(g),w=a(b);y!==w&&(y<w?r.set(w,y):r.set(y,w))},c=[];for(let g of e){let b=g.predicate;if(!s.has(b)&&!o.has(b))continue;let y=Q(g.subject),w=Q(g.object);!y||!w||(i(y),i(w),s.has(b)?l(y,w):c.push({s:y,o:w}))}let u=g=>t+g.replace(/ /g,"_"),d=new Map;for(let g of r.keys()){let b=a(g);d.has(b)||d.set(b,new Set),d.get(b).add(g)}let f=[];for(let[g,b]of d){let y=[...b].sort();f.push({id:u(g),prefLabel:g,altLabels:y.filter(w=>w!==g)})}f.sort((g,b)=>g.id<b.id?-1:g.id>b.id?1:0);let p=new Set,h=[];for(let{s:g,o:b}of c){let y=u(a(g)),w=u(a(b));if(y===w)continue;let v=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has(v)||(p.add(v),h.push({subject:y,object:w}))}return h.sort((g,b)=>`${g.subject}${g.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:h,conceptIdForTerm:g=>{let b=Q(g);return r.has(b)?u(a(b)):null},namespace:QR}}function ad(e,t,n={}){let s=eT(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=Q(t),l=[i.prefLabel,...i.altLabels].filter(u=>u!==a),c=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:l,related:c}}var QR,ZR,cd=O(()=>{sn();QR="http://www.w3.org/2004/02/skos/core#",ZR={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function ld(e,{config:t,memoryBackend:n=null}){let s=nt(e,"term"),o=ad(await mn(t,n),s);if(!o)throw new _e(`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)"),Ts({content:r.join(`
156
- `),data:o})}var Eb=O(()=>{Ut();cd();ho();Ge();ld.ownsGraphLoad=!0});function hT(e,t){let n=[];for(let s of t||[])s?.predicate===tT&&Q(s.subject)===e&&n.push(Q(s.object));return n}function Ya(e,t){let n=Q(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 hT(i,t))s.has(a)||o.push(a)}}return r}var tT,nT,sT,oT,rT,iT,aT,cT,lT,uT,dT,pT,fT,Sb,ud=O(()=>{sn();tT="rdfs:subClassOf",nT='<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>',sT='<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>',oT='<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>',rT='<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>',iT='<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>',aT='<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>',cT='<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>',lT='<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>',uT='<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>',dT='<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>',pT='<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>',fT='<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>',Sb=Object.freeze({spider:nT,fly:sT,egg:oT,poodle:rT,dog:iT,animal:aT,room:cT,furniture:lT,portable:uT,person:dT,adventurer:pT,container:fT})});function mT(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function kb(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 mT(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var jb=O(()=>{});function gT(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function bT(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function Ab(e){return bT(e).filter(t=>t?.property&&t.value!==void 0)}function wT(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function yT(e,t){let n=null,s=0;for(let o of e){let r=Ab(o);r.length<=s||wT(r,t)&&(n=o,s=r.length)}return n}function $T(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 _b(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(l=>l.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,l.object));if(!i)continue;let a=$T(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function vT(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 Rb(e,t){let n=t;for(let s of vT(e))n=n.split(s).join("");return n}function Tb(e,t,n){let s=gT(e,n),o=yT(s,t);if(o&&!o.parameters)return o.svg;if(o)return Rb(o,_b(o,t)||o.svg);for(let a of s){if(a.match||!a.parameters)continue;let l=_b(a,t);if(l)return l}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?Rb(i,i.svg):null}function xT(e,t,n,s,o,r){for(let a of Ya(e,t)){let l=Tb(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=Tb(r,n,s);return i||o[r]}function Ib(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=xT(e,t,n,s,o,r);return i?kb(a,i):a}var cP,lP,dd=O(()=>{ud();jb();cP=Object.freeze(["left","half-left","half-right","right"]),lP=Object.freeze(["moving"])});function pd(e){for(let t of e||[])if(t?.predicate===ET&&Object.prototype.hasOwnProperty.call(Cb,t.object))return Cb[t.object];return 1}var ET,Cb,Ob=O(()=>{ET="mgx:hasProperty",Cb=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function Lb(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||{},l=a.resolveSpriteAsset;if(typeof l!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let c=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],f=a.rootFallback||"animal",p=a.classAncestorChain,h=a.sizeScaleFor,m=a.expressionPalette,g=[];r&&g.push({predicate:n,object:r}),i&&g.push({predicate:s,object:i});let b={rootFallback:f};a.instanceKey&&(b.instanceKey=a.instanceKey);let y=l(o,d,g,c,u,b),w=R=>l(R,[],g,c,{},{rootFallback:R}),v=R=>Object.prototype.hasOwnProperty.call(u,R),_=(R,j)=>{let A=c.filter(M=>M&&Array.isArray(M.classes)&&M.classes.indexOf(R)>=0),T=A.find(M=>M.svg===j)||A.find(M=>!M.match&&M.parameters)||null;return T?{classes:T.classes.slice(),parameters:Object.keys(T.parameters||{}).sort(),match:T.match||null}:null},$=null,x=null;if(typeof p=="function"){$=[];for(let R of p(o,d)){let j=w(R);if($.push({term:R,template:!!j,registry:v(R)}),j){x={term:R,via:"template",hops:$.length-1,root:!1,template:_(R,j)};break}if(v(R)){x={term:R,via:"registry",hops:$.length-1,root:!1,template:null};break}}if(!x){let R=w(f);$.push({term:f,template:!!R,registry:v(f),root:!0}),x={term:f,via:R?"template":"registry",hops:$.length-1,root:!0,template:R?_(f,R):null}}}let S=a.instanceKey?l(o,d,g,c,u,{rootFallback:f}):y,E=r?l(o,d,g.filter(R=>R.predicate!==n),c,u,{rootFallback:f}):null;return{class:o,expression:r||null,size:i||null,svg:y,scale:typeof h=="function"?h(g):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?S!==E:null,rootFallback:f,fellBackToRoot:x?!!x.root:null,chain:$,matched:x}}var Nb=O(()=>{});var Pb,Mb,ST,hP,Fb=O(()=>{dd();Pb="icon tier",Mb="sprite tier",ST=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."})}),hP=Object.freeze(Object.values(ST).map(e=>e.predicate))});var Db,zb=O(()=>{Db=()=>[]});var Ub,Bb=O(()=>{Ub=()=>[]});function RT(){let e=Ub();return e.length?{templates:e,tier:Mb}:{templates:Db(),tier:Pb}}function Wb(e){return e.map(t=>t.term).join(" -> ")}async function fd(e,{config:t,memoryBackend:n=null}){let s=nt(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(To,o))throw new _e(`"${o}" is not a sprite expression. The palette holds: ${jT().join(", ")}.`);if(r&&!_T(r))throw new _e(`"${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}=RT(),l=await mn(t,n),c=Lb({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:Sb,resolveSpriteAsset:Ib,classAncestorChain:Ya,sizeScaleFor:pd,expressionPalette:To});if(!c.svg||c.fellBackToRoot)throw new _e(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${Wb(c.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!c.expressionApplied)throw new _e(`the ${a} draws "${s}" (matched at "${c.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}`,c.matched.hops===0?`matched at "${c.matched.term}", the class itself, via its own ${c.matched.via}`:`matched at "${c.matched.term}", ${c.matched.hops} hop(s) up the ancestor chain, via its ${c.matched.via}`,`ancestor chain walked: ${Wb(c.chain)}`];return c.matched.template?.parameters.length&&d.push(`template parameters: ${c.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${c.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${c.svg.length} characters of SVG markup`),Ts({content:d.join(`
157
- `),data:{class:c.class,expression:c.expression,size:c.size,tier:a,scale:c.scale,svg:c.svg,chain:c.chain,matched:c.matched,expressionApplied:c.expressionApplied}})}var kT,jT,_T,Gb=O(()=>{Ut();ud();dd();Cc();Ob();Nb();Fb();zb();Bb();ho();Ge();kT="mgx:hasProperty",jT=()=>Object.keys(To).sort(),_T=e=>!!e&&pd([{predicate:kT,object:String(e)}])!==1;fd.ownsGraphLoad=!0});function Vb(e,{graph:t}){return Tf(t,{pkg:String(e?.package||"").trim()})}var qb=O(()=>{Oe()});function Hb(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return Xf(t,s)}var Kb=O(()=>{Oe();Ge()});function Yb(e,{graph:t}){return Cf(t)}var Xb=O(()=>{Oe()});function Qb(e,t){return Ts({content:e,data:t,text:`${e}${Jb}${JSON.stringify(t,null,2)}`})}function Zb(e,{graph:t}){let{content:n,tmct_ask:s}=js(t,nt(e,"query"));return Qb(n,s)}var Jb,Xa=O(()=>{_s();Ge();Jb=`
155
+ ${m}`:""}${h}`}var mb=O(()=>{_t();Ut();oa();Oe();Ge()});var gb,bb=O(()=>{Oe();Ge();gb=it(Af)});function wb(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return yf(t,s)}var yb=O(()=>{Oe();Ge()});async function $b(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new _e("query is required");let r=Rf(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=Ka(await mn(n),s);if(i)return i}return r}var vb=O(()=>{Ut();Oe();mo()});async function xb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=nn(n.graph,o);if(r)return Tf(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Ha(await mn(s),o);if(i)return i;xt(n,o,"class")}var Eb=O(()=>{Oe();mo();Ge()});async function Sb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=nn(n.graph,o);if(r)return If(t,r);let i=Ha(await mn(s),o);if(i)return i;xt(n,o,"class")}var kb=O(()=>{Oe();mo();Ge()});function sT(e,{conceptBase:t="concept:",relationMap:n=nT}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=g=>{r.has(g)||r.set(g,g)},a=g=>{let b=g;for(;r.get(b)!==b;)b=r.get(b);for(;r.get(g)!==b;){let y=r.get(g);r.set(g,b),g=y}return b},l=(g,b)=>{let y=a(g),w=a(b);y!==w&&(y<w?r.set(w,y):r.set(y,w))},c=[];for(let g of e){let b=g.predicate;if(!s.has(b)&&!o.has(b))continue;let y=Q(g.subject),w=Q(g.object);!y||!w||(i(y),i(w),s.has(b)?l(y,w):c.push({s:y,o:w}))}let u=g=>t+g.replace(/ /g,"_"),d=new Map;for(let g of r.keys()){let b=a(g);d.has(b)||d.set(b,new Set),d.get(b).add(g)}let f=[];for(let[g,b]of d){let y=[...b].sort();f.push({id:u(g),prefLabel:g,altLabels:y.filter(w=>w!==g)})}f.sort((g,b)=>g.id<b.id?-1:g.id>b.id?1:0);let p=new Set,h=[];for(let{s:g,o:b}of c){let y=u(a(g)),w=u(a(b));if(y===w)continue;let v=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has(v)||(p.add(v),h.push({subject:y,object:w}))}return h.sort((g,b)=>`${g.subject}${g.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:h,conceptIdForTerm:g=>{let b=Q(g);return r.has(b)?u(a(b)):null},namespace:tT}}function ld(e,t,n={}){let s=sT(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=Q(t),l=[i.prefLabel,...i.altLabels].filter(u=>u!==a),c=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:l,related:c}}var tT,nT,ud=O(()=>{sn();tT="http://www.w3.org/2004/02/skos/core#",nT={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function dd(e,{config:t,memoryBackend:n=null}){let s=nt(e,"term"),o=ld(await mn(t,n),s);if(!o)throw new _e(`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)"),As({content:r.join(`
156
+ `),data:o})}var jb=O(()=>{Ut();ud();mo();Ge();dd.ownsGraphLoad=!0});function bT(e,t){let n=[];for(let s of t||[])s?.predicate===oT&&Q(s.subject)===e&&n.push(Q(s.object));return n}function Ya(e,t){let n=Q(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 bT(i,t))s.has(a)||o.push(a)}}return r}var oT,rT,iT,aT,cT,lT,uT,dT,pT,fT,hT,mT,gT,_b,pd=O(()=>{sn();oT="rdfs:subClassOf",rT='<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>',iT='<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>',aT='<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>',cT='<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>',lT='<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>',uT='<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>',dT='<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>',pT='<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>',fT='<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>',hT='<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>',mT='<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>',gT='<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>',_b=Object.freeze({spider:rT,fly:iT,egg:aT,poodle:cT,dog:lT,animal:uT,room:dT,furniture:pT,portable:fT,person:hT,adventurer:mT,container:gT})});function wT(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function Rb(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 wT(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var Tb=O(()=>{});function yT(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function $T(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function Ob(e){return $T(e).filter(t=>t?.property&&t.value!==void 0)}function vT(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function xT(e,t){let n=null,s=0;for(let o of e){let r=Ob(o);r.length<=s||vT(r,t)&&(n=o,s=r.length)}return n}function ET(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 Ab(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(l=>l.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,l.object));if(!i)continue;let a=ET(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function ST(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 Ib(e,t){let n=t;for(let s of ST(e))n=n.split(s).join("");return n}function Cb(e,t,n){let s=yT(e,n),o=xT(s,t);if(o&&!o.parameters)return o.svg;if(o)return Ib(o,Ab(o,t)||o.svg);for(let a of s){if(a.match||!a.parameters)continue;let l=Ab(a,t);if(l)return l}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?Ib(i,i.svg):null}function kT(e,t,n,s,o,r){for(let a of Ya(e,t)){let l=Cb(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=Cb(r,n,s);return i||o[r]}function Lb(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=kT(e,t,n,s,o,r);return i?Rb(a,i):a}var hP,mP,fd=O(()=>{pd();Tb();hP=Object.freeze(["left","half-left","half-right","right"]),mP=Object.freeze(["moving"])});function hd(e){for(let t of e||[])if(t?.predicate===jT&&Object.prototype.hasOwnProperty.call(Nb,t.object))return Nb[t.object];return 1}var jT,Nb,Pb=O(()=>{jT="mgx:hasProperty",Nb=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function Mb(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||{},l=a.resolveSpriteAsset;if(typeof l!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let c=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],f=a.rootFallback||"animal",p=a.classAncestorChain,h=a.sizeScaleFor,m=a.expressionPalette,g=[];r&&g.push({predicate:n,object:r}),i&&g.push({predicate:s,object:i});let b={rootFallback:f};a.instanceKey&&(b.instanceKey=a.instanceKey);let y=l(o,d,g,c,u,b),w=R=>l(R,[],g,c,{},{rootFallback:R}),v=R=>Object.prototype.hasOwnProperty.call(u,R),_=(R,j)=>{let A=c.filter(P=>P&&Array.isArray(P.classes)&&P.classes.indexOf(R)>=0),T=A.find(P=>P.svg===j)||A.find(P=>!P.match&&P.parameters)||null;return T?{classes:T.classes.slice(),parameters:Object.keys(T.parameters||{}).sort(),match:T.match||null}:null},$=null,x=null;if(typeof p=="function"){$=[];for(let R of p(o,d)){let j=w(R);if($.push({term:R,template:!!j,registry:v(R)}),j){x={term:R,via:"template",hops:$.length-1,root:!1,template:_(R,j)};break}if(v(R)){x={term:R,via:"registry",hops:$.length-1,root:!1,template:null};break}}if(!x){let R=w(f);$.push({term:f,template:!!R,registry:v(f),root:!0}),x={term:f,via:R?"template":"registry",hops:$.length-1,root:!0,template:R?_(f,R):null}}}let S=a.instanceKey?l(o,d,g,c,u,{rootFallback:f}):y,E=r?l(o,d,g.filter(R=>R.predicate!==n),c,u,{rootFallback:f}):null;return{class:o,expression:r||null,size:i||null,svg:y,scale:typeof h=="function"?h(g):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?S!==E:null,rootFallback:f,fellBackToRoot:x?!!x.root:null,chain:$,matched:x}}var Fb=O(()=>{});var Db,zb,_T,$P,Ub=O(()=>{fd();Db="icon tier",zb="sprite tier",_T=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."})}),$P=Object.freeze(Object.values(_T).map(e=>e.predicate))});var Bb,Wb=O(()=>{Bb=()=>[]});var Gb,Vb=O(()=>{Gb=()=>[]});function IT(){let e=Gb();return e.length?{templates:e,tier:zb}:{templates:Bb(),tier:Db}}function qb(e){return e.map(t=>t.term).join(" -> ")}async function md(e,{config:t,memoryBackend:n=null}){let s=nt(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(Ao,o))throw new _e(`"${o}" is not a sprite expression. The palette holds: ${TT().join(", ")}.`);if(r&&!AT(r))throw new _e(`"${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}=IT(),l=await mn(t,n),c=Mb({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:_b,resolveSpriteAsset:Lb,classAncestorChain:Ya,sizeScaleFor:hd,expressionPalette:Ao});if(!c.svg||c.fellBackToRoot)throw new _e(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${qb(c.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!c.expressionApplied)throw new _e(`the ${a} draws "${s}" (matched at "${c.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}`,c.matched.hops===0?`matched at "${c.matched.term}", the class itself, via its own ${c.matched.via}`:`matched at "${c.matched.term}", ${c.matched.hops} hop(s) up the ancestor chain, via its ${c.matched.via}`,`ancestor chain walked: ${qb(c.chain)}`];return c.matched.template?.parameters.length&&d.push(`template parameters: ${c.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${c.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${c.svg.length} characters of SVG markup`),As({content:d.join(`
157
+ `),data:{class:c.class,expression:c.expression,size:c.size,tier:a,scale:c.scale,svg:c.svg,chain:c.chain,matched:c.matched,expressionApplied:c.expressionApplied}})}var RT,TT,AT,Hb=O(()=>{Ut();pd();fd();Lc();Pb();Fb();Ub();Wb();Vb();mo();Ge();RT="mgx:hasProperty",TT=()=>Object.keys(Ao).sort(),AT=e=>!!e&&hd([{predicate:RT,object:String(e)}])!==1;md.ownsGraphLoad=!0});function Kb(e,{graph:t}){return Cf(t,{pkg:String(e?.package||"").trim()})}var Yb=O(()=>{Oe()});function Xb(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return Zf(t,s)}var Jb=O(()=>{Oe();Ge()});function Qb(e,{graph:t}){return Nf(t)}var Zb=O(()=>{Oe()});function tw(e,t){return As({content:e,data:t,text:`${e}${ew}${JSON.stringify(t,null,2)}`})}function nw(e,{graph:t}){let{content:n,tmct_ask:s}=_s(t,nt(e,"query"));return tw(n,s)}var ew,Xa=O(()=>{Rs();Ge();ew=`
158
158
 
159
159
  ---tmct_ask---
160
- `});var ew,tw=O(()=>{Oe();Ge();ew=rt(If)});var nw,sw=O(()=>{Oe();Ge();nw=rt(Of)});var ow,rw=O(()=>{Oe();Ge();ow=rt(zf)});var iw,aw=O(()=>{Oe();Ge();iw=rt(Bf)});var cw,lw=O(()=>{Oe();Ge();cw=rt(Wf)});var uw,dw=O(()=>{Oe();Ge();uw=rt(Nf)});var pw,fw=O(()=>{Oe();Ge();pw=rt(Pf)});var hw,mw=O(()=>{Oe();Ge();hw=rt(Ff)});var gw,bw=O(()=>{Oe();Ge();gw=rt(Yf)});function TT(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function AT(e){let t=(e||[]).map(TT);return t.map(n=>JSON.stringify(n)).join(`
160
+ `});var sw,ow=O(()=>{Oe();Ge();sw=it(Lf)});var rw,iw=O(()=>{Oe();Ge();rw=it(Pf)});var aw,cw=O(()=>{Oe();Ge();aw=it(Wf)});var lw,uw=O(()=>{Oe();Ge();lw=it(Vf)});var dw,pw=O(()=>{Oe();Ge();dw=it(qf)});var fw,hw=O(()=>{Oe();Ge();fw=it(Ff)});var mw,gw=O(()=>{Oe();Ge();mw=it(Df)});var bw,ww=O(()=>{Oe();Ge();bw=it(Uf)});var yw,$w=O(()=>{Oe();Ge();yw=it(Qf)});function CT(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function OT(e){let t=(e||[]).map(CT);return t.map(n=>JSON.stringify(n)).join(`
161
161
  `)+(t.length?`
162
- `:"")}function ww(e){return AT(vt(e))}var yw=O(()=>{Ve()});async function hd(e,{config:t,memoryBackend:n=null}){let s=n?null:await Ls($e($e(t.graphFile))),o=n||s.dir;try{return ww(await Ct(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var $w=O(()=>{yw();Ue();Ve();hd.ownsGraphLoad=!0});async function md(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 Ls($e($e(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0}),l=a.extracted.length+a.optimistic.length,c=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${l} fact(s) grounded.`;return Ts({content:l?`${c}
162
+ `:"")}function vw(e){return OT(vt(e))}var xw=O(()=>{Ve()});async function gd(e,{config:t,memoryBackend:n=null}){let s=n?null:await Ns(ye(ye(t.graphFile))),o=n||s.dir;try{return vw(await Ct(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var Ew=O(()=>{xw();Ue();Ve();gd.ownsGraphLoad=!0});async function bd(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 Ns(ye(ye(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0}),l=a.extracted.length+a.optimistic.length,c=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${l} fact(s) grounded.`;return As({content:l?`${c}
163
163
  ${a.canonical.join(`
164
- `)}`:c,data:{...a,grounded:l}})}finally{await i()}}var vw=O(()=>{Ue();Ve();Ge();md.ownsGraphLoad=!0});var IT,xw=O(()=>{Ul();Em();ub();pb();hb();gb();wb();$b();xb();Eb();Gb();qb();Kb();Xb();Xa();tw();sw();rw();aw();lw();dw();fw();mw();bw();$w();vw();IT=Object.freeze({tmct_context:zl,tmct_context_more:xm,tmct_describe:lb,tmct_snippet:db,tmct_signature:fb,tmct_impact:mb,tmct_search:bb,tmct_members:yb,tmct_subclasses:vb,tmct_related:ld,tmct_sprite:fd,tmct_architecture:Vb,tmct_exports:Hb,tmct_untested:Yb,tmct_ask:Zb,tmct_tests_for:ew,tmct_history:nw,tmct_file_history:ow,tmct_method_history:iw,tmct_class_history:cw,tmct_callers:uw,tmct_callees:pw,tmct_calls:hw,tmct_cochanges:gw,tmct_export:hd,tmct_ingest:md})});var gd=O(()=>{});var Ja,bd=O(()=>{Ja=()=>({relations:[],constructions:[]})});var Ew,Sw=O(()=>{_t();Ue();Lp();Ut();_r();_s();aa();ca();xw();Xa();Ge();zo();Ki();gd();bd();ca();Ul();Xa();Yi(void 0);Hi(Ja);Ew=Op.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var bF,wF,yF,Qa=O(()=>{bF=Object.freeze(["entity","set","event","measure"]),wF=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),yF=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 pt,vF,xF,EF,SF,kF,jF,_F,RF,TF,AF,IF,CF,OF,LF,NF,PF,CT,MF,FF,kw=O(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},vF=pt("createRequire"),xF=pt("readFileSync"),EF=pt("access"),SF=pt("readFile"),kF=pt("writeFile"),jF=pt("appendFile"),_F=pt("mkdir"),RF=pt("mkdtemp"),TF=pt("rename"),AF=pt("unlink"),IF=pt("rm"),CF=pt("stat"),OF=pt("copyFile"),LF=pt("readdir"),NF=pt("createReadStream"),PF=pt("createWriteStream"),CT=pt("randomBytes"),MF=pt("spawnSync"),FF=pt("createInterface")});var Za=O(()=>{kw()});var ft,BF,WF,GF,VF,qF,HF,KF,YF,XF,JF,QF,ZF,eD,tD,nD,sD,Ht,oD,rD,iD,Ps=O(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},BF=ft("createRequire"),WF=ft("readFileSync"),GF=ft("access"),VF=ft("readFile"),qF=ft("writeFile"),HF=ft("appendFile"),KF=ft("mkdir"),YF=ft("mkdtemp"),XF=ft("rename"),JF=ft("unlink"),QF=ft("rm"),ZF=ft("stat"),eD=ft("copyFile"),tD=ft("readdir"),nD=ft("createReadStream"),sD=ft("createWriteStream"),Ht=e=>String(e),oD=ft("randomBytes"),rD=ft("spawnSync"),iD=ft("createInterface")});var OT,jw,dD,pD,fD,yd=O(()=>{_t();Ps();Ue();OT={},jw=J($e(Ht(OT.url)),"..","..",".."),dD=J(jw,"data","templates","responses.jsonl"),pD=J(jw,"data","phrasebook","software-phrases.txt"),fD=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function NT(e,t={}){let n=LT.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function PT(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>NT(s,t))):1}function Ze(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:PT(s,t)})).sort((s,o)=>o.bias-s.bias||(o.row?.trust??0)-(s.row?.trust??0)||s.index-o.index).map(s=>s.row)}var LT,_w=O(()=>{LT=/^src:corpus:(.+)$/});var ht,gD,pr,bD,wD,yD,$D,vD,xD,ED,SD,kD,jD,_D,RD,MT,FT,TD,AD,ID,mo=O(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},gD=ht("createRequire"),pr=ht("readFileSync"),bD=ht("access"),wD=ht("readFile"),yD=ht("writeFile"),$D=ht("appendFile"),vD=ht("mkdir"),xD=ht("mkdtemp"),ED=ht("rename"),SD=ht("unlink"),kD=ht("rm"),jD=ht("stat"),_D=ht("copyFile"),RD=ht("readdir"),MT=ht("createReadStream"),FT=ht("createWriteStream"),TD=ht("randomBytes"),AD=ht("spawnSync"),ID=ht("createInterface")});function Rw(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 BT(e=zT){let t=or(pr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function $d(){if(ec===null)try{ec=BT()}catch{ec=[]}return ec}var WT,DT,zT,UT,DD,ec,vd=O(()=>{mo();Ps();Ue();La();yd();WT={},DT=$e(Ht(WT.url)),zT=J(DT,"..","..","data","templates","grammar-rules.toml"),UT=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),DD=Object.freeze(new Set(UT.filter(e=>e!=="prose")));ec=null});function GT(){if(di!==void 0)return di;try{let e=Tw?Tw():VT();di=e&&e.winkNLP&&e.model?e:null}catch{di=null}return di}function VT(){let e=process.getBuiltinModule("node:module").createRequire(qT.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function xd(){if(fr!==void 0)return fr;let e=GT();if(!e)return fr=null,null;try{fr=e.winkNLP(e.model)}catch{fr=null}return fr}var qT,Tw,di,fr,Ed=O(()=>{qT={}});var Aw=O(()=>{Ed()});var Cw,Iw=O(()=>{Cw={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:{},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:{},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:{},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"},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"]}});function JT(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 Ow(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!QT.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(!ZT.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 Ms(e,t=KT){if(!e&&Sd.has(t))return Sd.get(t);let n=Cw,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Ow(s,n),e?(Ow(s,e),s):(Sd.set(t,s),s)}function pi(e,t,n={}){return eA(e,t,n)[0]??null}function eA(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,l=c=>{c&&!a.has(c.lemma)&&(a.add(c.lemma),i.push(c))};if(r){let c=e.nouns.get(r)??null;return n.singularOnly&&o?(l(o),l(c)):(l(c),l(o)),i}for(let c of JT(s))l(e.nouns.get(c));return i}var KT,qD,HD,YT,XT,KD,QT,ZT,Sd,go=O(()=>{Iw();KT="tmct:",qD=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),HD=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),YT=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),XT=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),KD=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});QT=new Set(["data","object"]),ZT=new Set(["subclass","data"]);Sd=new Map});var QD,ZD,ez,tA,tz,nz,sz,Lw=O(()=>{_s();Oe();QD=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),ZD=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),ez=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`]}),tA=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"}),tz=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"]}),nz=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"}}),sz=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}`}]})});var tc=O(()=>{sn();go();Lw()});var nc,sc=O(()=>{nc=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var sA,gz,Nw=O(()=>{mo();sc();Ps();Ue();tc();sA={},gz=J($e(Ht(sA.url)),"..","..","..")});var Pw=O(()=>{sn();go();tc()});var oA,rA,Rz,kd=O(()=>{sn();go();zo();oA=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),rA=["this","is","about","the"],Rz=rA.length});var Mw=O(()=>{_t();Ue()});var jd=O(()=>{sn()});var iA,Wz,Fw=O(()=>{mo();sc();Ps();Ue();jd();sn();iA={},Wz=J($e(Ht(iA.url)),"..","..","..")});var Vz,qz,Hz,Dw=O(()=>{Vz=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),qz=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"})}),Hz=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});function fi(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 oc(e,t,{cap:n=6}={}){let s=[e],o=new Set([e]),r=e;for(;s.length<n;){let i=[...t.get(r)||[]].filter(a=>!o.has(a)).sort();if(!i.length)break;r=i[0],o.add(r),s.push(r)}return s}function zw(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 _d(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,_d(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function aA(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 cA(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=zw(e,n),c=zw(t,n);if(l.has(t)||c.has(e))return{distinct:!1,reason:"subsumes",lcs:l.has(t)?t:e};if(s.size)for(let m of l){let g=s.get(m);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(m=>c.has(m));if(!u.length)return l.size<2||c.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=m=>_d(m,n,o,new Set),f=u[0],p=d(f);for(let m of u){let g=d(m);(g>p||g===p&&m<f)&&(f=m,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let m=a.get(f);return typeof m=="number"&&m<r?{distinct:!0,reason:"low-ic",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}return 2*p/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}function rc(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],l=n||fi(t),c=aA(s),u=new Map,d=new Map(a.map(y=>[y,y])),f=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let v=f(y),_=f(w);v!==_&&d.set(v<_?_:v,v<_?v:_)},h=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let v=cA(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});h.push({a:a[y],b:a[w],...v}),v.distinct||p(a[y],a[w])}let m=new Map;for(let y of a){let w=f(y);m.has(w)||m.set(w,[]),m.get(w).push(y)}let g=y=>_d(y,l,u,new Set),b=[...m.values()].map(y=>{let w=[...y].sort(),v=w[0],_=g(v);for(let $ of w){let x=g($);x>_&&(_=x,v=$)}return{objects:w,label:v}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:h}}var ic=O(()=>{qt()});function Rd(e){return typeof e=="string"&&lA.test(e)}function Uw(e){return!!e&&typeof e=="object"&&bo(e.s)}function Td(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Rd(e.world)&&bo(e.subject)&&bo(e.predicate)&&bo(e.object)}function Ad(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Rd(e.world)||!bo(e.name)||!dA.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(bo)}function Id(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Rd(e.world)&&bo(e.opening)}function Bw(e){return Td(e)||Ad(e)||Id(e)}function Ww(e){let t=e||[],n=t.filter(c=>c.predicate===pA).sort((c,u)=>`${c.subject}\0${c.object}`.localeCompare(`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(c=>c.predicate==="rdf:type").map(c=>c.subject)),o=new Map;for(let c of t)c.predicate==="mgx:located-in"&&o.set(c.subject,c.object);let r=(c,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===c&&o.get(d.subject)===u),i=t.find(c=>typeof c.world=="string"&&c.kind==="fact"),a=(c,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:c,predicate:u,object:d}),l=[];for(let c of n){let u=c.subject,d=c.object;if(r(d,u))continue;let f=d,p=1;for(;s.has(f);)p+=1,f=`${d}-${p}`;s.add(f),l.push(a(f,"rdf:type",d)),l.push(a(f,"rdf:type","portable")),l.push(a(f,"mgx:located-in",u))}return l.length?[...t,...l]:t}var lA,uA,dA,bo,pA,wo=O(()=>{lA=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,uA=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),dA=new Set(uA),bo=e=>typeof e=="string"&&e.trim()!=="";pA="mgx:default-contains"});var hA,mA,gA,bA,wA,yA,$A,vA,xA,r2,EA,Gw,i2,a2,Vw=O(()=>{go();Mo();hA="subClassOf",mA="typeAssertion",gA="relation",bA="someValuesFrom",wA="cardinality",yA="disjointWith",$A="possessive",vA="adjective",xA="capability",r2=Object.freeze([hA,mA,gA,bA,wA,yA,$A,vA,xA]),EA=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Gw=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"]]),i2=Math.max(...[...Gw.keys()].map(e=>e.split(" ").length)),a2=[...new Set([...EA,...[...Gw.keys()].map(e=>e.split(" ")[0])])]});var yo=O(()=>{});var Cd=O(()=>{Oe();_s();yo()});function jt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:Fs.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 SA,Fs,ve,h2,mi,st,Ft,Kt,kA,qw,kt,jA,_A,Hw,m2,g2,b2,Kw=O(()=>{SA=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),Fs=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),ve=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),h2=Object.freeze([ve.MemoryTerm]),mi=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),st=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:Fs.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Ft=()=>Object.freeze({type:Fs.Precondition,pred:mi.graphLoaded}),Kt=(e,t)=>Object.freeze({type:Fs.Precondition,pred:mi.resolves,param:e,as:t}),kA=e=>Object.freeze({type:Fs.Precondition,pred:mi.anyPresent,params:Object.freeze([...e])}),qw=()=>Object.freeze({type:Fs.Precondition,pred:mi.memoryFacts}),kt=(e,t=null)=>Object.freeze({type:Fs.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});jA=Object.freeze([jt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[st("query",ve.Query,{required:!1,note:"required unless a kind filter is given"}),st("kind",ve.Kind,{required:!1}),st("name",ve.Query,{required:!1}),st("decorator",ve.Query,{required:!1})],preconditions:[Ft(),kA(["query","kind"])],add:[kt("matches","query")]}),jt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("description","symbol")]}),jt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("signature","symbol")]}),jt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[st("module",ve.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Ft(),Kt("module",ve.Symbol)],add:[kt("impact","module")]}),jt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[st("class",ve.Class,{arg:"class"})],preconditions:[Ft(),Kt("class",ve.Class)],add:[kt("members","class")]}),jt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[st("class",ve.Class,{arg:"class"})],preconditions:[Ft(),Kt("class",ve.Class)],add:[kt("subclasses","class")]}),jt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[st("module",ve.Module)],preconditions:[Ft(),Kt("module",ve.Module)],add:[kt("exports","module")]}),jt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("callers","symbol")]}),jt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("callees","symbol")]}),jt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("calls","symbol")]}),jt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("tests","symbol")]}),jt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Ft()],add:[kt("untested",null)]}),jt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("history","symbol")]}),jt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[st("symbol",ve.Symbol)],preconditions:[Ft(),Kt("symbol",ve.Symbol)],add:[kt("cochanges","symbol")]}),jt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[st("package",ve.Package,{required:!1})],preconditions:[Ft()],add:[kt("architecture","package")]}),jt({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[st("term",ve.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[qw(),Kt("term",ve.MemoryTerm)],add:[kt("related","term")]}),jt({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[st("class",ve.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),st("expression",ve.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),st("size",ve.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[qw(),Kt("class",ve.MemoryTerm)],add:[kt("sprite","class")]})]),_A=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Hw=jA,m2=_A(Hw),g2=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"}),b2=Object.freeze({prefixes:SA,vocab:Fs,kinds:ve,precond:mi,get capabilities(){return Hw}})});var Yw=O(()=>{Kw()});var Xw=O(()=>{Kn()});function TA(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||J(RA,"corpus","worlds")}function Jw(e){try{return nc(pr(e))}catch{return null}}function Qw(e){if(Od.has(e))return Od.get(e);let t=null,n=Jw(J(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 Od.set(e,t),t}function AA(e,t){let n=Qw(e);if(!n)return null;let s=n[String(t??"")];if(!Uw(s))return null;let o=`${e}\0${t}`;if(Ld.has(o))return Ld.get(o);let r=null,i=Jw(J(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
165
- `))if(u.trim())try{let d=JSON.parse(u);if(!Bw(d)||d.world!==t)continue;Td(d)?a.push(d):Ad(d)?l.push(d):Id(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:Ww(a),rules:l,meta:c})}return Ld.set(o,r),r}var CA,RA,Od,Ld,IA,A2,ac=O(()=>{mo();sc();Ps();Ue();wo();CA={},RA=J($e(Ht(CA.url)),"..","..","..");Od=new Map,Ld=new Map;IA=e=>({list:async()=>{let t=Qw(e());return t?Object.keys(t).sort():null},load:async t=>AA(e(),t)}),A2=IA(()=>TA())});var D2,Zw=O(()=>{_t();Ue();$s();Rr();Kn();Ve();D2=J(".tmct","memory","blocks")});var ey=O(()=>{yo()});var ny=O(()=>{$s();Rr();yo()});var Nd=O(()=>{$s();Rr();yo()});var sy=O(()=>{Nd();$s();Qs();yo()});var oy=O(()=>{});var ry=O(()=>{ey();ny();Nd();sy();oy();yo()});var iy=O(()=>{Zw();Ve();aa();vd();ry();Cd()});var ay=O(()=>{$n();Mo()});function hr(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function lc(e){let t=n=>PA.map((s,o)=>`--${n}-t${o+1}: ${hr(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: ${hr(e.taught,.12)}; --corpus-soft: ${hr(e.corpus,.12)};`,`--entail-soft: ${hr(e.entail,.14)}; --alert-soft: ${hr(e.alert,.12)};`,`--sprite-pop: drop-shadow(0 0 .6px ${hr(e.ink,e.popRimAlpha)}) drop-shadow(${e.popShadow});`].join(" ")}var cc,PA,NU,Pd=O(()=>{ay();cc=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)"})}),PA=[.35,.65,1];NU=`
166
- :root { color-scheme: light dark; ${lc(cc.light)} }
167
- @media (prefers-color-scheme: dark) { :root { ${lc(cc.dark)} } }
168
- :root[data-theme="dark"] { ${lc(cc.dark)} }
169
- :root[data-theme="light"] { ${lc(cc.light)} }
170
- `});var cy=O(()=>{Pd()});var ly=O(()=>{Pd()});var py=O(()=>{Ve();wo();$n();gi()});var Md,UA,BA,WA,GA,VA,qA,EB,SB,gi=O(()=>{wo();Vw();go();Qa();Cd();Yw();Xw();ac();Ve();iy();cy();ly();py();Md="mgx:world-epoch",UA=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),BA=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),WA="mgx:is-open",GA="mgx:hasMass",VA="mgx:knows-about",qA="mgx:display-name",EB=new Set([...UA,...BA,WA,GA,VA,qA,"rdf:type",Md]),SB=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 mr,jB,_B,RB,TB,AB,IB,Ds=O(()=>{mr=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})}),jB=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"}),_B=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"}),RB=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"}),TB=Object.freeze({teach:"teach"}),AB=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),IB=Object.freeze({max_depth:"maxDepth"})});var my,HA,dc,KA,YA,gy,by,XA,JA,LB,QA,ZA,wy=O(()=>{Ds();my="spider-fly",HA=10,dc=Object.freeze({x:2,y:2}),KA=1,YA=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}),gy=(e,t)=>`cell-${e}-${t}`,by=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),XA=(e,t)=>by(e,t,dc.x,dc.y)<=KA,JA=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})}),LB=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"])]),QA="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.",ZA=Object.freeze({name:my,gridSize:HA,opening:QA,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:XA,webHomeCell:gy(dc.x,dc.y)})});var yy,Ey,MB,FB,DB,Fd,$y,vy,xy,Dd,zB,UB,pc=O(()=>{Ds();yy=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),Ey=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})}),MB=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),FB=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),DB=Object.freeze([yy.spawnedFood,yy.placedFood]),Fd=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),$y=Fd({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"}]}),vy=Fd({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"}]}),xy=Fd({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"}]}),Dd=Object.freeze({[$y.name]:$y,[vy.name]:vy,[xy.name]:xy}),zB=Object.freeze(Object.keys(Dd)),UB=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 Sy=O(()=>{});var ky=O(()=>{});var bi,lW,aI,cI,lI,uI,dI,pI,fI,hI,mI,gI,bI,wI,yI,$I,vI,xI,EI,uW,zd=O(()=>{pc();Sy();Qs();Ve();wo();ky();sn();Ds();gi();bi=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"}}),lW=Object.freeze(["predator","prey"]),aI="mgx:currently-in",cI="mgx:hasMass",lI="mgx:feels",uI="mgx:facing",dI="mgx:driven-facing",pI="mgx:eaten-by",fI="mgx:starved",hI="mgx:placed-by",mI="mgx:model",gI="mgx:rotation",bI="mgx:carrying",wI="mgx:prey-eaten",yI="mgx:web-built-at-turn",$I="mgx:laid-at-turn",vI="mgx:hatched-into",xI="mgx:turn-played",EI=new Set([aI,cI,lI,uI,dI,pI,fI,hI,mI,gI,xI,bI,wI,yI,$I,vI,"rdf:type",Md]),uW=Object.freeze([...EI].sort())});var RW,TW,_y=O(()=>{wy();pc();zd();wo();ac();Ve();Ds();RW=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"),TW=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var HW,KW,YW,XW,JW,QW,_I,RI,TI,AI,Ry,Ty,II,ZW,eG,Ay=O(()=>{pc();zd();gi();$n();wo();ac();Ve();Ds();HW=bi.predator.kind,KW=bi.prey.kind,YW=bi.food.spawnedKind,XW=bi.food.placedKind,JW=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"),QW=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"),_I="mgx:currently-in",RI="mgx:hasMass",TI="mgx:feels",AI="mgx:facing",Ry="(fox|goblin|crumb|morsel)(?:-(\\d+))?",Ty="(fox|goblin)(?:-(\\d+))?",II="(crumb|morsel)(?:-(\\d+))?",ZW=[{kind:"placement",predicate:_I,re:new RegExp(`^(?:the\\s+)?${Ry}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:RI,re:new RegExp(`^(?:the\\s+)?${Ry}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:TI,re:new RegExp(`^(?:the\\s+)?${Ty}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:AI,re:new RegExp(`^(?:the\\s+)?${Ty}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],eG=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${II}\\s+there[.!\\s]*$`,"i")});var mt,nG,sG,oG,rG,iG,aG,cG,lG,uG,dG,pG,fG,hG,mG,gG,bG,wG,yG,$G,Iy=O(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},nG=mt("createRequire"),sG=mt("readFileSync"),oG=mt("access"),rG=mt("readFile"),iG=mt("writeFile"),aG=mt("appendFile"),cG=mt("mkdir"),lG=mt("mkdtemp"),uG=mt("rename"),dG=mt("unlink"),pG=mt("rm"),fG=mt("stat"),hG=mt("copyFile"),mG=mt("readdir"),gG=mt("createReadStream"),bG=mt("createWriteStream"),wG=mt("randomBytes"),yG=mt("spawnSync"),$G=mt("createInterface")});var gt,xG,EG,SG,kG,jG,_G,RG,TG,AG,IG,CG,OG,LG,NG,PG,MG,FG,DG,CI,Cy=O(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},xG=gt("createRequire"),EG=gt("readFileSync"),SG=gt("access"),kG=gt("readFile"),jG=gt("writeFile"),_G=gt("appendFile"),RG=gt("mkdir"),TG=gt("mkdtemp"),AG=gt("rename"),IG=gt("unlink"),CG=gt("rm"),OG=gt("stat"),LG=gt("copyFile"),NG=gt("readdir"),PG=gt("createReadStream"),MG=gt("createWriteStream"),FG=gt("randomBytes"),DG=gt("spawnSync"),CI=gt("createInterface")});var bt,UG,BG,WG,GG,VG,qG,HG,KG,YG,XG,JG,QG,ZG,eV,tV,nV,sV,Oy,oV,Ud=O(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},UG=bt("createRequire"),BG=bt("readFileSync"),WG=bt("access"),GG=bt("readFile"),VG=bt("writeFile"),qG=bt("appendFile"),HG=bt("mkdir"),KG=bt("mkdtemp"),YG=bt("rename"),XG=bt("unlink"),JG=bt("rm"),QG=bt("stat"),ZG=bt("copyFile"),eV=bt("readdir"),tV=bt("createReadStream"),nV=bt("createWriteStream"),sV=bt("randomBytes"),Oy=bt("spawnSync"),oV=bt("createInterface")});var Ly=O(()=>{Ud();Ue();_t();Ue();Ma();Ut()});var Ny=O(()=>{});var OI,Py=O(()=>{_t();Ue();Ve();Ny();OI=J(".tmct","sessions")});var Fy=O(()=>{_t();Ue();Za()});var wt,kV,jV,_V,RV,TV,AV,IV,CV,OV,LV,NV,PV,MV,FV,DV,zV,UV,BV,LI,Dy=O(()=>{wt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},kV=wt("createRequire"),jV=wt("readFileSync"),_V=wt("access"),RV=wt("readFile"),TV=wt("writeFile"),AV=wt("appendFile"),IV=wt("mkdir"),CV=wt("mkdtemp"),OV=wt("rename"),LV=wt("unlink"),NV=wt("rm"),PV=wt("stat"),MV=wt("copyFile"),FV=wt("readdir"),DV=wt("createReadStream"),zV=wt("createWriteStream"),UV=wt("randomBytes"),BV=wt("spawnSync"),LI=wt("createInterface")});var PI,gr,zy,NI,Uy,JV,fs,QV,fc,ZV,By=O(()=>{mo();_t();Dy();Ps();Ue();La();Ve();PI={},gr=J($e(Ht(PI.url)),"..","..",".."),zy=J(gr,"corpus","conceptnet","slice.jsonl"),NI=J(gr,"src","adapters","corpus","conceptnet-map.toml"),Uy=J(gr,"corpus","seon","concepts.jsonl"),JV=J(gr,"corpus","seon","definitions.jsonl"),fs=J(gr,"corpus","tier2"),QV=J(fs,"manifest.json"),fc=J(gr,"corpus","wordnet"),ZV=J(fc,"manifest.json")});function DI(){return{seon:{kind:"corpus",active:!1,corpusPath:Uy,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:zy,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:FI},human:{kind:"corpus",active:!0,corpusPath:J(fs,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:J(fs,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:J(fs,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:J(fs,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:J(fs,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:J(fs,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:J(fs,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:J(fc,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:J(fc,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:J(MI,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var zI,MI,uq,FI,dq,Wy=O(()=>{Ue();_t();Ps();Ma();By();zI={},MI=J($e(Ht(zI.url)),"..","..","corpus","namenet"),uq=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),FI=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];dq=Object.freeze(DI())});var Gy=O(()=>{});var Vy=O(()=>{Ue();mo();_t();Iy();Cy();Ud();Ut();Ly();Oe();Py();Za();Fy();_r();Wy();hc();Ds();Qa();kd();Gy()});var qy={};Wn(qy,{proseLemma:()=>BI});function BI(){if($o!==void 0)return $o;try{let e=xd();if(!e)return $o=null,$o;let t=e.its,n=new Map;$o=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{$o=null}return $o}var $o,Hy=O(()=>{Ed()});var Ky={};Wn(Ky,{digestTermFromRows:()=>VI,loadDigestStructureTable:()=>GI,readDigestStructures:()=>WI});var WI,GI,VI,Yy=O(()=>{WI=()=>null,GI=()=>null,VI=()=>null});function ep(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 ${mc(e.entityType)}`;if(t==="list")return`list/enumerate ${mc(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${mc(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 ep(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&&bn[o]?bn[o]:`filter/traverse ${mc(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&&bn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?bn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function cp(e){let t=new Map;for(let n of e)t.has(Jy(n))||t.set(Jy(n),n);return t}function Gd(e,t=yi){let n=[],s=[];for(let l of e)l.predicate===t&&(s.push([l.subject,l.object]),vo(l)&&n.push([l.subject,l.object]));let o=new Map,r=new Map,i=new Set,a=(l,c,u)=>{!c||!u||c===u||(l.has(c)||l.set(c,new Set),l.get(c).add(u))};for(let[l,c]of s)a(r,l,c),c&&i.add(c);for(let[l,c]of n)a(o,l,c);return{strictEdges:n,broadEdges:s,strictSucc:o,broadSucc:r,reachableHeads:i}}function Vd(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 QI(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function ZI(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(Hy(),qy)),s=n();return s?QI(t,s(t)):t}catch{return t}}function up(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)||eC.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 Kd(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return dr;if(t==="can")return"mgx:capableOf";try{let n=await ZI(t);return n==="have"?dr:is(`mgx:${n}`)}catch{return is(`mgx:${t}`)}}function iC(e,t){let n=String(t||"").match(rC);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function wi(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(_s(),bm)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function uC(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 E$(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`:/(?:s|x|z|ch|sh|o)es$/i.test(t)?t.slice(0,-2):t.replace(/s$/i,"")}function S$(e){if(xo[e])return xo[e];let t=String(e||""),n=zm(t);if(n){let a=S$(n);if(a==="can")return"cannot";if(a==="can be")return"cannot be";if(a==="is"||a.startsWith("is "))return`is not${a.slice(2)}`;let[l,...c]=a.split(" ");return["does not",E$(l),...c].join(" ")}let s=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(t);if(s)return`is ${s[1].replace(/-/g," ")} than`;let o=new RegExp(`^mgx:(${dp})-([a-z]+)$`,"i").exec(t);if(o)return`is ${o[1].toLowerCase()} ${o[2].toLowerCase()}`;let r=/^mgx:same-([a-z]+)-as$/i.exec(t);if(r)return`has the same ${r[1].toLowerCase()} as`;let i=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(t);return i?`${uC(i[1])}${i[2]?` ${i[2]}`:""}`:e}function Xd(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function pC(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of dC)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 Un(e){return e.replace(/#node:[0-9a-f]+/g,"")}function ie(e){let t=e.provenance?` (source: ${Un(e.provenance)})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Dt(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Dt(e)}${t}`:e.provenance.includes("corpus:")?`${Dt(e)}${t}`:e.provenance.includes("reference:")?`${Dt(e)}${t}`:`i learned: ${Dt(e)}${t}`}function e$(e,t,n){let s=ie(e);if(!ms.has(e.predicate)||!n.has(e.subject))return s;let o=oc(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(fC);return i?s.slice(0,i.index)+r+i[0]:s+r}function t$(e,t,n,{indent:s=""}={}){let o=t.filter(_=>_.predicate===yi).map(_=>[_.subject,_.object]),r=fi(o),i=e.map(_=>`${s}${e$(_,r,n)}`),a=e.filter(_=>ms.has(_.predicate)&&n.has(_.subject)),l=[...new Set(a.map(_=>_.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(_=>_.predicate==="owl:disjointWith").map(_=>[_.subject,_.object]),{split:u,clusters:d}=rc(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let _ of d)for(let $ of _.objects)p.set($,_);let h=e.filter(_=>!(ms.has(_.predicate)&&n.has(_.subject))),m=[],g=[],b=0,y=_=>{let $=e$(_,r,n);return b<Se?(b+=1,`${s}${$}`):(g.push($),null)};for(let _ of d){let $=a.filter(x=>p.get(x.object)===_).map(y).filter(Boolean);$.length&&m.push(`${s}${f}, the ${_.label}:
164
+ `)}`:c,data:{...a,grounded:l}})}finally{await i()}}var Sw=O(()=>{Ue();Ve();Ge();bd.ownsGraphLoad=!0});var LT,kw=O(()=>{Wl();jm();fb();mb();bb();yb();vb();Eb();kb();jb();Hb();Yb();Jb();Zb();Xa();ow();iw();cw();uw();pw();hw();gw();ww();$w();Ew();Sw();LT=Object.freeze({tmct_context:Bl,tmct_context_more:km,tmct_describe:pb,tmct_snippet:hb,tmct_signature:gb,tmct_impact:wb,tmct_search:$b,tmct_members:xb,tmct_subclasses:Sb,tmct_related:dd,tmct_sprite:md,tmct_architecture:Kb,tmct_exports:Xb,tmct_untested:Qb,tmct_ask:nw,tmct_tests_for:sw,tmct_history:rw,tmct_file_history:aw,tmct_method_history:lw,tmct_class_history:dw,tmct_callers:fw,tmct_callees:mw,tmct_calls:bw,tmct_cochanges:yw,tmct_export:gd,tmct_ingest:bd})});var wd=O(()=>{});var Ja,yd=O(()=>{Ja=()=>({relations:[],constructions:[]})});var jw,_w=O(()=>{_t();Ue();Mp();Ut();Rr();Rs();aa();ca();kw();Xa();Ge();Uo();Ki();wd();yd();ca();Wl();Xa();Yi(void 0);Hi(Ja);jw=Pp.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var EF,SF,kF,Qa=O(()=>{EF=Object.freeze(["entity","set","event","measure"]),SF=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),kF=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 pt,_F,RF,TF,AF,IF,CF,OF,LF,NF,PF,MF,FF,DF,zF,UF,BF,NT,WF,GF,Rw=O(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},_F=pt("createRequire"),RF=pt("readFileSync"),TF=pt("access"),AF=pt("readFile"),IF=pt("writeFile"),CF=pt("appendFile"),OF=pt("mkdir"),LF=pt("mkdtemp"),NF=pt("rename"),PF=pt("unlink"),MF=pt("rm"),FF=pt("stat"),DF=pt("copyFile"),zF=pt("readdir"),UF=pt("createReadStream"),BF=pt("createWriteStream"),NT=pt("randomBytes"),WF=pt("spawnSync"),GF=pt("createInterface")});var Za=O(()=>{Rw()});var ft,KF,YF,XF,JF,QF,ZF,eD,tD,nD,sD,oD,rD,iD,aD,cD,lD,Ht,uD,dD,pD,Ms=O(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},KF=ft("createRequire"),YF=ft("readFileSync"),XF=ft("access"),JF=ft("readFile"),QF=ft("writeFile"),ZF=ft("appendFile"),eD=ft("mkdir"),tD=ft("mkdtemp"),nD=ft("rename"),sD=ft("unlink"),oD=ft("rm"),rD=ft("stat"),iD=ft("copyFile"),aD=ft("readdir"),cD=ft("createReadStream"),lD=ft("createWriteStream"),Ht=e=>String(e),uD=ft("randomBytes"),dD=ft("spawnSync"),pD=ft("createInterface")});var PT,Tw,bD,wD,yD,vd=O(()=>{_t();Ms();Ue();PT={},Tw=J(ye(Ht(PT.url)),"..","..",".."),bD=J(Tw,"data","templates","responses.jsonl"),wD=J(Tw,"data","phrasebook","software-phrases.txt"),yD=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function FT(e,t={}){let n=MT.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function DT(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>FT(s,t))):1}function Ze(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:DT(s,t)})).sort((s,o)=>o.bias-s.bias||(o.row?.trust??0)-(s.row?.trust??0)||s.index-o.index).map(s=>s.row)}var MT,Aw=O(()=>{MT=/^src:corpus:(.+)$/});var ht,xD,fr,ED,SD,kD,jD,_D,RD,TD,AD,ID,CD,OD,LD,zT,UT,ND,PD,MD,go=O(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},xD=ht("createRequire"),fr=ht("readFileSync"),ED=ht("access"),SD=ht("readFile"),kD=ht("writeFile"),jD=ht("appendFile"),_D=ht("mkdir"),RD=ht("mkdtemp"),TD=ht("rename"),AD=ht("unlink"),ID=ht("rm"),CD=ht("stat"),OD=ht("copyFile"),LD=ht("readdir"),zT=ht("createReadStream"),UT=ht("createWriteStream"),ND=ht("randomBytes"),PD=ht("spawnSync"),MD=ht("createInterface")});function Iw(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 VT(e=WT){let t=rr(fr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function xd(){if(ec===null)try{ec=VT()}catch{ec=[]}return ec}var qT,BT,WT,GT,VD,ec,Ed=O(()=>{go();Ms();Ue();La();vd();qT={},BT=ye(Ht(qT.url)),WT=J(BT,"..","..","data","templates","grammar-rules.toml"),GT=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),VD=Object.freeze(new Set(GT.filter(e=>e!=="prose")));ec=null});function HT(){if(pi!==void 0)return pi;try{let e=Cw?Cw():KT();pi=e&&e.winkNLP&&e.model?e:null}catch{pi=null}return pi}function KT(){let e=process.getBuiltinModule("node:module").createRequire(YT.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function Sd(){if(hr!==void 0)return hr;let e=HT();if(!e)return hr=null,null;try{hr=e.winkNLP(e.model)}catch{hr=null}return hr}var YT,Cw,pi,hr,kd=O(()=>{YT={}});var Ow=O(()=>{kd()});var Nw,Lw=O(()=>{Nw={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:{},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:{},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:{},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"},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"]}});function eA(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 Pw(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!tA.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(!nA.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 Fs(e,t=JT){if(!e&&jd.has(t))return jd.get(t);let n=Nw,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Pw(s,n),e?(Pw(s,e),s):(jd.set(t,s),s)}function fi(e,t,n={}){return sA(e,t,n)[0]??null}function sA(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,l=c=>{c&&!a.has(c.lemma)&&(a.add(c.lemma),i.push(c))};if(r){let c=e.nouns.get(r)??null;return n.singularOnly&&o?(l(o),l(c)):(l(c),l(o)),i}for(let c of eA(s))l(e.nouns.get(c));return i}var JT,QD,ZD,QT,ZT,ez,tA,nA,jd,bo=O(()=>{Lw();JT="tmct:",QD=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),ZD=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),QT=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),ZT=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),ez=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});tA=new Set(["data","object"]),nA=new Set(["subclass","data"]);jd=new Map});var oz,rz,iz,oA,az,cz,lz,Mw=O(()=>{Rs();Oe();oz=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),rz=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),iz=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`]}),oA=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"}),az=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"]}),cz=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"}}),lz=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}`}]})});var tc=O(()=>{sn();bo();Mw()});var nc,sc=O(()=>{nc=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var iA,xz,Fw=O(()=>{go();sc();Ms();Ue();tc();iA={},xz=J(ye(Ht(iA.url)),"..","..","..")});var Dw=O(()=>{sn();bo();tc()});var aA,cA,Lz,_d=O(()=>{sn();bo();Uo();aA=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),cA=["this","is","about","the"],Lz=cA.length});var zw=O(()=>{_t();Ue()});var Rd=O(()=>{sn()});var lA,Yz,Uw=O(()=>{go();sc();Ms();Ue();Rd();sn();lA={},Yz=J(ye(Ht(lA.url)),"..","..","..")});var Jz,Qz,Zz,Bw=O(()=>{Jz=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),Qz=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"})}),Zz=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});var Ww,oc,rc=O(()=>{Ww=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"]),oc=new Set([...Ww,"property","concept","idea","content"])});function hi(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 ic(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 l=[...t.get(a)||[]].filter(d=>!i.has(d)).sort(uA);if(!l.length)break;let c=o?l.filter(d=>d===o||Td(d,t).has(o)):[];a=(c.length?c:l)[0];let u=s&&s.has(a);if(u&&r.length>1||(i.add(a),r.push(a),u))break}return r}function Td(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 Ad(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,Ad(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function dA(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 pA(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=Td(e,n),c=Td(t,n);if(l.has(t)||c.has(e))return{distinct:!1,reason:"subsumes",lcs:l.has(t)?t:e};if(s.size)for(let m of l){let g=s.get(m);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(m=>c.has(m));if(!u.length)return l.size<2||c.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=m=>Ad(m,n,o,new Set),f=u[0],p=d(f);for(let m of u){let g=d(m);(g>p||g===p&&m<f)&&(f=m,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let m=a.get(f);return typeof m=="number"&&m<r?{distinct:!0,reason:"low-ic",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}return 2*p/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}function ac(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],l=n||hi(t),c=dA(s),u=new Map,d=new Map(a.map(y=>[y,y])),f=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let v=f(y),_=f(w);v!==_&&d.set(v<_?_:v,v<_?v:_)},h=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let v=pA(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});h.push({a:a[y],b:a[w],...v}),v.distinct||p(a[y],a[w])}let m=new Map;for(let y of a){let w=f(y);m.has(w)||m.set(w,[]),m.get(w).push(y)}let g=y=>Ad(y,l,u,new Set),b=[...m.values()].map(y=>{let w=[...y].sort(),v=w[0],_=g(v);for(let $ of w){let x=g($);x>_&&(_=x,v=$)}return{objects:w,label:v}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:h}}var uA,cc=O(()=>{qt();rc();uA=(e,t)=>e<t?-1:e>t?1:0});function Id(e){return typeof e=="string"&&fA.test(e)}function Gw(e){return!!e&&typeof e=="object"&&wo(e.s)}function Cd(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Id(e.world)&&wo(e.subject)&&wo(e.predicate)&&wo(e.object)}function Od(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Id(e.world)||!wo(e.name)||!mA.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(wo)}function Ld(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Id(e.world)&&wo(e.opening)}function Vw(e){return Cd(e)||Od(e)||Ld(e)}function qw(e){let t=e||[],n=t.filter(c=>c.predicate===gA).sort((c,u)=>`${c.subject}\0${c.object}`.localeCompare(`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(c=>c.predicate==="rdf:type").map(c=>c.subject)),o=new Map;for(let c of t)c.predicate==="mgx:located-in"&&o.set(c.subject,c.object);let r=(c,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===c&&o.get(d.subject)===u),i=t.find(c=>typeof c.world=="string"&&c.kind==="fact"),a=(c,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:c,predicate:u,object:d}),l=[];for(let c of n){let u=c.subject,d=c.object;if(r(d,u))continue;let f=d,p=1;for(;s.has(f);)p+=1,f=`${d}-${p}`;s.add(f),l.push(a(f,"rdf:type",d)),l.push(a(f,"rdf:type","portable")),l.push(a(f,"mgx:located-in",u))}return l.length?[...t,...l]:t}var fA,hA,mA,wo,gA,yo=O(()=>{fA=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,hA=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),mA=new Set(hA),wo=e=>typeof e=="string"&&e.trim()!=="";gA="mgx:default-contains"});var wA,yA,$A,vA,xA,EA,SA,kA,jA,f2,_A,Hw,h2,m2,Kw=O(()=>{bo();Fo();wA="subClassOf",yA="typeAssertion",$A="relation",vA="someValuesFrom",xA="cardinality",EA="disjointWith",SA="possessive",kA="adjective",jA="capability",f2=Object.freeze([wA,yA,$A,vA,xA,EA,SA,kA,jA]),_A=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Hw=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"]]),h2=Math.max(...[...Hw.keys()].map(e=>e.split(" ").length)),m2=[...new Set([..._A,...[...Hw.keys()].map(e=>e.split(" ")[0])])]});var $o=O(()=>{});var Nd=O(()=>{Oe();Rs();$o()});function jt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:Ds.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 RA,Ds,$e,x2,gi,st,Ft,Kt,TA,Yw,kt,AA,IA,Xw,E2,S2,k2,Jw=O(()=>{RA=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),Ds=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),$e=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),x2=Object.freeze([$e.MemoryTerm]),gi=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),st=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:Ds.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Ft=()=>Object.freeze({type:Ds.Precondition,pred:gi.graphLoaded}),Kt=(e,t)=>Object.freeze({type:Ds.Precondition,pred:gi.resolves,param:e,as:t}),TA=e=>Object.freeze({type:Ds.Precondition,pred:gi.anyPresent,params:Object.freeze([...e])}),Yw=()=>Object.freeze({type:Ds.Precondition,pred:gi.memoryFacts}),kt=(e,t=null)=>Object.freeze({type:Ds.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});AA=Object.freeze([jt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[st("query",$e.Query,{required:!1,note:"required unless a kind filter is given"}),st("kind",$e.Kind,{required:!1}),st("name",$e.Query,{required:!1}),st("decorator",$e.Query,{required:!1})],preconditions:[Ft(),TA(["query","kind"])],add:[kt("matches","query")]}),jt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("description","symbol")]}),jt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("signature","symbol")]}),jt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[st("module",$e.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Ft(),Kt("module",$e.Symbol)],add:[kt("impact","module")]}),jt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[st("class",$e.Class,{arg:"class"})],preconditions:[Ft(),Kt("class",$e.Class)],add:[kt("members","class")]}),jt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[st("class",$e.Class,{arg:"class"})],preconditions:[Ft(),Kt("class",$e.Class)],add:[kt("subclasses","class")]}),jt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[st("module",$e.Module)],preconditions:[Ft(),Kt("module",$e.Module)],add:[kt("exports","module")]}),jt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("callers","symbol")]}),jt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("callees","symbol")]}),jt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("calls","symbol")]}),jt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("tests","symbol")]}),jt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Ft()],add:[kt("untested",null)]}),jt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("history","symbol")]}),jt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[st("symbol",$e.Symbol)],preconditions:[Ft(),Kt("symbol",$e.Symbol)],add:[kt("cochanges","symbol")]}),jt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[st("package",$e.Package,{required:!1})],preconditions:[Ft()],add:[kt("architecture","package")]}),jt({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[st("term",$e.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[Yw(),Kt("term",$e.MemoryTerm)],add:[kt("related","term")]}),jt({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[st("class",$e.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),st("expression",$e.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),st("size",$e.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[Yw(),Kt("class",$e.MemoryTerm)],add:[kt("sprite","class")]})]),IA=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Xw=AA,E2=IA(Xw),S2=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"}),k2=Object.freeze({prefixes:RA,vocab:Ds,kinds:$e,precond:gi,get capabilities(){return Xw}})});var Qw=O(()=>{Jw()});var Zw=O(()=>{Xn()});function OA(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||J(CA,"corpus","worlds")}function ey(e){try{return nc(fr(e))}catch{return null}}function ty(e){if(Pd.has(e))return Pd.get(e);let t=null,n=ey(J(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 Pd.set(e,t),t}function LA(e,t){let n=ty(e);if(!n)return null;let s=n[String(t??"")];if(!Gw(s))return null;let o=`${e}\0${t}`;if(Md.has(o))return Md.get(o);let r=null,i=ey(J(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
165
+ `))if(u.trim())try{let d=JSON.parse(u);if(!Vw(d)||d.world!==t)continue;Cd(d)?a.push(d):Od(d)?l.push(d):Ld(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:qw(a),rules:l,meta:c})}return Md.set(o,r),r}var PA,CA,Pd,Md,NA,F2,lc=O(()=>{go();sc();Ms();Ue();yo();PA={},CA=J(ye(Ht(PA.url)),"..","..","..");Pd=new Map,Md=new Map;NA=e=>({list:async()=>{let t=ty(e());return t?Object.keys(t).sort():null},load:async t=>LA(e(),t)}),F2=NA(()=>OA())});var H2,ny=O(()=>{_t();Ue();vs();Tr();Xn();Ve();H2=J(".tmct","memory","blocks")});var sy=O(()=>{$o()});var ry=O(()=>{vs();Tr();$o()});var Fd=O(()=>{vs();Tr();$o()});var iy=O(()=>{Fd();vs();Zs();$o()});var ay=O(()=>{});var cy=O(()=>{sy();ry();Fd();iy();ay();$o()});var ly=O(()=>{ny();Ve();aa();Ed();cy();Nd()});var uy=O(()=>{$n();Fo()});function mr(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function dc(e){let t=n=>zA.map((s,o)=>`--${n}-t${o+1}: ${mr(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: ${mr(e.taught,.12)}; --corpus-soft: ${mr(e.corpus,.12)};`,`--entail-soft: ${mr(e.entail,.14)}; --alert-soft: ${mr(e.alert,.12)};`,`--sprite-pop: drop-shadow(0 0 .6px ${mr(e.ink,e.popRimAlpha)}) drop-shadow(${e.popShadow});`].join(" ")}var uc,zA,WU,Dd=O(()=>{uy();uc=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)"})}),zA=[.35,.65,1];WU=`
166
+ :root { color-scheme: light dark; ${dc(uc.light)} }
167
+ @media (prefers-color-scheme: dark) { :root { ${dc(uc.dark)} } }
168
+ :root[data-theme="dark"] { ${dc(uc.dark)} }
169
+ :root[data-theme="light"] { ${dc(uc.light)} }
170
+ `});var dy=O(()=>{Dd()});var py=O(()=>{Dd()});var my=O(()=>{Ve();yo();$n();bi()});var zd,VA,qA,HA,KA,YA,XA,IB,CB,bi=O(()=>{yo();Kw();bo();Qa();Nd();Qw();Zw();lc();Ve();ly();dy();py();my();zd="mgx:world-epoch",VA=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),qA=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),HA="mgx:is-open",KA="mgx:hasMass",YA="mgx:knows-about",XA="mgx:display-name",IB=new Set([...VA,...qA,HA,KA,YA,XA,"rdf:type",zd]),CB=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 gr,LB,NB,PB,MB,FB,DB,zs=O(()=>{gr=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})}),LB=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"}),NB=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"}),PB=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"}),MB=Object.freeze({teach:"teach"}),FB=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),DB=Object.freeze({max_depth:"maxDepth"})});var wy,JA,fc,QA,ZA,yy,$y,eI,tI,BB,nI,sI,vy=O(()=>{zs();wy="spider-fly",JA=10,fc=Object.freeze({x:2,y:2}),QA=1,ZA=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}),yy=(e,t)=>`cell-${e}-${t}`,$y=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),eI=(e,t)=>$y(e,t,fc.x,fc.y)<=QA,tI=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})}),BB=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"])]),nI="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.",sI=Object.freeze({name:wy,gridSize:JA,opening:nI,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:eI,webHomeCell:yy(fc.x,fc.y)})});var xy,jy,VB,qB,HB,Ud,Ey,Sy,ky,Bd,KB,YB,hc=O(()=>{zs();xy=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),jy=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})}),VB=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),qB=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),HB=Object.freeze([xy.spawnedFood,xy.placedFood]),Ud=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),Ey=Ud({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"}]}),Sy=Ud({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"}]}),ky=Ud({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"}]}),Bd=Object.freeze({[Ey.name]:Ey,[Sy.name]:Sy,[ky.name]:ky}),KB=Object.freeze(Object.keys(Bd)),YB=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 _y=O(()=>{});var Ry=O(()=>{});var wi,bW,dI,pI,fI,hI,mI,gI,bI,wI,yI,$I,vI,xI,EI,SI,kI,jI,_I,wW,Wd=O(()=>{hc();_y();Zs();Ve();yo();Ry();sn();zs();bi();wi=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"}}),bW=Object.freeze(["predator","prey"]),dI="mgx:currently-in",pI="mgx:hasMass",fI="mgx:feels",hI="mgx:facing",mI="mgx:driven-facing",gI="mgx:eaten-by",bI="mgx:starved",wI="mgx:placed-by",yI="mgx:model",$I="mgx:rotation",vI="mgx:carrying",xI="mgx:prey-eaten",EI="mgx:web-built-at-turn",SI="mgx:laid-at-turn",kI="mgx:hatched-into",jI="mgx:turn-played",_I=new Set([dI,pI,fI,hI,mI,gI,bI,wI,yI,$I,jI,vI,xI,EI,SI,kI,"rdf:type",zd]),wW=Object.freeze([..._I].sort())});var PW,MW,Ay=O(()=>{vy();hc();Wd();yo();lc();Ve();zs();PW=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"),MW=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var tG,nG,sG,oG,rG,iG,II,CI,OI,LI,Iy,Cy,NI,aG,cG,Oy=O(()=>{hc();Wd();bi();$n();yo();lc();Ve();zs();tG=wi.predator.kind,nG=wi.prey.kind,sG=wi.food.spawnedKind,oG=wi.food.placedKind,rG=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"),iG=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"),II="mgx:currently-in",CI="mgx:hasMass",OI="mgx:feels",LI="mgx:facing",Iy="(fox|goblin|crumb|morsel)(?:-(\\d+))?",Cy="(fox|goblin)(?:-(\\d+))?",NI="(crumb|morsel)(?:-(\\d+))?",aG=[{kind:"placement",predicate:II,re:new RegExp(`^(?:the\\s+)?${Iy}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:CI,re:new RegExp(`^(?:the\\s+)?${Iy}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:OI,re:new RegExp(`^(?:the\\s+)?${Cy}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:LI,re:new RegExp(`^(?:the\\s+)?${Cy}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],cG=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${NI}\\s+there[.!\\s]*$`,"i")});var mt,uG,dG,pG,fG,hG,mG,gG,bG,wG,yG,$G,vG,xG,EG,SG,kG,jG,_G,RG,Ly=O(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},uG=mt("createRequire"),dG=mt("readFileSync"),pG=mt("access"),fG=mt("readFile"),hG=mt("writeFile"),mG=mt("appendFile"),gG=mt("mkdir"),bG=mt("mkdtemp"),wG=mt("rename"),yG=mt("unlink"),$G=mt("rm"),vG=mt("stat"),xG=mt("copyFile"),EG=mt("readdir"),SG=mt("createReadStream"),kG=mt("createWriteStream"),jG=mt("randomBytes"),_G=mt("spawnSync"),RG=mt("createInterface")});var gt,AG,IG,CG,OG,LG,NG,PG,MG,FG,DG,zG,UG,BG,WG,GG,VG,qG,HG,PI,Ny=O(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},AG=gt("createRequire"),IG=gt("readFileSync"),CG=gt("access"),OG=gt("readFile"),LG=gt("writeFile"),NG=gt("appendFile"),PG=gt("mkdir"),MG=gt("mkdtemp"),FG=gt("rename"),DG=gt("unlink"),zG=gt("rm"),UG=gt("stat"),BG=gt("copyFile"),WG=gt("readdir"),GG=gt("createReadStream"),VG=gt("createWriteStream"),qG=gt("randomBytes"),HG=gt("spawnSync"),PI=gt("createInterface")});var bt,YG,XG,JG,QG,ZG,eV,tV,nV,sV,oV,rV,iV,aV,cV,lV,uV,dV,Py,pV,Gd=O(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},YG=bt("createRequire"),XG=bt("readFileSync"),JG=bt("access"),QG=bt("readFile"),ZG=bt("writeFile"),eV=bt("appendFile"),tV=bt("mkdir"),nV=bt("mkdtemp"),sV=bt("rename"),oV=bt("unlink"),rV=bt("rm"),iV=bt("stat"),aV=bt("copyFile"),cV=bt("readdir"),lV=bt("createReadStream"),uV=bt("createWriteStream"),dV=bt("randomBytes"),Py=bt("spawnSync"),pV=bt("createInterface")});var My=O(()=>{Gd();Ue();_t();Ue();Ma();Ut()});var Fy=O(()=>{});var MI,Dy=O(()=>{_t();Ue();Ve();Fy();MI=J(".tmct","sessions")});var Uy=O(()=>{_t();Ue();Za()});var wt,OV,LV,NV,PV,MV,FV,DV,zV,UV,BV,WV,GV,VV,qV,HV,KV,YV,XV,FI,By=O(()=>{wt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},OV=wt("createRequire"),LV=wt("readFileSync"),NV=wt("access"),PV=wt("readFile"),MV=wt("writeFile"),FV=wt("appendFile"),DV=wt("mkdir"),zV=wt("mkdtemp"),UV=wt("rename"),BV=wt("unlink"),WV=wt("rm"),GV=wt("stat"),VV=wt("copyFile"),qV=wt("readdir"),HV=wt("createReadStream"),KV=wt("createWriteStream"),YV=wt("randomBytes"),XV=wt("spawnSync"),FI=wt("createInterface")});var zI,br,Wy,DI,Gy,rq,ms,iq,mc,aq,Vy=O(()=>{go();_t();By();Ms();Ue();La();Ve();zI={},br=J(ye(Ht(zI.url)),"..","..",".."),Wy=J(br,"corpus","conceptnet","slice.jsonl"),DI=J(br,"src","adapters","corpus","conceptnet-map.toml"),Gy=J(br,"corpus","seon","concepts.jsonl"),rq=J(br,"corpus","seon","definitions.jsonl"),ms=J(br,"corpus","tier2"),iq=J(ms,"manifest.json"),mc=J(br,"corpus","wordnet"),aq=J(mc,"manifest.json")});function WI(){return{seon:{kind:"corpus",active:!1,corpusPath:Gy,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:Wy,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:BI},human:{kind:"corpus",active:!0,corpusPath:J(ms,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:J(ms,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:J(ms,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:J(ms,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:J(ms,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:J(ms,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:J(ms,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:J(mc,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:J(mc,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:J(UI,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var GI,UI,wq,BI,yq,qy=O(()=>{Ue();_t();Ms();Ma();Vy();GI={},UI=J(ye(Ht(GI.url)),"..","..","corpus","namenet"),wq=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),BI=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];yq=Object.freeze(WI())});var Hy=O(()=>{});var Ky=O(()=>{Ue();go();_t();Ly();Ny();Gd();Ut();My();Oe();Dy();Za();Uy();Rr();qy();gc();zs();Qa();_d();Hy()});var Yy={};Vn(Yy,{proseLemma:()=>qI});function qI(){if(vo!==void 0)return vo;try{let e=Sd();if(!e)return vo=null,vo;let t=e.its,n=new Map;vo=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{vo=null}return vo}var vo,Xy=O(()=>{kd()});var Jy={};Vn(Jy,{digestTermFromRows:()=>YI,loadDigestStructureTable:()=>KI,readDigestStructures:()=>HI});var HI,KI,YI,Qy=O(()=>{HI=()=>null,KI=()=>null,YI=()=>null});function sp(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 ${bc(e.entityType)}`;if(t==="list")return`list/enumerate ${bc(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${bc(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 sp(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&&bn[o]?bn[o]:`filter/traverse ${bc(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&&bn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?bn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function dp(e){let t=new Map;for(let n of e)t.has(e$(n))||t.set(e$(n),n);return t}function Hd(e,t=$i){let n=[],s=[];for(let l of e)l.predicate===t&&(s.push([l.subject,l.object]),xo(l)&&n.push([l.subject,l.object]));let o=new Map,r=new Map,i=new Set,a=(l,c,u)=>{!c||!u||c===u||(l.has(c)||l.set(c,new Set),l.get(c).add(u))};for(let[l,c]of s)a(r,l,c),c&&i.add(c);for(let[l,c]of n)a(o,l,c);return{strictEdges:n,broadEdges:s,strictSucc:o,broadSucc:r,reachableHeads:i}}function Kd(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 nC(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function sC(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(Xy(),Yy)),s=n();return s?nC(t,s(t)):t}catch{return t}}function fp(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)||oC.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 Jd(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return pr;if(t==="can")return"mgx:capableOf";try{let n=await sC(t);return n==="have"?pr:cs(`mgx:${n}`)}catch{return cs(`mgx:${t}`)}}function uC(e,t){let n=String(t||"").match(lC);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function yi(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(Rs(),$m)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function hC(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 j$(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`:/(?:s|x|z|ch|sh|o)es$/i.test(t)?t.slice(0,-2):t.replace(/s$/i,"")}function _$(e){if(Eo[e])return Eo[e];let t=String(e||""),n=Wm(t);if(n){let a=_$(n);if(a==="can")return"cannot";if(a==="can be")return"cannot be";if(a==="is"||a.startsWith("is "))return`is not${a.slice(2)}`;let[l,...c]=a.split(" ");return["does not",j$(l),...c].join(" ")}let s=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(t);if(s)return`is ${s[1].replace(/-/g," ")} than`;let o=new RegExp(`^mgx:(${hp})-([a-z]+)$`,"i").exec(t);if(o)return`is ${o[1].toLowerCase()} ${o[2].toLowerCase()}`;let r=/^mgx:same-([a-z]+)-as$/i.exec(t);if(r)return`has the same ${r[1].toLowerCase()} as`;let i=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(t);return i?`${hC(i[1])}${i[2]?` ${i[2]}`:""}`:e}function Zd(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function gC(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of mC)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 Wn(e){return e.replace(/#node:[0-9a-f]+/g,"")}function ie(e){let t=e.provenance?` (source: ${Wn(e.provenance)})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Dt(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Dt(e)}${t}`:e.provenance.includes("corpus:")?`${Dt(e)}${t}`:e.provenance.includes("reference:")?`${Dt(e)}${t}`:`i learned: ${Dt(e)}${t}`}function s$(e,t,n,{toward:s=null}={}){let o=ie(e);if(!Bn.has(e.predicate)||!n.has(e.subject))return o;let r=ic(e.object,t,{cap:6,stopAt:oc,toward:s});if(r.length<=1)return o;let i=` \u2192 ${r.slice(1).join(" \u2192 ")}`,a=o.match(bC);return a?o.slice(0,a.index)+i+a[0]:o+i}function o$(e,t,n,{indent:s=""}={}){let o=t.filter(_=>_.predicate===$i).map(_=>[_.subject,_.object]),r=hi(o),i=e.map(_=>`${s}${s$(_,r,n)}`),a=e.filter(_=>Bn.has(_.predicate)&&n.has(_.subject)),l=[...new Set(a.map(_=>_.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(_=>_.predicate==="owl:disjointWith").map(_=>[_.subject,_.object]),{split:u,clusters:d}=ac(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let _ of d)for(let $ of _.objects)p.set($,_);let h=e.filter(_=>!(Bn.has(_.predicate)&&n.has(_.subject))),m=[],g=[],b=0,y=_=>{let $=s$(_,r,n);return b<Se?(b+=1,`${s}${$}`):(g.push($),null)};for(let _ of d){let $=a.filter(x=>p.get(x.object)===_).map(y).filter(Boolean);$.length&&m.push(`${s}${f}, the ${_.label}:
171
171
  ${$.join(`
172
172
  `)}`)}if(h.length){let _=h.map(y).filter(Boolean);_.length&&m.push(`${s}also about ${f}:
173
173
  ${_.join(`
174
174
  `)}`)}let w=g.length?`
175
175
  ${s}\u2026and ${g.length} more \u2014 say 'more' to see them.`:"",v={text:m.join(`
176
- `)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:v}}async function mC(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(Yy(),Ky)))}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("; ")})
176
+ `)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:v}}async function yC(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(Qy(),Jy)))}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("; ")})
177
177
  `:"",l=`Say 'show the facts' for all ${s.length} stored facts.`;return{text:`${r.paragraphs.join(`
178
178
 
179
179
  `)}
180
180
 
181
- ${a}${l}`,pending:{items:s,noun:"facts"}}}function br(e){let t=$d().find(n=>n.kind==="article");return t&&Rw(String(e||""),t)?"an":"a"}function k$(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${ie(e)}; ${ie(t)}. To settle it, say "forget that ${e.subject} is ${br(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${ie(t)}`,replace:!0}:e?{text:`yes \u2014 ${ie(e)}`,replace:!0}:null}function gC(e,t){let n=s=>`${Dt(s)}${s.provenance?` (source: ${Un(s.provenance)})`:""}`;return{text:`you've told me both ${n(e)} and ${n(t)} \u2014 together those contradict, and I won't derive an answer from an inconsistency. To settle it, say "forget that ${e.subject} is ${br(e.object)} ${e.object}".`,replace:!0}}function gc(e){let t=o=>`${Dt(o)}${o.provenance?` (source: ${Un(o.provenance)})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function Jd(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Ve(),Ns)),n=await t(e),s=[];for(let o of n.individuals||[]){if(o?.class!=="Fact")continue;let r=i=>(o.attributes||[]).find(a=>a.key===i)?.value||"";s.push({subject:r("subject"),predicate:r("predicate"),object:r("object"),provenance:r("provenance")})}return s}catch{return[]}}async function it(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Ve(),Ns)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function bC(e){if(!bc)try{bc=Ms().nounPlurals}catch{bc=new Map}return bc.get(e)??null}function yc(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return pi(Ms(),t)?.lemma||t}catch{return t}}function wC(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return yc(e);let n=yc(up(t[1]));return`${br(n)} ${n}`}function Y(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(yC,"").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=bC(i);a&&s.add(e(a))}return s}function n$(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 R$(e,t=null){let n=$c(e),s=n.match($C);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(xC);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function sp(e){let t=String(e||"").replace(kC,"");if(t!==e){let s=t.match(zs);if(s)return s}let n=String(e||"").match(jC);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(zs):null}function rp(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 o$(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function UC(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=>`${Dt(s)}${s.provenance?` (source: ${Un(s.provenance)})`:""}`).join("; ")}function i$(e,t,n,{maxHops:s=3}={}){let o=Y(Q,e),r=Y(Q,t),i=ha(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?UC(l,n):null;return c?` \u2014 via: ${c}`:""};if(i.verdict==="both")return{text:`I have both, at the same level of detail \u2014 my sources disagree, so I won't pick:
181
+ ${a}${l}`,pending:{items:s,noun:"facts"}}}function wr(e){let t=xd().find(n=>n.kind==="article");return t&&Iw(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 ${ie(e)}; ${ie(t)}. To settle it, say "forget that ${e.subject} is ${wr(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${ie(t)}`,replace:!0}:e?{text:`yes \u2014 ${ie(e)}`,replace:!0}:null}function $C(e,t){let n=s=>`${Dt(s)}${s.provenance?` (source: ${Wn(s.provenance)})`:""}`;return{text:`you've told me both ${n(e)} and ${n(t)} \u2014 together those contradict, and I won't derive an answer from an inconsistency. To settle it, say "forget that ${e.subject} is ${wr(e.object)} ${e.object}".`,replace:!0}}function wc(e){let t=o=>`${Dt(o)}${o.provenance?` (source: ${Wn(o.provenance)})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function ep(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Ve(),Ps)),n=await t(e),s=[];for(let o of n.individuals||[]){if(o?.class!=="Fact")continue;let r=i=>(o.attributes||[]).find(a=>a.key===i)?.value||"";s.push({subject:r("subject"),predicate:r("predicate"),object:r("object"),provenance:r("provenance")})}return s}catch{return[]}}async function ot(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Ve(),Ps)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function vC(e){if(!yc)try{yc=Fs().nounPlurals}catch{yc=new Map}return yc.get(e)??null}function vc(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return fi(Fs(),t)?.lemma||t}catch{return t}}function xC(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return vc(e);let n=vc(fp(t[1]));return`${wr(n)} ${n}`}function Y(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(EC,"").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=vC(i);a&&s.add(e(a))}return s}function r$(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 I$(e,t=null){let n=xc(e),s=n.match(SC);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(jC);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function ip(e){let t=String(e||"").replace(TC,"");if(t!==e){let s=t.match(Us);if(s)return s}let n=String(e||"").match(AC);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Us):null}function CC(e,t,n){let s=String(e||"").trim().split(/\s+/).filter(Boolean);if(s.length<2)return null;let o=t.filter(r=>Bn.has(r.predicate));if(!o.length)return null;for(let r=1;r<s.length;r+=1){let i=Y(n,s.slice(0,r).join(" ")),a=s.slice(r).join(" "),l=Y(n,a);if(o.some(c=>l.has(c.subject)&&i.has(c.object)))return a}return null}function cp(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 a$(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function qC(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=>`${Dt(s)}${s.provenance?` (source: ${Wn(s.provenance)})`:""}`).join("; ")}function l$(e,t,n,{maxHops:s=3}={}){let o=Y(Q,e),r=Y(Q,t),i=ha(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?qC(l,n):null;return c?` \u2014 via: ${c}`:""};if(i.verdict==="both")return{text:`I have both, at the same level of detail \u2014 my sources disagree, so I won't pick:
182
182
  ${[...i.negative,...i.positive].map(ie).join(`
183
- `)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let l=i.verdict==="no"?i.negative[0]:i.positive[0],c=`${i.verdict} \u2014 ${ie(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${ie(i.overrides.fact)}`),{text:c,replace:!0}}return null}function a$(e,t,n,{maxHops:s=3}={}){let o=Y(Q,e),r=Y(Q,t),i=nu(o,r,n,{maxHops:s});if(!i)return null;let a=`${e} is a kind of ${i.klass}`,l=`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,tu).map(f=>ie(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
183
+ `)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let l=i.verdict==="no"?i.negative[0]:i.positive[0],c=`${i.verdict} \u2014 ${ie(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${ie(i.overrides.fact)}`),{text:c,replace:!0}}return null}function u$(e,t,n,{maxHops:s=3}={}){let o=Y(Q,e),r=Y(Q,t),i=ou(o,r,n,{maxHops:s});if(!i)return null;let a=`${e} is a kind of ${i.klass}`,l=`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,su).map(f=>ie(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
184
184
  ${d.join(`
185
- `)}`,replace:!0,miss:!0}}let c=su(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,tu),d=c.slice(u.length);return{text:`${l} ${a}, and nothing I know about ${i.klass} says whether one can ${t}. I do know ${c.length} thing${c.length===1?"":"s"} that can ${t}${d.length?` (first ${u.length} shown)`:""}:
185
+ `)}`,replace:!0,miss:!0}}let c=ru(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,su),d=c.slice(u.length);return{text:`${l} ${a}, and nothing I know about ${i.klass} says whether one can ${t}. I do know ${c.length} thing${c.length===1?"":"s"} that can ${t}${d.length?` (first ${u.length} shown)`:""}:
186
186
  ${u.map(ie).join(`
187
- `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(ie),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function GC(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 gn(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 A$(e,t,n,s,o={},r=null,i=null){return I$(await XC(e,t,n,s,o,r,i),n,t)}function I$(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=ep(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Xy),!o){let r=s.match(np),i=r?null:$c(s).match(_$)||R$(s),a=r?r[2]:i?i[1]:null;a&&!op.has(a.toLowerCase())&&(o=Xy)}if(!o){let r=s.match(O$);r&&(o=ep({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function XC(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(Ve(),Ns)))}catch{return null}let c=String(t).trim(),u=c.match(CC);if(u){let D=Y(a,u[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgx:usedFor"&&D.has(G.object));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),P=C.length?`
187
+ `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(ie),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function YC(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 gn(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 O$(e,t,n,s,o={},r=null,i=null){return L$(await tO(e,t,n,s,o,r,i),n,t)}function L$(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=sp(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Zy),!o){let r=s.match(rp),i=r?null:xc(s).match(A$)||I$(s),a=r?r[2]:i?i[1]:null;a&&!ap.has(a.toLowerCase())&&(o=Zy)}if(!o){let r=s.match(P$);r&&(o=sp({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function tO(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(Ve(),Ps)))}catch{return null}let c=String(t).trim(),u=c.match(MC);if(u){let D=Y(a,u[1]),U=(await ot(e,r)).filter(W=>W.predicate==="mgx:usedFor"&&D.has(W.object));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),M=C.length?`
188
188
  \u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
189
- `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}for(let{predicate:D,re:U}of qC){let G=c.match(U);if(!G)continue;let I=Y(a,G[1]),L=(await it(e,r)).filter(se=>se.predicate===D&&I.has(se.object));if(!L.length)continue;let P=Ze(gn(L),o).map(ie),N=P.slice(0,Se),B=P.slice(Se),H=B.length?`
190
- \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
191
- `)+H,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}let d=c.match(BC),f=d?null:c.match(WC),p=d?d[1]:f?.[2],h=d?d[2]:f?.[1],m=p&&h?GC(h):null;if(m){let D=`mgx:${m.replace(/\s+/g,"-")}-than`,U=await it(e,r),G=Y(a,p),I=[...G].sort((P,N)=>P.length-N.length)[0],L=P=>G.has(P)||P.startsWith(`${I}-`)||P.startsWith(`${I} `)||U.some(N=>ms.has(N.predicate)&&N.subject===P&&G.has(N.object)),C=gn(U.filter(P=>P.predicate===D&&vo(P))).filter(P=>P.subject!==P.object&&L(P.subject)&&L(P.object));if(C.length){let P=new Set,N=new Map;for(let X of C)P.add(X.subject),P.add(X.object),N.set(X.object,(N.get(X.object)||0)+1),N.has(X.subject)||N.set(X.subject,N.get(X.subject)||0);let B=new Map(N),H=[],se=null;for(;B.size;){let X=[...B.keys()].filter(V=>B.get(V)===0);if(X.length!==1){se=X.length===0?{text:`I can't order the ${I}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} ${I} from what I know \u2014 nothing compares ${X[0]} and ${X[1]}. Teach me, e.g. "${X[0]} is ${m} than ${X[1]}".`,replace:!0,miss:!0};break}let ee=X[0];H.push(ee),B.delete(ee);for(let V of C)V.subject===ee&&B.has(V.object)&&B.set(V.object,B.get(V.object)-1)}if(se)return se;let ae=H.slice(0,-1).map((X,ee)=>C.find(V=>V.subject===X&&V.object===H[ee+1]));if(ae.every(Boolean)){let X=ae.map(ee=>`${Dt(ee)}${ee.provenance?` (source: ${Un(ee.provenance)})`:""}`).join("; ");return{text:`${H[0]} \u2014 ${X}; so ${H[0]} is the ${h} ${I}`,replace:!0}}}}let g=s?c.match(OC)||c.match(LC):null;if(g){let D=Y(a,g[1]),U=(await it(e,r)).filter(G=>ko(G.predicate)!==null&&D.has(G.subject));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),P=C.length?`
189
+ `)+M,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}for(let{predicate:D,re:U}of JC){let W=c.match(U);if(!W)continue;let I=Y(a,W[1]),L=(await ot(e,r)).filter(re=>re.predicate===D&&I.has(re.object));if(!L.length)continue;let M=Ze(gn(L),o).map(ie),N=M.slice(0,Se),G=M.slice(Se),q=G.length?`
190
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
191
+ `)+q,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}let d=c.match(HC),f=d?null:c.match(KC),p=d?d[1]:f?.[2],h=d?d[2]:f?.[1],m=p&&h?YC(h):null;if(m){let D=`mgx:${m.replace(/\s+/g,"-")}-than`,U=await ot(e,r),W=Y(a,p),I=[...W].sort((M,N)=>M.length-N.length)[0],L=M=>W.has(M)||M.startsWith(`${I}-`)||M.startsWith(`${I} `)||U.some(N=>Bn.has(N.predicate)&&N.subject===M&&W.has(N.object)),C=gn(U.filter(M=>M.predicate===D&&xo(M))).filter(M=>M.subject!==M.object&&L(M.subject)&&L(M.object));if(C.length){let M=new Set,N=new Map;for(let Z of C)M.add(Z.subject),M.add(Z.object),N.set(Z.object,(N.get(Z.object)||0)+1),N.has(Z.subject)||N.set(Z.subject,N.get(Z.subject)||0);let G=new Map(N),q=[],re=null;for(;G.size;){let Z=[...G.keys()].filter(H=>G.get(H)===0);if(Z.length!==1){re=Z.length===0?{text:`I can't order the ${I}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} ${I} from what I know \u2014 nothing compares ${Z[0]} and ${Z[1]}. Teach me, e.g. "${Z[0]} is ${m} than ${Z[1]}".`,replace:!0,miss:!0};break}let ee=Z[0];q.push(ee),G.delete(ee);for(let H of C)H.subject===ee&&G.has(H.object)&&G.set(H.object,G.get(H.object)-1)}if(re)return re;let ae=q.slice(0,-1).map((Z,ee)=>C.find(H=>H.subject===Z&&H.object===q[ee+1]));if(ae.every(Boolean)){let Z=ae.map(ee=>`${Dt(ee)}${ee.provenance?` (source: ${Wn(ee.provenance)})`:""}`).join("; ");return{text:`${q[0]} \u2014 ${Z}; so ${q[0]} is the ${h} ${I}`,replace:!0}}}}let g=s?c.match(FC)||c.match(DC):null;if(g){let D=Y(a,g[1]),U=(await ot(e,r)).filter(W=>jo(W.predicate)!==null&&D.has(W.subject));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),M=C.length?`
192
192
  \u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
193
- `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let b=c.match(NC);if(b){let D=b[1].toLowerCase(),U=Y(a,b[2].replace(/^(?:an?|the)\s+/i,"").trim()),G=(await it(e,r)).filter(I=>ko(I.predicate)===D&&U.has(I.object));if(G.length){let L=Ze(gn(G),o).map(ie),C=L.slice(0,Se),P=L.slice(Se),N=P.length?`
194
- \u2026and ${P.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
195
- `)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}}}let y=c.match(PC);if(y){let D=y[3].toLowerCase(),U=Y(a,y[2]),G=new Set([...Y(a,y[1])].map(L=>l(`mgx:${D}-${L.replace(/\s+/g,"-")}`))),I=(await it(e,r)).filter(L=>G.has(l(L.predicate))&&U.has(a(L.subject)));if(I.length){let C=Ze(gn(I),o).map(ie),P=C.slice(0,Se),N=C.slice(Se),B=N.length?`
196
- \u2026and ${N.length} more \u2014 say 'more' to see them.`:"";return{text:P.join(`
197
- `)+B,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,v=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!v&&!c$.test(c)){let D=c.match(O$)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);D&&(w=bs(D[1]))}if(!w&&s){let D=c.match(pO);D&&(w=bs(en(D[1].trim())))}if(!w&&n?.ambiguous&&Array.isArray(n.candidateParses)){let D=n.candidateParses.find(U=>U?.shape==="meta"&&U.object);D&&(w=bs(String(D.object)))}if(w){let D=pC(w),{predicate:U}=D,G=D.subject.replace(/^(?:the|an?)\s+/i,"").trim()||D.subject,I=!1;if(U&&hs.test(G)){if(!i){let V=String(xo[U]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${G.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${V?` ${V}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}G=i,I=!0}let L=Y(a,G),C=(await it(e,r)).filter(V=>L.has(V.subject)&&!Zy.has(V.predicate)),P=U?C.filter(V=>l(V.predicate)===U):C;if(!U&&P.length&&!P.some(Qd)&&(P=[]),!P.length){if(U&&(C.length||I))return{text:`I don't have any "${xo[U]}" facts about ${G}.`,replace:s,...C.length?{}:{miss:!0}};if(!U){let V=Ze((await it(e,r)).filter(re=>L.has(re.object)),o);if(V.length&&!V.some(Qd)&&(V=[]),V.length){let re=V.map(ie),oe=re.slice(0,Se),ge=re.slice(Se),Te=ge.length?`
198
- \u2026and ${ge.length} more \u2014 say 'more' to see them.`:"";return{text:oe.join(`
199
- `)+Te,replace:s,...ge.length?{pending:{items:ge,noun:"facts"}}:{}}}}return null}P=Ze(P,o);let N=await it(e,r),{lines:B,grouped:H}=t$(P,N,L),se=!U&&B.length>hC?await mC(G,P,N,B):null;if(se)return{...se,replace:s};if(H)return{...H,replace:s};let ae=B.slice(0,Se),X=B.slice(Se),ee=X.length?`
200
- \u2026and ${X.length} more \u2014 say 'more' to see them.`:"";return{text:ae.join(`
201
- `)+ee,replace:s,...X.length?{pending:{items:X,noun:"facts"}}:{}}}if(!s)return null;let _=c.match(XI);if(_){let U=`mgx:${_[2].toLowerCase().replace(/\s+/g,"-")}-than`,G=await Jd(e),I=ae=>{let X=ae.replace(/^(?:an?|the)\s+/i,"").trim();return i&&hs.test(X)?i:X},L=I(_[1]),C=I(_[3]),P=Y(a,L),N=Y(a,C),B=G.find(ae=>ae.predicate===U&&P.has(ae.subject)&&N.has(ae.object));if(B){let ae=G.find(ee=>ee.predicate===U&&P.has(ee.object)&&N.has(ee.subject)),X=ae?` \u2014 though you also told me the opposite: ${ie(ae)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${ie(B)}${X}`,replace:!0}}let H=G.filter(ae=>ae.predicate===U&&(P.has(ae.subject)||P.has(ae.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${H.length?` I do know: ${H.slice(0,3).map(ie).join("; ")}.`:""} If it's true, teach me: "${L} is ${_[2].toLowerCase()} than ${C}".`,replace:!0,miss:!0}}for(let{predicate:D,phrase:U,re:G}of KC){let I=c.match(G);if(!I)continue;let L=await Jd(e),C=Y(a,I[1]),P=Y(a,I[2]),N=L.find(H=>H.predicate===D&&C.has(H.subject)&&P.has(H.object));if(N)return{text:`yes \u2014 ${ie(N)}`,replace:!0};let B=L.filter(H=>H.predicate===D&&C.has(H.subject));if(B.length){let H=B.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}. I do know: ${H}.`,replace:!0,miss:!0}}if(!n?.parsed&&L.some(H=>C.has(H.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}.`,replace:!0,miss:!0};break}let $=c.match(zs)||sp(c);if($){let D=Y(a,$[1]),U=Y(a,$[2]),G=await it(e,r),I=N=>D.has(N.subject)&&U.has(N.object),{DISJOINT_PREDICATE:L}=await Promise.resolve().then(()=>(qt(),dn)),C=N=>D.has(N.subject)||D.has(N.object)||U.has(N.subject)||U.has(N.object);return G.some(N=>N.predicate===L&&vo(N)&&C(N))?null:k$(G.find(N=>ms.has(N.predicate)&&I(N)),G.find(N=>N.predicate===pa&&I(N)))}let x=rp(c),S=x.match(RC);if(S){let D=await it(e,r),U=S[1],G=i$(S[2],S[3],D);if(G&&x!==r$(c)&&(G=o$(G)),G&&U)return{text:`I can't speak for ${U.trim()} ${S[2]} \u2014 what I remember is generic, not universal. ${G.text}.`,replace:!0};if(G)return G;let I=Y(a,S[2]),L=D.filter(C=>C.predicate==="mgx:capableOf"&&I.has(C.subject));if(L.length){let C=L.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${S[2]} can ${S[3]}. I do know: ${C}. If it's true, teach me: "a ${L[0].subject} can ${S[3]}".`,replace:!0,miss:!0}}return a$(S[2],S[3],D)}let E=c.match(TC);if(E){let D=Y(a,E[1]),U=Y(a,E[2]),G=new Set(["mgx:hasA","tmct:has"]),I=await Jd(e),L=B=>I.find(H=>G.has(H.predicate)&&B.has(H.subject)&&U.has(H.object)),C=L(D);if(C)return{text:`yes \u2014 ${ie(C)}`,replace:!0};let P=[{terms:D,chain:[]}],N=new Set;for(let B=0;B<4;B+=1){let H=[];for(let{terms:se,chain:ae}of P){let X=I.filter(ee=>ms.has(ee.predicate)&&se.has(ee.subject)&&!N.has(ee.object));for(let ee of X){if(N.has(ee.object))continue;N.add(ee.object);let V=[...ae,ee],re=L(Y(a,ee.object));if(re)return{text:`yes \u2014 ${[...V.map(ie),ie(re)].join("; ")}`,replace:!0};H.push({terms:Y(a,ee.object),chain:V})}}if(!H.length)break;P=H}return null}let R=rp(c),j=R.match(MC);if(j){let D=await it(e,r),U=!!j[1],G=Y(a,j[2]),I=Y(a,j[3]),L=i$(j[2],j[3],D);if(L&&R!==r$(c)&&(L=o$(L)),L&&U)return{text:`I can't speak for ${j[1].trim()} ${j[2]} \u2014 what I remember is generic, not universal. ${L.text}.`,replace:!0};if(L)return L;if(s){let C=D.filter(N=>N.predicate==="mgx:capableOf"&&G.has(N.subject));if(C.length){let N=C.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${j[2]} can ${j[3]}. I do know: ${N}. If it's true, teach me: "a ${C[0].subject} can ${j[3]}".`,replace:!0,miss:!0}}let P=a$(j[2],j[3],D);if(P)return P;if(!/\s/.test(j[2].trim())&&!D.some(N=>G.has(N.subject)||G.has(N.object))){let N=up(yc(j[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${j[2]}" yet. Teach me "a ${N} can ${j[3]}" (or "a ${N} cannot ${j[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let A=c.match(AC);if(A){let D=Y(a,A[1]),U=(await it(e,r)).filter(N=>(N.predicate==="mgx:capableOf"||N.predicate===Jo)&&D.has(N.subject));if(!U.length)return null;let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),P=C.length?`
193
+ `)+M,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let b=c.match(zC);if(b){let D=b[1].toLowerCase(),U=Y(a,b[2].replace(/^(?:an?|the)\s+/i,"").trim()),W=(await ot(e,r)).filter(I=>jo(I.predicate)===D&&U.has(I.object));if(W.length){let L=Ze(gn(W),o).map(ie),C=L.slice(0,Se),M=L.slice(Se),N=M.length?`
194
+ \u2026and ${M.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
195
+ `)+N,replace:!0,...M.length?{pending:{items:M,noun:"facts"}}:{}}}}let y=c.match(UC);if(y){let D=y[3].toLowerCase(),U=Y(a,y[2]),W=new Set([...Y(a,y[1])].map(L=>l(`mgx:${D}-${L.replace(/\s+/g,"-")}`))),I=(await ot(e,r)).filter(L=>W.has(l(L.predicate))&&U.has(a(L.subject)));if(I.length){let C=Ze(gn(I),o).map(ie),M=C.slice(0,Se),N=C.slice(Se),G=N.length?`
196
+ \u2026and ${N.length} more \u2014 say 'more' to see them.`:"";return{text:M.join(`
197
+ `)+G,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,v=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!v&&!d$.test(c)){let D=c.match(P$)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);D&&(w=ws(D[1]))}if(!w&&s){let D=c.match(wO);D&&(w=ws(en(D[1].trim())))}if(!w&&n?.ambiguous&&Array.isArray(n.candidateParses)){let D=n.candidateParses.find(U=>U?.shape==="meta"&&U.object);D&&(w=ws(String(D.object)))}if(w){let D=gC(w),{predicate:U}=D,W=D.subject.replace(/^(?:the|an?)\s+/i,"").trim()||D.subject,I=!1;if(U&&gs.test(W)){if(!i){let K=String(Eo[U]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${W.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${K?` ${K}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}W=i,I=!0}let L=Y(a,W),C=await ot(e,r);if(!C.some(K=>L.has(K.subject)||L.has(K.object))){let K=CC(W,C,a);K&&(W=K,L=Y(a,W))}let M=(await ot(e,r)).filter(K=>L.has(K.subject)&&!n$.has(K.predicate)),N=U?M.filter(K=>l(K.predicate)===U):M;if(!U&&N.length&&!N.some(tp)&&(N=[]),!N.length){if(U&&(M.length||I))return{text:`I don't have any "${Eo[U]}" facts about ${W}.`,replace:s,...M.length?{}:{miss:!0}};if(!U){let K=Ze((await ot(e,r)).filter(ne=>L.has(ne.object)),o);if(K.length&&!K.some(tp)&&(K=[]),K.length){let ne=K.map(ie),ve=ne.slice(0,Se),Re=ne.slice(Se),ue=Re.length?`
198
+ \u2026and ${Re.length} more \u2014 say 'more' to see them.`:"";return{text:ve.join(`
199
+ `)+ue,replace:s,...Re.length?{pending:{items:Re,noun:"facts"}}:{}}}}return null}N=Ze(N,o);let G=await ot(e,r),{lines:q,grouped:re}=o$(N,G,L),ae=!U&&q.length>wC?await yC(W,N,G,q):null;if(ae)return{...ae,replace:s};if(re)return{...re,replace:s};let Z=q.slice(0,Se),ee=q.slice(Se),H=ee.length?`
200
+ \u2026and ${ee.length} more \u2014 say 'more' to see them.`:"";return{text:Z.join(`
201
+ `)+H,replace:s,...ee.length?{pending:{items:ee,noun:"facts"}}:{}}}if(!s)return null;let _=c.match(eC);if(_){let U=`mgx:${_[2].toLowerCase().replace(/\s+/g,"-")}-than`,W=await ep(e),I=ae=>{let Z=ae.replace(/^(?:an?|the)\s+/i,"").trim();return i&&gs.test(Z)?i:Z},L=I(_[1]),C=I(_[3]),M=Y(a,L),N=Y(a,C),G=W.find(ae=>ae.predicate===U&&M.has(ae.subject)&&N.has(ae.object));if(G){let ae=W.find(ee=>ee.predicate===U&&M.has(ee.object)&&N.has(ee.subject)),Z=ae?` \u2014 though you also told me the opposite: ${ie(ae)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${ie(G)}${Z}`,replace:!0}}let q=W.filter(ae=>ae.predicate===U&&(M.has(ae.subject)||M.has(ae.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${q.length?` I do know: ${q.slice(0,3).map(ie).join("; ")}.`:""} If it's true, teach me: "${L} is ${_[2].toLowerCase()} than ${C}".`,replace:!0,miss:!0}}for(let{predicate:D,phrase:U,re:W}of ZC){let I=c.match(W);if(!I)continue;let L=await ep(e),C=Y(a,I[1]),M=Y(a,I[2]),N=L.find(q=>q.predicate===D&&C.has(q.subject)&&M.has(q.object));if(N)return{text:`yes \u2014 ${ie(N)}`,replace:!0};let G=L.filter(q=>q.predicate===D&&C.has(q.subject));if(G.length){let q=G.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}. I do know: ${q}.`,replace:!0,miss:!0}}if(!n?.parsed&&L.some(q=>C.has(q.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}.`,replace:!0,miss:!0};break}let $=c.match(Us)||ip(c);if($){let D=Y(a,$[1]),U=Y(a,$[2]),W=await ot(e,r),I=N=>D.has(N.subject)&&U.has(N.object),{DISJOINT_PREDICATE:L}=await Promise.resolve().then(()=>(qt(),dn)),C=N=>D.has(N.subject)||D.has(N.object)||U.has(N.subject)||U.has(N.object);return W.some(N=>N.predicate===L&&xo(N)&&C(N))?null:R$(W.find(N=>Bn.has(N.predicate)&&I(N)),W.find(N=>N.predicate===pa&&I(N)))}let x=cp(c),S=x.match(OC);if(S){let D=await ot(e,r),U=S[1],W=l$(S[2],S[3],D);if(W&&x!==c$(c)&&(W=a$(W)),W&&U)return{text:`I can't speak for ${U.trim()} ${S[2]} \u2014 what I remember is generic, not universal. ${W.text}.`,replace:!0};if(W)return W;let I=Y(a,S[2]),L=D.filter(C=>C.predicate==="mgx:capableOf"&&I.has(C.subject));if(L.length){let C=L.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${S[2]} can ${S[3]}. I do know: ${C}. If it's true, teach me: "a ${L[0].subject} can ${S[3]}".`,replace:!0,miss:!0}}return u$(S[2],S[3],D)}let E=c.match(LC);if(E){let D=Y(a,E[1]),U=Y(a,E[2]),W=new Set(["mgx:hasA","tmct:has"]),I=await ep(e),L=G=>I.find(q=>W.has(q.predicate)&&G.has(q.subject)&&U.has(q.object)),C=L(D);if(C)return{text:`yes \u2014 ${ie(C)}`,replace:!0};let M=[{terms:D,chain:[]}],N=new Set;for(let G=0;G<4;G+=1){let q=[];for(let{terms:re,chain:ae}of M){let Z=I.filter(ee=>Bn.has(ee.predicate)&&re.has(ee.subject)&&!N.has(ee.object));for(let ee of Z){if(N.has(ee.object))continue;N.add(ee.object);let H=[...ae,ee],K=L(Y(a,ee.object));if(K)return{text:`yes \u2014 ${[...H.map(ie),ie(K)].join("; ")}`,replace:!0};q.push({terms:Y(a,ee.object),chain:H})}}if(!q.length)break;M=q}return null}let R=cp(c),j=R.match(BC);if(j){let D=await ot(e,r),U=!!j[1],W=Y(a,j[2]),I=Y(a,j[3]),L=l$(j[2],j[3],D);if(L&&R!==c$(c)&&(L=a$(L)),L&&U)return{text:`I can't speak for ${j[1].trim()} ${j[2]} \u2014 what I remember is generic, not universal. ${L.text}.`,replace:!0};if(L)return L;if(s){let C=D.filter(N=>N.predicate==="mgx:capableOf"&&W.has(N.subject));if(C.length){let N=C.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${j[2]} can ${j[3]}. I do know: ${N}. If it's true, teach me: "a ${C[0].subject} can ${j[3]}".`,replace:!0,miss:!0}}let M=u$(j[2],j[3],D);if(M)return M;if(!/\s/.test(j[2].trim())&&!D.some(N=>W.has(N.subject)||W.has(N.object))){let N=fp(vc(j[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${j[2]}" yet. Teach me "a ${N} can ${j[3]}" (or "a ${N} cannot ${j[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let A=c.match(NC);if(A){let D=Y(a,A[1]),U=(await ot(e,r)).filter(N=>(N.predicate==="mgx:capableOf"||N.predicate===Qo)&&D.has(N.subject));if(!U.length)return null;let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),M=C.length?`
202
202
  \u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
203
- `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let F=c.match(zC);if(F){let D=Y(a,F[1]),U=Y(a,F[2]),G=await it(e,r),I=gn(G.filter(L=>L.predicate==="mgx:capableOf"&&U.has(L.object))).filter(L=>ha(new Set([L.subject]),U,G).verdict==="yes");if(I.length){let{findIsaChain:L,buildSubClassSuccessors:C,SUBCLASS_PREDICATE:P,TYPE_PREDICATE:N}=await Promise.resolve().then(()=>(qt(),dn)),B=G.filter(ne=>ne.predicate===P),H=G.filter(ne=>ne.predicate===N),se=B.map(ne=>[ne.subject,ne.object]),ae=H.map(ne=>[ne.subject,ne.object]),X=C(se),ee=ne=>(ne.predicate===P?B:H).find(ke=>ke.subject===ne.subject&&ke.object===ne.object),V=new Map,re=I.filter(ne=>D.has(ne.subject)?!0:(V.has(ne.subject)||V.set(ne.subject,L(ne.subject,D,ae,X,{maxHops:3})),!!V.get(ne.subject))),ge=Ze(re.length?re:I,o).map(ne=>{let ke=re.length?V.get(ne.subject):null;if(!ke||ke.length<2)return ie(ne);let le=ke.map(ee);if(!le.every(Boolean))return ie(ne);let q=le.map(te=>`${Dt(te)}${te.provenance?` (source: ${Un(te.provenance)})`:""}`).join("; ");return`${ie(ne)} \u2014 via: ${q}`}),Te=ge.slice(0,Se),ue=ge.slice(Se),Ae=ue.length?`
204
- \u2026and ${ue.length} more \u2014 say 'more' to see them.`:"";return{text:(re.length?"":`nothing I remember ties these to "${F[1]}", but:
205
- `)+Te.join(`
206
- `)+Ae,replace:!0,...ue.length?{pending:{items:ue,noun:"facts"}}:{}}}}let T=c.match(DC);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,T[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgxneg:capableOf"&&D.has(G.object));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),P=C.length?`
203
+ `)+M,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let F=c.match(VC);if(F){let D=Y(a,F[1]),U=Y(a,F[2]),W=await ot(e,r),I=gn(W.filter(L=>L.predicate==="mgx:capableOf"&&U.has(L.object))).filter(L=>ha(new Set([L.subject]),U,W).verdict==="yes");if(I.length){let{findIsaChain:L,buildSubClassSuccessors:C,SUBCLASS_PREDICATE:M,TYPE_PREDICATE:N}=await Promise.resolve().then(()=>(qt(),dn)),G=W.filter(oe=>oe.predicate===M),q=W.filter(oe=>oe.predicate===N),re=G.map(oe=>[oe.subject,oe.object]),ae=q.map(oe=>[oe.subject,oe.object]),Z=C(re),ee=oe=>(oe.predicate===M?G:q).find(ke=>ke.subject===oe.subject&&ke.object===oe.object),H=new Map,K=I.filter(oe=>D.has(oe.subject)?!0:(H.has(oe.subject)||H.set(oe.subject,L(oe.subject,D,ae,Z,{maxHops:3})),!!H.get(oe.subject))),ve=Ze(K.length?K:I,o).map(oe=>{let ke=K.length?H.get(oe.subject):null;if(!ke||ke.length<2)return ie(oe);let le=ke.map(ee);if(!le.every(Boolean))return ie(oe);let V=le.map(se=>`${Dt(se)}${se.provenance?` (source: ${Wn(se.provenance)})`:""}`).join("; ");return`${ie(oe)} \u2014 via: ${V}`}),Re=ve.slice(0,Se),ue=ve.slice(Se),Ae=ue.length?`
204
+ \u2026and ${ue.length} more \u2014 say 'more' to see them.`:"";return{text:(K.length?"":`nothing I remember ties these to "${F[1]}", but:
205
+ `)+Re.join(`
206
+ `)+Ae,replace:!0,...ue.length?{pending:{items:ue,noun:"facts"}}:{}}}}let T=c.match(GC);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,T[1]),U=(await ot(e,r)).filter(W=>W.predicate==="mgxneg:capableOf"&&D.has(W.object));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),M=C.length?`
207
207
  \u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
208
- `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${T[1].trim()}.`,replace:!0,miss:!0}}let M=c.match(FC);if(M&&M[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,M[1]),U=su(D,await it(e,r));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),P=C.length?`
208
+ `)+M,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${T[1].trim()}.`,replace:!0,miss:!0}}let P=c.match(WC);if(P&&P[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,P[1]),U=ru(D,await ot(e,r));if(U.length){let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),M=C.length?`
209
209
  \u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
210
- `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let z=c.match(IC);if(z&&!YC.has(z[1].trim().split(/\s+/)[0]?.toLowerCase())){let D=Y(a,z[1]),U=(await it(e,r)).filter(N=>N.predicate==="mgx:hasA"&&D.has(N.object));if(!U.length)return null;let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),P=C.length?`
210
+ `)+M,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let z=c.match(PC);if(z&&!eO.has(z[1].trim().split(/\s+/)[0]?.toLowerCase())){let D=Y(a,z[1]),U=(await ot(e,r)).filter(N=>N.predicate==="mgx:hasA"&&D.has(N.object));if(!U.length)return null;let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),M=C.length?`
211
211
  \u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
212
- `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let K=c.match(c$),ce=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:K?.[1];if(ce){let D=Y(a,ce),U=(await it(e,r)).filter(N=>ms.has(N.predicate)&&D.has(N.object));if(!U.length)return null;let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),P=C.length?`
212
+ `)+M,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let X=c.match(d$),ce=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:X?.[1];if(ce){let D=Y(a,ce),U=(await ot(e,r)).filter(N=>Bn.has(N.predicate)&&D.has(N.object));if(!U.length)return null;let I=Ze(gn(U),o).map(ie),L=I.slice(0,Se),C=I.slice(Se),M=C.length?`
213
213
  \u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
214
- `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let Z=c.match(_C);if(Z){let D=Y(a,Z[1]),U=await it(e,r),G=q=>!String(q.provenance||"").includes("corpus:")&&!String(q.provenance||"").includes("web:"),I=U.filter(q=>ms.has(q.predicate)&&G(q)),L=new Set,C=D;for(let q=0;q<8&&C.size;q+=1){let te=new Set;for(let Fe of I)C.has(Fe.object)&&!L.has(Fe.subject)&&te.add(Fe.subject);if(!te.size)break;for(let Fe of te)L.add(Fe);let qe=new Set;for(let Fe of te)for(let et of Y(a,Fe))qe.add(et);C=qe}let P=U.filter(q=>D.has(q.subject)||D.has(q.object)||L.has(q.subject));if(!P.length){let q=a(Z[1]).split(/\s+/).filter(te=>te.length>=4&&!j$.has(te));if(q.length){let te=Fe=>new Set(String(Fe||"").split(/\s+/)),qe=Fe=>{let et=te(Fe);return q.some(rn=>et.has(rn))};P=U.filter(Fe=>qe(Fe.subject)||qe(Fe.object))}}P=P.filter(q=>!Zy.has(q.predicate));let N=P.length>0&&!P.some(Qd);if(!P.length)return null;let{findConsistencyViolations:B,TYPE_PREDICATE:H,SUBCLASS_PREDICATE:se,DISJOINT_PREDICATE:ae}=await Promise.resolve().then(()=>(qt(),dn)),X=q=>!q.provenance?.includes("corpus:")&&!q.provenance?.includes("web:"),ee=U.filter(q=>q.predicate===H&&X(q)).map(q=>[q.subject,q.object]),V=U.filter(q=>q.predicate===se&&X(q)).map(q=>[q.subject,q.object]),re=U.filter(q=>q.predicate===ae&&X(q)).map(q=>[q.subject,q.object]);if(re.length){let te=B(ee,V,re,{focus:D,budget:5}).find(qe=>D.has(qe.subject));if(te)return{text:`I can't answer that \u2014 what I've been told about ${te.subject} is inconsistent: it's taught to be both ${te.classA} and ${te.classB}, but ${te.viaA} and ${te.viaB} are disjoint (${te.viaA} owl:disjointWith ${te.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let oe=P.find(q=>D.has(q.subject)||D.has(q.object)),ge=oe?D.has(oe.subject)?oe.subject:oe.object:Z[1].trim(),Te=P.some(q=>L.has(q.subject)&&!D.has(q.subject)&&!D.has(q.object));P=Ze(P,o);let ue=`${P.length} remembered fact${P.length===1?"":"s"} about ${ge}${Te?" (including its known subtypes)":""}:`,{lines:Ae,grouped:Ie}=t$(P,U,D,{indent:" "});if(Ie)return{...Ie,text:`${ue}
215
- ${Ie.text}`,...N?{weakOnly:!0}:{}};let ne=Ae.slice(0,Se),ke=Ae.slice(Se),le=ke.length?`
214
+ `)+M,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let te=c.match(IC);if(te){let D=Y(a,te[1]),U=await ot(e,r),W=V=>!String(V.provenance||"").includes("corpus:")&&!String(V.provenance||"").includes("web:"),I=U.filter(V=>Bn.has(V.predicate)&&W(V)),L=new Set,C=D;for(let V=0;V<8&&C.size;V+=1){let se=new Set;for(let Fe of I)C.has(Fe.object)&&!L.has(Fe.subject)&&se.add(Fe.subject);if(!se.size)break;for(let Fe of se)L.add(Fe);let qe=new Set;for(let Fe of se)for(let et of Y(a,Fe))qe.add(et);C=qe}let M=U.filter(V=>D.has(V.subject)||D.has(V.object)||L.has(V.subject));if(!M.length){let V=a(te[1]).split(/\s+/).filter(se=>se.length>=4&&!T$.has(se));if(V.length){let se=Fe=>new Set(String(Fe||"").split(/\s+/)),qe=Fe=>{let et=se(Fe);return V.some(rn=>et.has(rn))};M=U.filter(Fe=>qe(Fe.subject)||qe(Fe.object))}}M=M.filter(V=>!n$.has(V.predicate));let N=M.length>0&&!M.some(tp);if(!M.length)return null;let{findConsistencyViolations:G,TYPE_PREDICATE:q,SUBCLASS_PREDICATE:re,DISJOINT_PREDICATE:ae}=await Promise.resolve().then(()=>(qt(),dn)),Z=V=>!V.provenance?.includes("corpus:")&&!V.provenance?.includes("web:"),ee=U.filter(V=>V.predicate===q&&Z(V)).map(V=>[V.subject,V.object]),H=U.filter(V=>V.predicate===re&&Z(V)).map(V=>[V.subject,V.object]),K=U.filter(V=>V.predicate===ae&&Z(V)).map(V=>[V.subject,V.object]);if(K.length){let se=G(ee,H,K,{focus:D,budget:5}).find(qe=>D.has(qe.subject));if(se)return{text:`I can't answer that \u2014 what I've been told about ${se.subject} is inconsistent: it's taught to be both ${se.classA} and ${se.classB}, but ${se.viaA} and ${se.viaB} are disjoint (${se.viaA} owl:disjointWith ${se.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let ne=M.find(V=>D.has(V.subject)||D.has(V.object)),ve=ne?D.has(ne.subject)?ne.subject:ne.object:te[1].trim(),Re=M.some(V=>L.has(V.subject)&&!D.has(V.subject)&&!D.has(V.object));M=Ze(M,o);let ue=`${M.length} remembered fact${M.length===1?"":"s"} about ${ve}${Re?" (including its known subtypes)":""}:`,{lines:Ae,grouped:Ie}=o$(M,U,D,{indent:" "});if(Ie)return{...Ie,text:`${ue}
215
+ ${Ie.text}`,...N?{weakOnly:!0}:{}};let oe=Ae.slice(0,Se),ke=Ae.slice(Se),le=ke.length?`
216
216
  \u2026and ${ke.length} more \u2014 say 'more' to see them.`:"";return{text:`${ue}
217
- ${ne.join(`
218
- `)}${le}`,replace:!0,...ke.length?{pending:{items:ke.map(q=>q.trim()),noun:"facts"}}:{},...N?{weakOnly:!0}:{}}}return null}async function aO(e,t){let n=await wi(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&tp[s]?tp[s][0]:null}function wc(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<lO;r+=1){let i=null;for(let a of e.relations||[])if(cO.test(`${a?.prop||""} ${a?.predicate||""}`)&&(i=(a.edges||[]).find(l=>l?.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 C$(e,t,n,s,o=null,r=null,i={},a=null){return I$(await uO(e,t,n,s,o,r,i,a),n,t)}async function uO(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Ve(),Ns)))}catch{return null}let c=String(t).trim();if(o){let I=c.match(zs);if(I){let L=await wi(o,I[1]);if(L){let C=Y(l,en(I[2])),P=wc(o,L.id).find(B=>[...Y(l,B.label)].some(H=>C.has(H)));if(P)return{text:`yes \u2014 the code graph says ${L.label} inherits ${P.label}.`,replace:!0};let N=await wi(o,en(I[2]));if(N&&wc(o,N.id).some(B=>B.id===L.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${N.label} inherits ${L.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=c.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await it(e,a);if(!d.length){if(!zs.test(u)&&!np.test(u)){let L=u.match(u$);if(L){let C=L[1].trim(),P=hs.test(C)?r||null:C;if(P&&!/^there\b/i.test(P)&&!n?.parsed&&!p$.test(C)&&!d$.test(C)&&!Qy.test(L[2].trim()))return f$(P,L[2].trim().toLowerCase())}}let I=u.match(zs)||sp(c);if(!(I&&!/^there\b/i.test(I[1].trim())||s$.test(c)))return null}let f=d.filter(I=>ms.has(I.predicate)),p=(I,L)=>L.trust-I.trust,h=I=>{let L=I.map(ie),C=L.slice(0,Se),P=L.slice(Se),N=P.length?`
219
- \u2026and ${P.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
220
- `)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}};if(iO.test(c)){let I=Ze(f.length?f:d,i);return I.length?h(I):null}let m=u.match(np);if(m){let I=m[1].trim(),L=hs.test(I)?r||null:I,C=m[2].trim().toLowerCase(),P=m[3].trim();if(L&&!op.has(C)){let N=Gd(d),{findIsaChain:B}=await Promise.resolve().then(()=>(qt(),dn)),H=Te=>{let ue=String(Te||"").trim().toLowerCase(),Ae=[];for(let Ie of d){let ne=Xd(Ie.predicate);if(!ne)continue;if(ne===ue){Ae.push({fact:Ie,aliasFacts:[]});continue}let ke=Vd(B,ne,new Set([ue]),N,{maxHops:2});if(!ke)continue;let le=ke.map(q=>d.find(te=>te.predicate===yi&&te.subject===q.subject&&te.object===q.object));le.every(Boolean)&&Ae.push({fact:Ie,aliasFacts:le})}return Ae},{loadMemory:se,findRuleByName:ae,resolveRelationChase:X}=await Promise.resolve().then(()=>(Ve(),Ns)),{findActionPath:ee}=await Promise.resolve().then(()=>(Qs(),Oi)),V=await se(e),oe=await X(V,C,L,P,{relationFactsFor:H,renderFactLine:ie,factPhrase:Dt,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Wd,findActionPath:ee});return oe?{text:`yes \u2014 ${oe.citation.join("; ")}`,replace:!0}:H(C).length>0||!!ae(V,C)?{text:`I know the '${C}' relation, but I can't confirm ${L} is the ${C} of ${P} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}let g=$c(u).match(_$)||R$(u,I=>{let L=Y(l,I);return d.some(C=>L.has(C.subject)||L.has(C.object))});if(g){let I=g[1].trim().toLowerCase(),L=g[2].trim(),C=hs.test(L)?r||null:L;if(C&&!op.has(I)){let P=Gd(d),{findIsaChain:N}=await Promise.resolve().then(()=>(qt(),dn)),B=Te=>{let ue=String(Te||"").trim().toLowerCase(),Ae=[];for(let Ie of d){let ne=Xd(Ie.predicate);if(!ne)continue;if(ne===ue){Ae.push({fact:Ie,aliasFacts:[]});continue}let ke=Vd(N,ne,new Set([ue]),P,{maxHops:2});if(!ke)continue;let le=ke.map(q=>d.find(te=>te.predicate===yi&&te.subject===q.subject&&te.object===q.object));le.every(Boolean)&&Ae.push({fact:Ie,aliasFacts:le})}return Ae},{loadMemory:H,findRuleByName:se,resolveRelationChaseReverse:ae}=await Promise.resolve().then(()=>(Ve(),Ns)),X=await H(e),{findReachableSet:ee}=await Promise.resolve().then(()=>(Qs(),Oi)),re=await ae(X,I,C,{relationFactsFor:B,renderFactLine:ie,factPhrase:Dt,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Wd,findReachableSet:ee});return re.length?{text:re.map(ue=>`${ue.subject} \u2014 ${ue.citation.join("; ")}`).join(`
221
- `),replace:!0}:B(I).length>0||!!se(X,I)?{text:/^what\b/i.test($c(u))?`I don't know what the ${I} of ${C} is from what you've told me.`:`I don't know anyone who is the ${I} of ${C} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${I}' yet.`,replace:!0}}}{let I=u.match(dO);if(I){let L=Y(l,I[1]),C=Ze(d.filter(P=>L.has(P.subject)||L.has(P.object)),i);if(C.length){let P=C.map(ie),N=P.slice(0,Se),B=P.slice(Se),H=B.length?`
222
- \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
223
- `)+H,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}}let b=u.match(EC);if(b){let I=up(b[1].trim().toLowerCase()),L=b[2].trim(),C=hs.test(L)?r||null:L;if(C){let{loadMemory:P,findRuleByName:N,RULE_KIND_PROP:B,RULE_KIND_RECURSIVE:H}=await Promise.resolve().then(()=>(Ve(),Ns)),se=await P(e),ae=N(se,I),X=ae?.attributes?.find(ee=>ee.prop===B)?.value;if(ae&&X===H){let ee=ae.attributes.find(oe=>oe.prop==="mgx:ruleBaseCase")?.value,V=ae.attributes.find(oe=>oe.prop==="mgx:ruleRecStep")?.value,re=l(C);if(ee&&V&&re){let oe=Gd(d),{findIsaChain:ge}=await Promise.resolve().then(()=>(qt(),dn)),Te=ke=>{let le=String(ke||"").trim().toLowerCase(),q=[];for(let te of d){let qe=Xd(te.predicate);if(!qe)continue;if(qe===le){q.push({fact:te,aliasFacts:[]});continue}let Fe=Vd(ge,qe,new Set([le]),oe,{maxHops:2});if(!Fe)continue;let et=Fe.map(rn=>d.find(Yt=>Yt.predicate===yi&&Yt.subject===rn.subject&&Yt.object===rn.object));et.every(Boolean)&&q.push({fact:te,aliasFacts:et})}return q},{findReachableSet:ue}=await Promise.resolve().then(()=>(Qs(),Oi)),ne=ue({entity:re,hop:0},ke=>{let le=ke.hop===0?ee:V;return Te(le).filter(q=>q.fact.subject===ke.entity).map(q=>({action:q,nextState:{entity:q.fact.object,hop:ke.hop+1}}))},{maxDepth:20,stateKey:ke=>ke.entity});if(ne.length)return{text:ne.map(({node:le,path:q})=>{let te=new Set,qe=[];for(let Fe of q.actions){qe.push(ie(Fe.fact));for(let et of Fe.aliasFacts){let rn=et.id||`${et.subject}|${et.predicate}|${et.object}`;te.has(rn)||(te.add(rn),qe.push(`${Dt(et)}${et.provenance?` (source: ${Un(et.provenance)})`:""}`))}}return`${le.entity} \u2014 ${qe.join("; ")}`}).join(`
224
- `),replace:!0}}}return null}}let y=c.match(s$),w=c.match(zs)||sp(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(zs);if(w){let I=Y(l,en(w[2])),L=r&&hs.test(w[1].trim())?r:w[1],C=new Set(Y(l,L));if([...C].some(W=>I.has(W))){let W=en(w[2]).trim();return{text:`yes \u2014 ${br(W)} ${W} is ${br(W)} ${W}, trivially: every kind is a kind of itself.`,replace:!0}}let P=await aO(o,L);if(P)for(let W of Y(l,P))C.add(W);let{findIsaChain:N,buildSubClassSuccessors:B,deriveDisjointViolations:H,SUBCLASS_PREDICATE:se,TYPE_PREDICATE:ae,DISJOINT_PREDICATE:X}=await Promise.resolve().then(()=>(qt(),dn)),ee=vo,V=f.filter(W=>W.predicate===se&&ee(W)),re=f.filter(W=>W.predicate===ae&&ee(W)),oe=V.map(W=>[W.subject,W.object]),ge=re.map(W=>[W.subject,W.object]),Te=f.filter(W=>W.predicate===se),ue=f.filter(W=>W.predicate===ae),Ae=ue.map(W=>[W.subject,W.object]),Ie=Te.map(W=>[W.subject,W.object]),ne=B(oe),ke=B(Ie),le=d.filter(W=>W.predicate===X&&ee(W)),q=le.map(W=>[W.subject,W.object]),te=le.length?H(Ae.concat(Ie),Ie,q,{budget:20,focus:new Set([...C,...I])}):[],qe=W=>{let be=te.find(Ne=>Ne.subject===W&&I.has(Ne.object));if(!be)return null;let we=f.filter(Ne=>I.has(Ne.object)&&(Ne.subject===be.viaClass||Ne.subject===be.subject)).sort(p)[0],je=le.find(Ne=>Ne.subject===be.viaClass&&Ne.object===be.object||Ne.subject===be.object&&Ne.object===be.viaClass);return!we||!je?null:gC(we,je)},Fe=f.filter(W=>C.has(W.subject)&&I.has(W.object)).sort(p)[0],et=d.filter(W=>W.predicate===pa&&C.has(W.subject)&&I.has(W.object)).sort(p)[0],rn=le.find(W=>C.has(W.subject)&&I.has(W.object)||C.has(W.object)&&I.has(W.subject));if(Fe&&!et){let W=qe(Fe.subject);if(W)return W}let Yt=k$(Fe,et||rn);if(Yt)return Yt;if(le.length){let W=je=>{let Ne=new Set(je),Ot=new Set(je);for(let Ce=0;Ce<8&&Ot.size;Ce+=1){let ye=new Set;for(let[at,Bs]of Ie)Ot.has(at)&&!Ne.has(Bs)&&ye.add(Bs);if(!ye.size)break;for(let at of ye)Ne.add(at);Ot=ye}return Ne},be=W(I),we=te.find(je=>C.has(je.subject)&&be.has(je.object)&&!W([je.viaClass]).has(je.object)&&!W([je.object]).has(je.viaClass));if(we){let je=f.filter(ye=>C.has(ye.subject)&&ye.object===we.viaClass).sort(p)[0],Ne=le.find(ye=>ye.subject===we.viaClass&&ye.object===we.object||ye.subject===we.object&&ye.object===we.viaClass),Ot=!I.has(we.object),Ce=Ot?f.filter(ye=>I.has(ye.subject)&&ye.object===we.object).sort(p)[0]:null;if(je&&Ne&&(!Ot||Ce)){let ye=en(w[2]).trim();return{text:`no \u2014 ${[je,...Ce?[Ce]:[]].map(ie).join("; ")}; and ${Dt(Ne)}${Ne.provenance?` (source: ${Un(Ne.provenance)})`:""} \u2014 so ${L} can never be ${br(ye)} ${ye}.`,replace:!0}}}}let Xt=await wi(o,L);if(Xt){let W=new Map;for(let we of wc(o,Xt.id))for(let je of Y(l,we.label))!C.has(je)&&!W.has(je)&&W.set(je,we.label);let be=f.filter(we=>W.has(we.subject)&&I.has(we.object)).sort(p)[0];if(be)return{text:`yes \u2014 the code graph says ${Xt.label} inherits ${W.get(be.subject)}, and ${ie(be)}`,replace:!0}}let an=W=>(W.predicate===se?V:re).find(be=>be.subject===W.subject&&be.object===W.object);for(let W of C){let be=N(W,I,ge,ne,{maxHops:2});if(!be)continue;let we=qe(W);if(we)return we;let je=be.map(an);if(je.every(Boolean))return{text:`yes \u2014 ${gc(je)}`,replace:!0}}let $i=W=>(W.predicate===se?Te:ue).find(be=>be.subject===W.subject&&be.object===W.object);for(let W of C){let be=N(W,I,Ae,ke,{maxHops:2});if(!be)continue;let we=qe(W);if(we)return we;let je=be.map($i);if(je.every(Boolean)&&je.some(ee))return{text:`yes \u2014 ${gc(je)}`,replace:!0}}let k=L.match(/^(.*\S)\s+not$/i),pe=k&&[k[0],r&&hs.test(k[1].trim())?r:k[1]];if(pe){let W=Y(l,pe[1]),be=I,we=f.filter(Ce=>W.has(Ce.subject)&&be.has(Ce.object)).sort(p)[0];if(we)return{text:`no \u2014 ${ie(we)}`,replace:!0};let je=le.find(Ce=>W.has(Ce.subject)&&be.has(Ce.object)||W.has(Ce.object)&&be.has(Ce.subject));if(je)return{text:`yes \u2014 ${ie(je)}`,replace:!0};let Ne=pe[1].trim(),Ot=en(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Ot}. If no ${Ne} is a ${Ot}, teach me: "no ${Ne} is a ${Ot}".`,replace:!0,miss:!0}}if(le.length){let W=H(ge.concat(oe),oe,q,{budget:10});for(let be of C){let we=W.find(Ce=>Ce.subject===be&&I.has(Ce.object));if(!we)continue;let je=re.concat(V).find(Ce=>Ce.subject===we.subject&&Ce.object===we.viaType),Ne=le.find(Ce=>Ce.subject===we.viaClass&&Ce.object===we.object||Ce.subject===we.object&&Ce.object===we.viaClass),Ot=[je,Ne].filter(Boolean).map(ie);return{text:`no \u2014 ${Ot.length?Ot.join("; "):`${we.viaClass} and ${we.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:Re,ON_PROPERTY_PREDICATE:cn,SOME_VALUES_FROM_PREDICATE:Bn,deriveSomeValuesFromSubsumption:J$,ENTAILED_SCM_SVF_PROVENANCE:Q$,SCM_SVF_RULE_CONFIDENCE:Z$,entailedTrustFrom:hp}=await Promise.resolve().then(()=>(qt(),dn)),mp=d.filter(W=>W.predicate===cn&&ee(W)),gp=d.filter(W=>W.predicate===Bn&&ee(W));if(mp.length&&gp.length){let W=new Map(gp.map(ye=>[ye.subject,ye.object])),be=mp.map(ye=>({restriction:ye.subject,property:ye.object,target:W.get(ye.subject)})).filter(ye=>ye.target),we=new Set([se,ae,X,cn,Bn,"owl:intersectionOf"]),je=d.filter(ye=>ee(ye)&&!we.has(ye.predicate)),Ne=je.map(ye=>[ye.subject,ye.predicate,ye.object]),Ot=Re(Ne,ge,oe,be,{budget:10});for(let ye of C){let at=Ot.find(wn=>wn.subject===ye&&I.has(wn.object));if(!at)continue;let Bs=je.find(wn=>wn.subject===at.subject&&wn.predicate===at.viaProperty&&wn.object===at.viaValue),Ws=re.find(wn=>wn.subject===at.viaValue&&wn.object===at.viaType),yr=[Bs,Ws].filter(Boolean).map(ie);return{text:`yes \u2014 ${yr.length?yr.join("; "):`${at.subject} ${at.viaProperty} ${at.viaValue}, and ${at.viaValue} is a ${at.viaType}.`}`,replace:!0}}let Ce=be.length>1?J$(be,oe,{budget:10}):[];if(Ce.length){let ye=B(oe.concat(Ce.map(xe=>[xe.subject,xe.object]))),at=new Map(be.map(xe=>[xe.restriction,xe])),Bs=new Map;for(let xe of d)Bs.set(`${xe.subject}\0${xe.predicate}\0${xe.object}`,xe.trust);let Ws=(xe,jn,zt)=>Bs.get(`${xe}\0${jn}\0${zt}`),yr=new Map;for(let xe of Ce){let jn=at.get(xe.subject),zt=at.get(xe.object),Jt=[jn&&Ws(xe.subject,cn,jn.property),Ws(xe.subject,Bn,xe.viaY1),zt&&Ws(xe.object,cn,zt.property),Ws(xe.object,Bn,xe.viaY2),Ws(xe.viaY1,se,xe.viaY2)].filter(nv=>typeof nv=="number"),xi=hp(Jt,Z$);xi!==null&&yr.set(`${xe.subject}\0${xe.object}`,xi)}let wn=xe=>{if(xe.predicate!==se)return re.find(Jt=>Jt.subject===xe.subject&&Jt.object===xe.object);let jn=V.find(Jt=>Jt.subject===xe.subject&&Jt.object===xe.object);if(jn)return jn;let zt=Ce.find(Jt=>Jt.subject===xe.subject&&Jt.object===xe.object);return zt?{subject:zt.subject,predicate:se,object:zt.object,provenance:Q$,trust:yr.get(`${zt.subject}\0${zt.object}`)}:void 0};for(let xe of C){let jn=N(xe,I,ge,ye,{maxHops:3});if(!jn)continue;let zt=jn.map(wn);if(zt.every(Boolean)){let Jt=hp(zt.map(xi=>xi.trust),1);return{text:`yes \u2014 ${gc(zt)}`,replace:!0,...Jt!==null?{trust:Jt}:{}}}}}}let ev=Y(l,L),bp=f.filter(W=>ev.has(W.subject)).sort(p),Us=L.trim(),vi=en(w[2]).trim(),tv=[...C].some(W=>N(W,I,ge,ne,{maxHops:SC}));if(bp.length){let W=bp.slice(0,3).map(ie).join("; "),be=tv?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${Us}", then ask me again.`:`If it's true, teach me: "${Us} is a kind of ${vi}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${Us} is a ${vi}. I do know: ${W}. ${be}`,replace:!0,miss:!0}}let wp=f.filter(W=>C.has(W.object)&&I.has(W.subject)).sort(p)[0];return wp?{text:`I can't confirm that \u2014 what I know runs the other way: ${ie(wp)}. A kind doesn't reverse. If it's true, teach me: "every ${Us} is a ${vi}".`,replace:!0,miss:!0}:!Xt&&!P&&!qI(Us)&&!d.some(W=>C.has(W.subject)||C.has(W.object))?{text:`I can't confirm that \u2014 I don't know "${Us}" at all yet. If it's true, teach me: "${Us} is a kind of ${vi}".`,replace:!0,miss:!0}:null}let v=c.match(ZC);if(v){let[,I,L,C]=v,{SUBCLASS_PREDICATE:P,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:B,proveCardinalityAtLeast:H,CARDINALITY_RULE_CONFIDENCE:se,entailedTrustFrom:ae}=await Promise.resolve().then(()=>(qt(),dn)),X=vo,ee=f.filter(oe=>oe.predicate===P&&X(oe)).map(oe=>[oe.subject,oe.object]),V=d.filter(oe=>(oe.predicate===N||l$.has(oe.predicate))&&X(oe)),re=B(V);if(re.length){let oe=Y(l,I.trim()),ge=Y(l,C.trim()),Te=Number(L),ue=n$(oe,ge,(Ae,Ie)=>H(ee,re,Ae,Ie,Te,{}));if(ue){let Ae=d.find(te=>te.predicate===P&&te.subject===ue.viaClass&&te.object===ue.viaRestriction),Ie=Ae?.provenance?` (source: ${Un(Ae.provenance)})`:"",ne=ue.kind==="exactly"?"exactly":"at least",ke=(te,qe)=>`${te}${qe===1?"":"s"}`,le=[Ae?.trust,...V.filter(te=>te.subject===ue.viaRestriction).map(te=>te.trust),...ue.viaClass!==ue.subject?[f.find(te=>te.predicate===P&&te.subject===ue.subject&&te.object===ue.viaClass)?.trust]:[]].filter(te=>typeof te=="number"),q=ae(le,se);return{text:`yes \u2014 every ${ue.viaClass} has ${ne} ${ue.n} ${ke(ue.object,ue.n)}${Ie}, so at least ${Te} follows.`,replace:!0,...q!==null?{trust:q}:{}}}}}let _=c.match(eO);if(_){let[,I,L]=_,{SUBCLASS_PREDICATE:C,ON_PROPERTY_PREDICATE:P,buildCardinalityRestrictions:N,proveMaxCardinalityZeroDenial:B,CAX_MAXC0_RULE_CONFIDENCE:H,entailedTrustFrom:se}=await Promise.resolve().then(()=>(qt(),dn)),ae=vo,X=f.filter(re=>re.predicate===C&&ae(re)).map(re=>[re.subject,re.object]),ee=d.filter(re=>(re.predicate===P||l$.has(re.predicate))&&ae(re)),V=N(ee);if(V.length){let re=Y(l,I.trim()),oe=Y(l,L.trim()),ge=n$(re,oe,(Te,ue)=>B(X,V,Te,ue,{}));if(ge){let Te=d.find(ne=>ne.predicate===C&&ne.subject===ge.viaClass&&ne.object===ge.viaRestriction),ue=Te?.provenance?` (source: ${Un(Te.provenance)})`:"",Ae=[Te?.trust,...ee.filter(ne=>ne.subject===ge.viaRestriction).map(ne=>ne.trust),...ge.viaClass!==ge.subject?[f.find(ne=>ne.predicate===C&&ne.subject===ge.subject&&ne.object===ge.viaClass)?.trust]:[]].filter(ne=>typeof ne=="number"),Ie=se(Ae,H);return{text:`no \u2014 every ${ge.viaClass} has at most 0 ${ge.object}${ue}.`,replace:!0,...Ie!==null?{trust:Ie}:{}}}}}let $=c.match(tO);if($){let I=Y(l,$[1]),L=d.filter(C=>C.predicate===Bd&&I.has(C.subject)).sort(p);return L.length?h(L):null}let x=u.match(nO);if(x){let[,I,L]=x,C=Y(l,I.trim()),P=Y(l,L.replace(/^an?\s+/i,"").trim()),N=d.filter(B=>B.predicate===Bd&&P.has(B.subject)&&C.has(B.object)).sort(p)[0];return N?{text:`yes \u2014 ${ie(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${L.trim()}.`,replace:!0}}let S=u.match(sO);if(S){let[,I,L]=S,C=Y(l,I.replace(/^an?\s+/i,"").trim()),P=Y(l,L.trim()),N=d.filter(B=>B.predicate===Bd&&C.has(B.subject)&&P.has(B.object)).sort(p)[0];return N?{text:`yes \u2014 ${ie(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${L.trim()}.`,replace:!0}}let E=u.match(oO);if(E){let[,I,L]=E,C=Y(l,I.trim()),P=Y(l,`${L.trim()} method`),N=d.filter(B=>B.predicate===dr&&C.has(B.subject)&&P.has(B.object)).sort(p)[0];return N?{text:`yes \u2014 ${ie(N)}`,replace:!0}:null}let R=u.match(rO);if(R){let I=Y(l,R[1].trim()),L=d.filter(C=>C.predicate===dr&&I.has(C.subject)&&/ method$/.test(C.object)).sort(p);return L.length?h(L):null}let j=u.match(u$);if(j){let I=j[1].trim(),L=p$.test(I)||d$.test(I)?null:hs.test(I)?r||null:I,C=j[2].trim().toLowerCase();if(L){let P=Y(l,L),N=new Map,B=null;if(o){let V=await wi(o,L);if(B=V,V)for(let re of wc(o,V.id))for(let oe of Y(l,re.label))!P.has(oe)&&!N.has(oe)&&N.set(oe,re.label),P.add(oe)}let H=V=>V.predicate===Wd&&l(V.object)===C||V.predicate===`tmct:${C}`&&V.object==="true",se=l(L).split(/\s+/).filter(V=>V.length>=4&&!j$.has(V)),ae=V=>se.some(re=>new Set(String(V.subject||"").split(/\s+/)).has(re)),X=V=>P.has(V.subject)||se.length&&ae(V),ee=d.filter(V=>X(V)&&H(V)).sort(p)[0];if(ee){let V=N.get(ee.subject);return{text:V?`yes \u2014 the code graph says ${B.label} inherits ${V}, and ${ie(ee)}`:`yes \u2014 ${ie(ee)}`,replace:!0}}{let{findIsaChain:V,SUBCLASS_PREDICATE:re,TYPE_PREDICATE:oe}=await Promise.resolve().then(()=>(qt(),dn)),ge=vo,Te=d.filter(le=>le.predicate===re&&ge(le)),ue=d.filter(le=>le.predicate===oe&&ge(le)),Ae=Te.map(le=>[le.subject,le.object]),Ie=ue.map(le=>[le.subject,le.object]),ne=le=>(le.predicate===re?Te:ue).find(q=>q.subject===le.subject&&q.object===le.object),ke=Y(l,C);for(let le of P){let q=V(le,ke,Ie,Ae,{maxHops:2});if(!q)continue;let te=q.map(ne);if(te.every(Boolean))return{text:`yes \u2014 ${gc(te)}`,replace:!0}}}if(d.some(X)&&!n?.parsed)return{text:`I don't have a fact saying ${wC(L)} is ${C}.`,replace:!0};if(!n?.parsed&&!Qy.test(C))return f$(L,C)}}let A=rp(c).match(sC);if(A&&!Hd.test(c)){let[,I,L,C]=A,P=L.toLowerCase();if(!qd.test(P)&&!Yd.test(P)){let N=I.trim(),B=iC(await Kd(P),C),H=B.object.replace(/^an?\s+/i,"").trim();if(N&&H){let se=B.predicate,ae=Y(l,N),X=Y(l,H),ee=[se,Zo(se)],V=d.filter(oe=>ee.includes(oe.predicate)&&ae.has(oe.subject)&&X.has(oe.object)).sort(p)[0];if(V)return{text:`${Um(V.predicate)?"no":"yes"} \u2014 ${ie(V)}`,replace:!0,generalVerbQuery:!0};let re=d.filter(oe=>ee.includes(oe.predicate)&&ae.has(oe.subject));if(re.length){let oe=re.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Dt({subject:N,predicate:se,object:H})}. I do know: ${oe}.`,replace:!0,miss:!0}}return null}}}let F=c.match(oC);if(F&&!Hd.test(c)){let[,I,L]=F,[C,P]=L.toLowerCase().split(/\s+/);if(!qd.test(C)&&!Yd.test(C)){let N=I.trim();if(N){let B=await Kd(C);P&&/^mgx:[a-z]+$/.test(B)&&(B=`${B}-${P}`);let H=Y(l,N),se=[B,Zo(B)],ae=Ze(d.filter(X=>se.includes(X.predicate)&&H.has(X.subject)),i);if(ae.length)return{...h(ae),generalVerbQuery:!0}}}}let T=c.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(T&&!Hd.test(c)){let[,I,L,C]=T,P=I.toLowerCase();if(!qd.test(P)&&!Yd.test(P)&&!nC.test(P)){let N=await Kd(P);/^mgx:[a-z]+$/.test(N)&&(N=`${N}-${L.toLowerCase()}`);let B=Y(l,C.replace(/^(?:an?|the)\s+/i,"").trim()),H=Ze(d.filter(se=>se.predicate===N&&B.has(se.object)),i);if(H.length)return{...h(H),generalVerbQuery:!0}}}let M=c.match(JC);if(M){let I=Y(l,M[1]),L=Ze(d.filter(se=>I.has(se.subject)||I.has(se.object)),i);if(!L.length)return null;let C=I.has(L[0].subject)?L[0].subject:L[0].object,P=L.map(se=>` ${ie(se)}`),N=P.slice(0,Se),B=P.slice(Se),H=B.length?`
225
- \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:`${L.length} remembered fact${L.length===1?"":"s"} about ${C}:
217
+ ${oe.join(`
218
+ `)}${le}`,replace:!0,...ke.length?{pending:{items:ke.map(V=>V.trim()),noun:"facts"}}:{},...N?{weakOnly:!0}:{}}}return null}async function fO(e,t){let n=await yi(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&op[s]?op[s][0]:null}function $c(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<mO;r+=1){let i=null;for(let a of e.relations||[])if(hO.test(`${a?.prop||""} ${a?.predicate||""}`)&&(i=(a.edges||[]).find(l=>l?.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 N$(e,t,n,s,o=null,r=null,i={},a=null){return L$(await gO(e,t,n,s,o,r,i,a),n,t)}async function gO(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Ve(),Ps)))}catch{return null}let c=String(t).trim();if(o){let I=c.match(Us);if(I){let L=await yi(o,I[1]);if(L){let C=Y(l,en(I[2])),M=$c(o,L.id).find(G=>[...Y(l,G.label)].some(q=>C.has(q)));if(M)return{text:`yes \u2014 the code graph says ${L.label} inherits ${M.label}.`,replace:!0};let N=await yi(o,en(I[2]));if(N&&$c(o,N.id).some(G=>G.id===L.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${N.label} inherits ${L.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=c.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await ot(e,a);if(!d.length){if(!Us.test(u)&&!rp.test(u)){let L=u.match(f$);if(L){let C=L[1].trim(),M=gs.test(C)?r||null:C;if(M&&!/^there\b/i.test(M)&&!n?.parsed&&!m$.test(C)&&!h$.test(C)&&!t$.test(L[2].trim()))return g$(M,L[2].trim().toLowerCase())}}let I=u.match(Us)||ip(c);if(!(I&&!/^there\b/i.test(I[1].trim())||i$.test(c)))return null}let f=d.filter(I=>Bn.has(I.predicate)),p=(I,L)=>L.trust-I.trust,h=I=>{let L=I.map(ie),C=L.slice(0,Se),M=L.slice(Se),N=M.length?`
219
+ \u2026and ${M.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
220
+ `)+N,replace:!0,...M.length?{pending:{items:M,noun:"facts"}}:{}}};if(pO.test(c)){let I=Ze(f.length?f:d,i);return I.length?h(I):null}let m=u.match(rp);if(m){let I=m[1].trim(),L=gs.test(I)?r||null:I,C=m[2].trim().toLowerCase(),M=m[3].trim();if(L&&!ap.has(C)){let N=Hd(d),{findIsaChain:G}=await Promise.resolve().then(()=>(qt(),dn)),q=Re=>{let ue=String(Re||"").trim().toLowerCase(),Ae=[];for(let Ie of d){let oe=Zd(Ie.predicate);if(!oe)continue;if(oe===ue){Ae.push({fact:Ie,aliasFacts:[]});continue}let ke=Kd(G,oe,new Set([ue]),N,{maxHops:2});if(!ke)continue;let le=ke.map(V=>d.find(se=>se.predicate===$i&&se.subject===V.subject&&se.object===V.object));le.every(Boolean)&&Ae.push({fact:Ie,aliasFacts:le})}return Ae},{loadMemory:re,findRuleByName:ae,resolveRelationChase:Z}=await Promise.resolve().then(()=>(Ve(),Ps)),{findActionPath:ee}=await Promise.resolve().then(()=>(Zs(),Oi)),H=await re(e),ne=await Z(H,C,L,M,{relationFactsFor:q,renderFactLine:ie,factPhrase:Dt,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:qd,findActionPath:ee});return ne?{text:`yes \u2014 ${ne.citation.join("; ")}`,replace:!0}:q(C).length>0||!!ae(H,C)?{text:`I know the '${C}' relation, but I can't confirm ${L} is the ${C} of ${M} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}let g=xc(u).match(A$)||I$(u,I=>{let L=Y(l,I);return d.some(C=>L.has(C.subject)||L.has(C.object))});if(g){let I=g[1].trim().toLowerCase(),L=g[2].trim(),C=gs.test(L)?r||null:L;if(C&&!ap.has(I)){let M=Hd(d),{findIsaChain:N}=await Promise.resolve().then(()=>(qt(),dn)),G=Re=>{let ue=String(Re||"").trim().toLowerCase(),Ae=[];for(let Ie of d){let oe=Zd(Ie.predicate);if(!oe)continue;if(oe===ue){Ae.push({fact:Ie,aliasFacts:[]});continue}let ke=Kd(N,oe,new Set([ue]),M,{maxHops:2});if(!ke)continue;let le=ke.map(V=>d.find(se=>se.predicate===$i&&se.subject===V.subject&&se.object===V.object));le.every(Boolean)&&Ae.push({fact:Ie,aliasFacts:le})}return Ae},{loadMemory:q,findRuleByName:re,resolveRelationChaseReverse:ae}=await Promise.resolve().then(()=>(Ve(),Ps)),Z=await q(e),{findReachableSet:ee}=await Promise.resolve().then(()=>(Zs(),Oi)),K=await ae(Z,I,C,{relationFactsFor:G,renderFactLine:ie,factPhrase:Dt,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:qd,findReachableSet:ee});return K.length?{text:K.map(ue=>`${ue.subject} \u2014 ${ue.citation.join("; ")}`).join(`
221
+ `),replace:!0}:G(I).length>0||!!re(Z,I)?{text:/^what\b/i.test(xc(u))?`I don't know what the ${I} of ${C} is from what you've told me.`:`I don't know anyone who is the ${I} of ${C} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${I}' yet.`,replace:!0}}}{let I=u.match(bO);if(I){let L=Y(l,I[1]),C=Ze(d.filter(M=>L.has(M.subject)||L.has(M.object)),i);if(C.length){let M=C.map(ie),N=M.slice(0,Se),G=M.slice(Se),q=G.length?`
222
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
223
+ `)+q,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}}let b=u.match(_C);if(b){let I=fp(b[1].trim().toLowerCase()),L=b[2].trim(),C=gs.test(L)?r||null:L;if(C){let{loadMemory:M,findRuleByName:N,RULE_KIND_PROP:G,RULE_KIND_RECURSIVE:q}=await Promise.resolve().then(()=>(Ve(),Ps)),re=await M(e),ae=N(re,I),Z=ae?.attributes?.find(ee=>ee.prop===G)?.value;if(ae&&Z===q){let ee=ae.attributes.find(ne=>ne.prop==="mgx:ruleBaseCase")?.value,H=ae.attributes.find(ne=>ne.prop==="mgx:ruleRecStep")?.value,K=l(C);if(ee&&H&&K){let ne=Hd(d),{findIsaChain:ve}=await Promise.resolve().then(()=>(qt(),dn)),Re=ke=>{let le=String(ke||"").trim().toLowerCase(),V=[];for(let se of d){let qe=Zd(se.predicate);if(!qe)continue;if(qe===le){V.push({fact:se,aliasFacts:[]});continue}let Fe=Kd(ve,qe,new Set([le]),ne,{maxHops:2});if(!Fe)continue;let et=Fe.map(rn=>d.find(Yt=>Yt.predicate===$i&&Yt.subject===rn.subject&&Yt.object===rn.object));et.every(Boolean)&&V.push({fact:se,aliasFacts:et})}return V},{findReachableSet:ue}=await Promise.resolve().then(()=>(Zs(),Oi)),oe=ue({entity:K,hop:0},ke=>{let le=ke.hop===0?ee:H;return Re(le).filter(V=>V.fact.subject===ke.entity).map(V=>({action:V,nextState:{entity:V.fact.object,hop:ke.hop+1}}))},{maxDepth:20,stateKey:ke=>ke.entity});if(oe.length)return{text:oe.map(({node:le,path:V})=>{let se=new Set,qe=[];for(let Fe of V.actions){qe.push(ie(Fe.fact));for(let et of Fe.aliasFacts){let rn=et.id||`${et.subject}|${et.predicate}|${et.object}`;se.has(rn)||(se.add(rn),qe.push(`${Dt(et)}${et.provenance?` (source: ${Wn(et.provenance)})`:""}`))}}return`${le.entity} \u2014 ${qe.join("; ")}`}).join(`
224
+ `),replace:!0}}}return null}}let y=c.match(i$),w=c.match(Us)||ip(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Us);if(w){let I=Y(l,en(w[2])),L=r&&gs.test(w[1].trim())?r:w[1],C=new Set(Y(l,L));if([...C].some(B=>I.has(B))){let B=en(w[2]).trim();return{text:`yes \u2014 ${wr(B)} ${B} is ${wr(B)} ${B}, trivially: every kind is a kind of itself.`,replace:!0}}let M=await fO(o,L);if(M)for(let B of Y(l,M))C.add(B);let{findIsaChain:N,buildSubClassSuccessors:G,deriveDisjointViolations:q,SUBCLASS_PREDICATE:re,TYPE_PREDICATE:ae,DISJOINT_PREDICATE:Z}=await Promise.resolve().then(()=>(qt(),dn)),ee=xo,H=f.filter(B=>B.predicate===re&&ee(B)),K=f.filter(B=>B.predicate===ae&&ee(B)),ne=H.map(B=>[B.subject,B.object]),ve=K.map(B=>[B.subject,B.object]),Re=f.filter(B=>B.predicate===re),ue=f.filter(B=>B.predicate===ae),Ae=ue.map(B=>[B.subject,B.object]),Ie=Re.map(B=>[B.subject,B.object]),oe=G(ne),ke=G(Ie),le=d.filter(B=>B.predicate===Z&&ee(B)),V=le.map(B=>[B.subject,B.object]),se=le.length?q(Ae.concat(Ie),Ie,V,{budget:20,focus:new Set([...C,...I])}):[],qe=B=>{let ge=se.find(Ne=>Ne.subject===B&&I.has(Ne.object));if(!ge)return null;let be=f.filter(Ne=>I.has(Ne.object)&&(Ne.subject===ge.viaClass||Ne.subject===ge.subject)).sort(p)[0],je=le.find(Ne=>Ne.subject===ge.viaClass&&Ne.object===ge.object||Ne.subject===ge.object&&Ne.object===ge.viaClass);return!be||!je?null:$C(be,je)},Fe=f.filter(B=>C.has(B.subject)&&I.has(B.object)).sort(p)[0],et=d.filter(B=>B.predicate===pa&&C.has(B.subject)&&I.has(B.object)).sort(p)[0],rn=le.find(B=>C.has(B.subject)&&I.has(B.object)||C.has(B.object)&&I.has(B.subject));if(Fe&&!et){let B=qe(Fe.subject);if(B)return B}let Yt=R$(Fe,et||rn);if(Yt)return Yt;if(le.length){let B=je=>{let Ne=new Set(je),Ot=new Set(je);for(let Ce=0;Ce<8&&Ot.size;Ce+=1){let we=new Set;for(let[at,Ws]of Ie)Ot.has(at)&&!Ne.has(Ws)&&we.add(Ws);if(!we.size)break;for(let at of we)Ne.add(at);Ot=we}return Ne},ge=B(I),be=se.find(je=>C.has(je.subject)&&ge.has(je.object)&&!B([je.viaClass]).has(je.object)&&!B([je.object]).has(je.viaClass));if(be){let je=f.filter(we=>C.has(we.subject)&&we.object===be.viaClass).sort(p)[0],Ne=le.find(we=>we.subject===be.viaClass&&we.object===be.object||we.subject===be.object&&we.object===be.viaClass),Ot=!I.has(be.object),Ce=Ot?f.filter(we=>I.has(we.subject)&&we.object===be.object).sort(p)[0]:null;if(je&&Ne&&(!Ot||Ce)){let we=en(w[2]).trim();return{text:`no \u2014 ${[je,...Ce?[Ce]:[]].map(ie).join("; ")}; and ${Dt(Ne)}${Ne.provenance?` (source: ${Wn(Ne.provenance)})`:""} \u2014 so ${L} can never be ${wr(we)} ${we}.`,replace:!0}}}}let Xt=await yi(o,L);if(Xt){let B=new Map;for(let be of $c(o,Xt.id))for(let je of Y(l,be.label))!C.has(je)&&!B.has(je)&&B.set(je,be.label);let ge=f.filter(be=>B.has(be.subject)&&I.has(be.object)).sort(p)[0];if(ge)return{text:`yes \u2014 the code graph says ${Xt.label} inherits ${B.get(ge.subject)}, and ${ie(ge)}`,replace:!0}}let an=B=>(B.predicate===re?H:K).find(ge=>ge.subject===B.subject&&ge.object===B.object);for(let B of C){let ge=N(B,I,ve,oe,{maxHops:2});if(!ge)continue;let be=qe(B);if(be)return be;let je=ge.map(an);if(je.every(Boolean))return{text:`yes \u2014 ${wc(je)}`,replace:!0}}let vi=B=>(B.predicate===re?Re:ue).find(ge=>ge.subject===B.subject&&ge.object===B.object);for(let B of C){let ge=N(B,I,Ae,ke,{maxHops:2});if(!ge)continue;let be=qe(B);if(be)return be;let je=ge.map(vi);if(je.every(Boolean)&&je.some(ee))return{text:`yes \u2014 ${wc(je)}`,replace:!0}}let k=L.match(/^(.*\S)\s+not$/i),pe=k&&[k[0],r&&gs.test(k[1].trim())?r:k[1]];if(pe){let B=Y(l,pe[1]),ge=I,be=f.filter(Ce=>B.has(Ce.subject)&&ge.has(Ce.object)).sort(p)[0];if(be)return{text:`no \u2014 ${ie(be)}`,replace:!0};let je=le.find(Ce=>B.has(Ce.subject)&&ge.has(Ce.object)||B.has(Ce.object)&&ge.has(Ce.subject));if(je)return{text:`yes \u2014 ${ie(je)}`,replace:!0};let Ne=pe[1].trim(),Ot=en(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Ot}. If no ${Ne} is a ${Ot}, teach me: "no ${Ne} is a ${Ot}".`,replace:!0,miss:!0}}if(le.length){let B=q(ve.concat(ne),ne,V,{budget:10});for(let ge of C){let be=B.find(Ce=>Ce.subject===ge&&I.has(Ce.object));if(!be)continue;let je=K.concat(H).find(Ce=>Ce.subject===be.subject&&Ce.object===be.viaType),Ne=le.find(Ce=>Ce.subject===be.viaClass&&Ce.object===be.object||Ce.subject===be.object&&Ce.object===be.viaClass),Ot=[je,Ne].filter(Boolean).map(ie);return{text:`no \u2014 ${Ot.length?Ot.join("; "):`${be.viaClass} and ${be.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:Te,ON_PROPERTY_PREDICATE:cn,SOME_VALUES_FROM_PREDICATE:Gn,deriveSomeValuesFromSubsumption:ev,ENTAILED_SCM_SVF_PROVENANCE:tv,SCM_SVF_RULE_CONFIDENCE:nv,entailedTrustFrom:bp}=await Promise.resolve().then(()=>(qt(),dn)),wp=d.filter(B=>B.predicate===cn&&ee(B)),yp=d.filter(B=>B.predicate===Gn&&ee(B));if(wp.length&&yp.length){let B=new Map(yp.map(we=>[we.subject,we.object])),ge=wp.map(we=>({restriction:we.subject,property:we.object,target:B.get(we.subject)})).filter(we=>we.target),be=new Set([re,ae,Z,cn,Gn,"owl:intersectionOf"]),je=d.filter(we=>ee(we)&&!be.has(we.predicate)),Ne=je.map(we=>[we.subject,we.predicate,we.object]),Ot=Te(Ne,ve,ne,ge,{budget:10});for(let we of C){let at=Ot.find(wn=>wn.subject===we&&I.has(wn.object));if(!at)continue;let Ws=je.find(wn=>wn.subject===at.subject&&wn.predicate===at.viaProperty&&wn.object===at.viaValue),Gs=K.find(wn=>wn.subject===at.viaValue&&wn.object===at.viaType),$r=[Ws,Gs].filter(Boolean).map(ie);return{text:`yes \u2014 ${$r.length?$r.join("; "):`${at.subject} ${at.viaProperty} ${at.viaValue}, and ${at.viaValue} is a ${at.viaType}.`}`,replace:!0}}let Ce=ge.length>1?ev(ge,ne,{budget:10}):[];if(Ce.length){let we=G(ne.concat(Ce.map(xe=>[xe.subject,xe.object]))),at=new Map(ge.map(xe=>[xe.restriction,xe])),Ws=new Map;for(let xe of d)Ws.set(`${xe.subject}\0${xe.predicate}\0${xe.object}`,xe.trust);let Gs=(xe,_n,zt)=>Ws.get(`${xe}\0${_n}\0${zt}`),$r=new Map;for(let xe of Ce){let _n=at.get(xe.subject),zt=at.get(xe.object),Jt=[_n&&Gs(xe.subject,cn,_n.property),Gs(xe.subject,Gn,xe.viaY1),zt&&Gs(xe.object,cn,zt.property),Gs(xe.object,Gn,xe.viaY2),Gs(xe.viaY1,re,xe.viaY2)].filter(rv=>typeof rv=="number"),xi=bp(Jt,nv);xi!==null&&$r.set(`${xe.subject}\0${xe.object}`,xi)}let wn=xe=>{if(xe.predicate!==re)return K.find(Jt=>Jt.subject===xe.subject&&Jt.object===xe.object);let _n=H.find(Jt=>Jt.subject===xe.subject&&Jt.object===xe.object);if(_n)return _n;let zt=Ce.find(Jt=>Jt.subject===xe.subject&&Jt.object===xe.object);return zt?{subject:zt.subject,predicate:re,object:zt.object,provenance:tv,trust:$r.get(`${zt.subject}\0${zt.object}`)}:void 0};for(let xe of C){let _n=N(xe,I,ve,we,{maxHops:3});if(!_n)continue;let zt=_n.map(wn);if(zt.every(Boolean)){let Jt=bp(zt.map(xi=>xi.trust),1);return{text:`yes \u2014 ${wc(zt)}`,replace:!0,...Jt!==null?{trust:Jt}:{}}}}}}let sv=Y(l,L),$p=f.filter(B=>sv.has(B.subject)).sort(p),jn=L.trim(),Bs=en(w[2]).trim(),ov=[...C].some(B=>N(B,I,ve,oe,{maxHops:RC}));if($p.length){let B=$p.slice(0,3).map(ie).join("; "),ge=ov?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${jn}", then ask me again.`:`If it's true, teach me: "${jn} is a kind of ${Bs}". If it isn't, teach me: "no ${jn} is a ${Bs}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${jn} is a ${Bs}. I do know: ${B}. ${ge}`,replace:!0,miss:!0}}let vp=f.filter(B=>C.has(B.object)&&I.has(B.subject)).sort(p)[0];return vp?{text:`I can't confirm that \u2014 what I know runs the other way: ${ie(vp)}. A kind doesn't reverse. If it's true, teach me: "every ${jn} is a ${Bs}". If it isn't, teach me: "no ${jn} is a ${Bs}".`,replace:!0,miss:!0}:!Xt&&!M&&!XI(jn)&&!d.some(B=>C.has(B.subject)||C.has(B.object))?{text:`I can't confirm that \u2014 I don't know "${jn}" at all yet. If it's true, teach me: "${jn} is a kind of ${Bs}". If it isn't, teach me: "no ${jn} is a ${Bs}".`,replace:!0,miss:!0}:null}let v=c.match(oO);if(v){let[,I,L,C]=v,{SUBCLASS_PREDICATE:M,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:G,proveCardinalityAtLeast:q,CARDINALITY_RULE_CONFIDENCE:re,entailedTrustFrom:ae}=await Promise.resolve().then(()=>(qt(),dn)),Z=xo,ee=f.filter(ne=>ne.predicate===M&&Z(ne)).map(ne=>[ne.subject,ne.object]),H=d.filter(ne=>(ne.predicate===N||p$.has(ne.predicate))&&Z(ne)),K=G(H);if(K.length){let ne=Y(l,I.trim()),ve=Y(l,C.trim()),Re=Number(L),ue=r$(ne,ve,(Ae,Ie)=>q(ee,K,Ae,Ie,Re,{}));if(ue){let Ae=d.find(se=>se.predicate===M&&se.subject===ue.viaClass&&se.object===ue.viaRestriction),Ie=Ae?.provenance?` (source: ${Wn(Ae.provenance)})`:"",oe=ue.kind==="exactly"?"exactly":"at least",ke=(se,qe)=>`${se}${qe===1?"":"s"}`,le=[Ae?.trust,...H.filter(se=>se.subject===ue.viaRestriction).map(se=>se.trust),...ue.viaClass!==ue.subject?[f.find(se=>se.predicate===M&&se.subject===ue.subject&&se.object===ue.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),V=ae(le,re);return{text:`yes \u2014 every ${ue.viaClass} has ${oe} ${ue.n} ${ke(ue.object,ue.n)}${Ie}, so at least ${Re} follows.`,replace:!0,...V!==null?{trust:V}:{}}}}}let _=c.match(rO);if(_){let[,I,L]=_,{SUBCLASS_PREDICATE:C,ON_PROPERTY_PREDICATE:M,buildCardinalityRestrictions:N,proveMaxCardinalityZeroDenial:G,CAX_MAXC0_RULE_CONFIDENCE:q,entailedTrustFrom:re}=await Promise.resolve().then(()=>(qt(),dn)),ae=xo,Z=f.filter(K=>K.predicate===C&&ae(K)).map(K=>[K.subject,K.object]),ee=d.filter(K=>(K.predicate===M||p$.has(K.predicate))&&ae(K)),H=N(ee);if(H.length){let K=Y(l,I.trim()),ne=Y(l,L.trim()),ve=r$(K,ne,(Re,ue)=>G(Z,H,Re,ue,{}));if(ve){let Re=d.find(oe=>oe.predicate===C&&oe.subject===ve.viaClass&&oe.object===ve.viaRestriction),ue=Re?.provenance?` (source: ${Wn(Re.provenance)})`:"",Ae=[Re?.trust,...ee.filter(oe=>oe.subject===ve.viaRestriction).map(oe=>oe.trust),...ve.viaClass!==ve.subject?[f.find(oe=>oe.predicate===C&&oe.subject===ve.subject&&oe.object===ve.viaClass)?.trust]:[]].filter(oe=>typeof oe=="number"),Ie=re(Ae,q);return{text:`no \u2014 every ${ve.viaClass} has at most 0 ${ve.object}${ue}.`,replace:!0,...Ie!==null?{trust:Ie}:{}}}}}let $=c.match(iO);if($){let I=Y(l,$[1]),L=d.filter(C=>C.predicate===Vd&&I.has(C.subject)).sort(p);return L.length?h(L):null}let x=u.match(aO);if(x){let[,I,L]=x,C=Y(l,I.trim()),M=Y(l,L.replace(/^an?\s+/i,"").trim()),N=d.filter(G=>G.predicate===Vd&&M.has(G.subject)&&C.has(G.object)).sort(p)[0];return N?{text:`yes \u2014 ${ie(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${L.trim()}.`,replace:!0}}let S=u.match(cO);if(S){let[,I,L]=S,C=Y(l,I.replace(/^an?\s+/i,"").trim()),M=Y(l,L.trim()),N=d.filter(G=>G.predicate===Vd&&C.has(G.subject)&&M.has(G.object)).sort(p)[0];return N?{text:`yes \u2014 ${ie(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${L.trim()}.`,replace:!0}}let E=u.match(lO);if(E){let[,I,L]=E,C=Y(l,I.trim()),M=Y(l,`${L.trim()} method`),N=d.filter(G=>G.predicate===pr&&C.has(G.subject)&&M.has(G.object)).sort(p)[0];return N?{text:`yes \u2014 ${ie(N)}`,replace:!0}:null}let R=u.match(uO);if(R){let I=Y(l,R[1].trim()),L=d.filter(C=>C.predicate===pr&&I.has(C.subject)&&/ method$/.test(C.object)).sort(p);return L.length?h(L):null}let j=u.match(f$);if(j){let I=j[1].trim(),L=m$.test(I)||h$.test(I)?null:gs.test(I)?r||null:I,C=j[2].trim().toLowerCase();if(L){let M=Y(l,L),N=new Map,G=null;if(o){let H=await yi(o,L);if(G=H,H)for(let K of $c(o,H.id))for(let ne of Y(l,K.label))!M.has(ne)&&!N.has(ne)&&N.set(ne,K.label),M.add(ne)}let q=H=>H.predicate===qd&&l(H.object)===C||H.predicate===`tmct:${C}`&&H.object==="true",re=l(L).split(/\s+/).filter(H=>H.length>=4&&!T$.has(H)),ae=H=>re.some(K=>new Set(String(H.subject||"").split(/\s+/)).has(K)),Z=H=>M.has(H.subject)||re.length&&ae(H),ee=d.filter(H=>Z(H)&&q(H)).sort(p)[0];if(ee){let H=N.get(ee.subject);return{text:H?`yes \u2014 the code graph says ${G.label} inherits ${H}, and ${ie(ee)}`:`yes \u2014 ${ie(ee)}`,replace:!0}}{let{findIsaChain:H,SUBCLASS_PREDICATE:K,TYPE_PREDICATE:ne}=await Promise.resolve().then(()=>(qt(),dn)),ve=xo,Re=d.filter(le=>le.predicate===K&&ve(le)),ue=d.filter(le=>le.predicate===ne&&ve(le)),Ae=Re.map(le=>[le.subject,le.object]),Ie=ue.map(le=>[le.subject,le.object]),oe=le=>(le.predicate===K?Re:ue).find(V=>V.subject===le.subject&&V.object===le.object),ke=Y(l,C);for(let le of M){let V=H(le,ke,Ie,Ae,{maxHops:2});if(!V)continue;let se=V.map(oe);if(se.every(Boolean))return{text:`yes \u2014 ${wc(se)}`,replace:!0}}}if(d.some(Z)&&!n?.parsed)return/^there\b/i.test(L)||dO.test(C)?null:{text:`I don't have a fact saying ${xC(L)} is ${C}.`,replace:!0};if(!n?.parsed&&!t$.test(C))return g$(L,C)}}let A=cp(c).match(aC);if(A&&!Xd.test(c)){let[,I,L,C]=A,M=L.toLowerCase();if(!Yd.test(M)&&!Qd.test(M)){let N=I.trim(),G=uC(await Jd(M),C),q=G.object.replace(/^an?\s+/i,"").trim();if(N&&q){let re=G.predicate,ae=Y(l,N),Z=Y(l,q),ee=[re,er(re)],H=d.filter(ne=>ee.includes(ne.predicate)&&ae.has(ne.subject)&&Z.has(ne.object)).sort(p)[0];if(H)return{text:`${Gm(H.predicate)?"no":"yes"} \u2014 ${ie(H)}`,replace:!0,generalVerbQuery:!0};let K=d.filter(ne=>ee.includes(ne.predicate)&&ae.has(ne.subject));if(K.length){let ne=K.slice(0,3).map(ie).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Dt({subject:N,predicate:re,object:q})}. I do know: ${ne}.`,replace:!0,miss:!0}}return null}}}let F=c.match(cC);if(F&&!Xd.test(c)){let[,I,L]=F,[C,M]=L.toLowerCase().split(/\s+/);if(!Yd.test(C)&&!Qd.test(C)){let N=I.trim();if(N){let G=await Jd(C);M&&/^mgx:[a-z]+$/.test(G)&&(G=`${G}-${M}`);let q=Y(l,N),re=[G,er(G)],ae=Ze(d.filter(Z=>re.includes(Z.predicate)&&q.has(Z.subject)),i);if(ae.length)return{...h(ae),generalVerbQuery:!0}}}}let T=c.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(T&&!Xd.test(c)){let[,I,L,C]=T,M=I.toLowerCase();if(!Yd.test(M)&&!Qd.test(M)&&!iC.test(M)){let N=await Jd(M);/^mgx:[a-z]+$/.test(N)&&(N=`${N}-${L.toLowerCase()}`);let G=Y(l,C.replace(/^(?:an?|the)\s+/i,"").trim()),q=Ze(d.filter(re=>re.predicate===N&&G.has(re.object)),i);if(q.length)return{...h(q),generalVerbQuery:!0}}}let P=c.match(nO);if(P){let I=Y(l,P[1]),L=Ze(d.filter(re=>I.has(re.subject)||I.has(re.object)),i);if(!L.length)return null;let C=I.has(L[0].subject)?L[0].subject:L[0].object,M=L.map(re=>` ${ie(re)}`),N=M.slice(0,Se),G=M.slice(Se),q=G.length?`
225
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:`${L.length} remembered fact${L.length===1?"":"s"} about ${C}:
226
226
  ${N.join(`
227
- `)}${H}`,replace:!0,...B.length?{pending:{items:B.map(se=>se.trim()),noun:"facts"}}:{}}}let z=n?.parsed?.shape==="meta"?n.parsed.object:null,K=!1,ce=c.match(QC);if(ce)z=ce[1],K=!0;else if(!z&&!n?.parsed){let I=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(z=I[1])}if(!z)return null;let Z=Y(l,z),D=Ze(f.filter(I=>Z.has(I.subject)),i),U=Ze(f.filter(I=>Z.has(I.object)),i),G=K?D.length?D:U:U.length?U:D;return G.length?h(G):null}function Qd(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var ap,qI,bn,mc,Xy,h$,$K,HI,tp,vK,KI,xK,EK,m$,g$,b$,YI,Jy,SK,kK,jK,_K,RK,lp,TK,XI,Ye,Bd,Wd,yi,JI,vo,AK,IK,CK,OK,LK,NK,PK,MK,FK,DK,zK,UK,BK,WK,GK,Qy,eC,vc,tC,VK,qK,dp,w$,HK,KK,YK,qd,Hd,nC,XK,sC,oC,Yd,rC,aC,JK,y$,$$,cC,QK,ZK,v$,eY,tY,nY,wr,sY,oY,rY,x$,iY,aY,lC,cY,lY,uY,dY,xo,Zy,pp,Dt,dC,fC,hC,bc,yC,j$,pY,np,_$,$C,vC,$c,xC,EC,zs,ms,SC,kC,jC,op,s$,_C,Se,RC,TC,AC,IC,CC,OC,LC,NC,PC,MC,FC,DC,zC,r$,T$,BC,WC,VC,qC,HC,KC,c$,YC,JC,QC,ZC,eO,l$,tO,nO,sO,oO,rO,u$,hs,d$,p$,f$,iO,cO,lO,fY,O$,dO,pO,hY,Zd,ip,fO,mY,gY,L$,bY,wY,yY,$Y,vY,xc,xY,EY,SY,kY,hO,jY,_Y,hc=O(()=>{Ue();Sw();Ut();Oe();_s();Qa();Za();_r();yd();_w();Ve();ma();vd();Aw();qn();$n();zo();Ki();gd();bd();Mo();go();il();tc();Nw();Pw();kd();Mw();jd();Fw();Dw();ic();cd();gi();_y();Ay();Ds();Vy();Yi(void 0);Hi(Ja);ap=new Set(["it","this","that","here"]),qI=e=>ap.has(String(e||"").trim().toLowerCase()),bn={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"},mc=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Xy="look up a taught fact about a subject/verb/object";h$={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}},$K=new Set(["stats","memory","focus",...Object.keys(h$)]),HI={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"},tp={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"]},vK=[...new Set(Object.values(HI))].map(e=>tp[e]?.[1]??`${e}s`),KI=new Set(["have","has","holds","hold"]),xK=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(ws)].filter(e=>!KI.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),EK=new Set([...Ew.map(e=>e.name),...Object.values(h$).map(e=>e.tool)]),m$=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"]),g$=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"]),b$=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"]),YI=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Jy=e=>e.replace(/(.)\1+/g,"$1");SK=cp(m$),kK=cp(g$),jK=cp(b$),_K=new RegExp(`^(?:${[...YI].map(Qe).join("|")})\\s+(.+)$`,"i"),RK=[...m$,...g$,...b$,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],lp="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",TK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${lp})\\s+than\\s+(.+)$`,"i"),XI=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${lp})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Bd="mgx:ownedBy",Wd="mgx:hasProperty",yi="rdfs:subClassOf",JI=new Set(["operator","teach","entailed"]),vo=e=>!!e.sourceTypes?.some(t=>JI.has(t));AK=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),IK=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),CK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),OK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${lp})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),LK=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),NK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\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");PK=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),MK=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),FK=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),DK=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),zK=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),UK=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),BK=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),WK=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),GK=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),Qy=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,eC=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"]);vc="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",tC="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",VK=new RegExp(`^(.+?)\\s+(${tC})\\s+(.+)$`,"i"),qK=new RegExp(`^([\\w'-]+)\\s+${vc}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),dp="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",w$="with|to|from|by|of|in|on|for|as|about|into",HK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${vc}(${dp})\\s+(${w$})\\s+(.+)$`,"i"),KK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${dp})\\s+(${w$})\\s+(.+)$`,"i"),YK=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),qd=/^(?:is|are|am|owns|maintains)$/i,Hd=/\b(?:is|are|am|owns|maintains)\b/i,nC=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"),XK=new RegExp(`^(?:${Ks.filter(e=>!/\s/.test(e)).join("|")})$`,"i");sC=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${vc}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),oC=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${vc}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Yd=/^(?:be|own|maintain)$/i,rC=new RegExp(`^(${Ye})\\s+(.+)$`,"i");aC=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],JK=new RegExp(`^(?:${aC.join("|")})\\b\\s*,?\\s+`,"i"),y$=Object.freeze(["you","i","it","they","he","she","we"]),$$=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),cC=Object.freeze([...$$,...y$]),QK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${cC.join("|")})\\s+\\S+`,"i"),ZK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${y$.join("|")})\\s+(?:is|are|am|was|were)|(${$$.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),v$="forget|unlearn|delete|remove",eY=new RegExp(`^(?:${v$})\\s+(?:that\\s+)?(?:a\\s+|an\\s+)?([\\w-]+(?:\\s+[\\w-]+)?)\\s+(?:is|are)\\s+(?:an?\\s+)?(?:(?:kind|type)\\s+of\\s+)?([\\w-]+)$`,"i"),tY=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),nY=new RegExp(`^(?:${v$})\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),wr="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",sY=new RegExp(`^what\\s+does\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),oY=new RegExp(`^what\\s+(.+?)${wr}\\s+does${wr}\\??$`,"i"),rY=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),x$="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",iY=new RegExp(`^who\\s+(?:is|was)\\s+${x$}$`,"i"),aY=new RegExp(`^what\\s+(?:did|has)\\s+${x$}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),lC="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",cY=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${lC}\\b`,"i"),lY=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"),uY=Object.freeze({game:["higher","lower","warmer","colder","hotter","up","down","guess"],spiderFly:["watch","step","tick","move","board","web"],adventure:["help","xyzzy","wait","hint","plugh"]});dY=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Zt,...yn,"owns","maintains"].filter(e=>e.length>=3)),xo={"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","mgx:partOf":"is part 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: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"},Zy=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"]),pp=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Dt=e=>`${e.subject} ${S$(e.predicate)} ${e.object}`;dC=Object.entries(xo).filter(([e])=>!pp.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);fC=/ \(source: [^)]*\)$/;hC=8;bc=null;yC=/^(?:every|each|all|any)\s+/i;j$=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"]),pY=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("|"))),np=/^(?: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,_$=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,$C=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,vC=/^(who|what)'?s\s+/i,$c=e=>String(e).replace(vC,(t,n)=>`${n} is `),xC=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;EC=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,zs=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,ms=new Set(["rdfs:subClassOf","rdf:type"]),SC=6,kC=/^why\s+(?=(?:is|are)\b)/i,jC=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;op=new Set(["kind","sort","type","subclass","superclass"]),s$=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,_C=/^(?: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,Se=32,RC=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,TC=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,AC=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,IC=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,CC=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,OC=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,LC=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,NC=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),PC=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,MC=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,FC=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,DC=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,zC=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;r$=e=>String(e||"").replace(/\s+/g," ").trim();T$="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",BC=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${T$})[?.!\\s]*$`,"i"),WC=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${T$})\\s+([\\w'-]+)[?.!\\s]*$`,"i");VC=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),qC=Object.entries(xo).filter(([e])=>!VC.has(e)&&!pp.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Qe(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),HC=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),KC=Object.entries(xo).filter(([e])=>!HC.has(e)&&!pp.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=Qe(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=[E$(s),...o].map(Qe).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),c$=/^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,YC=new Set(["changed","change","changes","updated","modified","happened","occurred"]);JC=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,QC=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,ZC=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,eO=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,l$=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),tO=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,nO=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,sO=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,oO=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,rO=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,u$=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,hs=/^(?:it|this|that)$/i,d$=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,p$=/^(?:you|i|they|he|she|we)\b/i,f$=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${yc(e)} is ${t}".`,replace:!0}),iO=/^(?: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;cO=/inherit|supertype|subclass|extend|specializ/i,lO=8;fY=new RegExp(`\\b(?:${[...ap].join("|")})\\b`,"i"),O$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,dO=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,pO=/^(?: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;hY=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),Zd="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",ip="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",fO=`(?:\\s+${ip})?`,mY=[new RegExp(`^${Zd}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${fO}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Zd}architecture\\s+(?:${ip}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Zd}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${ip}(?:\\s+here)?\\??$`,"i")],gY={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:bn.contains,subclasses:bn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:bn.calls,callees:bn.calls,tests:bn.tests,untested:bn.tests,history:bn.touches,exports:bn.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",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",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"},L$="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",bY=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+${L$}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),wY=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${L$}\\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"),yY=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"),$Y=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"),vY=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"),xc="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",xY=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${xc}\\s*\\??$`,"i"),EY=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${xc}\\s*\\??$`,"i"),SY=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${xc}\\s*\\??$`,"i"),kY=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${xc}\\s*[.!]*$`,"i"),hO=Object.freeze([...ap].filter(e=>e!=="here").concat("they")),jY=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${hO.join("|")})\\b(\\s+\\S.*)?$`,"i"),_Y=J(".tmct","memory","corpus-seed.json")});hc();Ve();Kn();ic();var Ec={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 M$=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),Eo=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),Sc=e=>M$[e]||"other",gO=e=>Math.max(0,Math.min(1,e));function N$(e){let t=(e.sourceTypes||[]).map(n=>Xs[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Xs.entailed}function bO(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function P$(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function F$(e,t,n={},s={}){let o={...Ec,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter($=>$&&$.object&&$.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let $ of i){if(Sc($.predicate)==="isa"){let x=P$($.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:$,family:"isa",reason:"uninformative-class",share:x});continue}}c.push($)}let u=c.filter($=>Sc($.predicate)==="isa").map($=>$.object),d=rc(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let $ of d.clusters){let x=0;for(let S of $.objects){p.set(S,$.label);let E=c.find(R=>R.object===S&&Sc(R.predicate)==="isa");x+=E?N$(E):0}f.set($.label,x)}let h=null,m=-1;for(let[$,x]of[...f].sort((S,E)=>S[0].localeCompare(E[0])))x>m&&(m=x,h=$);let g=[];for(let $ of c){let x=Sc($.predicate),S=N$($),E={provenance:S};if(bO($)&&(S-=o.entailedDepthPenalty,E.entailed=!0),x==="isa"){let j=.6+.4*(1-P$($.object,n));S*=j,E.informativeness=j;let A=p.get($.object);h&&A&&A!==h&&(S-=o.minoritySensePenalty,E.minoritySense=A)}S=gO(S),g.push({row:$,family:x,score:S,reasons:E})}let b=[];for(let $ of g)$.score<o.minScore?a.push({row:$.row,family:$.family,reason:"below-floor",score:$.score}):b.push($);let y=new Map;for(let $ of b)y.has($.family)||y.set($.family,[]),y.get($.family).push($);for(let $ of y.values())$.sort((x,S)=>S.score-x.score||x.row.object.localeCompare(S.row.object));let w=Eo.filter($=>y.has($)).concat([...y.keys()].filter($=>!Eo.includes($)).sort()),v=[],_=!1;for(;v.length<r&&!_;){_=!0;for(let $ of w){let x=y.get($);if(x&&x.length&&(v.push(x.shift()),_=!1,v.length>=r))break}}for(let $ of w)for(let x of y.get($)||[])a.push({row:x.row,family:x.family,reason:"over-budget",score:x.score});return v.sort(($,x)=>{let S=Eo.indexOf($.family),E=Eo.indexOf(x.family);return S-E||x.score-$.score||$.row.object.localeCompare(x.row.object)}),{term:e,selected:v,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:h}}}Qi();sn();var wO=new Set(["isa","location","partOf","capableOf","usedFor"]),yO=new Set(["single","several","chained","group","closer"]),D$=(e,t)=>`${e}:${t}`;function fp(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!wO.has(n.family)||typeof n.form!="string"||!yO.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=D$(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 So=e=>`${Uo(e)} ${e}`;function $O(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=So(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Or(s.map(So))}`:n}function vO(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(l=>String(l||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Bo(o),A_TERM:So(o),A_TERM_CAP:Bo(So(o)),TERMS:Ji(o),TERMS_CAP:Bo(Ji(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?So(a):"",OBJECT:i,A_OBJECT:i?So(i):"",OBJECTS_A:Or(r.map(So)),OBJECTS_PLURAL:Or(r.map(Ji)),OBJECTS_RAW:Or(r),CHAIN:$O(n&&n.length?n:r.slice(0,1))}}function xO(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 gs(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(D$(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=la(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=xO(l[u],vO(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}Qi();var EO=Eo.filter(e=>e!=="isa"&&e!=="other");function SO(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 z$(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 kO(e,t){let n=l=>(t?.[l.object]||[])[1]||null,s=new Map;for(let l of e||[]){let c=n(l);c&&s.set(c,(s.get(c)||0)+1)}let o=new Map,r=[],i=[];for(let l of e||[]){let c=n(l);c&&s.get(c)>=2?(o.has(c)||(o.set(c,[]),r.push(c)),o.get(c).push(l)):i.push(l)}let a=r.map(l=>({parent:l,rows:o.get(l)}));return i.length&&a.push({parent:null,rows:i}),a}function jO(e,t,n){let s=new Map,o=new Map;for(let l of t||[]){let c=e?.[l.object];if(!Array.isArray(c)||c.length<2)continue;let u=c[c.length-1];!u||u===l.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(l))}let r=[...s.keys()].sort((l,c)=>s.get(c)-s.get(l)||l.localeCompare(c)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let l of r)for(let c of o.get(l)||[])a.has(c.id)||(a.add(c.id),i.push(c));return{roots:r,rows:i}}function _O(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let f=t[e[0].object],p=f&&f.length>1?"chained":"single",h=gs(s,"isa",e,{term:n,form:p,chain:f});return h&&r.push({...h,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=gs(s,"isa",e,{term:n,form:"several"});return f&&r.push({...f,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),l=gs(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});l&&r.push({...l,role:"names-term",paragraph:"definition"});let c=[];for(let f of kO(a,t))for(let p of z$(f.rows,o.maxObjectsPerBodySentence))c.push({parent:f.parent,rows:p});if(c.length>o.maxBodySentences){let f=c.slice(0,o.maxBodySentences),p=f[f.length-1];for(let h of c.slice(o.maxBodySentences))p.rows=p.rows.concat(h.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?gs(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):gs(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=jO(t,e,o.closerRootCount);if(u.length){let f=gs(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});f&&r.push({...f,role:"closes-isa",paragraph:"definition"})}return r}function RO(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Bo(`${Uo(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function TO(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 U$(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...Ec,...n.config||{}},a=SO(e?.selected||[]),l=[];for(let u of _O(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of EO){let d=a.get(u);if(!(!d||!d.length))for(let f of z$(d,i.maxObjectsPerBodySentence)){let p=gs(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}RO(l,s);let c=new Map;for(let u of l)for(let d of u.rows)c.has(d.id)||c.set(d.id,d);return{term:s,sentences:l,paragraphs:TO(l,o),provenanceRows:[...c.values()]}}var AO=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function IO(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 CO=Object.freeze({facts:"show the facts",chains:"show the chains"});function OO(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:CO,facts:n.map(AO),factCount:n.length,chains:s}}function B$(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:IO(t?.provenanceRows||[]),detail:OO(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function W$(e,t,n={},s=new Map,o={}){let r=F$(e,t,n,o),i=U$(r,s,o);return B$(r,i,o)}ic();var G$=new Set(["rdfs:subClassOf","rdf:type"]);function V$(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(G$.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 q$(e,t,n=6){let s=fi(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=oc(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function H$(e){let t=[],n=new Set;for(let s of e||[])!s||!G$.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Ve();hc();function LO(e,t,n,s,o={}){let r=fp(s||[]);if(!r||r.size===0)return null;let i=t||[],a=V$(n||i),l=q$(a.subClassEdges,H$(i));return W$(e,i,a,r,{...o,chains:l})}function K$(e,t,n,s={}){let o=vt(e||{individuals:[],objectProperties:[]}),r=Y(Q,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=LO(t,i,o,n,s);return NO(a)}function NO(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 PO="no session is open on this page yet \u2014 await tmct.open() first",Y$=Symbol.for("tmct.surface.fallback");function X$({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[Y$])return a;let l=null,c=()=>{if(!l)throw new Error(PO);return l},u={async open(...d){return l=await e(...d),l},get session(){return l},async turn(d,f){let p=c();return s?s(d,f,p):typeof p.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}:p.turn(d,f)},async ask(d,f){return t?t(d,f,c()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,f){return n?n(d,f,c()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[Y$]=r,i.tmct=u,u}function MO({payload:e=null}={}){let t=ii();return e&&(t.payload=e),{memoryDir:t}}async function FO(e,t,n){let s=null;try{s=await A$(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await C$(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}}X$({open:MO,ask:FO,page:{normFactTerm:Q,digestTermFromPayloadBrowser:K$},fallback:!0});})();
227
+ `)}${q}`,replace:!0,...G.length?{pending:{items:G.map(re=>re.trim()),noun:"facts"}}:{}}}let z=n?.parsed?.shape==="meta"?n.parsed.object:null,X=!1,ce=c.match(sO);if(ce)z=ce[1],X=!0;else if(!z&&!n?.parsed){let I=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(z=I[1])}if(!z)return null;let te=Y(l,z),D=Ze(f.filter(I=>te.has(I.subject)),i),U=Ze(f.filter(I=>te.has(I.object)),i),W=X?D.length?D:U:U.length?U:D;return W.length?h(W):null}function tp(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var up,XI,bn,bc,Zy,b$,IK,JI,op,CK,QI,OK,LK,w$,y$,$$,ZI,e$,NK,PK,MK,FK,DK,pp,zK,eC,Ye,Vd,qd,$i,tC,xo,UK,BK,WK,GK,VK,qK,HK,KK,YK,XK,JK,QK,ZK,eY,tY,t$,oC,Ec,rC,nY,sY,hp,v$,oY,rY,iY,Yd,Xd,iC,aY,aC,cC,Qd,lC,dC,cY,x$,E$,pC,lY,uY,S$,dY,pY,fY,yr,hY,mY,gY,k$,bY,wY,fC,yY,$Y,vY,xY,Eo,n$,mp,Dt,mC,bC,wC,yc,EC,T$,EY,rp,A$,SC,kC,xc,jC,_C,Us,Bn,RC,TC,AC,ap,i$,IC,Se,OC,LC,NC,PC,MC,FC,DC,zC,UC,BC,WC,GC,VC,c$,C$,HC,KC,XC,JC,QC,ZC,d$,eO,nO,sO,oO,rO,p$,iO,aO,cO,lO,uO,f$,gs,dO,h$,m$,g$,pO,hO,mO,SY,P$,bO,wO,kY,np,lp,yO,jY,_Y,M$,RY,TY,AY,IY,CY,Sc,OY,LY,NY,PY,$O,MY,FY,gc=O(()=>{Ue();_w();Ut();Oe();Rs();Qa();Za();Rr();vd();Aw();Ve();ma();Ed();Ow();Kn();$n();Uo();Ki();wd();yd();Fo();bo();cl();tc();Fw();Dw();_d();zw();Rd();Uw();Bw();cc();rc();ud();bi();Ay();Oy();zs();Ky();Yi(void 0);Hi(Ja);up=new Set(["it","this","that","here"]),XI=e=>up.has(String(e||"").trim().toLowerCase()),bn={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"},bc=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Zy="look up a taught fact about a subject/verb/object";b$={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}},IK=new Set(["stats","memory","focus",...Object.keys(b$)]),JI={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"},op={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"]},CK=[...new Set(Object.values(JI))].map(e=>op[e]?.[1]??`${e}s`),QI=new Set(["have","has","holds","hold"]),OK=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(ys)].filter(e=>!QI.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),LK=new Set([...jw.map(e=>e.name),...Object.values(b$).map(e=>e.tool)]),w$=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"]),y$=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"]),$$=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"]),ZI=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),e$=e=>e.replace(/(.)\1+/g,"$1");NK=dp(w$),PK=dp(y$),MK=dp($$),FK=new RegExp(`^(?:${[...ZI].map(Qe).join("|")})\\s+(.+)$`,"i"),DK=[...w$,...y$,...$$,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],pp="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",zK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${pp})\\s+than\\s+(.+)$`,"i"),eC=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${pp})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Vd="mgx:ownedBy",qd="mgx:hasProperty",$i="rdfs:subClassOf",tC=new Set(["operator","teach","entailed"]),xo=e=>!!e.sourceTypes?.some(t=>tC.has(t));UK=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),BK=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),WK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),GK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${pp})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),VK=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),qK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\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");HK=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),KK=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),YK=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),XK=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),JK=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),QK=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),ZK=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),eY=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),tY=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),t$=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,oC=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"]);Ec="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",rC="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",nY=new RegExp(`^(.+?)\\s+(${rC})\\s+(.+)$`,"i"),sY=new RegExp(`^([\\w'-]+)\\s+${Ec}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),hp="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",v$="with|to|from|by|of|in|on|for|as|about|into",oY=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${Ec}(${hp})\\s+(${v$})\\s+(.+)$`,"i"),rY=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${hp})\\s+(${v$})\\s+(.+)$`,"i"),iY=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Yd=/^(?:is|are|am|owns|maintains)$/i,Xd=/\b(?:is|are|am|owns|maintains)\b/i,iC=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"),aY=new RegExp(`^(?:${Ys.filter(e=>!/\s/.test(e)).join("|")})$`,"i");aC=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${Ec}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),cC=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${Ec}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Qd=/^(?:be|own|maintain)$/i,lC=new RegExp(`^(${Ye})\\s+(.+)$`,"i");dC=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],cY=new RegExp(`^(?:${dC.join("|")})\\b\\s*,?\\s+`,"i"),x$=Object.freeze(["you","i","it","they","he","she","we"]),E$=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),pC=Object.freeze([...E$,...x$]),lY=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${pC.join("|")})\\s+\\S+`,"i"),uY=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${x$.join("|")})\\s+(?:is|are|am|was|were)|(${E$.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),S$="forget|unlearn|delete|remove",dY=new RegExp(`^(?:${S$})\\s+(?:that\\s+)?(?:a\\s+|an\\s+)?([\\w-]+(?:\\s+[\\w-]+)?)\\s+(?:is|are)\\s+(?:an?\\s+)?(?:(?:kind|type)\\s+of\\s+)?([\\w-]+)$`,"i"),pY=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),fY=new RegExp(`^(?:${S$})\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),yr="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",hY=new RegExp(`^what\\s+does\\s+(.+?)${yr}\\s+do${yr}\\??$`,"i"),mY=new RegExp(`^what\\s+(.+?)${yr}\\s+does${yr}\\??$`,"i"),gY=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${yr}\\s+do${yr}\\??$`,"i"),k$="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",bY=new RegExp(`^who\\s+(?:is|was)\\s+${k$}$`,"i"),wY=new RegExp(`^what\\s+(?:did|has)\\s+${k$}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),fC="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",yY=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${fC}\\b`,"i"),$Y=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"),vY=Object.freeze({game:["higher","lower","warmer","colder","hotter","up","down","guess"],spiderFly:["watch","step","tick","move","board","web"],adventure:["help","xyzzy","wait","hint","plugh"]});xY=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Zt,...yn,"owns","maintains"].filter(e=>e.length>=3)),Eo={"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","mgx:partOf":"is part 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: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"},n$=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"]),mp=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Dt=e=>`${e.subject} ${_$(e.predicate)} ${e.object}`;mC=Object.entries(Eo).filter(([e])=>!mp.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);bC=/ \(source: [^)]*\)$/;wC=8;yc=null;EC=/^(?:every|each|all|any)\s+/i;T$=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"]),EY=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("|"))),rp=/^(?: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,A$=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,SC=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,kC=/^(who|what)'?s\s+/i,xc=e=>String(e).replace(kC,(t,n)=>`${n} is `),jC=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;_C=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Us=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,Bn=new Set(["rdfs:subClassOf","rdf:type"]),RC=6,TC=/^why\s+(?=(?:is|are)\b)/i,AC=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;ap=new Set(["kind","sort","type","subclass","superclass"]),i$=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,IC=/^(?: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,Se=32;OC=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,LC=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,NC=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,PC=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,MC=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,FC=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,DC=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,zC=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),UC=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,BC=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,WC=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,GC=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,VC=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;c$=e=>String(e||"").replace(/\s+/g," ").trim();C$="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",HC=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${C$})[?.!\\s]*$`,"i"),KC=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${C$})\\s+([\\w'-]+)[?.!\\s]*$`,"i");XC=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),JC=Object.entries(Eo).filter(([e])=>!XC.has(e)&&!mp.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Qe(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),QC=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),ZC=Object.entries(Eo).filter(([e])=>!QC.has(e)&&!mp.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=Qe(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=[j$(s),...o].map(Qe).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),d$=/^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,eO=new Set(["changed","change","changes","updated","modified","happened","occurred"]);nO=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,sO=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,oO=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,rO=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,p$=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),iO=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,aO=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,cO=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,lO=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,uO=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,f$=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,gs=/^(?:it|this|that)$/i,dO=/^(?:it|them|this|that|in|on|of|to|at)$/i,h$=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,m$=/^(?:you|i|they|he|she|we)\b/i,g$=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${vc(e)} is ${t}".`,replace:!0}),pO=/^(?: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;hO=/inherit|supertype|subclass|extend|specializ/i,mO=8;SY=new RegExp(`\\b(?:${[...up].join("|")})\\b`,"i"),P$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,bO=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,wO=/^(?: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;kY=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),np="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",lp="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",yO=`(?:\\s+${lp})?`,jY=[new RegExp(`^${np}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${yO}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${np}architecture\\s+(?:${lp}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${np}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${lp}(?:\\s+here)?\\??$`,"i")],_Y={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:bn.contains,subclasses:bn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:bn.calls,callees:bn.calls,tests:bn.tests,untested:bn.tests,history:bn.touches,exports:bn.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",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",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"},M$="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",RY=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+${M$}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),TY=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${M$}\\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"),AY=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"),IY=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"),CY=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"),Sc="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",OY=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${Sc}\\s*\\??$`,"i"),LY=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${Sc}\\s*\\??$`,"i"),NY=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${Sc}\\s*\\??$`,"i"),PY=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${Sc}\\s*[.!]*$`,"i"),$O=Object.freeze([...up].filter(e=>e!=="here").concat("they")),MY=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${$O.join("|")})\\b(\\s+\\S.*)?$`,"i"),FY=J(".tmct","memory","corpus-seed.json")});gc();Ve();Xn();cc();var kc={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 z$=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),So=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),jc=e=>z$[e]||"other",xO=e=>Math.max(0,Math.min(1,e));function F$(e){let t=(e.sourceTypes||[]).map(n=>Js[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Js.entailed}function EO(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function D$(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function U$(e,t,n={},s={}){let o={...kc,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter($=>$&&$.object&&$.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let $ of i){if(jc($.predicate)==="isa"){let x=D$($.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:$,family:"isa",reason:"uninformative-class",share:x});continue}}c.push($)}let u=c.filter($=>jc($.predicate)==="isa").map($=>$.object),d=ac(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let $ of d.clusters){let x=0;for(let S of $.objects){p.set(S,$.label);let E=c.find(R=>R.object===S&&jc(R.predicate)==="isa");x+=E?F$(E):0}f.set($.label,x)}let h=null,m=-1;for(let[$,x]of[...f].sort((S,E)=>S[0].localeCompare(E[0])))x>m&&(m=x,h=$);let g=[];for(let $ of c){let x=jc($.predicate),S=F$($),E={provenance:S};if(EO($)&&(S-=o.entailedDepthPenalty,E.entailed=!0),x==="isa"){let j=.6+.4*(1-D$($.object,n));S*=j,E.informativeness=j;let A=p.get($.object);h&&A&&A!==h&&(S-=o.minoritySensePenalty,E.minoritySense=A)}S=xO(S),g.push({row:$,family:x,score:S,reasons:E})}let b=[];for(let $ of g)$.score<o.minScore?a.push({row:$.row,family:$.family,reason:"below-floor",score:$.score}):b.push($);let y=new Map;for(let $ of b)y.has($.family)||y.set($.family,[]),y.get($.family).push($);for(let $ of y.values())$.sort((x,S)=>S.score-x.score||x.row.object.localeCompare(S.row.object));let w=So.filter($=>y.has($)).concat([...y.keys()].filter($=>!So.includes($)).sort()),v=[],_=!1;for(;v.length<r&&!_;){_=!0;for(let $ of w){let x=y.get($);if(x&&x.length&&(v.push(x.shift()),_=!1,v.length>=r))break}}for(let $ of w)for(let x of y.get($)||[])a.push({row:x.row,family:x.family,reason:"over-budget",score:x.score});return v.sort(($,x)=>{let S=So.indexOf($.family),E=So.indexOf(x.family);return S-E||x.score-$.score||$.row.object.localeCompare(x.row.object)}),{term:e,selected:v,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:h}}}Qi();sn();var SO=new Set(["isa","location","partOf","capableOf","usedFor"]),kO=new Set(["single","several","chained","group","closer"]),B$=(e,t)=>`${e}:${t}`;function gp(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!SO.has(n.family)||typeof n.form!="string"||!kO.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=B$(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 ko=e=>`${Bo(e)} ${e}`;function jO(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=ko(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Lr(s.map(ko))}`:n}function _O(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(l=>String(l||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Wo(o),A_TERM:ko(o),A_TERM_CAP:Wo(ko(o)),TERMS:Ji(o),TERMS_CAP:Wo(Ji(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?ko(a):"",OBJECT:i,A_OBJECT:i?ko(i):"",OBJECTS_A:Lr(r.map(ko)),OBJECTS_PLURAL:Lr(r.map(Ji)),OBJECTS_RAW:Lr(r),CHAIN:jO(n&&n.length?n:r.slice(0,1))}}function RO(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 bs(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(B$(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=la(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=RO(l[u],_O(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}Qi();var TO=So.filter(e=>e!=="isa"&&e!=="other");function AO(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 W$(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 IO(e,t){let n=l=>(t?.[l.object]||[])[1]||null,s=new Map;for(let l of e||[]){let c=n(l);c&&s.set(c,(s.get(c)||0)+1)}let o=new Map,r=[],i=[];for(let l of e||[]){let c=n(l);c&&s.get(c)>=2?(o.has(c)||(o.set(c,[]),r.push(c)),o.get(c).push(l)):i.push(l)}let a=r.map(l=>({parent:l,rows:o.get(l)}));return i.length&&a.push({parent:null,rows:i}),a}function CO(e,t,n){let s=new Map,o=new Map;for(let l of t||[]){let c=e?.[l.object];if(!Array.isArray(c)||c.length<2)continue;let u=c[c.length-1];!u||u===l.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(l))}let r=[...s.keys()].sort((l,c)=>s.get(c)-s.get(l)||l.localeCompare(c)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let l of r)for(let c of o.get(l)||[])a.has(c.id)||(a.add(c.id),i.push(c));return{roots:r,rows:i}}function OO(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let f=t[e[0].object],p=f&&f.length>1?"chained":"single",h=bs(s,"isa",e,{term:n,form:p,chain:f});return h&&r.push({...h,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=bs(s,"isa",e,{term:n,form:"several"});return f&&r.push({...f,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),l=bs(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});l&&r.push({...l,role:"names-term",paragraph:"definition"});let c=[];for(let f of IO(a,t))for(let p of W$(f.rows,o.maxObjectsPerBodySentence))c.push({parent:f.parent,rows:p});if(c.length>o.maxBodySentences){let f=c.slice(0,o.maxBodySentences),p=f[f.length-1];for(let h of c.slice(o.maxBodySentences))p.rows=p.rows.concat(h.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?bs(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):bs(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=CO(t,e,o.closerRootCount);if(u.length){let f=bs(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});f&&r.push({...f,role:"closes-isa",paragraph:"definition"})}return r}function LO(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Wo(`${Bo(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function NO(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 G$(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...kc,...n.config||{}},a=AO(e?.selected||[]),l=[];for(let u of OO(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of TO){let d=a.get(u);if(!(!d||!d.length))for(let f of W$(d,i.maxObjectsPerBodySentence)){let p=bs(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}LO(l,s);let c=new Map;for(let u of l)for(let d of u.rows)c.has(d.id)||c.set(d.id,d);return{term:s,sentences:l,paragraphs:NO(l,o),provenanceRows:[...c.values()]}}var PO=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function MO(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 FO=Object.freeze({facts:"show the facts",chains:"show the chains"});function DO(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:FO,facts:n.map(PO),factCount:n.length,chains:s}}function V$(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:MO(t?.provenanceRows||[]),detail:DO(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function q$(e,t,n={},s=new Map,o={}){let r=U$(e,t,n,o),i=G$(r,s,o);return V$(r,i,o)}cc();rc();var H$=new Set(["rdfs:subClassOf","rdf:type"]);function K$(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(H$.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 Y$(e,t,n=6){let s=hi(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=ic(r,s,{cap:n,stopAt:oc});i.length>1&&(o[r]=i)}return o}function X$(e){let t=[],n=new Set;for(let s of e||[])!s||!H$.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Ve();gc();function zO(e,t,n,s,o={}){let r=gp(s||[]);if(!r||r.size===0)return null;let i=t||[],a=K$(n||i),l=Y$(a.subClassEdges,X$(i));return q$(e,i,a,r,{...o,chains:l})}function J$(e,t,n,s={}){let o=vt(e||{individuals:[],objectProperties:[]}),r=Y(Q,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=zO(t,i,o,n,s);return UO(a)}function UO(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 BO="no session is open on this page yet \u2014 await tmct.open() first",Q$=Symbol.for("tmct.surface.fallback");function Z$({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[Q$])return a;let l=null,c=()=>{if(!l)throw new Error(BO);return l},u={async open(...d){return l=await e(...d),l},get session(){return l},async turn(d,f){let p=c();return s?s(d,f,p):typeof p.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}:p.turn(d,f)},async ask(d,f){return t?t(d,f,c()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,f){return n?n(d,f,c()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[Q$]=r,i.tmct=u,u}function WO({payload:e=null}={}){let t=ai();return e&&(t.payload=e),{memoryDir:t}}async function GO(e,t,n){let s=null;try{s=await O$(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await N$(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}}Z$({open:WO,ask:GO,page:{normFactTerm:Q,digestTermFromPayloadBrowser:J$},fallback:!0});})();