@polycode-projects/the-mechanical-code-talker 5.0.4 → 5.0.5

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 L$=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 Un=(e,t)=>{for(var n in t)L$(e,n,{get:t[n],enumerable:!0})};var ct,oO,rO,iO,aO,cO,lO,uO,dO,pO,fO,mO,hO,gO,bO,wO,yO,Q,ve,Qt,cp,$O,vO,xO,Ue=O(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},oO=ct("createRequire"),rO=ct("readFileSync"),iO=ct("access"),aO=ct("readFile"),cO=ct("writeFile"),lO=ct("appendFile"),uO=ct("mkdir"),dO=ct("mkdtemp"),pO=ct("rename"),fO=ct("unlink"),mO=ct("rm"),hO=ct("stat"),gO=ct("copyFile"),bO=ct("readdir"),wO=ct("createReadStream"),yO=ct("createWriteStream"),Q=(...e)=>e.join("/"),ve=e=>String(e).replace(/\/[^/]*$/,""),Qt=(...e)=>e.join("/"),cp="/",$O=ct("randomBytes"),vO=ct("spawnSync"),xO=ct("createInterface")});var lt,SO,kO,lp,ze,$r,N$,kn,P$,vi,yc,M$,F$,jO,D$,_O,RO,TO,AO,IO,_t=O(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SO=lt("createRequire"),kO=lt("readFileSync"),lp=lt("access"),ze=lt("readFile"),$r=lt("writeFile"),N$=lt("appendFile"),kn=lt("mkdir"),P$=lt("mkdtemp"),vi=lt("rename"),yc=lt("unlink"),M$=lt("rm"),F$=lt("stat"),jO=lt("copyFile"),D$=lt("readdir"),_O=lt("createReadStream"),RO=lt("createWriteStream"),TO=lt("randomBytes"),AO=lt("spawnSync"),IO=lt("createInterface")});function ko(e){let t=U$.exec(String(e||""));return t?t[1].toLowerCase():null}function xi(e){return String(e||"").replace(B$,"$1")}function Ws(e){return e.replace(W$,"").trim()}function rn(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(q$,"").trim();if(s=s.replace(H$,"").trim(),s===t)break;t=s}return t}var up,vr,Bs,dp,pp,z$,U$,xr,Zt,$c,B$,bn,vc,W$,G$,q$,V$,H$,de,Er,K$,fp,Be,en,fs,mp,xc,Ec,Sc,hp,Sr,Gs,gp,bp,qs,Bn,Wn,jo,Xe,wp,Vs,Hs,ms,jn,yp,kr,_o,Ei,Ro,$p,Gn=O(()=>{up=["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",...up]},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"]}},Bs=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"})}),dp=Object.freeze(Object.fromEntries(Object.entries(Bs).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),pp=Object.freeze(Object.values(Bs).map(e=>e.predicate)),z$=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),U$=new RegExp(`^mgx:[a-z]+-(${z$.join("|")})$`,"i");xr=Object.freeze([...up,"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"]),B$=new RegExp(`\\s+(?:${[...$c].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");bn=Object.freeze(["mentioned","referenced"]),vc=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),W$=new RegExp(`\\s+(?:${vc.join("|")})\\s*[?.!]*$`,"i");G$=Object.freeze(["then","though","too"]),q$=new RegExp(`\\s+(?:${G$.join("|")})\\s*[?.!]*$`,"i"),V$=Object.freeze(["please explain","explain"]),H$=new RegExp(`,\\s*(?:${V$.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"])),K$=e=>!xr.includes(e),fp=Object.freeze([...new Set(Object.keys(de).filter(K$).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"}),en=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),fs=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"}),mp=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"}}),xc=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"}),Ec=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"}),Sc=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"}),hp=/\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"]),Gs=Object.freeze(["this","it","that","here","this one","that one"]),gp=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]}`}]),bp=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"]),Bn=Object.freeze(["that","which","who"]),Wn=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}}),wp=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Vs=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"]),Hs=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"]),ms=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"}),jn=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"}}),yp=Object.freeze({tests:"Module",test:"Module"}),kr=Object.freeze(["those","them","these"]),_o=Object.freeze(["contains","defines"]),Ei=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"}),$p=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,kc=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 Y$,an,vp,xp,jc,Ep,MO,FO,Sp=O(()=>{Gn();kc();Y$=()=>Object.keys(To).sort(),an=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),vp=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),xp=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),jc=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:an("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:an("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:vp("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:xp("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:xp("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:Y$(),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:vp("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:an("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:an("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:an("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:an("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:an("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:an("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:an("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:an("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:an("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:an("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}}]),Ep=jc.filter(e=>e.tier==="hot"),MO=jc.filter(e=>e.tier==="cold"),FO=Object.freeze(jc.map(e=>e.name))});var kp,Re,zt=O(()=>{Ue();kp=Q(".tmct","graph.json"),Re=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function X$(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 jp(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})=>X$(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(m=>u(m))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),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(m=>{if(!m)return m;let h={...m};return h.subject&&(h.subject=u(h.subject)),h.object&&(h.object=u(h.object)),h})),r.objectProperties.push(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let m=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let h of Array.isArray(p)?p:[]){let g=u(h);m.includes(g)||m.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var _p=O(()=>{});var Io={};Un(Io,{clearCache:()=>J$,emptyEntities:()=>_c,fetchEntities:()=>tv,registerProvider:()=>Q$});function J$(){Ao=null,jr=null}function Q$(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Si;return Si=e??null,Ao=null,t}function _c(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function Z$(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return _c();throw new Re(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Re(`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 Z$(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=jp(s);return jr={key:n,payload:o},o}async function tv(e){if(Si){let s;try{s=await Si(e)}catch(o){throw o instanceof Re?o:new Re(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Re("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 _c();throw new Re(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Re(`graph artifact ${e.graphFile} is not valid JSON`)}return Ao={file:e.graphFile,payload:n},n}var Ao,jr,Si,_r=O(()=>{_t();zt();_p();Ao=null,jr=null,Si=null});function _n(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<=Rp)}function Rc(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>Rp||nv.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=sv))break;return t}function ki({name:e,doc:t}={}){return[...new Set([..._n(e),...Rc(t)])].sort()}function Tp(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 Ks(e,t,{limit:n=10}={}){let s=[...new Set([..._n(t),...Rc(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 Ap(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 nv,Rp,sv,hs=O(()=>{nv=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+/)),Rp=40,sv=120});function Ip(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 ov(e){if(!e.startsWith(Op))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Cp);if(o<0)return null;let r=n.slice(o+Cp.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Op.length,o),createdAt:s}:null}function bs(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:iv(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",...Ip(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=ov(s);return o||{kind:"teach",...Ip(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 Fp(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Np;let n=Number(t);return Number.isFinite(n)?Math.max(Tc,Math.min(Mp,n)):Np}function Dp(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 Lp+(1-Lp)*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 m=t[p],h=cv(m);if(!h)continue;i.push(h);let g=(Ys[h]??0)*Fp(m);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=Dp(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 _i(e,t){let n=(Ys[e]??0)*Fp(t);return Co(Math.max(0,Math.min(1,n)))}function lv(e){if(e==="operator")return 1;let t=Ys[e];return t===void 0?1:(t+1)/2}function Ri(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=Dp(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(lv(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 Up(e){return Ri(e,{halfLifeMs:uv})}function Bp({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+dv),i=(o*r+1)/2;return Co(Tc+(Mp-Tc)*i)}var Oo,ji,Je,gs,Cp,Op,rv,iv,Ys,Ac,Pp,av,Lp,Tc,Mp,Np,Co,cv,uv,dv,ws=O(()=>{Oo="mgx:trustScore",ji="mgx:trustInputs",Je="mgx:createdAt",gs="mgx:updatedAt";Cp="#node:",Op="peer:";rv="wikipedia-live",iv=e=>e===rv?"referenceLive":"reference";Ys=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Ac=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"}}),Pp=new Set(Object.entries(Ac).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),av=720*60*60*1e3,Lp=.9,Tc=.5,Mp=1.5,Np=1,Co=(e,t=6)=>Number(e.toFixed(t)),cv=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";uv=1/0;dv=19});var Xs,Ic=O(()=>{Xs=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Cc(e,t){return Math.log(1+e/(1+t))}var Rr=O(()=>{});var Ai={};Un(Ai,{bfsLevels:()=>Ti,findActionPath:()=>Oc,findReachableSet:()=>Lc});function Wp(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function Gp(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 Oc(e,t,n,{maxDepth:s=50,stateKey:o=Wp}={}){if(t(e))return{actions:[],states:[e]};let r=Gp(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 Lc(e,t,{maxDepth:n=50,stateKey:s=Wp}={}){let o=Gp(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*Ti(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 Js=O(()=>{});function Ci(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 zc(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Kn(e){let t=String(e?.prop||"").toLowerCase();if(qp[t])return qp[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 Vn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Nc(e){let t=Vn(e).split("/");return t[t.length-1]}function pv(e){return(e?.derived_from||[]).filter(of).length}function Vp(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+pv(e)}function tn(e,t){let n=Vn(t);if(!n)return{match:null,candidates:[]};let s=Nc(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Vn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(Nc(a)===s||Nc(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||Vp(a.ind)-Vp(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 fv(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 Hp(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Hn(e){let t=e||"Entity",n=_n(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 Uc(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Hn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(of);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}=fv(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(` ${Hp(l)} (${c.length}) \u2192 ${ut(c.map(u=>u.objectLabel||u.object),Kp)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${Hp(l)} (${c.length}) by ${ut(c.map(u=>u.subjectLabel||u.subject),Kp)}`)}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} (${Hn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(hv(e)),s.join(`
2
- `)}function hv(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=Kn(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=qn(e,c.subject),d=qn(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 Ti(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 rf(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>=gv){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,Pc)){let u=c.tests.length?`tests: ${ut(c.tests,bv)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Pc&&o.push(` \u2026+${a.length-Pc} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=Kn({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 af(e){let t=new Map;for(let n of e.relations)if(Kn(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 Xp(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function pf(e,t,n=null){let s=n||(i=>qn(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 ke(e,i))r(s(a.subject),s(a.object));return o}function Zv(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 m of c.values())u=Math.max(u,m);let d=[...c.entries()].sort((m,h)=>h[1]-m[1]),f=[],p=[];for(let[m,h]of d)h>=u*Wv&&f.length<n?f.push([m,h]):p.length<Yp&&p.push([m,h]);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<Vv&&i.length;c++){let u=new Map,d=[];for(let f of Hv){let p=pf(e,f),m=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,y));let[h,g]=r(m);for(let[b,y]of h)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 m=s.get(f);m&&(m.score+=Math.min(p*Gv,m.score*qv),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,Yp).filter(([f])=>!l.has(f)))}}function ex(e,t=[],{depth:n=lf,q:s=df,nodeLimit:o=uf,kinds:r=Kv,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 m=pf(e,r,a),h=E=>m.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:h(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*Yv*Math.pow(Xv,E.hop-1),F=u.get(E.id);if(F)F.score+=Math.min(A*Jv,F.score*Qv);else{let T=e.byId?.get?.(E.id);if(T&&i(T)){$||($=af(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&&h(E.id)>c)continue;let R=[];for(let A of m.get(E.id)||[]){if(_.has(A))continue;let F=e.byId?.get?.(A);!F||!i(F)||R.push({id:A,deg:h(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 ff(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=af(e),m=[];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 Xp(j))E.add(A);let R=u?String((v.attributes||[]).find(j=>j.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:v,label:_,labelLc:$,defines:x,symSet:S,symComps:E,dotted:R})}let h=m.length||1,g=new Map,b=v=>{let _=0;for(let $ of m)($.labelLc.includes(v)||$.symComps.has(v)||$.symSet.has(v))&&_++;return _},y=v=>(g.has(v)||g.set(v,Cc(h,b(v))),g.get(v));for(let v of t)y(v);let w=[];for(let v of m){let _=0,$=0,x=0,S=[];for(let F of t){let T=g.get(F)||0;T&&(v.symSet.has(F)?(_+=T*cf,x++):v.symComps.has(F)&&(S.push(T),x++),v.labelLc.includes(F)&&($+=T*yv))}S.sort((F,T)=>T-F);let E=0;for(let F=0;F<Math.min(S.length,vv);F++)E+=S[F]*$v;let R=_+$+E;if(!R)continue;s&&(Xs(v.labelLc)||kv(v.labelLc))?R*=Sv:Xs(v.labelLc)&&(R*=.4);let j=v.defines.filter(F=>{let T=F.toLowerCase(),M=Xp(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(m.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<Dv||!$(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,zv);M++)T+=F[M]*Fv;j=Math.max(j,T)}j&&(E.score+=Math.min(j*Uv,S*Bv))}}if(w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of ke(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*xv,$.score*Ev)}}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 ke(e,$)){let S=qn(e,x.subject),E=qn(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*jv,$.score*_v)}}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(!Av($.ind.label))continue;let x=0;for(let S of ke(e,"inherits")){if(qn(e,S.subject)!==$.ind.id||!Iv(S.objectLabel))continue;let R=qn(e,S.object);if(!R){let j=_.get(String(S.objectLabel||""));j&&(R=Rn(e,j))}R&&(x=Math.max(x,v.get(R)||0))}$.score+=Math.min(x*Rv,$.score*Tv)}}if(l&&w.length&&e.proseIndex){let v=Ks(e.proseIndex,t.join(" "),{limit:Lv});if(v.length){let _=new Map;for(let{id:$,score:x}of v){let S=qn(e,$);S&&_.set(S,(_.get(S)||0)+x)}for(let $ of w){let x=_.get($.ind.id)||0;x&&($.score+=Math.min(x*Cv,$.score*Ov))}}}if(c&&w.length&&e.proseIndex){let v=new Map(w.map(x=>[x.ind.id,x])),_=new Map(m.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}=Ap(e.proseIndex,x);if(!E.length)continue;let R=new Set;for(let j of E){let A=qn(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*Mv)}}for(let x of w){let S=$.get(x.ind.id)||0;S&&(x.score+=Math.min(S*Nv,x.score*Pv))}}return i&&w.length>1&&Zv(e,w,f),a&&w.length&&ex(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:lf,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:df,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:uf}),w.sort((v,_)=>_.score-v.score||_.density-v.density||v.defineCount-_.defineCount||String(v.ind.label).length-String(_.ind.label).length),w}function mf(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 ff(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function nx(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 Bc(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Jp)return{error:`name pattern is ${n.length} characters; the limit is ${Jp}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=nx(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>Qp)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${Qp}.`};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()+Zp;else if(t()>a)throw new Ii(`name pattern "${n}" exceeded its ${Zp}ms matching budget.`);return i.test(String(l).slice(0,tx))}}}function hf(e,t,{limit:n=Oi,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 m=Bc(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return ax(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof Ii)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=ff(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:m,defineCount:h,matching:g}of f){let b=g.length?` \u2014 matching: ${ut([...new Set(g)],wv)}`:"";p.push(`- ${m.label} (defines ${h} 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 ke(e,t){let n=ef.get(e);n||(n=new Map,ef.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Kn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function qn(e,t){let n=e.byId?.get?.(t);if(n)return Rn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Rn(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 Wc(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 gf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Hn(t.class)} (id: ${t.id})`],o=ke(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=Wc(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,tf)}`),i.length&&s.push(`attributes (${i.length}): ${ut(i,tf)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
- `)}function bf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Rt(t),o=[`${t.label} \u2014 ${Hn(t.class)}${Wc(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 m=Pe(t,"doc");return m&&o.push(`doc: ${m}`),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 wf(e,t){let n=ke(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 ${Hn(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${ut(s,nf)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Ti(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,nf)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
- `)}function Li(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 Ni(e,t=""){let n=Vn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Vn(s.label).startsWith(n)))}function yf(e,{pkg:t=""}={}){let n=Vn(t),s=Ni(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=Li(s),r=new Map;for(let u of ke(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,ox).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})`),sx)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
- `)}function vf(e,t){let n=Rn(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(ke(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,$f,`
1
+ (()=>{var q$=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 Bn=(e,t)=>{for(var n in t)q$(e,n,{get:t[n],enumerable:!0})};var ct,SO,kO,jO,_O,RO,TO,AO,IO,CO,OO,LO,NO,PO,MO,FO,DO,Q,ve,Qt,fp,zO,UO,BO,Ue=O(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SO=ct("createRequire"),kO=ct("readFileSync"),jO=ct("access"),_O=ct("readFile"),RO=ct("writeFile"),TO=ct("appendFile"),AO=ct("mkdir"),IO=ct("mkdtemp"),CO=ct("rename"),OO=ct("unlink"),LO=ct("rm"),NO=ct("stat"),PO=ct("copyFile"),MO=ct("readdir"),FO=ct("createReadStream"),DO=ct("createWriteStream"),Q=(...e)=>e.join("/"),ve=e=>String(e).replace(/\/[^/]*$/,""),Qt=(...e)=>e.join("/"),fp="/",zO=ct("randomBytes"),UO=ct("spawnSync"),BO=ct("createInterface")});var lt,GO,qO,mp,ze,$r,V$,jn,H$,xi,vc,K$,Y$,VO,X$,HO,KO,YO,XO,JO,_t=O(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},GO=lt("createRequire"),qO=lt("readFileSync"),mp=lt("access"),ze=lt("readFile"),$r=lt("writeFile"),V$=lt("appendFile"),jn=lt("mkdir"),H$=lt("mkdtemp"),xi=lt("rename"),vc=lt("unlink"),K$=lt("rm"),Y$=lt("stat"),VO=lt("copyFile"),X$=lt("readdir"),HO=lt("createReadStream"),KO=lt("createWriteStream"),YO=lt("randomBytes"),XO=lt("spawnSync"),JO=lt("createInterface")});function ko(e){let t=Q$.exec(String(e||""));return t?t[1].toLowerCase():null}function Ei(e){return String(e||"").replace(Z$,"$1")}function Ws(e){return e.replace(ev,"").trim()}function an(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(nv,"").trim();if(s=s.replace(ov,"").trim(),s===t)break;t=s}return t}var hp,vr,Bs,gp,bp,J$,Q$,xr,Zt,xc,Z$,wn,Ec,ev,tv,nv,sv,ov,de,Er,rv,wp,Be,en,gs,yp,Sc,kc,jc,$p,Sr,Gs,vp,xp,qs,Wn,Gn,jo,Xe,Ep,Vs,Hs,bs,_n,Sp,kr,_o,Si,Ro,kp,qn=O(()=>{hp=["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",...hp]},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"]}},Bs=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"})}),gp=Object.freeze(Object.fromEntries(Object.entries(Bs).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),bp=Object.freeze(Object.values(Bs).map(e=>e.predicate)),J$=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),Q$=new RegExp(`^mgx:[a-z]+-(${J$.join("|")})$`,"i");xr=Object.freeze([...hp,"is the superclass of","are the superclass of","is the parent class of"]),Zt=Object.freeze(["defined","declared","located","implemented"]),xc=Object.freeze(["now","currently","right now","at the moment","these days","today"]),Z$=new RegExp(`\\s+(?:${[...xc].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");wn=Object.freeze(["mentioned","referenced"]),Ec=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),ev=new RegExp(`\\s+(?:${Ec.join("|")})\\s*[?.!]*$`,"i");tv=Object.freeze(["then","though","too"]),nv=new RegExp(`\\s+(?:${tv.join("|")})\\s*[?.!]*$`,"i"),sv=Object.freeze(["please explain","explain"]),ov=new RegExp(`,\\s*(?:${sv.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"])),rv=e=>!xr.includes(e),wp=Object.freeze([...new Set(Object.keys(de).filter(rv).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"}),en=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),gs=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"}),yp=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"}}),Sc=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"}),kc=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"}),jc=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"}),$p=/\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"]),Gs=Object.freeze(["this","it","that","here","this one","that one"]),vp=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]}`}]),xp=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"]),Wn=Object.freeze(["that","which","who"]),Gn=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}}),Ep=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Vs=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"]),Hs=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"]),bs=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"}),_n=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"}}),Sp=Object.freeze({tests:"Module",test:"Module"}),kr=Object.freeze(["those","them","these"]),_o=Object.freeze(["contains","defines"]),Si=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"}),kp=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,_c=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 iv,cn,jp,_p,Rc,Rp,sL,oL,Tp=O(()=>{qn();_c();iv=()=>Object.keys(To).sort(),cn=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),jp=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),_p=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),Rc=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:cn("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:cn("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:jp("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:_p("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:_p("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:iv(),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:jp("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:cn("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:cn("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:cn("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:cn("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:cn("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:cn("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:cn("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:cn("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:cn("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:cn("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}}]),Rp=Rc.filter(e=>e.tier==="hot"),sL=Rc.filter(e=>e.tier==="cold"),oL=Object.freeze(Rc.map(e=>e.name))});var Ap,Re,Bt=O(()=>{Ue();Ap=Q(".tmct","graph.json"),Re=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function av(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 Ip(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})=>av(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(m=>u(m))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),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(m=>{if(!m)return m;let h={...m};return h.subject&&(h.subject=u(h.subject)),h.object&&(h.object=u(h.object)),h})),r.objectProperties.push(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let m=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let h of Array.isArray(p)?p:[]){let g=u(h);m.includes(g)||m.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var Cp=O(()=>{});var Io={};Bn(Io,{clearCache:()=>cv,emptyEntities:()=>Tc,fetchEntities:()=>pv,registerProvider:()=>lv});function cv(){Ao=null,jr=null}function lv(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=ki;return ki=e??null,Ao=null,t}function Tc(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function uv(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return Tc();throw new Re(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Re(`graph artifact ${e} is not valid JSON`)}}async function dv(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 uv(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Ip(s);return jr={key:n,payload:o},o}async function pv(e){if(ki){let s;try{s=await ki(e)}catch(o){throw o instanceof Re?o:new Re(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Re("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return dv(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 Tc();throw new Re(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Re(`graph artifact ${e.graphFile} is not valid JSON`)}return Ao={file:e.graphFile,payload:n},n}var Ao,jr,ki,_r=O(()=>{_t();Bt();Cp();Ao=null,jr=null,ki=null});function Rn(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<=Op)}function Ac(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>Op||fv.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=mv))break;return t}function ji({name:e,doc:t}={}){return[...new Set([...Rn(e),...Ac(t)])].sort()}function Lp(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 Ks(e,t,{limit:n=10}={}){let s=[...new Set([...Rn(t),...Ac(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 Np(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 fv,Op,mv,ws=O(()=>{fv=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+/)),Op=40,mv=120});function Pp(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 hv(e){if(!e.startsWith(Fp))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Mp);if(o<0)return null;let r=n.slice(o+Mp.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Fp.length,o),createdAt:s}:null}function Vn(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:bv(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",...Pp(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=hv(s);return o||{kind:"teach",...Pp(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 Wp(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return zp;let n=Number(t);return Number.isFinite(n)?Math.max(Ic,Math.min(Bp,n)):zp}function Gp(e,t=Date.now(),n=wv){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Dp+(1-Dp)*Math.pow(.5,o/n)}function qp(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 m=t[p],h=yv(m);if(!h)continue;i.push(h);let g=(Ys[h]??0)*Wp(m);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=Gp(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 Ri(e,t){let n=(Ys[e]??0)*Wp(t);return Co(Math.max(0,Math.min(1,n)))}function $v(e){if(e==="operator")return 1;let t=Ys[e];return t===void 0?1:(t+1)/2}function Ti(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=Gp(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($v(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 Vp(e){return Ti(e,{halfLifeMs:vv})}function Hp({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+xv),i=(o*r+1)/2;return Co(Ic+(Bp-Ic)*i)}var Oo,_i,Je,ys,Mp,Fp,gv,bv,Ys,Cc,Up,wv,Dp,Ic,Bp,zp,Co,yv,vv,xv,Hn=O(()=>{Oo="mgx:trustScore",_i="mgx:trustInputs",Je="mgx:createdAt",ys="mgx:updatedAt";Mp="#node:",Fp="peer:";gv="wikipedia-live",bv=e=>e===gv?"referenceLive":"reference";Ys=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Cc=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"}}),Up=new Set(Object.entries(Cc).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),wv=720*60*60*1e3,Dp=.9,Ic=.5,Bp=1.5,zp=1,Co=(e,t=6)=>Number(e.toFixed(t)),yv=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";vv=1/0;xv=19});var Xs,Oc=O(()=>{Xs=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Lc(e,t){return Math.log(1+e/(1+t))}var Rr=O(()=>{});var Ii={};Bn(Ii,{bfsLevels:()=>Ai,findActionPath:()=>Nc,findReachableSet:()=>Pc});function Kp(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function Yp(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 Nc(e,t,n,{maxDepth:s=50,stateKey:o=Kp}={}){if(t(e))return{actions:[],states:[e]};let r=Yp(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 Pc(e,t,{maxDepth:n=50,stateKey:s=Kp}={}){let o=Yp(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*Ai(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 Js=O(()=>{});function Oi(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 Bc(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Jn(e){let t=String(e?.prop||"").toLowerCase();if(Xp[t])return Xp[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 Yn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Mc(e){let t=Yn(e).split("/");return t[t.length-1]}function Ev(e){return(e?.derived_from||[]).filter(uf).length}function Jp(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+Ev(e)}function tn(e,t){let n=Yn(t);if(!n)return{match:null,candidates:[]};let s=Mc(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Yn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(Mc(a)===s||Mc(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||Jp(a.ind)-Jp(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 Sv(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 Qp(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Xn(e){let t=e||"Entity",n=Rn(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 Wc(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Xn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(uf);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}=Sv(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(` ${Qp(l)} (${c.length}) \u2192 ${ut(c.map(u=>u.objectLabel||u.object),Zp)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${Qp(l)} (${c.length}) by ${ut(c.map(u=>u.subjectLabel||u.subject),Zp)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${ut(a,kv)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${Xn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(jv(e)),s.join(`
2
+ `)}function jv(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=Jn(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=Kn(e,c.subject),d=Kn(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 Ai(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 df(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>=_v){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,Fc)){let u=c.tests.length?`tests: ${ut(c.tests,Rv)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Fc&&o.push(` \u2026+${a.length-Fc} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=Jn({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 pf(e){let t=new Map;for(let n of e.relations)if(Jn(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 tf(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function bf(e,t,n=null){let s=n||(i=>Kn(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 ke(e,i))r(s(a.subject),s(a.object));return o}function ux(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 m of c.values())u=Math.max(u,m);let d=[...c.entries()].sort((m,h)=>h[1]-m[1]),f=[],p=[];for(let[m,h]of d)h>=u*ex&&f.length<n?f.push([m,h]):p.length<ef&&p.push([m,h]);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<sx&&i.length;c++){let u=new Map,d=[];for(let f of ox){let p=bf(e,f),m=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,y));let[h,g]=r(m);for(let[b,y]of h)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 m=s.get(f);m&&(m.score+=Math.min(p*tx,m.score*nx),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,ef).filter(([f])=>!l.has(f)))}}function dx(e,t=[],{depth:n=mf,q:s=gf,nodeLimit:o=hf,kinds:r=rx,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 m=bf(e,r,a),h=E=>m.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:h(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*ix*Math.pow(ax,E.hop-1),F=u.get(E.id);if(F)F.score+=Math.min(A*cx,F.score*lx);else{let T=e.byId?.get?.(E.id);if(T&&i(T)){$||($=pf(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&&h(E.id)>c)continue;let R=[];for(let A of m.get(E.id)||[]){if(_.has(A))continue;let F=e.byId?.get?.(A);!F||!i(F)||R.push({id:A,deg:h(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 wf(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=pf(e),m=[];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 tf(j))E.add(A);let R=u?String((v.attributes||[]).find(j=>j.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:v,label:_,labelLc:$,defines:x,symSet:S,symComps:E,dotted:R})}let h=m.length||1,g=new Map,b=v=>{let _=0;for(let $ of m)($.labelLc.includes(v)||$.symComps.has(v)||$.symSet.has(v))&&_++;return _},y=v=>(g.has(v)||g.set(v,Lc(h,b(v))),g.get(v));for(let v of t)y(v);let w=[];for(let v of m){let _=0,$=0,x=0,S=[];for(let F of t){let T=g.get(F)||0;T&&(v.symSet.has(F)?(_+=T*ff,x++):v.symComps.has(F)&&(S.push(T),x++),v.labelLc.includes(F)&&($+=T*Av))}S.sort((F,T)=>T-F);let E=0;for(let F=0;F<Math.min(S.length,Cv);F++)E+=S[F]*Iv;let R=_+$+E;if(!R)continue;s&&(Xs(v.labelLc)||Pv(v.labelLc))?R*=Nv:Xs(v.labelLc)&&(R*=.4);let j=v.defines.filter(F=>{let T=F.toLowerCase(),M=tf(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(m.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<Xv||!$(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,Jv);M++)T+=F[M]*Yv;j=Math.max(j,T)}j&&(E.score+=Math.min(j*Qv,S*Zv))}}if(w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of ke(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*Ov,$.score*Lv)}}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 ke(e,$)){let S=Kn(e,x.subject),E=Kn(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*Mv,$.score*Fv)}}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(!Uv($.ind.label))continue;let x=0;for(let S of ke(e,"inherits")){if(Kn(e,S.subject)!==$.ind.id||!Bv(S.objectLabel))continue;let R=Kn(e,S.object);if(!R){let j=_.get(String(S.objectLabel||""));j&&(R=Tn(e,j))}R&&(x=Math.max(x,v.get(R)||0))}$.score+=Math.min(x*Dv,$.score*zv)}}if(l&&w.length&&e.proseIndex){let v=Ks(e.proseIndex,t.join(" "),{limit:qv});if(v.length){let _=new Map;for(let{id:$,score:x}of v){let S=Kn(e,$);S&&_.set(S,(_.get(S)||0)+x)}for(let $ of w){let x=_.get($.ind.id)||0;x&&($.score+=Math.min(x*Wv,$.score*Gv))}}}if(c&&w.length&&e.proseIndex){let v=new Map(w.map(x=>[x.ind.id,x])),_=new Map(m.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}=Np(e.proseIndex,x);if(!E.length)continue;let R=new Set;for(let j of E){let A=Kn(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*Kv)}}for(let x of w){let S=$.get(x.ind.id)||0;S&&(x.score+=Math.min(S*Vv,x.score*Hv))}}return i&&w.length>1&&ux(e,w,f),a&&w.length&&dx(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:mf,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:gf,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:hf}),w.sort((v,_)=>_.score-v.score||_.density-v.density||v.defineCount-_.defineCount||String(v.ind.label).length-String(_.ind.label).length),w}function yf(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 wf(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function fx(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 Gc(e,{now:t=Date.now}={}){let n=String(e);if(n.length>nf)return{error:`name pattern is ${n.length} characters; the limit is ${nf}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=fx(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>sf)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${sf}.`};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()+of;else if(t()>a)throw new Ci(`name pattern "${n}" exceeded its ${of}ms matching budget.`);return i.test(String(l).slice(0,px))}}}function $f(e,t,{limit:n=Li,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 m=Gc(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return wx(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof Ci)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=wf(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:m,defineCount:h,matching:g}of f){let b=g.length?` \u2014 matching: ${ut([...new Set(g)],Tv)}`:"";p.push(`- ${m.label} (defines ${h} 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 ke(e,t){let n=rf.get(e);n||(n=new Map,rf.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Jn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Kn(e,t){let n=e.byId?.get?.(t);if(n)return Tn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Tn(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 Lo(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function vf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Xn(t.class)} (id: ${t.id})`],o=ke(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?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,af)}`),i.length&&s.push(`attributes (${i.length}): ${ut(i,af)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
+ `)}function xf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Rt(t),o=[`${t.label} \u2014 ${Xn(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=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 m=Pe(t,"doc");return m&&o.push(`doc: ${m}`),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 Ef(e,t){let n=ke(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 ${Xn(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${ut(s,cf)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Ai(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,cf)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
+ `)}function Ni(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 Pi(e,t=""){let n=Yn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Yn(s.label).startsWith(n)))}function Sf(e,{pkg:t=""}={}){let n=Yn(t),s=Pi(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=Ni(s),r=new Map;for(let u of ke(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,hx).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})`),mx)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
+ `)}function jf(e,t){let n=Tn(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(ke(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,kf,`
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 xf(e){let t=new Set,n=new Set;for(let o of ke(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!Xs(String(o.label).toLowerCase())&&!t.has(o.id)).map(o=>o.label).sort();return s.length?`${s.length} source module(s) with no covering test module:
13
- ${ut(s,$f,`
14
- `)}`:"every source module has at least one covering test module."}function Ef(e,t){let n=Rn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(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,Ut)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function kf(e,t,{toolNamePrefix:n="tmct_"}={}){if(Sf.has(t.class)){let i=[...new Set(ke(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):
12
+ ${gx}`}function _f(e){let t=new Set,n=new Set;for(let o of ke(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!Xs(String(o.label).toLowerCase())&&!t.has(o.id)).map(o=>o.label).sort();return s.length?`${s.length} source module(s) with no covering test module:
13
+ ${ut(s,kf,`
14
+ `)}`:"every source module has at least one covering test module."}function Rf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(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,Wt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Af(e,t,{toolNamePrefix:n="tmct_"}={}){if(Tf.has(t.class)){let i=[...new Set(ke(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
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=Rn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(ke(e,"calls").filter(i=>i.object===s).map(i=>i.subjectLabel||i.subject))];return r.length?`${o} \u2014 called by ${r.length} module(s):
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=Tn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(ke(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
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 jf(e,t){if(Sf.has(t.class)){let r=[...new Set(ke(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):
18
+ `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function If(e,t){if(Tf.has(t.class)){let r=[...new Set(ke(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
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=Rn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(ke(e,"calls").filter(r=>r.subject===n).map(r=>r.objectLabel||r.object))];return o.length?`${s} \u2014 calls into ${o.length} module(s):
20
+ `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(ke(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
21
  ${ut(o,Tr,`
22
- `)}`:`${s}: no recorded callees.`}function _f(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 Gc(e,t){if(!t?.id)return"";let n=ke(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${ut(n.map(s=>_f(e,s)),ix)}`:""}function Rf(e,t){let n=ke(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Hn(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=>_f(e,o));return`${t.label} \u2014 ${Hn(t.class)} calls ${n.length} in-repo symbol(s):
22
+ `)}`:`${s}: no recorded callees.`}function Cf(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 Vc(e,t){if(!t?.id)return"";let n=ke(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${ut(n.map(s=>Cf(e,s)),bx)}`:""}function Of(e,t){let n=ke(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Xn(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=>Cf(e,o));return`${t.label} \u2014 ${Xn(t.class)} calls ${n.length} in-repo symbol(s):
23
23
  ${ut(s,Tr,`
24
- `)}`}function Tf(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 Af(e,t){let n=Rn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(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,Ut).map(a=>` ${Tf(e,a.subject,a.subjectLabel)}`),i=o.length>Ut?`
25
- \u2026+${o.length-Ut} more`:"";return`${s}: touched by ${o.length} recent commit(s):
24
+ `)}`}function Lf(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 Nf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(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,Wt).map(a=>` ${Lf(e,a.subject,a.subjectLabel)}`),i=o.length>Wt?`
25
+ \u2026+${o.length-Wt} more`:"";return`${s}: touched by ${o.length} recent commit(s):
26
26
  ${r.join(`
27
- `)}${i}`}function If(e,t){let n=ke(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Hn(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,Ut).map(r=>` ${Tf(e,r.subject,r.subjectLabel)}`),o=n.length>Ut?`
28
- \u2026+${n.length-Ut} more`:"";return`${t.label} \u2014 ${Hn(t.class)}: touched by ${n.length} commit(s):
27
+ `)}${i}`}function Pf(e,t){let n=ke(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Xn(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,Wt).map(r=>` ${Lf(e,r.subject,r.subjectLabel)}`),o=n.length>Wt?`
28
+ \u2026+${n.length-Wt} more`:"";return`${t.label} \u2014 ${Xn(t.class)}: touched by ${n.length} commit(s):
29
29
  ${s.join(`
30
- `)}${o}`}function Cf(e,t){return If(e,t)}function Of(e,t){return If(e,t)}function qc(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Lf[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=Oi,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Lf[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}${Wc(Rt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
- `)}function bx(e){return{paramCount:Pi(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function wx(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Pi(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:gx(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function yx(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Pi(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 $x(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Mc(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(Mc(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(sf(n)),d=s?.start??null;for(let f of e){let p=Mc(f.decorators).some(b=>c.has(b))?1:0,m=sf(f.label).filter(b=>u.has(b)).length,h=yx(f,o),g=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+m*50+h+g}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function Po(e,t){let n=Rn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=ke(e,"defines").filter(j=>j.subject===n),r=new Map;for(let j of ke(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?bx(u):wx(i);i=$x(i,u||{label:t.label},f);let p=u?null:i.find(j=>j.site&&j.label!==t.label)||null,m=[...new Set(ke(e,"tests").filter(j=>j.object===n).map(j=>j.subjectLabel||j.subject))].slice(0,dx),h=Ff(e,n).slice(0,ux),g=ke(e,"reexports").filter(j=>j.subject===n).map(j=>j.objectLabel||j.object).slice(0,20),b=Pe(e.byId.get(n),"all"),y=ke(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,lx);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?Gc(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>=hx)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:m,cochange:h,exports:g,allExports:b,classMembers:v,insertion:l,insertionRegion:$,calleeBodies:R,callHint:E,siblingCap:cx}}function Qs(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 Nf(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 Mi(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=Pi(s.params);(i>px||a>fx||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:Qs(o),topup:o!=="TINY"}}function Pf(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 Mf(e,t){return Pf(e,t)}function Ff(e,t){return Pf(e,t)}function Hc(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Df[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 wx(e,t,{limit:n=Li,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Df[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=Hc(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 Rx(e){return{paramCount:Mi(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function Tx(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Mi(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:_x(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function Ax(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Mi(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 Ix(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Dc(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(Dc(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(lf(n)),d=s?.start??null;for(let f of e){let p=Dc(f.decorators).some(b=>c.has(b))?1:0,m=lf(f.label).filter(b=>u.has(b)).length,h=Ax(f,o),g=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+m*50+h+g}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function Po(e,t){let n=Tn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=ke(e,"defines").filter(j=>j.subject===n),r=new Map;for(let j of ke(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?Rx(u):Tx(i);i=Ix(i,u||{label:t.label},f);let p=u?null:i.find(j=>j.site&&j.label!==t.label)||null,m=[...new Set(ke(e,"tests").filter(j=>j.object===n).map(j=>j.subjectLabel||j.subject))].slice(0,xx),h=Wf(e,n).slice(0,vx),g=ke(e,"reexports").filter(j=>j.subject===n).map(j=>j.objectLabel||j.object).slice(0,20),b=Pe(e.byId.get(n),"all"),y=ke(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,$x);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?Vc(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>=jx)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:m,cochange:h,exports:g,allExports:b,classMembers:v,insertion:l,insertionRegion:$,calleeBodies:R,callHint:E,siblingCap:yx}}function Qs(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 zf(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 Fi(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=Mi(s.params);(i>Ex||a>Sx||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)>=kx;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:Qs(o),topup:o!=="TINY"}}function Uf(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 Mf(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 Bf(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 Ff(e,t){let n=[];for(let s of ke(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 Df(e,t){let n=Rn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Ff(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,Fc).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
48
+ `)}function Wf(e,t){let n=[];for(let s of ke(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 Gf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Wf(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,zc).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>Fc?`
51
- \u2026+${o.length-Fc} more`:"")}function zf(e,t){let n=Rn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(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,Dc).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>zc?`
51
+ \u2026+${o.length-zc} more`:"")}function qf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(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,Uc).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>Dc?`
54
- \u2026+${o.length-Dc} more`:"")}var qp,of,Kp,mv,gv,Pc,bv,Oi,wv,yv,$v,cf,vv,xv,Ev,Sv,kv,jv,_v,Rv,Tv,Av,Iv,Cv,Ov,Lv,Nv,Pv,Mv,Fv,Dv,zv,Uv,Bv,Wv,Gv,qv,Yp,Vv,Hv,lf,uf,df,Kv,Yv,Xv,Jv,Qv,Jp,Qp,tx,Zp,Ii,ef,tf,nf,Tr,Pe,sx,ox,$f,rx,Ut,Sf,ix,Lf,cx,lx,ux,dx,px,fx,mx,hx,Mc,sf,Pi,gx,Fc,Dc,Oe=O(()=>{hs();ws();Ic();Rr();Js();qp={"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"};of=e=>/^(git|turn):/.test(String(e||""));Kp=30,mv=8;gv=2,Pc=25,bv=3;Oi=10,wv=8,yv=3,$v=2,cf=5,vv=4,xv=.2,Ev=.35,Sv=.15,kv=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),jv=.2,_v=.35,Rv=.2,Tv=.35,Av=e=>/\.cs$/i.test(e),Iv=e=>/^I[A-Z]/.test(String(e||"")),Cv=.2,Ov=.35,Lv=50,Nv=.2,Pv=.35,Mv=.5,Fv=cf,Dv=3,zv=4,Uv=1,Bv=.9,Wv=.5,Gv=.2,qv=.35,Yp=4,Vv=2,Hv=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],lf=3,uf=12,df=.9,Kv=["imports","calls","callsSymbol","inherits"],Yv=.5,Xv=.6,Jv=.2,Qv=.35;Jp=128,Qp=4,tx=64,Zp=250,Ii=class extends Error{};ef=new WeakMap;tf=40,nf=40,Tr=30;Pe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";sx=25,ox=15;$f=40,rx="tests edges are recorded module to module, so this is module-grain coverage.";Ut=15;Sf=new Set(["Function","Method"]);ix=8;Lf={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};cx=8,lx=16,ux=4,dx=6,px=12,fx=2,mx=8,hx=3,Mc=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),sf=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Pi=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},gx=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};Fc=20;Dc=40});function Qe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Hf(e){let t=String(e||"");return Uf&&(t=t.replace(Uf," ")),t.replace(/\s+/g," ").trim()}function Kf(e){let t=String(e||"");t=t.replace(Mx," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(Lx);if(o&&(t=o[1].trim()),o=t.match(Nx),o&&(t=o[1].trim()),o=t.match(Bf),o&&(t=o[1].trim()),o=t.match(Wf),o&&(t=o[1].trim()),o=t.match(Gf),o&&(t=o[1].trim()),o=t.match(Px),o&&(t=o[1].trim()),o=t.match(qf),o&&(t=o[1].trim()),o=t.match(Fx),o&&(t=o[1].trim()),o=t.match(Dx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(zx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Ux),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Bx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Wx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Gx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(qx),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(Vx),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(Hx),o){let r=o[1].trim();Ox(r)||(t=!Kx.test(r)&&(Ax.test(r)||ys.test(r))?r:`describe ${r}`)}if(o=t.match(Yx),o){let r=o[1].trim();(ys.test(r)||Xx.test(r)||qf.test(r)||Bf.test(r)||Gf.test(r)||Wf.test(r)||Jx.test(r))&&(t=r)}if(t===s)break}return t}function eE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(Qx);if(o&&(t=o[1].trim()),o=t.match(Zx),o&&(t=o[1].trim()),t===s)break}return t}function nE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(tE);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function rE(e){let t=String(e||""),n=t.match(oE);if(n){let o=Xf[n[1].toLowerCase()],r=Yf[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(Jf);return s?`which modules transitively import ${s[1].trim()}`:t}function Fi(e){return String(e||"").replace(xx,t=>xc[t.toLowerCase()])}function Zs(e){let t=Fi(e);return t=t.replace(Ex,n=>Ec[n.toLowerCase()]),t=t.replace(Sx,n=>Sc[n.toLowerCase()]),t=t.replace(kx,"with"),t=t.replace(jx,(n,s)=>`${s} for`),t=t.replace(_x,(n,s)=>`for ${s}`),t=t.replace(Rx,(n,s)=>s),t=t.replace(iE,"$1$2"),t=t.replace(hp,"$1ing"),t=Kf(t),t=nE(t),t=eE(t),t=rE(t),t=Hf(t),t=rn(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ar(e){for(let t of[...bp,...gp]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Vc(e){for(let t of aE){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Qf(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 vx,xx,Vf,Ex,Sx,kx,jx,_x,Rx,Tx,Uf,Ax,ys,Ix,Cx,Ox,Lx,Nx,Bf,Wf,Gf,Px,Mx,Fx,Dx,zx,Ux,Bx,Wx,Gx,qx,Vx,Hx,Kx,Yx,Xx,Jx,qf,Qx,Zx,tE,Yf,Xf,sE,oE,Jf,iE,aE,cE,tt,Bt,me,Tn=O(()=>{Gn();vx=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b","gi"),xx=vx(xc),Vf=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Ex=Vf(Ec),Sx=Vf(Sc),kx=/(?<=^|\s)w\/(?=\s|$)/gi,jx=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,_x=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,Rx=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,Tx=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),Uf=Sr.length?new RegExp("\\b("+[...Sr].sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b\\s*,?","gi"):null;Ax=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b","i"),ys=/^(?:which|what|who|whose|where|when|why|how)\b/i,Ix=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),Cx=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,Ox=e=>{if(Cx.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return Ix.has((t[t.length-1]||"").toLowerCase())},Lx=/^(?: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,Nx=/^(?: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,Bf=/^(?:(?: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,Wf=/^(?: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,Gf=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,Px=/^(?:please[\s,]+)+(.+)$/i,Mx=/,?\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,Fx=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,Dx=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,zx=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,Ux=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,Bx=/^do\s+you\s+know\s+(.+?)\??$/i,Wx=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,Gx=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,qx=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,Vx=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,Hx=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,Kx=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,Yx=/^(?:and|also|so|then|now|but)\s+(.+)$/i,Xx=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,Jx=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,qf=/^(?:(?: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;Qx=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,Zx=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;tE=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;Yf=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),Xf=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),sE="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",oE=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(Xf).join("|")+")\\s+("+Object.keys(Yf).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+sE+")\\??$","i"),Jf=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;iE=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${$c.map(Qe).join("|")})(\\s*[?.!]*)$`,"i");aE=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+(?:${vc.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+(${Tx})\\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"]),Bt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),me=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var em,Zf=O(()=>{em={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 Yn(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 Kc(e){return/^[a-z]+$/.test(e)&&!tt.has(e)&&!Hc.has(e)}function sm(e){return pE(e)?null:Di(e,nm,Xn(e))}function Di(e,t,n=Xn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Yn(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 uE,Xn,Hc,tm,nm,dE,pE,Mo=O(()=>{Gn();Zf();Tn();uE=["used"];Xn=e=>e.length<=5?1:2,Hc=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(en),...uE].flatMap(e=>e.split(" "))),tm=4,nm=[...new Set([...Object.keys(de),...Object.keys(en)].flatMap(e=>e.split(" ")).filter(e=>e.length>=tm))],dE=new Set(em.words),pE=e=>dE.has(e)});function Fo(e){for(let t of gE){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var zi,fE,mE,hE,Yc,gE,om,Ui=O(()=>{Gn();Tn();zi=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),fE=Object.keys(Be).sort((e,t)=>t.length-e.length).map(Qe).join("|"),mE=Object.keys(en).sort((e,t)=>t.length-e.length).map(Qe).join("|"),hE=qs.slice().sort((e,t)=>t.length-e.length).map(Qe).join("|"),Yc=(e,t)=>e==="defines"&&Er.has(t),gE=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${zi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Yc(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+(${fE})\\s+(?:(${mE})\\s+)?(${zi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Yc(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?en[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${zi})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Yc(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+(?:${hE})\\??$`,"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=rn(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"&&fp.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+(?:${bn.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+)?(${zi})\\??$`,"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()})}];om={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 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=>bn.includes(j)),E=new Set([...Zt,...bn]),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(!Kc(E))return E;let R=t.lemma(E);return Hc.has(R)?R:E});i=Tt(S,de),i&&(r=S)}let a=null;if(!i){let S=s.map(E=>E.length>=4&&Kc(E)&&sm(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=fs[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&&fs[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,en,u);d(p);let m=(S,E)=>n.slice(S,E).filter((R,j)=>!u.has(S+j)&&!tt.has(s[S+j])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&yE.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?en[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let S=h||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=h||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)&&!bE.has(z)&&!wE.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(h&&g){let S=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Er.has(S))return null;let E=h,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){let S=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:S,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&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(h&&!g&&$&&i.end-i.start===1&&fs[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:h});let S=Ir.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...S?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var Ir,bE,wE,yE,rm,Bi=O(()=>{Gn();Tn();Mo();Ir=new Set(["is","are","was","were","be","been","being","get","gets","got"]),bE=new Set(["which","what","who","whom","whose"]),wE=new Set(Wn.map(e=>e.toLowerCase())),yE=new Set(["recently","lately","yet","already","ever","again"]);rm={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 vE(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)||im.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function xE(e,t=null){let n=Bt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!im.has(a)&&($E.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=vE(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var im,$E,am,cm=O(()=>{Gn();Tn();Ui();Bi();im=new Set([...tt,...me(Gs),...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(en)),...me(Object.keys(Xe)),...me(Vs),...me(Hs),...me(Object.keys(ms)),...me(Object.keys(jn)),...me(Object.keys(jo)),...me(Wn),...me(kr),...me(qs),...me(Zt),...me(bn),...me(Bn),...me(Object.keys(Ro))]),$E=new Set([...me(Sr),...me(Ei)]);am={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Fo(e))return null;let{text:n,dropped:s,maybeNoise:o}=xE(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 lm=O(()=>{});var Wi,Gi=O(()=>{Wi=()=>{}});function dm(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 Xc(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=>!pm(c))&&(n=n.filter(c=>!pm(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(m=>dm(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),um(f.parsed)<um(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=>dm(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function kE(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 fm(e,{describe:t=kE,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,EE,um,SE,pm,Jc=O(()=>{Do=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),EE=/^\s*(?:the|a|an)\s+/i,um=e=>[e?.subject,e?.object].filter(t=>EE.test(String(t||""))).length;SE=new Set(["fuzzy","lemma","spell"]),pm=e=>SE.has(e.via)});function qi(e){Qc=e}function Vi(){return typeof Qc=="function"?Qc():null}var Qc,zo=O(()=>{Qc=null});function gm(e,t={},n=_E){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,_E,bm=O(()=>{Tn();Ui();Bi();cm();lm();Gi();Jc();zo();jE=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],_E=[om,rm,am,...jE]});function Uo(e){return RE.test(String(e||"").trim())?"an":"a"}function Hi(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 RE,Ki=O(()=>{RE=/^[aeiou]/i});var Lr,Zc=O(()=>{Lr=(e,t,n)=>n});var ih={};Un(ih,{DYNAMIC_TAIL_OK_RE:()=>_l,applyNegationFrames:()=>Ar,ask:()=>Es,classDisplayName:()=>Jn,degreeMetric:()=>Jm,metaFallbackEntityAnswer:()=>Gm,normalizeQuery:()=>Zs,parseQuery:()=>Dr,parseQueryFull:()=>ml,render:()=>yn,rephraseHint:()=>vl,resolveObject:()=>$n,traverse:()=>Wt,worldRelationGraphPayload:()=>xk});function Ke(e,t){let n=wm.get(e);n||(n=new Map,wm.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Kn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Me(e,t){let[n,s]=rl[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 Jn(e){let t=String(e||"");if(typeof _n=="function"){let n=_n(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function eo(e){return AE[e]||e}function NE(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||LE.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return me(qs).includes(o)?t:e}function FE(e,t){if(!e||e.shape!=="where"||e.altObject||!PE.test(t))return e;let n=xi(t),s=xi(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=Bt(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=Bt(n).map(c=>c.toLowerCase());for(;a.length&&ME.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 ml(e,{nlp:t}).parsed}function ml(e,{nlp:t=void 0}={}){let n=t===void 0?Vi():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Vc(Ar(Zs(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=zE(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=Xc(gm(o,{nlp:n,raw:s}));return i?{parsed:FE(NE(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function al(e,t){return t.length&&Lm.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function qo(e,t){return Fo(e)||Cr(e,t)}function zE(e,t){let n=Bt(e),s=n.map(o=>o.toLowerCase());return iS(n,s)||cS(n,s)||GE(n,s,t)||Pm(e,t,0)||lS(n,s,t)||VE(n,s,t)||ZE(n,s,t,0)||tS(n,s)||oS(n,s,t)||uS(n,s,t)||fS(n,s,t)||hS(n,s,t,0)||pS(n,s,t,0)||gl(n,s,t,0)||KE(n,s,t)||BE(n,s)||Bm(n,s,t,0)}function BE(e,t){let n=0;UE.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=m=>m+1<t.length?mp[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){l=m,c=h;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=(m,h)=>m.role==="object"?{shape:"reverse",kind:m.kind,entityType:o,modifier:"direct",object:h}:{shape:"forward",kind:m.kind,modifier:"direct",object:h},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 Xi(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function GE(e,t,n){if(!["do","does","did"].includes(t[0])||!WE.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=Vo(`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:Xi(o,{op:"difference",kind:"set",ast:d})}}function Pm(e,t,n=0){let s=Qf(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=Bt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Xe[d]))return Xi(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 Xi(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=Vo(`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"}:Xi(r,{op:"difference",kind:"set",ast:u})}function VE(e,t,n){let s=0;for(;s<t.length&&qE.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 Mm(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 Fm(e,t){let n=Ot(t),s=n.filter(r=>!Cm.has(r)),o=Mm(e,s.length?s:n);return o.size===1?[...o][0]:null}function Vo(e,t,n){if(n>Om)return{node:"miss",reason:"too deep to resolve"};let s=Pm(e,t,n);if(s)return s;let o=Bt(e),r=o.map(c=>c.toLowerCase()),i=gl(o,r,t,n);if(i)return i;let a=Bm(o,r,t,n);if(a)return a;let l=qo(e,t);return l?{node:"clause",clause:l}:null}function gl(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Bn.includes(t[o]),i=!r&&Nm(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,il].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=Vo(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 KE(e,t,n){for(let s=0;s<t.length;s+=1){if(!HE.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),il,...e.slice(s+1)],a=qo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===il&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function ZE(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!YE.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(XE.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&&JE.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&QE.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Bn.includes(d)))return null;let l=hl.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=Vo(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),!eS.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 sS(e){let t=new Set,n=[];for(let s of e){if(!s||!nS.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function oS(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&&(Vs.includes(f)||Hs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Vs.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=rS(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=sS(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function rS(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&DE.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 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 aS(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=Ws(n).slice(e.length).trim(),o=Bt(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 cS(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&&fs[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&&!wp.has(u))return null}let r=aS(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=qo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function uS(e,t,n){let s=Vs.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)&&!Dm.has(d)),u;if(c){let d=Vo(`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 pS(e,t,n,s){let o=0,r=!1,i=null;for(let y of zm){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&&bl.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]]&&!Wn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Um}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!tt.has(y)&&!Dm.has(y)),p=t.slice(o),m=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),m=m.slice(1));let h=r&&dS.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=Vo(`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 m=0;m<t.length;m+=1){let h=t.slice(m,m+2).join(" ");if(ms[h]){s=ms[h],o=m;break}if(ms[t[m]]){s=ms[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(jn[t[m]]){r=jn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(jn[t[m]]){r=jn[t[m]],i=t[m];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(m=>l.includes(m));!r&&(a||c)&&(r=jn.connections,i="connections");let u,d=null;for(let m of t){let h=At(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?yp[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(m=>f.includes(m))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:p}}function hS(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&bl.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&&mS.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=>Bn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Wn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Um}`}:null}function gS(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&bl.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Bn.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}=Ji(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],m=al(d,f);if(m.blc.length&&m.blc.every(y=>Xe[y])){c.push({op:p,kind:"qual",filters:m.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 h=d,g=Tt(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=Wm(`${t} ${h.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 Bm(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 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&&hl.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(ym.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Lm.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(ym.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])&&!kl.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&&Bn.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&Nm(d[0]),g=f.length>0&&Ji(d,f).branches.some(R=>{let{blc:j}=al(R,R.map(A=>A.toLowerCase()));return j.length&&j.every(A=>Xe[A])}),b=f.length>0?Ji(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||m||h||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:$}=Ji(d,f),x=null,S=[];for(let R=0;R<_.length;R+=1){let j=_[R],A=j.map(ae=>ae.toLowerCase()),F=R===0?"seed":$[R-1],T=al(j,A);if(T.blc.length&&T.blc.every(ae=>Xe[ae])){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 Y=Wm(`${v} ${M.join(" ")}`,n,s+1);if(!Y||Y.node==="miss")return{node:"miss",reason:Y&&Y.reason||"a clause in the combination didn't parse"};S.push({op:F,kind:"set",ast:Y})}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 Wm(e,t,n){if(n>Om)return{node:"miss",reason:"too deep to resolve"};let s=Bt(e),o=s.map(a=>a.toLowerCase()),r=gl(s,o,t,n);if(r)return r;let i=qo(e,t);return i?{node:"clause",clause:i}:null}function Ji(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 wl(e,t,n,s){let o=Wo[t];if(o&&xs.has(n)){let u=Ke(e,o).filter(d=>s.has(d.object));return Zn(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>xs.has(e.byId.get(u)?.class))?[...Ot(t),o]:Ot(t)).flatMap(u=>Ke(e,u)).filter(u=>s.has(u.object)),l=Zn(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")?xl(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function yS(e,t){let n=new Set(wl(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=Ot(t).flatMap(o=>Ke(e,o)).filter(o=>n.has(o.subject));return Zn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Zn(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 $S(e,t){let n=Vn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Vn(o.label).startsWith(s))}function cl(e){let t=$m.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},$m.set(e,t),t}function Go(e,t){return t?t.class==="Module"?t.id:cl(e).moduleOfSymbol.get(t.id)||null:null}function Gm(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>vS.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 ll(e,t,n){let s=Zn(_o.flatMap(o=>Mr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function yl(e,t,n=null){let s=Qn(e,t,n);if(!(s.match&&s.tier===1)){let o=$S(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 qm(e,t,n,s,o){let r=o||(()=>!0),i=ll(e,t,s).filter(r);if(i.length||!Hm(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Vm(e,t)){let l=e.byId.get(a);if(!l)continue;let c=ll(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 to(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=cl(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=Go(e,t),o=cl(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Xs(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function $l(e){return Ke(e,"inherits")}function ul(e,t){return $l(e).filter(n=>n.object===t).map(n=>n.subject)}function vm(e,t){return $l(e).filter(n=>n.subject===t).map(n=>n.object)}function xS(e,t){let n=new Set,s=[...ul(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of ul(e,o))n.has(r)||s.push(r)}}return n}function Vm(e,t){let n=new Set,s=[...vm(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of vm(e,o))n.has(r)||s.push(r)}}return n}function Hm(e,t){let n=xm.get(e);if(n||(n=new Map,xm.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 Em(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 km(e){return e.slice().sort((t,n)=>Sm[n.via]-Sm[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function jm(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Xn(n);if(Yn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of no(e.label))if(Yn(o,n,s)<=s)return!0;return!1}function Km(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...no(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Hm(e,t),i=[];for(let l of s){let c=Em(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&&!!Em(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:km(i),broad:[]};let a=new Map;for(let l of s)for(let c of Vm(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&jm(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of ul(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&jm(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:km([...a.values()])}}function ES(e){return[...Li(Ni(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function cn(e,t,n){switch(t.node){case"clause":return Wt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?ES(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=Km(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Ot(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=Qn(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Fm(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(cn(e,t.inner,n).map(o=>o.id));return wl(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(cn(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=yl(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 Zn(_o.flatMap(l=>Mr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=qm(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?Qm(e,t,n).matches:cn(e,t.inner,n).filter(o=>t.filters.every(r=>to(e,o,Xe[r])));case"boolean":return Ym(e,t,n);case"anaphora":return Xm(e,t,n).matches;default:return[]}}function Ym(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=cn(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>to(e,l,Xe[c])),a=l=>o.filters.every(c=>{let u=SS(Xe[c]);return u?to(e,l,u):!to(e,l,Xe[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(cn(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 cn(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function kS(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=$n(e,o);r&&r.match&&!n.has(r.match.id)&&(n.add(r.match.id),s.push(r.match))}return s.length>=2?s:null}function Xm(e,t,n){let o=kS(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=>to(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=$n(e,i.clause.object);if(!d.match)r=[];else{let f=Wo[i.clause.kind],p=[...Ot(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>Ke(e,h)).filter(h=>h.object===d.match.id).map(h=>h.subject));r=r.filter(h=>m.has(h.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 Jm(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 _S(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 TS(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(RS.test(s))r=s;else{let{match:u,ambiguous:d}=$n(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 AS(e,t,n){let s=cn(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=wl(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 IS(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)&&!Xs(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:Jm(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 Qm(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(h=>to(e,m,Xe[h])):null,a=m=>Ur(r,m,"membership"),l=yl(e,o.term,n&&n.contextId);if(l.kind==="dir"){let m;if(!r||r==="Module")m=l.mods;else{let h=new Set(l.mods.map(g=>g.id));m=Zn(_o.flatMap(g=>Mr(e,g,h))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=qm(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 CS(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=$n(e,o,{expectedClass:"Module"});if(!a.match)return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMiss:!0,matches:[]};r=a.match}if(s){let a=$n(e,s,{expectedClass:n}),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?xl(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 OS(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||ll(e,n.id).some(o=>o.id===t.id)}function LS(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Qn(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=yl(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!OS(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=to(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 NS(e,t,n){let s=$n(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=cn(e,{node:"allOfClass",entityType:t.entityType},n),r=Ym(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 PS(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(cn(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}=Wt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function MS(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return CS(e,t);if(t.node==="qualCheck")return LS(e,t,n);if(t.node==="universal")return NS(e,t,n);if(t.node==="count"){let i=PS(e,t.base,n);return i?{compositeKind:"count",count:yS(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:cn(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:cn(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return yk(e,t);if(t.node==="superlative")return IS(e,t);if(t.node==="temporal")return AS(e,t,n);if(t.node==="recentCommits")return _S(e);if(t.node==="commitFilter")return TS(e,t);if(t.node==="anaphora")return Xm(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return Qm(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=Km(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=cn(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 Zm(){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 FS(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 dl(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(dl):Array.isArray(e.filters)&&e.filters.some(t=>Xe[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(dl)}function DS(e,t){return!["Function","Method"].includes(t)||!dl(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 zS(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})`:""}. ${Zm()}.`,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 ${$s(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=CE(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}: ${$s(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:`${$s(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=wn(t.asked),o=Bs[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)})`:""}. ${vs(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}: ${$s(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${$s(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?FS(t.matches[0]):$s(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,Ut).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>Ut?` \u2026+${t.matches.length-Ut} 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,Ut).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>Ut?` \u2026+${t.matches.length-Ut} 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:`${$s(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. ${vs(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. ${vs(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=DS(e,t.entityType)||vs(n);return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${$s(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function vl(){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). `+Zm()}function vs(e=null){return e&&zc(e)===0?"This store holds no code index, so it records no modules or commits to look through.":`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function no(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Zi(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 eh(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function US(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=[...no(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?US(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=eh($.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=Zi(o);if(j!==o&&j===Zi(S)){let A=Xn(o);if(Yn(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=no($.label),R=g.filter(j=>E.has(j)).length;R>0&&(!y||E.has(y))&&d.push({ind:$,score:R/g.length*tl})}}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>=tl?b.filter(v=>v.score>=tl):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("/"),m=null,h=!p&&typeof Ks=="function"?Ks(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(h.length){let[g,...b]=h,y=e.byId.get(g.id);if(y){let w=b.filter(v=>v.score===g.score);if(m={match:y,candidates:b.slice(0,4).map(v=>e.byId.get(v.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&g.via!=="spell")return m}}if(!i&&o.length>=4){let g=Xn(o),b=g+1,y=[];for(let w of r){let v=Yn(String(w.label||"").toLowerCase(),o,g);if(v>0)for(let _ of no(w.label)){if(v<=0)break;v=Math.min(v,Yn(_,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&&!m){let[w,...v]=y;return{match:w,candidates:v.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function nl(e,t){let n=eh(t),s=[...no(t)],o=[];for(let r of no(e))n.includes(r)||s.some(i=>Zi(i)===Zi(r))||Qi.has(r)||sh.has(r)||o.push(r);return o}function Yi(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(nl(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),nl(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:wn(s.slice(0,4).map(r=>r.label))}:e}let n=nl(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function $n(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(BS,"").trim(),i=r.match(WS);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=Yi(Nr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Yi(Nr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Yi(Nr(e,t,n),t)}return Yi(Nr(e,t,n),t)}function Qn(e,t,n){if(Gs.includes(String(t||"").trim().toLowerCase())){if(!n)return{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0};let s=e.byId.get(n);return s?{match:s,candidates:[],tier:1,ambiguous:!1}:{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0}}return $n(e,t)}function xl(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 GS(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||xs.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&&xs.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 KS(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&El.has(_m(s.label))).map(s=>({ind:s,named:n.has(_m(s.label))?1:0,depth:String(s.label).split("/").length,fixture:HS(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 YS(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function Sl(e){return(e?.attributes||[]).find(t=>t.prop===XS)?.value||null}function JS(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 Wt(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 MS(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(M=>{let z=Wt(e,M,{contextId:n,prev:s});return{parsed:M,result:z,rendered:yn(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(Y=>{if(!Sl(Y))return!1;if(String(Y.label).toLowerCase()===M)return!0;let ae=(Y.attributes||[]).find(Z=>Z.key==="token")?.value;return ae&&String(ae).toLowerCase()===M});if(!z){let Y=Gm(e,T);return Y?{matches:[Y.hit],objMatch:Y.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:Y.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 Ks=="function"?Ks(e.proseIndex,T):[]).map(Y=>e.byId.get(Y.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${T}"`}}if(r==="where"&&qS.test(String(t.object||"").trim())){let T=KS(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 (${[...El].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!YS(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=Qn(e,t.subject,n),M=Qn(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,Y]=[T.match,M.match];i==="touches"&&Y.class==="Commit"&&z.class!=="Commit"&&([z,Y]=[Y,z]);let ae=Wo[i],Z=[...new Set(ae?[...Ot(i),ae]:Ot(i))],D=Z.flatMap(U=>Ke(e,U)).filter(U=>U.subject===z.id&&U.object===Y.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 ${Y.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=Qn(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=Qn(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=Y=>Y.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),M=T(String(t.object||"").trim().toLowerCase()),z=(e.individuals||[]).find(Y=>{if(Y.class!=="Module"||Y.id===l.match.id)return!1;let ae=String(Y.label||"").toLowerCase().split("/").pop();return ae!==T(ae)&&T(ae)===M});z&&(l={...l,ambiguous:!0,candidates:[z,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:m,nearestLabel:h}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:m,nearestLabel:h};if(d){let M=Zn([c,...u||[]]).slice(0,He).map(z=>{let Y=Wt(e,t,{contextId:n,prev:s,pinnedObjMatch:z});return{candidate:z,result:Y,rendered:yn(t,Y,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=Y=>String((Y.attributes||[]).find(ae=>ae.key==="date")?.value||""),M;if(c.class==="Commit")M=[c];else{let Y=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),ae=new Set;M=[];for(let Z of Y){if(ae.has(Z.subject))continue;ae.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,Y=[];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"&&Y.push(D)}Y.sort((Z,D)=>T(D).localeCompare(T(Z)));let ae=Y.length&&T(Y[0])?[{kind:"event",class:"Commit",label:Y[0].label,ids:[Y[0].id],attrs:{date:T(Y[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:Y,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:ae,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return GS(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=Wo[i],z=!!(T&&c.class&&xs.has(c.class))?[...new Set([...Ot(i),T])]:Ot(i);if(a&&a!=="Change"){let G=Mm(e,z),I=el[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 ${Jn(a)})`}}let ae=z.flatMap(G=>Ke(e,G)).filter(G=>G.subject===c.id).map(G=>e.byId.get(G.object)).filter(Boolean),Z=Zn(ae),D=Z,U="";if(a&&a!=="Change"){D=Z.filter(I=>I.class===a);let G=el[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:Rm}).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=${Rm})`};let g=Wo[i]||Ot(i).find(T=>Cm.has(T))||null,b=!!(c.class&&xs.has(c.class));if(g&&(xs.has(a)||b)){let T=Ke(e,g).filter(U=>U.object===c.id),M=Zn(T.map(U=>e.byId.get(U.subject)).filter(Boolean)),z=!a||a==="Change"?M:M.filter(U=>U.class===a),Y="",ae=el[a];if(!z.length&&ae){let U=M.filter(G=>G.class===ae);U.length&&(z=U,Y=`, widened to ${ae} 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}${Y}`,ambiguous:d,matchedVia:p}}let y=c,w=u,v=d,_=p,$="",x=Fm(e,i);if(x&&y.class&&y.class!==x){let T=$n(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 ${Jn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Jn(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 ${Jn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Jn(x)})`}}let S=Ot(i).flatMap(T=>Ke(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(S=S.concat(Ot(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=Ot(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=xl(e,M,a),F=`, then ${Jn(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Ot(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 sl(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function QS(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function wn(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 pl(e){return vr[e]?.bare||e}function ZS(e){let t=pl(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function ek(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 ${pl(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 ${pl(o.kind)} ${JSON.stringify(String(r))}`}function th(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=>th(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?ek(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 ":""}${eo(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 ${eo(e.kind)}`:`${r}${eo(e.kind)} "${e.object}"`}return{english:o,machine:s}}function yn(e,t,n=null){let s=nh(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function nh(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${vl()}`,miss:!0,ambiguous:!1};if(e.node)return zS(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
53
+ `)}`+(o.length>Uc?`
54
+ \u2026+${o.length-Uc} more`:"")}var Xp,uf,Zp,kv,_v,Fc,Rv,Li,Tv,Av,Iv,ff,Cv,Ov,Lv,Nv,Pv,Mv,Fv,Dv,zv,Uv,Bv,Wv,Gv,qv,Vv,Hv,Kv,Yv,Xv,Jv,Qv,Zv,ex,tx,nx,ef,sx,ox,mf,hf,gf,rx,ix,ax,cx,lx,nf,sf,px,of,Ci,rf,af,cf,Tr,Pe,mx,hx,kf,gx,Wt,Tf,bx,Df,yx,$x,vx,xx,Ex,Sx,kx,jx,Dc,lf,Mi,_x,zc,Uc,Oe=O(()=>{ws();Hn();Oc();Rr();Js();Xp={"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"};uf=e=>/^(git|turn):/.test(String(e||""));Zp=30,kv=8;_v=2,Fc=25,Rv=3;Li=10,Tv=8,Av=3,Iv=2,ff=5,Cv=4,Ov=.2,Lv=.35,Nv=.15,Pv=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),Mv=.2,Fv=.35,Dv=.2,zv=.35,Uv=e=>/\.cs$/i.test(e),Bv=e=>/^I[A-Z]/.test(String(e||"")),Wv=.2,Gv=.35,qv=50,Vv=.2,Hv=.35,Kv=.5,Yv=ff,Xv=3,Jv=4,Qv=1,Zv=.9,ex=.5,tx=.2,nx=.35,ef=4,sx=2,ox=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],mf=3,hf=12,gf=.9,rx=["imports","calls","callsSymbol","inherits"],ix=.5,ax=.6,cx=.2,lx=.35;nf=128,sf=4,px=64,of=250,Ci=class extends Error{};rf=new WeakMap;af=40,cf=40,Tr=30;Pe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";mx=25,hx=15;kf=40,gx="tests edges are recorded module to module, so this is module-grain coverage.";Wt=15;Tf=new Set(["Function","Method"]);bx=8;Df={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};yx=8,$x=16,vx=4,xx=6,Ex=12,Sx=2,kx=8,jx=3,Dc=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),lf=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Mi=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},_x=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};zc=20;Uc=40});function Qe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Qf(e){let t=String(e||"");return Vf&&(t=t.replace(Vf," ")),t.replace(/\s+/g," ").trim()}function Zf(e){let t=String(e||"");t=t.replace(Kx," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(qx);if(o&&(t=o[1].trim()),o=t.match(Vx),o&&(t=o[1].trim()),o=t.match(Hf),o&&(t=o[1].trim()),o=t.match(Kf),o&&(t=o[1].trim()),o=t.match(Yf),o&&(t=o[1].trim()),o=t.match(Hx),o&&(t=o[1].trim()),o=t.match(Xf),o&&(t=o[1].trim()),o=t.match(Yx),o&&(t=o[1].trim()),o=t.match(Xx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Jx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Qx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Zx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(eE),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(tE),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(nE),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(sE),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(oE),o){let r=o[1].trim();Gx(r)||(t=!rE.test(r)&&(Ux.test(r)||$s.test(r))?r:`describe ${r}`)}if(o=t.match(iE),o){let r=o[1].trim();($s.test(r)||aE.test(r)||Xf.test(r)||Hf.test(r)||Yf.test(r)||Kf.test(r)||cE.test(r))&&(t=r)}if(t===s)break}return t}function dE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(lE);if(o&&(t=o[1].trim()),o=t.match(uE),o&&(t=o[1].trim()),t===s)break}return t}function fE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(pE);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function gE(e){let t=String(e||""),n=t.match(hE);if(n){let o=tm[n[1].toLowerCase()],r=em[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(nm);return s?`which modules transitively import ${s[1].trim()}`:t}function Di(e){return String(e||"").replace(Ox,t=>Sc[t.toLowerCase()])}function Zs(e){let t=Di(e);return t=t.replace(Lx,n=>kc[n.toLowerCase()]),t=t.replace(Nx,n=>jc[n.toLowerCase()]),t=t.replace(Px,"with"),t=t.replace(Mx,(n,s)=>`${s} for`),t=t.replace(Fx,(n,s)=>`for ${s}`),t=t.replace(Dx,(n,s)=>s),t=t.replace(bE,"$1$2"),t=t.replace($p,"$1ing"),t=Zf(t),t=fE(t),t=dE(t),t=gE(t),t=Qf(t),t=an(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ar(e){for(let t of[...xp,...vp]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Kc(e){for(let t of wE){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function sm(e){let t=String(e||"").match(yE);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var Cx,Ox,Jf,Lx,Nx,Px,Mx,Fx,Dx,zx,Vf,Ux,$s,Bx,Wx,Gx,qx,Vx,Hf,Kf,Yf,Hx,Kx,Yx,Xx,Jx,Qx,Zx,eE,tE,nE,sE,oE,rE,iE,aE,cE,Xf,lE,uE,pE,em,tm,mE,hE,nm,bE,wE,yE,tt,Gt,me,yn=O(()=>{qn();Cx=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b","gi"),Ox=Cx(Sc),Jf=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Lx=Jf(kc),Nx=Jf(jc),Px=/(?<=^|\s)w\/(?=\s|$)/gi,Mx=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,Fx=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,Dx=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,zx=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),Vf=Sr.length?new RegExp("\\b("+[...Sr].sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b\\s*,?","gi"):null;Ux=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b","i"),$s=/^(?:which|what|who|whose|where|when|why|how)\b/i,Bx=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),Wx=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,Gx=e=>{if(Wx.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return Bx.has((t[t.length-1]||"").toLowerCase())},qx=/^(?: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,Vx=/^(?: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,Hf=/^(?:(?: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,Kf=/^(?: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,Yf=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,Hx=/^(?:please[\s,]+)+(.+)$/i,Kx=/,?\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,Yx=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,Xx=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,Jx=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,Qx=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,Zx=/^do\s+you\s+know\s+(.+?)\??$/i,eE=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,tE=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,nE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,sE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,oE=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,rE=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,iE=/^(?:and|also|so|then|now|but)\s+(.+)$/i,aE=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,cE=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,Xf=/^(?:(?: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;lE=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,uE=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;pE=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;em=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),tm=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),mE="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",hE=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(tm).join("|")+")\\s+("+Object.keys(em).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+mE+")\\??$","i"),nm=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;bE=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${xc.map(Qe).join("|")})(\\s*[?.!]*)$`,"i");wE=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+(?:${Ec.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+(${zx})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);yE=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"]),Gt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),me=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var rm,om=O(()=>{rm={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 Qn(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 Xc(e){return/^[a-z]+$/.test(e)&&!tt.has(e)&&!Yc.has(e)}function cm(e){return EE(e)?null:zi(e,am,Zn(e))}function zi(e,t,n=Zn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Qn(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 vE,Zn,Yc,im,am,xE,EE,Mo=O(()=>{qn();om();yn();vE=["used"];Zn=e=>e.length<=5?1:2,Yc=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(en),...vE].flatMap(e=>e.split(" "))),im=4,am=[...new Set([...Object.keys(de),...Object.keys(en)].flatMap(e=>e.split(" ")).filter(e=>e.length>=im))],xE=new Set(rm.words),EE=e=>xE.has(e)});function Fo(e){for(let t of _E){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Ui,SE,kE,jE,Jc,_E,lm,Bi=O(()=>{qn();yn();Ui=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),SE=Object.keys(Be).sort((e,t)=>t.length-e.length).map(Qe).join("|"),kE=Object.keys(en).sort((e,t)=>t.length-e.length).map(Qe).join("|"),jE=qs.slice().sort((e,t)=>t.length-e.length).map(Qe).join("|"),Jc=(e,t)=>e==="defines"&&Er.has(t),_E=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Ui})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Jc(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+(${SE})\\s+(?:(${kE})\\s+)?(${Ui})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Jc(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?en[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Ui})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Jc(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+(?:${jE})\\??$`,"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=an(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"&&wp.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+(?:${wn.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+)?(${Ui})\\??$`,"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()})}];lm={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 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=>wn.includes(j)),E=new Set([...Zt,...wn]),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(!Xc(E))return E;let R=t.lemma(E);return Yc.has(R)?R:E});i=Tt(S,de),i&&(r=S)}let a=null;if(!i){let S=s.map(E=>E.length>=4&&Xc(E)&&cm(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=gs[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&&gs[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,en,u);d(p);let m=(S,E)=>n.slice(S,E).filter((R,j)=>!u.has(S+j)&&!tt.has(s[S+j])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&AE.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?en[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let S=h||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=h||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)&&!RE.has(z)&&!TE.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(h&&g){let S=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Er.has(S))return null;let E=h,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){let S=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:S,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&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(h&&!g&&$&&i.end-i.start===1&&gs[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:h});let S=Ir.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...S?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var Ir,RE,TE,AE,um,Wi=O(()=>{qn();yn();Mo();Ir=new Set(["is","are","was","were","be","been","being","get","gets","got"]),RE=new Set(["which","what","who","whom","whose"]),TE=new Set(Gn.map(e=>e.toLowerCase())),AE=new Set(["recently","lately","yet","already","ever","again"]);um={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 CE(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)||dm.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function OE(e,t=null){let n=Gt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!dm.has(a)&&(IE.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=CE(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var dm,IE,pm,fm=O(()=>{qn();yn();Bi();Wi();dm=new Set([...tt,...me(Gs),...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(en)),...me(Object.keys(Xe)),...me(Vs),...me(Hs),...me(Object.keys(bs)),...me(Object.keys(_n)),...me(Object.keys(jo)),...me(Gn),...me(kr),...me(qs),...me(Zt),...me(wn),...me(Wn),...me(Object.keys(Ro))]),IE=new Set([...me(Sr),...me(Si)]);pm={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Fo(e))return null;let{text:n,dropped:s,maybeNoise:o}=OE(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 mm=O(()=>{});var Gi,qi=O(()=>{Gi=()=>{}});function gm(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 Qc(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=>!bm(c))&&(n=n.filter(c=>!bm(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(m=>gm(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),hm(f.parsed)<hm(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=>gm(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function PE(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 wm(e,{describe:t=PE,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,LE,hm,NE,bm,Zc=O(()=>{Do=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),LE=/^\s*(?:the|a|an)\s+/i,hm=e=>[e?.subject,e?.object].filter(t=>LE.test(String(t||""))).length;NE=new Set(["fuzzy","lemma","spell"]),bm=e=>NE.has(e.via)});function Vi(e){el=e}function Hi(){return typeof el=="function"?el():null}var el,zo=O(()=>{el=null});function vm(e,t={},n=FE){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 ME,FE,xm=O(()=>{yn();Bi();Wi();fm();mm();qi();Zc();zo();ME=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],FE=[lm,um,pm,...ME]});function Uo(e){return DE.test(String(e||"").trim())?"an":"a"}function Ki(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 DE,Yi=O(()=>{DE=/^[aeiou]/i});var Lr,tl=O(()=>{Lr=(e,t,n)=>n});var dh={};Bn(dh,{DYNAMIC_TAIL_OK_RE:()=>Tl,applyNegationFrames:()=>Ar,ask:()=>Ss,classDisplayName:()=>es,degreeMetric:()=>nh,metaFallbackEntityAnswer:()=>Ym,normalizeQuery:()=>Zs,parseQuery:()=>Dr,parseQueryFull:()=>gl,render:()=>vn,rephraseHint:()=>El,resolveObject:()=>xn,traverse:()=>qt,worldRelationGraphPayload:()=>Ok});function Ke(e,t){let n=Em.get(e);n||(n=new Map,Em.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Jn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Me(e,t){let[n,s]=al[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 es(e){let t=String(e||"");if(typeof Rn=="function"){let n=Rn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function eo(e){return UE[e]||e}function VE(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||qE.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return me(qs).includes(o)?t:e}function YE(e,t){if(!e||e.shape!=="where"||e.altObject||!HE.test(t))return e;let n=Ei(t),s=Ei(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=Gt(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=Gt(n).map(c=>c.toLowerCase());for(;a.length&&KE.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 gl(e,{nlp:t}).parsed}function gl(e,{nlp:t=void 0}={}){let n=t===void 0?Hi():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Kc(Ar(Zs(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=JE(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=Qc(vm(o,{nlp:n,raw:s}));return i?{parsed:YE(VE(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function ll(e,t){return t.length&&Dm.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function qo(e,t){return Fo(e)||Cr(e,t)}function JE(e,t){let n=Gt(e),s=n.map(o=>o.toLowerCase());return bS(n,s)||yS(n,s)||tS(n,s,t)||Um(e,t,0)||$S(n,s,t)||sS(n,s,t)||uS(n,s,t,0)||pS(n,s)||hS(n,s,t)||vS(n,s,t)||SS(n,s,t)||jS(n,s,t,0)||ES(n,s,t,0)||wl(n,s,t,0)||rS(n,s,t)||ZE(n,s)||Hm(n,s,t,0)}function ZE(e,t){let n=0;QE.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=m=>m+1<t.length?yp[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){l=m,c=h;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=(m,h)=>m.role==="object"?{shape:"reverse",kind:m.kind,entityType:o,modifier:"direct",object:h}:{shape:"forward",kind:m.kind,modifier:"direct",object:h},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 Ji(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function tS(e,t,n){if(!["do","does","did"].includes(t[0])||!eS.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=Vo(`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:Ji(o,{op:"difference",kind:"set",ast:d})}}function Um(e,t,n=0){let s=sm(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=Gt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Xe[d]))return Ji(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 Ji(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=Vo(`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"}:Ji(r,{op:"difference",kind:"set",ast:u})}function sS(e,t,n){let s=0;for(;s<t.length&&nS.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 Bm(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 Wm(e,t){let n=Ot(t),s=n.filter(r=>!Mm.has(r)),o=Bm(e,s.length?s:n);return o.size===1?[...o][0]:null}function Vo(e,t,n){if(n>Fm)return{node:"miss",reason:"too deep to resolve"};let s=Um(e,t,n);if(s)return s;let o=Gt(e),r=o.map(c=>c.toLowerCase()),i=wl(o,r,t,n);if(i)return i;let a=Hm(o,r,t,n);if(a)return a;let l=qo(e,t);return l?{node:"clause",clause:l}:null}function wl(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Wn.includes(t[o]),i=!r&&zm(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,cl].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=Vo(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 rS(e,t,n){for(let s=0;s<t.length;s+=1){if(!oS.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),cl,...e.slice(s+1)],a=qo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===cl&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function uS(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!iS.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(aS.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&&cS.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&lS.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Wn.includes(d)))return null;let l=bl.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=Vo(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 pS(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!dS.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 mS(e){let t=new Set,n=[];for(let s of e){if(!s||!fS.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function hS(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&&(Vs.includes(f)||Hs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Vs.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=gS(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=mS(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function gS(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&XE.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 bS(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 wS(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=Ws(n).slice(e.length).trim(),o=Gt(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 yS(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&&gs[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&&!Ep.has(u))return null}let r=wS(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 $S(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 vS(e,t,n){let s=Vs.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)&&!Gm.has(d)),u;if(c){let d=Vo(`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 ES(e,t,n,s){let o=0,r=!1,i=null;for(let y of qm){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&&yl.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]]&&!Gn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Vm}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!tt.has(y)&&!Gm.has(y)),p=t.slice(o),m=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),m=m.slice(1));let h=r&&xS.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=Vo(`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 SS(e,t,n){let s=null,o=-1;for(let m=0;m<t.length;m+=1){let h=t.slice(m,m+2).join(" ");if(bs[h]){s=bs[h],o=m;break}if(bs[t[m]]){s=bs[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(_n[t[m]]){r=_n[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(_n[t[m]]){r=_n[t[m]],i=t[m];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(m=>l.includes(m));!r&&(a||c)&&(r=_n.connections,i="connections");let u,d=null;for(let m of t){let h=At(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?Sp[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(m=>f.includes(m))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:p}}function jS(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&yl.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&&kS.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=>Wn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Gn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Vm}`}:null}function _S(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&yl.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Wn.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 RS(e,t,n,s,o,r){let{branches:i,ops:a}=Qi(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],m=ll(d,f);if(m.blc.length&&m.blc.every(y=>Xe[y])){c.push({op:p,kind:"qual",filters:m.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 h=d,g=Tt(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=Km(`${t} ${h.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 Hm(e,t,n,s){let o=_S(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=RS(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&&bl.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(Sm.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Dm.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(Sm.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])&&!_l.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&&Wn.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&zm(d[0]),g=f.length>0&&Qi(d,f).branches.some(R=>{let{blc:j}=ll(R,R.map(A=>A.toLowerCase()));return j.length&&j.every(A=>Xe[A])}),b=f.length>0?Qi(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||m||h||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:$}=Qi(d,f),x=null,S=[];for(let R=0;R<_.length;R+=1){let j=_[R],A=j.map(ae=>ae.toLowerCase()),F=R===0?"seed":$[R-1],T=ll(j,A);if(T.blc.length&&T.blc.every(ae=>Xe[ae])){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 Y=Km(`${v} ${M.join(" ")}`,n,s+1);if(!Y||Y.node==="miss")return{node:"miss",reason:Y&&Y.reason||"a clause in the combination didn't parse"};S.push({op:F,kind:"set",ast:Y})}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 Km(e,t,n){if(n>Fm)return{node:"miss",reason:"too deep to resolve"};let s=Gt(e),o=s.map(a=>a.toLowerCase()),r=wl(s,o,t,n);if(r)return r;let i=qo(e,t);return i?{node:"clause",clause:i}:null}function Qi(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 $l(e,t,n,s){let o=Wo[t];if(o&&Es.has(n)){let u=Ke(e,o).filter(d=>s.has(d.object));return ns(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>Es.has(e.byId.get(u)?.class))?[...Ot(t),o]:Ot(t)).flatMap(u=>Ke(e,u)).filter(u=>s.has(u.object)),l=ns(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")?Sl(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function AS(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=TS.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function Mr(e,t,n){let s=Ot(t).flatMap(o=>Ke(e,o)).filter(o=>n.has(o.subject));return ns(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function ns(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 IS(e,t){let n=Yn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Yn(o.label).startsWith(s))}function ul(e){let t=km.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},km.set(e,t),t}function Go(e,t){return t?t.class==="Module"?t.id:ul(e).moduleOfSymbol.get(t.id)||null:null}function Ym(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>CS.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 dl(e,t,n){let s=ns(_o.flatMap(o=>Mr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function vl(e,t,n=null){let s=ts(e,t,n);if(!(s.match&&s.tier===1)){let o=IS(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 Xm(e,t,n,s,o){let r=o||(()=>!0),i=dl(e,t,s).filter(r);if(i.length||!Qm(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Jm(e,t)){let l=e.byId.get(a);if(!l)continue;let c=dl(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 to(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=ul(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=Go(e,t),o=ul(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Xs(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function xl(e){return Ke(e,"inherits")}function pl(e,t){return xl(e).filter(n=>n.object===t).map(n=>n.subject)}function jm(e,t){return xl(e).filter(n=>n.subject===t).map(n=>n.object)}function OS(e,t){let n=new Set,s=[...pl(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of pl(e,o))n.has(r)||s.push(r)}}return n}function Jm(e,t){let n=new Set,s=[...jm(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of jm(e,o))n.has(r)||s.push(r)}}return n}function Qm(e,t){let n=_m.get(e);if(n||(n=new Map,_m.set(e,n)),n.has(t))return n.get(t);let s=xl(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 Rm(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 Am(e){return e.slice().sort((t,n)=>Tm[n.via]-Tm[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Im(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Zn(n);if(Qn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of no(e.label))if(Qn(o,n,s)<=s)return!0;return!1}function Zm(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...no(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Qm(e,t),i=[];for(let l of s){let c=Rm(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...OS(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Rm(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:Am(i),broad:[]};let a=new Map;for(let l of s)for(let c of Jm(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&Im(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of pl(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Im(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Am([...a.values()])}}function LS(e){return[...Ni(Pi(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function ln(e,t,n){switch(t.node){case"clause":return qt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?LS(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=Zm(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Ot(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=ts(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Wm(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(ln(e,t.inner,n).map(o=>o.id));return $l(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(ln(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=vl(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 ns(_o.flatMap(l=>Mr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=Xm(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?sh(e,t,n).matches:ln(e,t.inner,n).filter(o=>t.filters.every(r=>to(e,o,Xe[r])));case"boolean":return eh(e,t,n);case"anaphora":return th(e,t,n).matches;default:return[]}}function eh(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=ln(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>to(e,l,Xe[c])),a=l=>o.filters.every(c=>{let u=NS(Xe[c]);return u?to(e,l,u):!to(e,l,Xe[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(ln(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 ln(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function PS(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=xn(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 th(e,t,n){let o=PS(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=>to(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=xn(e,i.clause.object);if(!d.match)r=[];else{let f=Wo[i.clause.kind],p=[...Ot(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>Ke(e,h)).filter(h=>h.object===d.match.id).map(h=>h.subject));r=r.filter(h=>m.has(h.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 nh(e,t,n){let s=n.kind==="*"?MS:[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 FS(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 zS(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(DS.test(s))r=s;else{let{match:u,ambiguous:d}=xn(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 US(e,t,n){let s=ln(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 BS(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)&&!Xs(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:nh(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 sh(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(h=>to(e,m,Xe[h])):null,a=m=>Ur(r,m,"membership"),l=vl(e,o.term,n&&n.contextId);if(l.kind==="dir"){let m;if(!r||r==="Module")m=l.mods;else{let h=new Set(l.mods.map(g=>g.id));m=ns(_o.flatMap(g=>Mr(e,g,h))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=Xm(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 WS(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=xn(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=xn(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?Sl(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 GS(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||dl(e,n.id).some(o=>o.id===t.id)}function qS(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=ts(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=vl(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!GS(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=to(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 VS(e,t,n){let s=xn(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=ln(e,{node:"allOfClass",entityType:t.entityType},n),r=eh(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 HS(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(ln(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}=qt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function KS(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return WS(e,t);if(t.node==="qualCheck")return qS(e,t,n);if(t.node==="universal")return VS(e,t,n);if(t.node==="count"){let i=HS(e,t.base,n);return i?{compositeKind:"count",count:AS(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:ln(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:ln(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return Ak(e,t);if(t.node==="superlative")return BS(e,t);if(t.node==="temporal")return US(e,t,n);if(t.node==="recentCommits")return FS(e);if(t.node==="commitFilter")return zS(e,t);if(t.node==="anaphora")return th(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return sh(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=Zm(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=ln(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 oh(){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 YS(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 fl(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(fl):Array.isArray(e.filters)&&e.filters.some(t=>Xe[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(fl)}function XS(e,t){return!["Function","Method"].includes(t)||!fl(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 JS(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})`:""}. ${oh()}.`,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 ${vs(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=WE(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}: ${vs(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:`${vs(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=$n(t.asked),o=Bs[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)})`:""}. ${xs(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}: ${vs(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${vs(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?YS(t.matches[0]):vs(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,Wt).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>Wt?` \u2026+${t.matches.length-Wt} 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,Wt).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>Wt?` \u2026+${t.matches.length-Wt} 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:`${vs(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. ${xs(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. ${xs(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=XS(e,t.entityType)||xs(n);return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${vs(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function El(){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). `+oh()}function xs(e=null){return e&&Bc(e)===0?"This store holds no code index, so it records no modules or commits to look through.":`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function no(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function ea(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 rh(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function QS(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=[...no(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?QS(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=rh($.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=ea(o);if(j!==o&&j===ea(S)){let A=Zn(o);if(Qn(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=no($.label),R=g.filter(j=>E.has(j)).length;R>0&&(!y||E.has(y))&&d.push({ind:$,score:R/g.length*sl})}}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>=sl?b.filter(v=>v.score>=sl):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("/"),m=null,h=!p&&typeof Ks=="function"?Ks(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(h.length){let[g,...b]=h,y=e.byId.get(g.id);if(y){let w=b.filter(v=>v.score===g.score);if(m={match:y,candidates:b.slice(0,4).map(v=>e.byId.get(v.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&g.via!=="spell")return m}}if(!i&&o.length>=4){let g=Zn(o),b=g+1,y=[];for(let w of r){let v=Qn(String(w.label||"").toLowerCase(),o,g);if(v>0)for(let _ of no(w.label)){if(v<=0)break;v=Math.min(v,Qn(_,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&&!m){let[w,...v]=y;return{match:w,candidates:v.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function ol(e,t){let n=rh(t),s=[...no(t)],o=[];for(let r of no(e))n.includes(r)||s.some(i=>ea(i)===ea(r))||Zi.has(r)||ch.has(r)||o.push(r);return o}function Xi(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(ol(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),ol(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:$n(s.slice(0,4).map(r=>r.label))}:e}let n=ol(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function xn(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(ZS,"").trim(),i=r.match(ek);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=Xi(Nr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Xi(Nr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Xi(Nr(e,t,n),t)}return Xi(Nr(e,t,n),t)}function ts(e,t,n){if(Gs.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 xn(e,t)}function Sl(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 tk(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||Es.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&&Es.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 rk(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&kl.has(Cm(s.label))).map(s=>({ind:s,named:n.has(Cm(s.label))?1:0,depth:String(s.label).split("/").length,fixture:ok(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 ik(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function jl(e){return(e?.attributes||[]).find(t=>t.prop===ak)?.value||null}function ck(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 qt(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 KS(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(M=>{let z=qt(e,M,{contextId:n,prev:s});return{parsed:M,result:z,rendered:vn(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(Y=>{if(!jl(Y))return!1;if(String(Y.label).toLowerCase()===M)return!0;let ae=(Y.attributes||[]).find(Z=>Z.key==="token")?.value;return ae&&String(ae).toLowerCase()===M});if(!z){let Y=Ym(e,T);return Y?{matches:[Y.hit],objMatch:Y.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:Y.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 Ks=="function"?Ks(e.proseIndex,T):[]).map(Y=>e.byId.get(Y.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${T}"`}}if(r==="where"&&nk.test(String(t.object||"").trim())){let T=rk(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 (${[...kl].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!ik(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=ts(e,t.subject,n),M=ts(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,Y]=[T.match,M.match];i==="touches"&&Y.class==="Commit"&&z.class!=="Commit"&&([z,Y]=[Y,z]);let ae=Wo[i],Z=[...new Set(ae?[...Ot(i),ae]:Ot(i))],D=Z.flatMap(U=>Ke(e,U)).filter(U=>U.subject===z.id&&U.object===Y.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 ${Y.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=ts(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=ts(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=Y=>Y.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),M=T(String(t.object||"").trim().toLowerCase()),z=(e.individuals||[]).find(Y=>{if(Y.class!=="Module"||Y.id===l.match.id)return!1;let ae=String(Y.label||"").toLowerCase().split("/").pop();return ae!==T(ae)&&T(ae)===M});z&&(l={...l,ambiguous:!0,candidates:[z,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:m,nearestLabel:h}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:m,nearestLabel:h};if(d){let M=ns([c,...u||[]]).slice(0,He).map(z=>{let Y=qt(e,t,{contextId:n,prev:s,pinnedObjMatch:z});return{candidate:z,result:Y,rendered:vn(t,Y,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=Y=>String((Y.attributes||[]).find(ae=>ae.key==="date")?.value||""),M;if(c.class==="Commit")M=[c];else{let Y=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),ae=new Set;M=[];for(let Z of Y){if(ae.has(Z.subject))continue;ae.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,Y=[];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"&&Y.push(D)}Y.sort((Z,D)=>T(D).localeCompare(T(Z)));let ae=Y.length&&T(Y[0])?[{kind:"event",class:"Commit",label:Y[0].label,ids:[Y[0].id],attrs:{date:T(Y[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:Y,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:ae,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return tk(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=Wo[i],z=!!(T&&c.class&&Es.has(c.class))?[...new Set([...Ot(i),T])]:Ot(i);if(a&&a!=="Change"){let G=Bm(e,z),I=nl[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 ${es(a)})`}}let ae=z.flatMap(G=>Ke(e,G)).filter(G=>G.subject===c.id).map(G=>e.byId.get(G.object)).filter(Boolean),Z=ns(ae),D=Z,U="";if(a&&a!=="Change"){D=Z.filter(I=>I.class===a);let G=nl[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:Om}).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=${Om})`};let g=Wo[i]||Ot(i).find(T=>Mm.has(T))||null,b=!!(c.class&&Es.has(c.class));if(g&&(Es.has(a)||b)){let T=Ke(e,g).filter(U=>U.object===c.id),M=ns(T.map(U=>e.byId.get(U.subject)).filter(Boolean)),z=!a||a==="Change"?M:M.filter(U=>U.class===a),Y="",ae=nl[a];if(!z.length&&ae){let U=M.filter(G=>G.class===ae);U.length&&(z=U,Y=`, widened to ${ae} 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}${Y}`,ambiguous:d,matchedVia:p}}let y=c,w=u,v=d,_=p,$="",x=Wm(e,i);if(x&&y.class&&y.class!==x){let T=xn(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 ${es(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${es(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 ${es(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${es(x)})`}}let S=Ot(i).flatMap(T=>Ke(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(S=S.concat(Ot(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=Ot(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=Sl(e,M,a),F=`, then ${es(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Ot(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 rl(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function lk(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function $n(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 ml(e){return vr[e]?.bare||e}function uk(e){let t=ml(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function dk(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 ${ml(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 ${ml(o.kind)} ${JSON.stringify(String(r))}`}function ih(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=>ih(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?dk(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 ":""}${eo(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 ${eo(e.kind)}`:`${r}${eo(e.kind)} "${e.object}"`}return{english:o,machine:s}}function vn(e,t,n=null){let s=ah(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function ah(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${El()}`,miss:!0,ambiguous:!1};if(e.node)return JS(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
55
55
  ${t.branches.map((l,c)=>`${c+1}) as ${Pr(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 "${eo(e.kind)}" relation in this index never produces ${Me(e.entityType,2)} \u2014 only ${wn(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=Sl(t.objMatch)||"";return{content:`${t.objMatch.label} is ${JS(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 ${wn(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 ${wn([...El])}.`,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: ${wn(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&&rl[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=wn(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. ${vs(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(_n(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=_n(String(x.label)).filter(R=>y.has(R)).length;if(!S||S<_)continue;let E=Yn(String(x.label).toLowerCase(),b,8);(S>_||E<$)&&(v=x,_=S,$=E)}if(v&&(i=[...i,v],a)){let x=Wt(n,e,{pinnedObjMatch:v});a=[...a,{candidate:v,result:x,rendered:yn(e,x,n)}]}}let l=i.length&&i.every(b=>b.class===i[0].class)?i[0].class:null,c=l?rl[l]?Me(l,1):Jn(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 ${wn(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,p=String(e.object||""),m=p?new RegExp(`\\b${Qe(p)}\\b`,"gi"):null,h=b=>{let y=String(b.candidate.label||"");return!m||!y?b.rendered.content:b.rendered.content.split(y).map(w=>w.replace(m,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(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 "${eo(e.kind)}" relation in this index never produces ${Me(e.entityType,2)} \u2014 only ${$n(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=jl(t.objMatch)||"";return{content:`${t.objMatch.label} is ${ck(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 ${$n(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 ${$n([...kl])}.`,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: ${$n(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&&al[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=$n(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. ${xs(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(Rn(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=Rn(String(x.label)).filter(R=>y.has(R)).length;if(!S||S<_)continue;let E=Qn(String(x.label).toLowerCase(),b,8);(S>_||E<$)&&(v=x,_=S,$=E)}if(v&&(i=[...i,v],a)){let x=qt(n,e,{pinnedObjMatch:v});a=[...a,{candidate:v,result:x,rendered:vn(e,x,n)}]}}let l=i.length&&i.every(b=>b.class===i[0].class)?i[0].class:null,c=l?al[l]?Me(l,1):es(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 ${$n(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,p=String(e.object||""),m=p?new RegExp(`\\b${Qe(p)}\\b`,"gi"):null,h=b=>{let y=String(b.candidate.label||"");return!m||!y?b.rendered.content:b.rendered.content.split(y).map(w=>w.replace(m,y)).join(y)};return{content:a&&a.length?`${f}
58
58
  ${a.map((b,y)=>`${y+1}) ${b.candidate.label}: ${h(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:`${sl(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=zr(i);return l?{content:`${sl(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. ${vs(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. ${vs(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)} ${wn(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=Wt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return nh(c,u,n)}return{content:`${t.objMatch.label} has no ${eo(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(OE,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Me(e.entityType||"Module",2),a=t.objMatch&&Gs.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${eo(e.kind)} ${a}. ${vs(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${ZS(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=>!xs.has(i.class))){let i=t.matches.slice(0,He).map(l=>l.class==="Commit"?QS(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(sl(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=wn(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 oh(e){if(e.length<4||sk.has(e))return null;let t=Xn(e),n=t+1,s=null,o=!1;for(let r of nk){let i=Yn(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 Tm(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!Sl(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=oh(n);return!!s&&s!==n&&!!Be[s]}function rh(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=Qn(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Tm(s,t.object))return!1;if(t.shape==="ask"){let o=Qn(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Tm(o,t.subject))}return!0}function ok(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return $p.includes(t)}function rk(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ar(Zs(String(t||""))),i=Bt(r);if(!i.length)return null;let a=[],l=[],c=j=>{let A=$n(e,j);return!!A.match&&A.tier!=null&&A.tier<=2},u=j=>{let A=$n(e,j);return!!A.match&&A.tier!=null&&A.tier<=3},d=j=>{let A=String(j||"").trim().toLowerCase();return Gs.includes(A)?!0:Bt(A).some(F=>{let T=F.toLowerCase();return!Qi.has(T)&&!fl.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=j=>{let A=j.join(" "),F=Dr(A,{nlp:n});return rh(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))||yn(F,Wt(e,F,{contextId:s,prev:o}),e).miss?null:{parsed:F,text:A}},m=j=>({parsed:j.parsed,from:r,to:j.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let j=-1;for(let T=0;T<i.length;T+=1){let M=i[T].toLowerCase();if(kl.has(M)&&!Qi.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 m(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 Bt(String(j||"").toLowerCase()))y.add(A);let w=[],v=[],_=[];for(let j of i){let A=j.toLowerCase();if(!/^[a-z]+$/.test(A)||Qi.has(A)||fl.has(A)||u(j)){w.push(j);continue}let T=oh(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 m(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 m(j)}let S=Bt(r).map(j=>j.toLowerCase()),E=[],R=[];for(let j of S){if(sh.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`),m(j)}return null}function ak(e,t){let n=String(t||"");if(!e||!Am.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(Am,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return ik.test(a)?`${a} touched`:i}function ck(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 jl(e,t){let n=ck(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(lk),o=s?null:n.match(uk),r=s||o;if(!r||!_l.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=jl(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 pk(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=jl(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 bk(e,t){let n=xi(String(t||"").trim()),s=n.match(fk),o=s?dp[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(mk)?.[1]||n.match(hk)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Bs[o].predicate},a=pk(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 wk(e,t){return Bs[e].matchesLocativePredicates?ko(Fr(t.prop))||ko(Fr(t.predicate)):null}function yk(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Bs[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 m of c.edges||[]){let h=e.byId?.get(m.subject);if(!h||!(s?s.has(m.subject):n.has(h.class)))continue;let b={subject:h,object:m.object,reads:f?o.reads:`is ${p}`};f?i.set(m.subject,b):a.set(`${u||d}\0${m.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 ol(e){let t=$k.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(ol(a.subject).base,String(a.object));let s=new Set(pp),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}=ol(a.subject),d=n.get(l)||t(l);if(!d)continue;let f=`${a.predicate}\0${l}`;vk(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:ol(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 kk(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=jl(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 Es(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(ok(t))return{content:vl(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=ak(e,t);let r=ml(t,{nlp:s}),i=r.parsed,a=i,l=null;if(rh(e,i,n)===!1){let f=rk(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=Wt(e,a,{contextId:n,prev:o}),u=yn(a,c,e);if(Im(e,a,c,u)){let f=dk(e,t);if(f){let p=Wt(e,f,{contextId:n,prev:o}),m=yn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(Im(e,a,c,u)){let f=bk(e,t);if(f){let p=Wt(e,f,{contextId:n,prev:o}),m=yn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Fi(String(t||"")).trim().match(Ek)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=Dr(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=Wt(e,m,{contextId:n,prev:o}),u=yn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=Zs(String(t||"")).match(Sk)?.[1]?.trim();if(p){let m=Dr(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=Wt(e,m,{contextId:n,prev:o}),g=yn(m,h,e);!g.miss&&!g.ambiguous&&(c=h,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 m=Wt(e,p.parsed,{contextId:n,prev:o}),h=yn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=fm(f.map(m=>m.a),{answerFor:m=>f.find(h=>h.a===m)?.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:`${rl(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=zr(i);return l?{content:`${rl(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. ${xs(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. ${xs(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)} ${$n(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=qt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return ah(c,u,n)}return{content:`${t.objMatch.label} has no ${eo(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(GE,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Me(e.entityType||"Module",2),a=t.objMatch&&Gs.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${eo(e.kind)} ${a}. ${xs(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${uk(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=>!Es.has(i.class))){let i=t.matches.slice(0,He).map(l=>l.class==="Commit"?lk(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(rl(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=$n(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 lh(e){if(e.length<4||mk.has(e))return null;let t=Zn(e),n=t+1,s=null,o=!1;for(let r of fk){let i=Qn(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 Lm(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!jl(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=lh(n);return!!s&&s!==n&&!!Be[s]}function uh(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=ts(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Lm(s,t.object))return!1;if(t.shape==="ask"){let o=ts(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Lm(o,t.subject))}return!0}function hk(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return kp.includes(t)}function gk(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ar(Zs(String(t||""))),i=Gt(r);if(!i.length)return null;let a=[],l=[],c=j=>{let A=xn(e,j);return!!A.match&&A.tier!=null&&A.tier<=2},u=j=>{let A=xn(e,j);return!!A.match&&A.tier!=null&&A.tier<=3},d=j=>{let A=String(j||"").trim().toLowerCase();return Gs.includes(A)?!0:Gt(A).some(F=>{let T=F.toLowerCase();return!Zi.has(T)&&!hl.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=j=>{let A=j.join(" "),F=Dr(A,{nlp:n});return uh(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))||vn(F,qt(e,F,{contextId:s,prev:o}),e).miss?null:{parsed:F,text:A}},m=j=>({parsed:j.parsed,from:r,to:j.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let j=-1;for(let T=0;T<i.length;T+=1){let M=i[T].toLowerCase();if(_l.has(M)&&!Zi.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 m(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 Gt(String(j||"").toLowerCase()))y.add(A);let w=[],v=[],_=[];for(let j of i){let A=j.toLowerCase();if(!/^[a-z]+$/.test(A)||Zi.has(A)||hl.has(A)||u(j)){w.push(j);continue}let T=lh(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 m(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 m(j)}let S=Gt(r).map(j=>j.toLowerCase()),E=[],R=[];for(let j of S){if(ch.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`),m(j)}return null}function wk(e,t){let n=String(t||"");if(!e||!Nm.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(Nm,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return bk.test(a)?`${a} touched`:i}function yk(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 Rl(e,t){let n=yk(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function xk(e,t){let n=String(t||"").trim(),s=n.match($k),o=s?null:n.match(vk),r=s||o;if(!r||!Tl.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=Rl(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 Ek(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=Rl(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function _k(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 Rk(e,t){let n=Ei(String(t||"").trim()),s=n.match(Sk),o=s?gp[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(kk)?.[1]||n.match(jk)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Bs[o].predicate},a=Ek(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let l=_k(e,r);return l?{...i,subjects:[l],asked:[l]}:null}function Tk(e,t){return Bs[e].matchesLocativePredicates?ko(Fr(t.prop))||ko(Fr(t.predicate)):null}function Ak(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Bs[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:Tk(t.relation,c);if(!(!f&&!p))for(let m of c.edges||[]){let h=e.byId?.get(m.subject);if(!h||!(s?s.has(m.subject):n.has(h.class)))continue;let b={subject:h,object:m.object,reads:f?o.reads:`is ${p}`};f?i.set(m.subject,b):a.set(`${u||d}\0${m.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 il(e){let t=Ik.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 Ok(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(il(a.subject).base,String(a.object));let s=new Set(bp),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}=il(a.subject),d=n.get(l)||t(l);if(!d)continue;let f=`${a.predicate}\0${l}`;Ck(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:il(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 Pk(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=Rl(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 Ss(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(hk(t))return{content:El(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=wk(e,t);let r=gl(t,{nlp:s}),i=r.parsed,a=i,l=null;if(uh(e,i,n)===!1){let f=gk(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=qt(e,a,{contextId:n,prev:o}),u=vn(a,c,e);if(Pm(e,a,c,u)){let f=xk(e,t);if(f){let p=qt(e,f,{contextId:n,prev:o}),m=vn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(Pm(e,a,c,u)){let f=Rk(e,t);if(f){let p=qt(e,f,{contextId:n,prev:o}),m=vn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Di(String(t||"")).trim().match(Lk)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=Dr(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=qt(e,m,{contextId:n,prev:o}),u=vn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=Zs(String(t||"")).match(Nk)?.[1]?.trim();if(p){let m=Dr(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=qt(e,m,{contextId:n,prev:o}),g=vn(m,h,e);!g.miss&&!g.ambiguous&&(c=h,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 m=qt(e,p.parsed,{contextId:n,prev:o}),h=vn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=wm(f.map(m=>m.a),{answerFor:m=>f.find(h=>h.a===m)?.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(m=>m&&m.id)),p=c.candidates.filter(m=>m&&m.id&&m.id!==c.objMatch.id&&!f.has(m.id));if(p.length){let m=p.slice(0,3).map(b=>b.label).filter(Boolean),h=p.length-m.length,g=m.join(", ")+(h>0?`, +${h} 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:th(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 wm,Wo,xs,el,TE,Ot,Cm,He,rl,AE,IE,CE,OE,LE,PE,ME,Om,il,DE,hl,Lm,At,Nm,UE,WE,qE,HE,YE,XE,JE,QE,eS,nS,Dm,bl,zm,Um,dS,mS,ym,wS,$m,vS,xm,Sm,SS,jS,RS,$s,tl,BS,WS,qS,El,VS,_m,HS,Rm,XS,Qi,fl,kl,sh,tk,nk,sk,Am,ik,lk,uk,_l,fk,mk,hk,Fr,$k,vk,Ek,Sk,Im,Ss=O(()=>{Oe();Ic();Gn();Tn();Mo();Ui();Bi();bm();Jc();hs();Ki();Zc();zo();wm=new WeakMap;Wo={calls:"callsSymbol",touches:"touchesSymbol"},xs=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),el={Function:"Method",Method:"Function"},TE={uses:["imports","calls","callsSymbol"]},Ot=e=>TE[e]||[e],Cm=new Set(Object.values(Wo)),He=12,rl={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"]};AE={cochange:"cochanges",reexports:"export"};IE={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"},CE=e=>IE[e]||eo(e),OE=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),LE=new Set(["imports"]);PE=/^where\s+(?:does|do|did)\s+/i,ME=new Set(me(Zt));Om=4,il="zzinnerset",DE=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),hl=new Set(["which","what","who","list","show","find","give","me","us","all"]),Lm=new Set(["are","is","was","were"]);At=e=>Be[e]?{entityType:Be[e],placeholder:!1}:Wn.includes(e)?{entityType:null,placeholder:!0}:null,Nm=e=>!!de[e]&&e.endsWith("ing");UE=new Set(["which","the","all"]);WE=new Set(["all","every","each"]);qE=new Set(["what","which","thing","things","one","ones","stuff"]);HE=new Set(["those","them"]);YE=new Set(["did","was","were","do","does","has","have","had"]),XE=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),JE=new Set(["last","recently","ever","get","got","been","then","now","already"]),QE=new Set(["the","a","an","all","those","these","any"]);eS=new Set(["since","before","after","on"]);nS=/\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/;Dm=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);bl=new Set(["the","a","an","all","me","us"]),zm=[...Hs].sort((e,t)=>t.split(" ").length-e.split(" ").length),Um="functions, classes, methods, modules, packages, attributes, variables, or commits",dS=new Set(["in","inside","under"]);mS=new Set(["called","named","about","like","containing","matching","with"]);ym=new Set(["recent","latest","newest"]);wS=/^git:(.+)$/i;$m=new WeakMap;vS=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);xm=new WeakMap;Sm={label:3,chain:2,attr:1};SS=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;jS=["imports","calls","callsSymbol","inherits","contains","tests"];RS=/^\d{4}-\d{2}-\d{2}$/;$s=e=>wn(e.slice(0,He).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>He?`, \u2026and ${e.length-He} more`:"");tl=10;BS=/^(?:the|a|an)\s+/i,WS=new RegExp(`\\s+(${Object.keys(Be).join("|")})$`,"i");qS=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,El=new Set(["index","main","app","server","cli","__main__"]),VS=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),_m=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),HS=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>VS.has(t));Rm=8,XS="mgx:schemaDoc";Qi=new Set([...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(en)),...me(Object.keys(Xe)),...me(Vs),...me(Object.keys(ms)),...me(Object.keys(jn)),...me(Object.keys(jo)),...me(Wn),...me(kr),...me(qs),...me(Zt),...me(bn),...me(Bn),...me(Object.keys(Ro))]),fl=new Set([...tt,...hl,...Gs]),kl=new Set(me(Ei)),sh=new Set([...kl,...fl]),tk=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],nk=[...new Set([...me(Object.keys(de)),...Object.keys(Be),...tk])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!tt.has(e)),sk=new Set(["impact","impacts","impacted"]);Am=/\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,uk=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,_l=/^(?: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(`^(?:${zm.map(Qe).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),mk=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,hk=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Fr=e=>String(e||"").toLowerCase();$k=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;vk=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;Ek=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Sk=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Im=(e,t,n,s)=>s.ambiguous?kk(e,t,n):!!s.miss});function ks(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 es({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+cp))throw new Re(`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,...ks(c,s,o,r)}}var ea=O(()=>{Ue();zt()});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 An(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 ta(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 Tl,jk,ot,Al,eN,ah,Il,_k,vn,Rl,It,tN,ch=O(()=>{Tl="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"}),Al=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),eN=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"}),ah=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),Il=Object.freeze(Object.values(ah).flat()),_k=Object.freeze(new Set(ah.source));vn="Individual",Rl="Edge",It="concurrent-safe: reads immutable graph truth; no shared mutable state",tN=Object.freeze({version:Tl,ontology:jk,missReasons:Object.values(ot),edgeKinds:[...Al],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: ${vn}, candidates: ${vn}[] }`,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: ${vn}, out: ${Rl}[], incoming: ${Rl}[] }`,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: ${vn}[], attributes: ${vn}[] }`,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: ${vn}[], subclasses: ${vn}[], levels: Array<${vn}[]> }`,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: ${vn}[] }`,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: ${Rl}[] }`,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: ${vn}[] }`,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: ${vn}[] }`,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 Rk(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(ta(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(ta(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function Tk(e,t){for(let n of e.relations)if(Kn(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function Ik(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await es({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(ks(o,i,a,Cl).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(ks(o,i,a,Cl).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=Ak;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 es({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=ks(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:Ur(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:ih(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 Em,Wo,Es,nl,zE,Ot,Mm,He,al,UE,BE,WE,GE,qE,HE,KE,Fm,cl,XE,bl,Dm,At,zm,QE,eS,nS,oS,iS,aS,cS,lS,dS,fS,Gm,yl,qm,Vm,xS,kS,Sm,TS,km,CS,_m,Tm,NS,MS,DS,vs,sl,ZS,ek,nk,kl,sk,Cm,ok,Om,ak,Zi,hl,_l,ch,pk,fk,mk,Nm,bk,$k,vk,Tl,Sk,kk,jk,Fr,Ik,Ck,Lk,Nk,Pm,ks=O(()=>{Oe();Oc();qn();yn();Mo();Bi();Wi();xm();Zc();ws();Yi();tl();zo();Em=new WeakMap;Wo={calls:"callsSymbol",touches:"touchesSymbol"},Es=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),nl={Function:"Method",Method:"Function"},zE={uses:["imports","calls","callsSymbol"]},Ot=e=>zE[e]||[e],Mm=new Set(Object.values(Wo)),He=12,al={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"]};UE={cochange:"cochanges",reexports:"export"};BE={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"},WE=e=>BE[e]||eo(e),GE=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),qE=new Set(["imports"]);HE=/^where\s+(?:does|do|did)\s+/i,KE=new Set(me(Zt));Fm=4,cl="zzinnerset",XE=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),bl=new Set(["which","what","who","list","show","find","give","me","us","all"]),Dm=new Set(["are","is","was","were"]);At=e=>Be[e]?{entityType:Be[e],placeholder:!1}:Gn.includes(e)?{entityType:null,placeholder:!0}:null,zm=e=>!!de[e]&&e.endsWith("ing");QE=new Set(["which","the","all"]);eS=new Set(["all","every","each"]);nS=new Set(["what","which","thing","things","one","ones","stuff"]);oS=new Set(["those","them"]);iS=new Set(["did","was","were","do","does","has","have","had"]),aS=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),cS=new Set(["last","recently","ever","get","got","been","then","now","already"]),lS=new Set(["the","a","an","all","those","these","any"]);dS=new Set(["since","before","after","on"]);fS=/\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/;Gm=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);yl=new Set(["the","a","an","all","me","us"]),qm=[...Hs].sort((e,t)=>t.split(" ").length-e.split(" ").length),Vm="functions, classes, methods, modules, packages, attributes, variables, or commits",xS=new Set(["in","inside","under"]);kS=new Set(["called","named","about","like","containing","matching","with"]);Sm=new Set(["recent","latest","newest"]);TS=/^git:(.+)$/i;km=new WeakMap;CS=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);_m=new WeakMap;Tm={label:3,chain:2,attr:1};NS=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;MS=["imports","calls","callsSymbol","inherits","contains","tests"];DS=/^\d{4}-\d{2}-\d{2}$/;vs=e=>$n(e.slice(0,He).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>He?`, \u2026and ${e.length-He} more`:"");sl=10;ZS=/^(?:the|a|an)\s+/i,ek=new RegExp(`\\s+(${Object.keys(Be).join("|")})$`,"i");nk=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,kl=new Set(["index","main","app","server","cli","__main__"]),sk=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Cm=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),ok=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>sk.has(t));Om=8,ak="mgx:schemaDoc";Zi=new Set([...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(en)),...me(Object.keys(Xe)),...me(Vs),...me(Object.keys(bs)),...me(Object.keys(_n)),...me(Object.keys(jo)),...me(Gn),...me(kr),...me(qs),...me(Zt),...me(wn),...me(Wn),...me(Object.keys(Ro))]),hl=new Set([...tt,...bl,...Gs]),_l=new Set(me(Si)),ch=new Set([..._l,...hl]),pk=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],fk=[...new Set([...me(Object.keys(de)),...Object.keys(Be),...pk])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!tt.has(e)),mk=new Set(["impact","impacts","impacted"]);Nm=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,bk=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;$k=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,vk=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,Tl=/^(?: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;Sk=new RegExp(`^(?:${qm.map(Qe).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),kk=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,jk=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Fr=e=>String(e||"").toLowerCase();Ik=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;Ck=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;Lk=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Nk=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Pm=(e,t,n,s)=>s.ambiguous?Pk(e,t,n):!!s.miss});function js(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 ss({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+fp))throw new Re(`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,...js(c,s,o,r)}}var ta=O(()=>{Ue();Bt()});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 An(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 na(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 Il,Mk,ot,Cl,$N,ph,Ol,Fk,En,Al,It,vN,fh=O(()=>{Il="1.1.0",Mk="urn:tmct:core",ot=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),Cl=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),$N=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"}),ph=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),Ol=Object.freeze(Object.values(ph).flat()),Fk=Object.freeze(new Set(ph.source));En="Individual",Al="Edge",It="concurrent-safe: reads immutable graph truth; no shared mutable state",vN=Object.freeze({version:Il,ontology:Mk,missReasons:Object.values(ot),edgeKinds:[...Cl],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: ${En}, candidates: ${En}[] }`,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: ${En}, out: ${Al}[], incoming: ${Al}[] }`,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: ${En}[], attributes: ${En}[] }`,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: ${En}[], subclasses: ${En}[], levels: Array<${En}[]> }`,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: ${En}[] }`,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: ${Al}[] }`,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: ${En}[] }`,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: ${En}[] }`,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 Dk(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(na(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(na(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function zk(e,t){for(let n of e.relations)if(Jn(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function Bk(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await ss({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(js(o,i,a,Ll).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(js(o,i,a,Ll).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=Uk;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 ss({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=js(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 na(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:Tl,capabilities:[...Il],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=tn(e,String(c??""));return u?yt({match:An(u),candidates:d.map(An)}):$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}=Rk(e,c);return yt({individual:An(u),out:d,incoming:f})},members(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=ke(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let h=i.get(m.object),g=h?An(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.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=ke(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?An(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 m=new Set([c]),h=[],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(m.has($))continue;m.add($);let x=i.get($),S=x?An(x):{id:$,label:$,class:"Class",attributes:[]};h.push(S),v.push(S),w.push($)}v.length&&g.push(v),b=w}return yt({bases:f,subclasses:h,levels:g})},exports(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let f=ke(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?An(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,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Gt(u,p)&&d.push(m);let f=Gt(u,"visibility");return f&&d.push(f),yt({id:u.id,label:u.label,class:u.class||"Entity",params:Gt(u,"params"),returns:Gt(u,"returns"),raises:Gt(u,"raises"),decorators:Gt(u,"decorators"),doc:Gt(u,"doc"),selfFields:Gt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!Al.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let m=Tk(e,u),h=ke(e,u).filter(g=>g.subject===c).map(g=>ta(g,m));return h=d==null?h.slice(f):h.slice(f,f+d),yt({kind:u,edges:h})},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((m,h)=>m+h.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 es({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Cl});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}=tn(e,String(c??""));if(!d)return $t(ot.UNRESOLVED_TERM,{term:String(c??"")});let f=Po(e,d),p=String(u||"auto").trim().toLowerCase(),m,h;p==="min"?(m="TINY",h=Qs("TINY")):p==="full"?(m="FULL",h=Qs("FULL")):{tier:m,mask:h}=Mi(f,e,{});let g=Mf(f,h);if(!l.sourceAccess)return yt({text:g,tier:m});let b=await Ik(f,h,{readFile:s,repoRoot:n});return yt({text:b?`${g}
69
- ${b}`:g,tier:m})},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)),m=new Map;for(let b of ke(e,"imports"))p.has(b.object)&&m.set(b.object,(m.get(b.object)||0)+1);let h=[...m.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:h})},untested(){let c=new Set(ke(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(An);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=[...ke(e,"touches"),...ke(e,"touchesSymbol")].filter(m=>m.object===c),f=new Set,p=[];for(let m of d){if(f.has(m.subject))continue;f.add(m.subject);let h=i.get(m.subject);p.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?Gt(h,"author")??Gt(h,"commitAuthor"):null,date:h?Gt(h,"date")??Gt(h,"commitDate"):null,message:h?Gt(h,"message")??Gt(h,"commitMessage"):null})}return yt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Oi,offset:m=0}={}){let h=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=Bc(b);if(x.error)return $t(ot.UNRESOLVED_TERM,{term:b,detail:x.error});_=x}let $=h.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=mf(e,h).map(({path:$})=>_.get($)).filter(Boolean)}let v=w.slice(m,m+p).map(An);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 Il){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(m=>(lh(o,c,performance.now()-f,m),m)):(lh(o,c,performance.now()-f,p),p)})}return l}function lh(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:Ck(s)})}catch{}}function Ck(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 Gt,Cl,Ak,sa=O(()=>{Oe();ea();ch();Gt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Cl=200,Ak=120});async function Br(e,t){let n=await t.fetchEntities(e),s=Ci(n);if(!s.individuals.length){let o=new Re(`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 oa=O(()=>{zt();Oe()});function js({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 Re(`${t} is required`);return n}function vt(e,t,n){let{match:s,candidates:o}=tn(e.graph,t);if(!s)throw new Re(`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(()=>{zt();Oe();Wr=200;rt=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=vt(s,nt(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function uh(e,{config:t,source:n=Io,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Re("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=ve(ve(t.graphFile)),p=na(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:Es}),{match:m}=vt(p,r,"symbol"),h=Po(d,m),g,b,y=!1;a||i==="min"?(g="TINY",b=Qs("TINY")):c||i==="full"?(g="FULL",b=Qs("FULL"),y=!0):{tier:g,mask:b,topup:y}=Mi(h,d,{untuned:l}),s&&!c&&(b=Nf(b));let w=null;if(h.moduleLabel)try{({lines:w}=await es({readFile:ze,repoRoot:f,path:h.moduleLabel}))}catch{w=null}let v=x=>w&&w[x-1]!=null?w[x-1].trim():"",_=(x,S)=>ks(w,x,S,Wr).text,$=[`Edit context for ${h.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&&h.anchor?.site&&w){let{start:x,end:S}=h.anchor.site;$.push(`
68
+ `)}function sa(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:Il,capabilities:[...Ol],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=tn(e,String(c??""));return u?yt({match:An(u),candidates:d.map(An)}):$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}=Dk(e,c);return yt({individual:An(u),out:d,incoming:f})},members(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=ke(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let h=i.get(m.object),g=h?An(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.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=ke(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?An(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 m=new Set([c]),h=[],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(m.has($))continue;m.add($);let x=i.get($),S=x?An(x):{id:$,label:$,class:"Class",attributes:[]};h.push(S),v.push(S),w.push($)}v.length&&g.push(v),b=w}return yt({bases:f,subclasses:h,levels:g})},exports(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let f=ke(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?An(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,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Vt(u,p)&&d.push(m);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(!Cl.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let m=zk(e,u),h=ke(e,u).filter(g=>g.subject===c).map(g=>na(g,m));return h=d==null?h.slice(f):h.slice(f,f+d),yt({kind:u,edges:h})},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((m,h)=>m+h.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 ss({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Ll});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}=tn(e,String(c??""));if(!d)return $t(ot.UNRESOLVED_TERM,{term:String(c??"")});let f=Po(e,d),p=String(u||"auto").trim().toLowerCase(),m,h;p==="min"?(m="TINY",h=Qs("TINY")):p==="full"?(m="FULL",h=Qs("FULL")):{tier:m,mask:h}=Fi(f,e,{});let g=Bf(f,h);if(!l.sourceAccess)return yt({text:g,tier:m});let b=await Bk(f,h,{readFile:s,repoRoot:n});return yt({text:b?`${g}
69
+ ${b}`:g,tier:m})},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)),m=new Map;for(let b of ke(e,"imports"))p.has(b.object)&&m.set(b.object,(m.get(b.object)||0)+1);let h=[...m.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:h})},untested(){let c=new Set(ke(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(An);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=[...ke(e,"touches"),...ke(e,"touchesSymbol")].filter(m=>m.object===c),f=new Set,p=[];for(let m of d){if(f.has(m.subject))continue;f.add(m.subject);let h=i.get(m.subject);p.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?Vt(h,"author")??Vt(h,"commitAuthor"):null,date:h?Vt(h,"date")??Vt(h,"commitDate"):null,message:h?Vt(h,"message")??Vt(h,"commitMessage"):null})}return yt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Li,offset:m=0}={}){let h=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=Gc(b);if(x.error)return $t(ot.UNRESOLVED_TERM,{term:b,detail:x.error});_=x}let $=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=Hc(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=yf(e,h).map(({path:$})=>_.get($)).filter(Boolean)}let v=w.slice(m,m+p).map(An);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 Ol){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(m=>(mh(o,c,performance.now()-f,m),m)):(mh(o,c,performance.now()-f,p),p)})}return l}function mh(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:Wk(s)})}catch{}}function Wk(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,Ll,Uk,oa=O(()=>{Oe();ta();fh();Vt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Ll=200,Uk=120});async function Br(e,t){let n=await t.fetchEntities(e),s=Oi(n);if(!s.individuals.length){let o=new Re(`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 ra=O(()=>{Bt();Oe()});function _s({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 Re(`${t} is required`);return n}function xt(e,t,n){let{match:s,candidates:o}=tn(e.graph,t);if(!s)throw new Re(`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(()=>{Bt();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 hh(e,{config:t,source:n=Io,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Re("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=ve(ve(t.graphFile)),p=sa(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:Ss}),{match:m}=xt(p,r,"symbol"),h=Po(d,m),g,b,y=!1;a||i==="min"?(g="TINY",b=Qs("TINY")):c||i==="full"?(g="FULL",b=Qs("FULL"),y=!0):{tier:g,mask:b,topup:y}=Fi(h,d,{untuned:l}),s&&!c&&(b=zf(b));let w=null;if(h.moduleLabel)try{({lines:w}=await ss({readFile:ze,repoRoot:f,path:h.moduleLabel}))}catch{w=null}let v=x=>w&&w[x-1]!=null?w[x-1].trim():"",_=(x,S)=>js(w,x,S,Wr).text,$=[`Edit context for ${h.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&&h.anchor?.site&&w){let{start:x,end:S}=h.anchor.site;$.push(`
70
70
  ## anchor: ${h.anchor.label} (${h.anchor.class}) @ ${h.moduleLabel}:${x}-${S}`),$.push(_(x,S)),h.callHint&&$.push(h.callHint)}if(b.registration&&h.globals.length){$.push(`
71
71
  ## registration / module globals (replicate this pattern):`);for(let x of h.globals)$.push(` ${x.label} = ${x.value}${x.site?` [:${x.site.start}]`:""}`)}if(b.exemplar&&h.exemplar?.site&&w){let{start:x,end:S}=h.exemplar.site,E=h.exemplar.decorators?` @${h.exemplar.decorators}`:"";$.push(`
72
- ## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${E} @ ${h.moduleLabel}:${x}-${S}`),$.push(_(x,S)),h.callHint&&$.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let x=120;for(let S of h.calleeBodies){if(x<=0)break;let E=S.site.start,j=S.site.path===h.moduleLabel&&w?w:await es({readFile:ze,repoRoot:f,path:S.site.path}).then(F=>F.lines).catch(()=>null);if(!j)continue;let A=ks(j,E,S.site.end,x);$.push(`
72
+ ## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${E} @ ${h.moduleLabel}:${x}-${S}`),$.push(_(x,S)),h.callHint&&$.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let x=120;for(let S of h.calleeBodies){if(x<=0)break;let E=S.site.start,j=S.site.path===h.moduleLabel&&w?w:await ss({readFile:ze,repoRoot:f,path:S.site.path}).then(F=>F.lines).catch(()=>null);if(!j)continue;let A=js(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&&h.classMembers&&h.classMembers.members.length){$.push(`
74
74
  ## members of ${h.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 h.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&&h.siblings.length){$.push(`
75
75
  ## sibling symbols to copy the style of (most relevant first; ${h.siblings.length} total):`);for(let x of h.siblings.slice(0,h.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}`)}h.siblings.length>h.siblingCap&&$.push(` \u2026+${h.siblings.length-h.siblingCap} more (use ${u}search kind=function or ${u}snippet <name> for any of them)`)}if(b.allExports&&h.allExports&&$.push(`
@@ -82,29 +82,29 @@ ${b}`:g,tier:m})},architecture({package:c=""}={}){let u=String(c||"").trim().toL
82
82
  ## covering tests: ${h.tests.join(", ")}`),b.cochange&&h.cochange&&h.cochange.length&&$.push(`
83
83
  ## usually changed together (consider editing these too): ${h.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 ${h.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 Ol(e,{config:t,source:n,tel:s}){return(await uh(e,{config:t,source:n,tel:s})).text}var Ll=O(()=>{_t();Ue();zt();ea();_r();Oe();Ss();sa();oa();Ge();Ol.ownsGraphLoad=!0});function dh(e,{graph:t,svc:n}){let{match:s}=vt(n,nt(e,"symbol"),"symbol");return Pf(Po(t,s))}var ph=O(()=>{Oe();Ge()});function ra(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 ra(e).toString(16).padStart(8,"0")}function Lk(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,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let v=a(h,6)^a(h,11)^a(h,25),_=h&g^~h&b,$=y+v+_+Ok[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=h,h=m+$>>>0,m=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]+m>>>0,r[4]=r[4]+h>>>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 Nk(e,t){let n=Lk(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function J(e){let t=ts(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 ns(e){let t=ts(e);return Mk.get(t)??t}function ge(e,t,n){return Ho(J(e),ns(t),J(n))}var Ok,Pk,ts,Mk,Ho,nn=O(()=>{Ok=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]);Pk=2e3,ts=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,Pk);Mk=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:${Nk(`${e}\0${t}\0${n}`,8)}`});var ln={};Un(ln,{CARDINALITY_RULE_CONFIDENCE:()=>Gk,CAX_DW_RULE:()=>Pl,CAX_DW_RULE_CONFIDENCE:()=>Fl,CAX_MAXC0_RULE_CONFIDENCE:()=>Vk,CLS_SVF1_RULE:()=>Dl,CLS_SVF1_RULE_CONFIDENCE:()=>Ul,DEFAULT_MAX_ENVIRONMENTS:()=>ia,DISJOINT_PREDICATE:()=>Ko,ENTAILED_DISJOINT_PROVENANCE:()=>Ml,ENTAILED_PROVENANCE:()=>hh,ENTAILED_SCM_SVF_PROVENANCE:()=>Gl,ENTAILED_SVF1_PROVENANCE:()=>zl,ENTAILED_TYPE_PROVENANCE:()=>bh,ON_PROPERTY_PREDICATE:()=>In,SCM_SVF_RULE:()=>Wl,SCM_SVF_RULE_CONFIDENCE:()=>ql,SOME_VALUES_FROM_PREDICATE:()=>Cn,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>Lt,buildCardinalityRestrictions:()=>Wk,buildRelevanceFrontier:()=>Nl,deriveDisjointViolations:()=>vh,deriveSomeValuesFromApplication:()=>xh,deriveSomeValuesFromSubsumption:()=>Eh,deriveSubClassClosure:()=>wh,deriveSubClassClosureDelta:()=>yh,deriveTypePropagation:()=>$h,entailedTrustFrom:()=>Dk,findConsistencyViolations:()=>Kk,findIsaChain:()=>Vl,proveCardinalityAtLeast:()=>qk,proveMaxCardinalityZeroDenial:()=>Hk,retractSubClassOf:()=>Zk,syllogise:()=>Yk});function fh(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 Dk(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 ss(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=J(s);o&&n.add(o)}return n.size?n:null}function wh(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:ss(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,m]of r)for(let h of m){let g=r.get(h);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,h,b)&&d.push([p,h,b,y])}}if(!d.length)break;d.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let f=!1;for(let[p,m,h,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:h,via:m}),r.has(p)||r.set(p,new Set),r.get(p).add(h),f=!0}if(l.length>=n||!f)break}return l}function yh(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[m,h]of e||[])!m||!h||m===h||(r.add(`${m}${Le}${h}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),a.has(h)||a.set(h,new Set),a.get(h).add(m));let l=[],c=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let g=`${m}${Le}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:ss(o),d=(m,h,g)=>!u||u.has(m)||u.has(h)||u.has(g),f=[],p=new Set;for(let m=0;m<n&&l.length;m+=1){let h=[],g=(w,v,_)=>{if(w===_)return;let $=`${w}${Le}${_}`;r.has($)||p.has($)||d(w,v,_)&&h.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(!h.length)break;h.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 h)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 On(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 zk(e){return On((e||[]).map(([t,n])=>[n,t]))}function Nl(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(_s(c.predicate)?n.push([c.subject,c.object]):oo(c.predicate)?s.push([c.subject,c.object]):Yo(c.predicate)?o.set(c.subject,c.object):Vr(c.predicate)&&r.set(c.subject,c.object));let i=zk(n),a=new Set;for(let c of t||[]){let u=J(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 $h(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=On(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Le}${m}`);let l=s instanceof Set?s.size?s:null:ss(s),c=(p,m,h)=>!l||l.has(p)||l.has(m)||l.has(h),u=[];for(let[p,m]of e||[]){if(!p||!m)continue;let h=`${p}${Le}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,m,g)&&u.push([p,m,g,b])}}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let d=[],f=new Set;for(let[p,m,h,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:h,via:m})}return d}function vh(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Le}${h}`),a.add(`${h}${Le}${m}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(m));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:ss(o),u=(m,h,g)=>!c||c.has(m)||c.has(h)||c.has(g),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let g=`${m}${Le}${h}`;if(!l.has(g)){l.add(g);for(let b of[h,...r(h)]){let y=i.get(b);if(y)for(let w of y){if(w===m)continue;let v=`${m}${Le}${w}`;a.has(v)||u(m,h,w)&&d.push([m,h,b,w,v])}}}}d.sort((m,h)=>m[0].localeCompare(h[0])||m[3].localeCompare(h[3])||m[2].localeCompare(h[2])||m[1].localeCompare(h[1]));let f=[],p=new Set;for(let[m,h,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:m,object:b,viaType:h,viaClass:g})}return f}function xh(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=On(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:ss(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=J(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 m=[],h=new Set;for(let[g,b,y,w,v,_,$,x]of p)if(!h.has(x)){if(m.length>=o)break;h.add(x),m.push({subject:g,object:$,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:v,viaTarget:_})}return m}function Wk(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(Fk(r.predicate))s.set(r.subject,r.object);else{let i=Bk[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)!==Uk)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 Eh(e,t,{budget:n=50,focus:s=null}={}){let o=On(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=J(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:ss(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 m of f){if(p.restriction===m.restriction||p.target===m.target||!o(p.target).has(m.target))continue;let h=`${p.restriction}${Le}${m.restriction}`;i.has(h)||l(p.restriction,m.restriction)&&c.push([p.restriction,m.restriction,p.target,m.target,h])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,m,h,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:m,viaY2:h})}return u}function Sh(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=On(e),a=r instanceof Set?r.size?r:null:ss(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 m=u.get(p);if(m&&s(m))return{viaClass:f,viaRestriction:p,record:m}}}return null}function qk(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Sh(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 Hk(e,t,n,s,o={}){if(!s)return null;let r=Sh(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 Kk(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map;for(let[p,m]of n||[])!p||!m||p===m||(i.has(p)||i.set(p,new Set),i.get(p).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(p));if(!i.size)return[];let a=new Map;for(let[p,m]of e||[])!p||!m||(a.has(p)||a.set(p,new Set),a.get(p).add(m));let l=o instanceof Set?o.size?o:null:ss(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,m]of a){if(!c(p))continue;let h=[...m].sort();for(let g=0;g<h.length;g+=1)for(let b=g+1;b<h.length;b+=1){let[y,w]=[h[g],h[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,m)=>p[0].localeCompare(m[0])||p[1].localeCompare(m[1])||p[2].localeCompare(m[2]));let f=[];for(let[p,m,h,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:m,classB:h,viaA:g,viaB:b})}return f}async function Yk(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=ia,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=fh(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(k=>_s(k.predicate)).map(k=>[k.subject,k.object]),h=p.filter(k=>oo(k.predicate)).map(k=>[k.subject,k.object]),g=p.filter(k=>so(k.predicate)).map(k=>[k.subject,k.object]),b=new Map,y=new Map,w=[];for(let k of p){let le=String(k.predicate||"").trim().toLowerCase();Yo(k.predicate)?b.set(k.subject,k.object):Vr(k.predicate)?y.set(k.subject,k.object):Bl.has(le)||w.push([k.subject,k.predicate,k.object])}let v=[];for(let[k,le]of b){let Te=y.get(k);Te&&v.push({restriction:k,property:le,target:Te})}let _=ss(s),$=o&&_?Nl(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,le,Te)=>T.get(`${k}${Le}${le}${Le}${Te}`),z=(k,le,Te)=>T.has(`${k}${Le}${le}${Le}${Te}`),Y=k=>k.filter(le=>typeof le=="number"),ae=R==="delta"&&!A.length,Z=R==="delta"?A.filter(k=>_s(k.predicate)).map(k=>[k.subject,k.object]):[],D=R==="delta"?Z.length?yh(m,Z,{depth:t,budget:n,focus:$}):[]:wh(m,{depth:t,budget:n,focus:$}),U=m.concat(D.map(k=>[k.subject,k.object])),G=$,I=null;if(R==="delta"&&!ae){let k=p.concat(D.map(Te=>({subject:Te.subject,predicate:Fe,object:Te.object}))),le=[];for(let Te of A)le.push(Te.subject,Te.object);I=Nl(k,le),G=I}let L=k=>!I||I.has(k),C=I?h.filter(([k,le])=>L(k)||L(le)):h,P=new Set;if(I)for(let k of A)so(k.predicate)&&(P.add(k.subject),P.add(k.object));let N=I&&P.size?On(U):null,W=I?h.filter(([k,le])=>L(k)||L(le)||N&&[...N(le)].some(Te=>P.has(Te))):h,V=new Set;if(I){for(let k of A)if(Yo(k.predicate)||Vr(k.predicate)){let le=b.get(k.subject);le&&V.add(J(le))}}let ie=I?w.filter(([k,le,Te])=>L(k)||L(Te)||V.has(J(le))):w,ce=Math.max(0,n-D.length),K=ce>0&&!ae?$h(C,U,{budget:ce,focus:G,presentTypeEdges:h}):[],ee=Math.max(0,n-D.length-K.length),q=ee>0&&!ae?vh(W,U,g,{budget:ee,focus:G}):[],ne=Math.max(0,n-D.length-K.length-q.length),te=ne>0&&v.length&&!ae?xh(ie,h,U,v,{budget:ne,focus:G}):[],xe=Math.max(0,n-D.length-K.length-q.length-te.length),Ae=xe>0&&v.length>1&&!ae?Eh(v,U,{budget:xe,focus:G}):[],pe=new Map(v.map(k=>[k.restriction,k])),re=[...D.map(k=>({subject:k.subject,predicate:Fe,object:k.object,provenance:hh,justification:[[ge(k.subject,Fe,k.via),ge(k.via,Fe,k.object)]]})),...K.map(k=>({subject:k.subject,predicate:Lt,object:k.object,provenance:bh,justification:[[ge(k.subject,Lt,k.via),ge(k.via,Fe,k.object)]]})),...q.map(k=>{let le=z(k.viaClass,Ko,k.object),[Te,zn]=le?[k.viaClass,k.object]:[k.object,k.viaClass],So=Y([M(k.subject,Lt,k.viaType),M(Te,Ko,zn),...k.viaClass!==k.viaType?[M(k.viaType,Fe,k.viaClass)]:[]]);return{subject:k.subject,predicate:Ko,object:k.object,provenance:Ml,justification:[[ge(k.subject,Lt,k.viaType),ge(Te,Ko,zn),...k.viaClass!==k.viaType?[ge(k.viaType,Fe,k.viaClass)]:[]]],...So.length?{premiseTrusts:So,ruleConfidence:Fl}:{}}}),...te.map(k=>{let le=Y([M(k.subject,k.viaProperty,k.viaValue),M(k.viaValue,Lt,k.viaType),M(k.object,In,k.viaPropertyKey),M(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[M(k.viaType,Fe,k.viaTarget)]:[]]);return{subject:k.subject,predicate:Lt,object:k.object,provenance:zl,justification:[[ge(k.subject,k.viaProperty,k.viaValue),ge(k.viaValue,Lt,k.viaType),ge(k.object,In,k.viaPropertyKey),ge(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[ge(k.viaType,Fe,k.viaTarget)]:[]]],...le.length?{premiseTrusts:le,ruleConfidence:Ul}:{}}}),...Ae.map(k=>{let le=pe.get(k.subject),Te=pe.get(k.object),zn=Y([le&&M(k.subject,In,le.property),M(k.subject,Cn,k.viaY1),Te&&M(k.object,In,Te.property),M(k.object,Cn,k.viaY2),M(k.viaY1,Fe,k.viaY2)]);return{subject:k.subject,predicate:Fe,object:k.object,provenance:Gl,justification:[[...le?[ge(k.subject,In,le.property)]:[],ge(k.subject,Cn,k.viaY1),...Te?[ge(k.object,In,Te.property)]:[],ge(k.object,Cn,k.viaY2),ge(k.viaY1,Fe,k.viaY2)]],...zn.length?{premiseTrusts:zn,ruleConfidence:ql}:{}}})],fe=re.map(k=>({id:ge(k.subject,k.predicate,k.object),subject:k.subject,predicate:k.predicate,object:k.object,environments:k.justification,write:k})),be=jh(p.concat(fe.map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object})))),Ie=new Map(p.map(k=>[k.id,k])),ue=k=>_s(k)||oo(k)||so(k),H=k=>R!=="delta"||I!==null&&(I.has(k.subject)||I.has(k.object)),se=p.filter(k=>ue(k.predicate)&&kh(k.provenance)&&qr(k).length<r&&H(k)).map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object,environments:qr(k),provenance:k.provenance})),et=[...fe,...se].sort((k,le)=>k.subject.localeCompare(le.subject)||k.predicate.localeCompare(le.predicate)||k.object.localeCompare(le.object)),De=0,Ve=!1,sn=0;for(let k of et){if(sn>=n){Ve=!0;break}sn+=1;let le=be(k,{maxEnvironments:r+1}),{kept:Te,truncated:zn}=Jk(k.environments,le,r);if(zn&&(Ve=!0),!(Te.length<=k.environments.length)){if(De+=Te.length-k.environments.length,k.write){k.write.justification=Te;continue}re.push({subject:k.subject,predicate:k.predicate,object:k.object,justification:Te,..._h(k.provenance,Te,So=>Ie.get(So)?.trust)||{}})}}let{ids:on}=await u(e,re),Xt=[],Ft=0;for(let k of D)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.via,rule:mh}),Ft+=1;for(let k of K)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.via,rule:gh}),Ft+=1;for(let k of q)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.viaClass,rule:Pl}),Ft+=1;for(let k of te)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.viaValue,rule:Dl}),Ft+=1;for(let k of Ae)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.viaY1,rule:Wl}),Ft+=1;let wi=Xt.length>=n;if($===null&&d&&!wi){let k=new Set(S);for(let le of on)k.add(le);await a.saveSyllogiseState(e,{version:1,factIds:[...k].sort(),completedAt:new Date().toISOString()})}return{derived:Xt,count:Xt.length,budget:n,depth:t,truncated:wi,mode:R,deltaSize:F,environmentsAdded:De,alternatesTruncated:Ve}}function kh(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function Xk(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();_s(u.predicate)?t.push([u.subject,u.object]):oo(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):so(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):Vr(u.predicate)?r.set(u.subject,u.object):Bl.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([J(u.predicate),u.object]))}let a=On(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:J(d),target:f}:null};return u=>{if(_s(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(oo(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 m of n.get(p)||[])if(m===d.target||l(m,d.target))return!0}}return!1}if(so(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 jh(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 m=String(p.predicate||"").trim().toLowerCase();_s(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)):oo(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):so(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):Vr(p.predicate)?l.set(p.subject,p.object):Bl.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=On(n),d=p=>s.get(p)||new Set,f=p=>{let m=a.get(p),h=l.get(p);return m&&h?{property:m,propertyKey:J(m),target:h}:null};return(p,{maxEnvironments:m=ia}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every(v=>t.has(v)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),h.push(y))};if(_s(p.predicate)){for(let y of[...d(p.subject)].sort()){if(h.length>=m)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([ge(p.subject,Fe,y),ge(y,Fe,p.object)])}if(h.length<m){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([ge(p.subject,In,y.property),ge(p.subject,Cn,y.target),ge(p.object,In,w.property),ge(p.object,Cn,w.target),ge(y.target,Fe,w.target)])}return h}if(oo(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(h.length>=m)break;w!==p.object&&d(w).has(p.object)&&b([ge(p.subject,Lt,w),ge(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([v])=>J(v)===y.propertyKey).sort((v,_)=>v[0].localeCompare(_[0])||v[1].localeCompare(_[1]));for(let[v,_]of w){if(h.length>=m)break;for(let $ of[...o.get(_)||[]].sort()){if(h.length>=m)break;$!==y.target&&!d($).has(y.target)||b([ge(p.subject,v,_),ge(_,Lt,$),ge(p.object,In,y.propertyKey),ge(p.object,Cn,y.target),...$!==y.target?[ge($,Fe,y.target)]:[]])}}}return h}if(so(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(h.length>=m)break;let _=r.has(`${v}${Le}${p.object}`),[$,x]=_?[v,p.object]:[p.object,v];b([ge(p.subject,Lt,w),ge($,Ko,x),...v!==w?[ge(w,Fe,v)]:[]])}return h}return h}}function Jk(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 _h(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=Qk.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 Zk(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=ia,store:i,sourceTags:a=[]}={}){let{loadMemory:l,readFactRows:c,removeFacts:u}=fh(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 m=J(t),h=J(n),g=ge(m,Fe,h),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=>qr(Z).length&&kh(Z.provenance)),z=new Map;for(let Z of M)for(let D of qr(Z))for(let U of D)z.has(U)||z.set(U,new Set),z.get(U).add(Z.id);let Y=0,ae=[g];for(;Y<o;Y+=1){let Z=new Set;for(let N of ae)for(let W of z.get(N)||[])E.has(W)||Z.add(W);let D=[...Z].map(N=>w.get(N)).sort((N,W)=>N.subject.localeCompare(W.subject)||N.predicate.localeCompare(W.predicate)||N.object.localeCompare(W.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=jh(U),L=Xk(U),C=!1,P=!1;ae=[];for(let N of D){if(E.size>=s){P=!0;break}let W=qr(N),V=W.filter(ce=>ce.every(K=>G.has(K)));if(V.length){V.length!==W.length&&j.set(N.id,V);continue}let ie=I(N,{maxEnvironments:r});if(ie.length){j.set(N.id,ie);continue}L(N)||(E.add(N.id),R.push(N.id),ae.push(N.id),C=!0)}if(P){A=!0;break}if(!C)break}!A&&Y>=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,Y)=>z[0].localeCompare(Y[0])).map(([z,Y])=>{let ae=w.get(z);return{subject:ae.subject,predicate:ae.predicate,object:ae.object,justification:Y,..._h(ae.provenance,Y,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 Vl(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=new Map;for(let[c,u]of s||[])!c||!u||c===u||(i.has(c)||i.set(c,new Set),i.get(c).add(u));let a=[];for(let[c,u]of n||[])c===e&&u&&a.push({node:u,path:[{subject:c,predicate:Lt,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Fe,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:Fe,object:p}]})}a=u}return null}var Fe,mh,hh,Lt,gh,bh,Ko,Pl,Ml,Fl,In,Cn,Dl,zl,Ul,ia,Le,_s,oo,so,Yo,Vr,Fk,Bl,Uk,Bk,Wl,Gl,ql,Gk,Vk,qr,Qk,qt=O(()=>{nn();Fe="rdfs:subClassOf",mh="subClassOf",hh=`entailed:${mh}`,Lt="rdf:type",gh="type",bh=`entailed:${gh}`,Ko="owl:disjointWith",Pl="disjointWith",Ml=`entailed:${Pl}`,Fl=.95,In="owl:onProperty",Cn="owl:someValuesFrom",Dl="someValuesFrom",zl=`entailed:${Dl}`,Ul=.95,ia=4,Le="\u241F",_s=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",oo=e=>String(e||"").trim().toLowerCase()==="rdf:type",so=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Yo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Vr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",Fk=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Bl=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);Uk="has",Bk={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Wl="someValuesFromSubsumption",Gl=`entailed:${Wl}`,ql=.95;Gk=.95;Vk=.95;qr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);Qk=new Map([[Ml,Fl],[zl,Ul],[Gl,ql]])});function Zo(e){let t=String(e||""),n=Rh.get(t);return n||(t.startsWith(Hl)?Xo+t.slice(Hl.length):t)}function Th(e){let t=String(e||""),n=ej.get(t);return n||(t.startsWith(Xo)?Hl+t.slice(Xo.length):null)}function Ch(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Vl(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function la(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Ih(i),c=i.filter(b=>(b.predicate===ca||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=Ch(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:Yl(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),m=f.filter(b=>b.polarity==="negative").map(b=>b.fact),h=m.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==h)||null;return{verdict:p.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:p,negative:m,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function Yl(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===Lt),l=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(h=>h.object===c&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let g=i.find(b=>b.subject===h&&r.has(b.object)&&(b.predicate===ca||b.predicate===Jo));return g?{name:h,polarity:g.predicate===Jo?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=Ih(i);return{klass:c,kinds:u.length,positive:f.filter(h=>h.polarity==="positive"),negative:f.filter(h=>h.polarity==="negative"),unknown:f.filter(h=>h.polarity==="unknown"),chain:Ch(o,c,p,m,s)}}function Xl(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!==ca||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),la(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(tj)}var Xo,Hl,aa,Rh,ej,Ah,ca,Jo,Kl,tj,Qo,Ih,ua=O(()=>{qt();Xo="mgxneg:",Hl="mgx:",aa="mgxneg:subClassOf",Rh=new Map([[Fe,aa]]),ej=new Map([...Rh].map(([e,t])=>[t,e]));Ah=e=>String(e||"").startsWith(Xo),ca="mgx:capableOf",Jo=Zo(ca),Kl=6,tj=(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]),Ih=e=>({typeEdges:e.filter(t=>t.predicate===Lt).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function da(e){let t=String(e||"");return Zl.has(t)?Jl:sj.has(t)||oj.test(t)?Hr:rj.has(t)?Oh:Ql}function ij(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(Pp.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function aj(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 eu(e,t){let n=t===Oh;if(!n&&t!==Hr)return null;let s=(e||[]).map(r=>({row:r,at:aj(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 Jl,Hr,Oh,Ql,nj,Zl,sj,oj,rj,Lh=O(()=>{ua();ws();Jl="merge",Hr="latest-observation-wins",Oh="first-claim-wins",Ql="contradiction",nj=["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"],Zl=new Set(nj.flatMap(e=>[e,Zo(e)])),sj=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"]),oj=/^mgx:has-exit-([a-z]+)$/,rj=new Set(["mgx:playedBy"])});function Xr(e){let t=String(e||""),n=t.indexOf(pa);return n<0?"":t.slice(n+pa.length)}function pj(e){let t=1,n=0;for(let s of e)t*=1-uj(s),n+=1;return n?dj(Math.min(1,1-t)):0}function Dh(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 Bh(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 Wh(e,t="",n=""){let s=t,o=n;for(let r of e)s=zh(s,r.assertedAt),o=Uh(o,r.assertedAt);return{earliest:s,latest:o}}function ou({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?pj(l.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:cj,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:Ln,key:"rollupEarliest",value:r},{prop:Nn,key:"rollupLatest",value:i},...c===void 0?[]:[{prop:tr,key:"rollupPrior",value:String(c)}]]}}function Gh({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(Bh).slice(8);if(!i.length)return null;let{earliest:a,latest:l}=Wh(i,xt(s,Ln),xt(s,Nn));return{rollup:ou({id:tu(e,t),sourceKey:`rollup:${t}`,template:ru(i[0].record||s),idsProp:er,ids:[...ha(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 qh({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(Bh),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:l}=Wh(i,xt(s,Ln),xt(s,Nn));return{rollup:ou({id:nu(e,t),sourceKey:t,template:ru(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 iu(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Rs(s),r=o?er:Kr,i=a=>su(xt(a,r));return ou({id:s,sourceKey:xt(e,"mgx:sourceId")||xt(t,"mgx:sourceId"),template:ru(xt(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:zh(xt(e,Ln),xt(t,Ln)),latest:Uh(xt(e,Nn),xt(t,Nn)),priorFor:o?n:void 0})}function Vh(e,t){if(!t)return!1;for(let n of e||[])if(ha(n).includes(t))return!0;return!1}var cj,Nh,Ph,fa,Mh,er,Kr,Yr,Ln,Nn,tr,pa,Fh,tu,nu,Rs,nr,ma,xt,su,ha,lj,uj,dj,zh,Uh,ru,au=O(()=>{cj="Fact",Nh=64,Ph=8,fa=8,Mh=2,er="mgx:rollupSourceIds",Kr="mgx:rollupRecordIds",Yr="mgx:rollupCount",Ln="mgx:rollupEarliest",Nn="mgx:rollupLatest",tr="mgx:rollupPrior",pa="@rollup:",Fh="#rollup",tu=(e,t)=>`${e}${pa}${t}`,nu=(e,t)=>`${e}@${t}${Fh}`,Rs=e=>String(e||"").includes(pa),nr=e=>String(e||"").endsWith(Fh),ma=e=>Rs(e)||nr(e);xt=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",su=e=>String(e||"").split(" ").filter(Boolean),ha=e=>su(xt(e,er)),lj=e=>su(xt(e,Kr)),uj=e=>Math.max(0,Math.min(1,Number(e)||0)),dj=e=>Number(e.toFixed(6));zh=(e,t)=>Dh(e,t,Math.min),Uh=(e,t)=>Dh(e,t,Math.max);ru=e=>({label:e?.label||"",subject:xt(e,"rdf:subject"),predicate:xt(e,"rdf:predicate"),object:xt(e,"rdf:object")})});function du(e){let t=String(e||"");return uu(t)?t.slice(0,-ya.length):""}function Hh(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 pu({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:xn,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:ba,key:"retractedRecordIds",value:i.join(" ")},{prop:cu,key:"retractedCount",value:String(i.length)},{prop:wa,key:"retractedAt",value:o||""},...a.length?[{prop:Jr,key:"provenance",value:a.join(" | ")}]:[]]}}function Yh({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...ro(o),...n].filter(Boolean);return a.length?pu({id:lu(e,t),sourceId:t,template:r||Kh(o),ids:a,retractedAt:Hh(io(o),s),tags:[...Qr(un(o,Jr)),...Qr(i)]}):null}function Xh(e,t){let n=Kh(un(e,"rdf:subject")?e:t);return pu({id:e?.id||t?.id,sourceId:un(e,"mgx:sourceId")||un(t,"mgx:sourceId"),template:n,ids:[...ro(e),...ro(t)],retractedAt:Hh(io(e),io(t)),tags:[...Qr(un(e,Jr)),...Qr(un(t,Jr))]})}function mj(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function hj(e,t,n=""){return!e||!t||!ro(e).includes(t)?!1:mj(n,io(e))}function $a(e,t,n=""){for(let s of e||[])if(hj(s,t,n))return!0;return!1}function gj(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 va(e){let t=du(e?.id);return t?{id:e.id,subject:t,predicate:ga,object:gj(io(e),ro(e)),provenance:un(e,Jr)}:null}function xa(e){if(!e||e.predicate!==ga)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?pu({id:`${t}${ya}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Qr(e.provenance)}):null}var xn,ga,ba,wa,cu,ya,Jr,lu,uu,un,fj,Qr,ro,io,Kh,fu=O(()=>{xn="Retraction",ga="mgx:retracted",ba="mgx:retractedRecordIds",wa="mgx:retractedAt",cu="mgx:retractedCount",ya="#retracted",Jr="mgx:factProvenance",lu=(e,t)=>`${e}@${t}${ya}`,uu=e=>String(e||"").endsWith(ya);un=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",fj=e=>String(e||"").split(" ").filter(Boolean),Qr=e=>String(e||"").split(" | ").filter(Boolean),ro=e=>fj(un(e,ba)),io=e=>un(e,wa);Kh=e=>({label:e?.label||"",subject:un(e,"rdf:subject"),predicate:un(e,"rdf:predicate"),object:un(e,"rdf:object")})});function os(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function Ej(e,t){(!e?.class||!wj.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function Sj(e,t){for(let i of["rdf:subject","rdf:predicate","rdf:object"])Zr(os(e,i))||t.push(`a Fact needs a non-empty ${i}`);for(let i of["rdf:subject","rdf:object"]){let a=os(e,i);a!==void 0&&$j.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=os(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:"";vj(s)&&!Qh.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=os(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=os(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 xj){let a=os(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)Qh.test(c)||t.push(`${i} must name Fact record ids (got ${JSON.stringify(c)})`)}}function kj(e,t){Zr(os(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=os(e,"mgx:ruleKind");if(!n||!Jh.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...Jh].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of yj[n])Zr(os(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function jj(e){let t=[];return Ej(e,t),e?.class==="Fact"&&Sj(e,t),e?.class==="Rule"&&kj(e,t),{ok:t.length===0,violations:t}}function mu(e){let t=jj(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 wj,Jh,yj,$j,Qh,vj,xj,Zr,Zh=O(()=>{wj=new Set(["Utterance","Fact","Session","Source","Rule"]),Jh=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),yj={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"]},$j=/[.!?]\s+\w/,Qh=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,vj=e=>e.includes("@")||/#v\d/.test(e),xj=["mgx:supersedes","mgx:supersededBy"];Zr=e=>typeof e=="string"&&e.trim().length>0});var eg={};Un(eg,{access:()=>Tj,appendFile:()=>Cj,basename:()=>Kj,copyFile:()=>Dj,createInterface:()=>Zj,createReadStream:()=>Uj,createRequire:()=>_j,createWriteStream:()=>Bj,default:()=>t_,dirname:()=>qj,existsSync:()=>Wj,fileURLToPath:()=>Xj,isAbsolute:()=>Hj,join:()=>Gj,mkdir:()=>Oj,mkdtemp:()=>Lj,randomBytes:()=>Jj,readFile:()=>Aj,readFileSync:()=>Rj,readdir:()=>zj,rename:()=>Nj,resolve:()=>Vj,rm:()=>Mj,sep:()=>Yj,spawnSync:()=>Qj,stat:()=>Fj,tmpdir:()=>e_,unlink:()=>Pj,writeFile:()=>Ij});var dt,_j,Rj,Tj,Aj,Ij,Cj,Oj,Lj,Nj,Pj,Mj,Fj,Dj,zj,Uj,Bj,Wj,Gj,qj,Vj,Hj,Kj,Yj,Xj,Jj,Qj,Zj,e_,t_,tg=O(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},_j=dt("createRequire"),Rj=dt("readFileSync"),Tj=dt("access"),Aj=dt("readFile"),Ij=dt("writeFile"),Cj=dt("appendFile"),Oj=dt("mkdir"),Lj=dt("mkdtemp"),Nj=dt("rename"),Pj=dt("unlink"),Mj=dt("rm"),Fj=dt("stat"),Dj=dt("copyFile"),zj=dt("readdir"),Uj=dt("createReadStream"),Bj=dt("createWriteStream"),Wj=()=>!1,Gj=(...e)=>e.join("/"),qj=e=>String(e).replace(/\/[^/]*$/,""),Vj=(...e)=>e.join("/"),Hj=e=>String(e).startsWith("/"),Kj=e=>String(e).split("/").pop(),Yj="/",Xj=e=>String(e),Jj=dt("randomBytes"),Qj=dt("spawnSync"),Zj=dt("createInterface"),e_=()=>"/tmp",t_={}});var n_,ei,hu=O(()=>{n_=/^(\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(n_);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 s_(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 Nl(e,{config:t,source:n,tel:s}){return(await hh(e,{config:t,source:n,tel:s})).text}var Pl=O(()=>{_t();Ue();Bt();ta();_r();Oe();ks();oa();ra();Ge();Nl.ownsGraphLoad=!0});function gh(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"symbol"),"symbol");return Uf(Po(t,s))}var bh=O(()=>{Oe();Ge()});function ia(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 ia(e).toString(16).padStart(8,"0")}function qk(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,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let v=a(h,6)^a(h,11)^a(h,25),_=h&g^~h&b,$=y+v+_+Gk[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=h,h=m+$>>>0,m=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]+m>>>0,r[4]=r[4]+h>>>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 Vk(e,t){let n=qk(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function J(e){let t=os(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 rs(e){let t=os(e);return Kk.get(t)??t}function ge(e,t,n){return Ho(J(e),rs(t),J(n))}var Gk,Hk,os,Kk,Ho,nn=O(()=>{Gk=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]);Hk=2e3,os=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,Hk);Kk=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:${Vk(`${e}\0${t}\0${n}`,8)}`});var un={};Bn(un,{CARDINALITY_RULE_CONFIDENCE:()=>tj,CAX_DW_RULE:()=>Fl,CAX_DW_RULE_CONFIDENCE:()=>zl,CAX_MAXC0_RULE_CONFIDENCE:()=>sj,CLS_SVF1_RULE:()=>Ul,CLS_SVF1_RULE_CONFIDENCE:()=>Wl,DEFAULT_MAX_ENVIRONMENTS:()=>aa,DISJOINT_PREDICATE:()=>Ko,ENTAILED_DISJOINT_PROVENANCE:()=>Dl,ENTAILED_PROVENANCE:()=>$h,ENTAILED_SCM_SVF_PROVENANCE:()=>Vl,ENTAILED_SVF1_PROVENANCE:()=>Bl,ENTAILED_TYPE_PROVENANCE:()=>xh,ON_PROPERTY_PREDICATE:()=>In,SCM_SVF_RULE:()=>ql,SCM_SVF_RULE_CONFIDENCE:()=>Hl,SOME_VALUES_FROM_PREDICATE:()=>Cn,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>Lt,buildCardinalityRestrictions:()=>ej,buildRelevanceFrontier:()=>Ml,deriveDisjointViolations:()=>jh,deriveSomeValuesFromApplication:()=>_h,deriveSomeValuesFromSubsumption:()=>Rh,deriveSubClassClosure:()=>Eh,deriveSubClassClosureDelta:()=>Sh,deriveTypePropagation:()=>kh,entailedTrustFrom:()=>Xk,findConsistencyViolations:()=>rj,findIsaChain:()=>Kl,proveCardinalityAtLeast:()=>nj,proveMaxCardinalityZeroDenial:()=>oj,retractSubClassOf:()=>uj,syllogise:()=>ij});function wh(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 Xk(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 is(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=J(s);o&&n.add(o)}return n.size?n:null}function Eh(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:is(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,m]of r)for(let h of m){let g=r.get(h);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,h,b)&&d.push([p,h,b,y])}}if(!d.length)break;d.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let f=!1;for(let[p,m,h,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:h,via:m}),r.has(p)||r.set(p,new Set),r.get(p).add(h),f=!0}if(l.length>=n||!f)break}return l}function Sh(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[m,h]of e||[])!m||!h||m===h||(r.add(`${m}${Le}${h}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),a.has(h)||a.set(h,new Set),a.get(h).add(m));let l=[],c=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let g=`${m}${Le}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:is(o),d=(m,h,g)=>!u||u.has(m)||u.has(h)||u.has(g),f=[],p=new Set;for(let m=0;m<n&&l.length;m+=1){let h=[],g=(w,v,_)=>{if(w===_)return;let $=`${w}${Le}${_}`;r.has($)||p.has($)||d(w,v,_)&&h.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(!h.length)break;h.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 h)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 On(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 Jk(e){return On((e||[]).map(([t,n])=>[n,t]))}function Ml(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(Rs(c.predicate)?n.push([c.subject,c.object]):oo(c.predicate)?s.push([c.subject,c.object]):Yo(c.predicate)?o.set(c.subject,c.object):Vr(c.predicate)&&r.set(c.subject,c.object));let i=Jk(n),a=new Set;for(let c of t||[]){let u=J(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 kh(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=On(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Le}${m}`);let l=s instanceof Set?s.size?s:null:is(s),c=(p,m,h)=>!l||l.has(p)||l.has(m)||l.has(h),u=[];for(let[p,m]of e||[]){if(!p||!m)continue;let h=`${p}${Le}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,m,g)&&u.push([p,m,g,b])}}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let d=[],f=new Set;for(let[p,m,h,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:h,via:m})}return d}function jh(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Le}${h}`),a.add(`${h}${Le}${m}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(m));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:is(o),u=(m,h,g)=>!c||c.has(m)||c.has(h)||c.has(g),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let g=`${m}${Le}${h}`;if(!l.has(g)){l.add(g);for(let b of[h,...r(h)]){let y=i.get(b);if(y)for(let w of y){if(w===m)continue;let v=`${m}${Le}${w}`;a.has(v)||u(m,h,w)&&d.push([m,h,b,w,v])}}}}d.sort((m,h)=>m[0].localeCompare(h[0])||m[3].localeCompare(h[3])||m[2].localeCompare(h[2])||m[1].localeCompare(h[1]));let f=[],p=new Set;for(let[m,h,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:m,object:b,viaType:h,viaClass:g})}return f}function _h(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=On(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:is(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=J(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 m=[],h=new Set;for(let[g,b,y,w,v,_,$,x]of p)if(!h.has(x)){if(m.length>=o)break;h.add(x),m.push({subject:g,object:$,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:v,viaTarget:_})}return m}function ej(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(Yk(r.predicate))s.set(r.subject,r.object);else{let i=Zk[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)!==Qk)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 Rh(e,t,{budget:n=50,focus:s=null}={}){let o=On(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=J(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:is(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 m of f){if(p.restriction===m.restriction||p.target===m.target||!o(p.target).has(m.target))continue;let h=`${p.restriction}${Le}${m.restriction}`;i.has(h)||l(p.restriction,m.restriction)&&c.push([p.restriction,m.restriction,p.target,m.target,h])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,m,h,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:m,viaY2:h})}return u}function Th(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=On(e),a=r instanceof Set?r.size?r:null:is(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 m=u.get(p);if(m&&s(m))return{viaClass:f,viaRestriction:p,record:m}}}return null}function nj(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Th(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 oj(e,t,n,s,o={}){if(!s)return null;let r=Th(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 rj(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map;for(let[p,m]of n||[])!p||!m||p===m||(i.has(p)||i.set(p,new Set),i.get(p).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(p));if(!i.size)return[];let a=new Map;for(let[p,m]of e||[])!p||!m||(a.has(p)||a.set(p,new Set),a.get(p).add(m));let l=o instanceof Set?o.size?o:null:is(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,m]of a){if(!c(p))continue;let h=[...m].sort();for(let g=0;g<h.length;g+=1)for(let b=g+1;b<h.length;b+=1){let[y,w]=[h[g],h[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,m)=>p[0].localeCompare(m[0])||p[1].localeCompare(m[1])||p[2].localeCompare(m[2]));let f=[];for(let[p,m,h,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:m,classB:h,viaA:g,viaB:b})}return f}async function ij(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=aa,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=wh(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(k=>Rs(k.predicate)).map(k=>[k.subject,k.object]),h=p.filter(k=>oo(k.predicate)).map(k=>[k.subject,k.object]),g=p.filter(k=>so(k.predicate)).map(k=>[k.subject,k.object]),b=new Map,y=new Map,w=[];for(let k of p){let le=String(k.predicate||"").trim().toLowerCase();Yo(k.predicate)?b.set(k.subject,k.object):Vr(k.predicate)?y.set(k.subject,k.object):Gl.has(le)||w.push([k.subject,k.predicate,k.object])}let v=[];for(let[k,le]of b){let Te=y.get(k);Te&&v.push({restriction:k,property:le,target:Te})}let _=is(s),$=o&&_?Ml(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,le,Te)=>T.get(`${k}${Le}${le}${Le}${Te}`),z=(k,le,Te)=>T.has(`${k}${Le}${le}${Le}${Te}`),Y=k=>k.filter(le=>typeof le=="number"),ae=R==="delta"&&!A.length,Z=R==="delta"?A.filter(k=>Rs(k.predicate)).map(k=>[k.subject,k.object]):[],D=R==="delta"?Z.length?Sh(m,Z,{depth:t,budget:n,focus:$}):[]:Eh(m,{depth:t,budget:n,focus:$}),U=m.concat(D.map(k=>[k.subject,k.object])),G=$,I=null;if(R==="delta"&&!ae){let k=p.concat(D.map(Te=>({subject:Te.subject,predicate:Fe,object:Te.object}))),le=[];for(let Te of A)le.push(Te.subject,Te.object);I=Ml(k,le),G=I}let L=k=>!I||I.has(k),C=I?h.filter(([k,le])=>L(k)||L(le)):h,P=new Set;if(I)for(let k of A)so(k.predicate)&&(P.add(k.subject),P.add(k.object));let N=I&&P.size?On(U):null,W=I?h.filter(([k,le])=>L(k)||L(le)||N&&[...N(le)].some(Te=>P.has(Te))):h,V=new Set;if(I){for(let k of A)if(Yo(k.predicate)||Vr(k.predicate)){let le=b.get(k.subject);le&&V.add(J(le))}}let ie=I?w.filter(([k,le,Te])=>L(k)||L(Te)||V.has(J(le))):w,ce=Math.max(0,n-D.length),K=ce>0&&!ae?kh(C,U,{budget:ce,focus:G,presentTypeEdges:h}):[],ee=Math.max(0,n-D.length-K.length),q=ee>0&&!ae?jh(W,U,g,{budget:ee,focus:G}):[],ne=Math.max(0,n-D.length-K.length-q.length),te=ne>0&&v.length&&!ae?_h(ie,h,U,v,{budget:ne,focus:G}):[],xe=Math.max(0,n-D.length-K.length-q.length-te.length),Ae=xe>0&&v.length>1&&!ae?Rh(v,U,{budget:xe,focus:G}):[],pe=new Map(v.map(k=>[k.restriction,k])),re=[...D.map(k=>({subject:k.subject,predicate:Fe,object:k.object,provenance:$h,justification:[[ge(k.subject,Fe,k.via),ge(k.via,Fe,k.object)]]})),...K.map(k=>({subject:k.subject,predicate:Lt,object:k.object,provenance:xh,justification:[[ge(k.subject,Lt,k.via),ge(k.via,Fe,k.object)]]})),...q.map(k=>{let le=z(k.viaClass,Ko,k.object),[Te,Un]=le?[k.viaClass,k.object]:[k.object,k.viaClass],So=Y([M(k.subject,Lt,k.viaType),M(Te,Ko,Un),...k.viaClass!==k.viaType?[M(k.viaType,Fe,k.viaClass)]:[]]);return{subject:k.subject,predicate:Ko,object:k.object,provenance:Dl,justification:[[ge(k.subject,Lt,k.viaType),ge(Te,Ko,Un),...k.viaClass!==k.viaType?[ge(k.viaType,Fe,k.viaClass)]:[]]],...So.length?{premiseTrusts:So,ruleConfidence:zl}:{}}}),...te.map(k=>{let le=Y([M(k.subject,k.viaProperty,k.viaValue),M(k.viaValue,Lt,k.viaType),M(k.object,In,k.viaPropertyKey),M(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[M(k.viaType,Fe,k.viaTarget)]:[]]);return{subject:k.subject,predicate:Lt,object:k.object,provenance:Bl,justification:[[ge(k.subject,k.viaProperty,k.viaValue),ge(k.viaValue,Lt,k.viaType),ge(k.object,In,k.viaPropertyKey),ge(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[ge(k.viaType,Fe,k.viaTarget)]:[]]],...le.length?{premiseTrusts:le,ruleConfidence:Wl}:{}}}),...Ae.map(k=>{let le=pe.get(k.subject),Te=pe.get(k.object),Un=Y([le&&M(k.subject,In,le.property),M(k.subject,Cn,k.viaY1),Te&&M(k.object,In,Te.property),M(k.object,Cn,k.viaY2),M(k.viaY1,Fe,k.viaY2)]);return{subject:k.subject,predicate:Fe,object:k.object,provenance:Vl,justification:[[...le?[ge(k.subject,In,le.property)]:[],ge(k.subject,Cn,k.viaY1),...Te?[ge(k.object,In,Te.property)]:[],ge(k.object,Cn,k.viaY2),ge(k.viaY1,Fe,k.viaY2)]],...Un.length?{premiseTrusts:Un,ruleConfidence:Hl}:{}}})],fe=re.map(k=>({id:ge(k.subject,k.predicate,k.object),subject:k.subject,predicate:k.predicate,object:k.object,environments:k.justification,write:k})),be=Ih(p.concat(fe.map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object})))),Ie=new Map(p.map(k=>[k.id,k])),ue=k=>Rs(k)||oo(k)||so(k),H=k=>R!=="delta"||I!==null&&(I.has(k.subject)||I.has(k.object)),se=p.filter(k=>ue(k.predicate)&&Ah(k.provenance)&&qr(k).length<r&&H(k)).map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object,environments:qr(k),provenance:k.provenance})),et=[...fe,...se].sort((k,le)=>k.subject.localeCompare(le.subject)||k.predicate.localeCompare(le.predicate)||k.object.localeCompare(le.object)),De=0,Ve=!1,on=0;for(let k of et){if(on>=n){Ve=!0;break}on+=1;let le=be(k,{maxEnvironments:r+1}),{kept:Te,truncated:Un}=cj(k.environments,le,r);if(Un&&(Ve=!0),!(Te.length<=k.environments.length)){if(De+=Te.length-k.environments.length,k.write){k.write.justification=Te;continue}re.push({subject:k.subject,predicate:k.predicate,object:k.object,justification:Te,...Ch(k.provenance,Te,So=>Ie.get(So)?.trust)||{}})}}let{ids:rn}=await u(e,re),Xt=[],zt=0;for(let k of D)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.via,rule:yh}),zt+=1;for(let k of K)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.via,rule:vh}),zt+=1;for(let k of q)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.viaClass,rule:Fl}),zt+=1;for(let k of te)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.viaValue,rule:Ul}),zt+=1;for(let k of Ae)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.viaY1,rule:ql}),zt+=1;let yi=Xt.length>=n;if($===null&&d&&!yi){let k=new Set(S);for(let le of rn)k.add(le);await a.saveSyllogiseState(e,{version:1,factIds:[...k].sort(),completedAt:new Date().toISOString()})}return{derived:Xt,count:Xt.length,budget:n,depth:t,truncated:yi,mode:R,deltaSize:F,environmentsAdded:De,alternatesTruncated:Ve}}function Ah(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function aj(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();Rs(u.predicate)?t.push([u.subject,u.object]):oo(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):so(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):Vr(u.predicate)?r.set(u.subject,u.object):Gl.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([J(u.predicate),u.object]))}let a=On(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:J(d),target:f}:null};return u=>{if(Rs(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(oo(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 m of n.get(p)||[])if(m===d.target||l(m,d.target))return!0}}return!1}if(so(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 Ih(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 m=String(p.predicate||"").trim().toLowerCase();Rs(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)):oo(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):so(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):Vr(p.predicate)?l.set(p.subject,p.object):Gl.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=On(n),d=p=>s.get(p)||new Set,f=p=>{let m=a.get(p),h=l.get(p);return m&&h?{property:m,propertyKey:J(m),target:h}:null};return(p,{maxEnvironments:m=aa}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every(v=>t.has(v)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),h.push(y))};if(Rs(p.predicate)){for(let y of[...d(p.subject)].sort()){if(h.length>=m)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([ge(p.subject,Fe,y),ge(y,Fe,p.object)])}if(h.length<m){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([ge(p.subject,In,y.property),ge(p.subject,Cn,y.target),ge(p.object,In,w.property),ge(p.object,Cn,w.target),ge(y.target,Fe,w.target)])}return h}if(oo(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(h.length>=m)break;w!==p.object&&d(w).has(p.object)&&b([ge(p.subject,Lt,w),ge(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([v])=>J(v)===y.propertyKey).sort((v,_)=>v[0].localeCompare(_[0])||v[1].localeCompare(_[1]));for(let[v,_]of w){if(h.length>=m)break;for(let $ of[...o.get(_)||[]].sort()){if(h.length>=m)break;$!==y.target&&!d($).has(y.target)||b([ge(p.subject,v,_),ge(_,Lt,$),ge(p.object,In,y.propertyKey),ge(p.object,Cn,y.target),...$!==y.target?[ge($,Fe,y.target)]:[]])}}}return h}if(so(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(h.length>=m)break;let _=r.has(`${v}${Le}${p.object}`),[$,x]=_?[v,p.object]:[p.object,v];b([ge(p.subject,Lt,w),ge($,Ko,x),...v!==w?[ge(w,Fe,v)]:[]])}return h}return h}}function cj(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 Ch(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=lj.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 uj(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=aa,store:i,sourceTags:a=[]}={}){let{loadMemory:l,readFactRows:c,removeFacts:u}=wh(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 m=J(t),h=J(n),g=ge(m,Fe,h),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=>qr(Z).length&&Ah(Z.provenance)),z=new Map;for(let Z of M)for(let D of qr(Z))for(let U of D)z.has(U)||z.set(U,new Set),z.get(U).add(Z.id);let Y=0,ae=[g];for(;Y<o;Y+=1){let Z=new Set;for(let N of ae)for(let W of z.get(N)||[])E.has(W)||Z.add(W);let D=[...Z].map(N=>w.get(N)).sort((N,W)=>N.subject.localeCompare(W.subject)||N.predicate.localeCompare(W.predicate)||N.object.localeCompare(W.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=Ih(U),L=aj(U),C=!1,P=!1;ae=[];for(let N of D){if(E.size>=s){P=!0;break}let W=qr(N),V=W.filter(ce=>ce.every(K=>G.has(K)));if(V.length){V.length!==W.length&&j.set(N.id,V);continue}let ie=I(N,{maxEnvironments:r});if(ie.length){j.set(N.id,ie);continue}L(N)||(E.add(N.id),R.push(N.id),ae.push(N.id),C=!0)}if(P){A=!0;break}if(!C)break}!A&&Y>=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,Y)=>z[0].localeCompare(Y[0])).map(([z,Y])=>{let ae=w.get(z);return{subject:ae.subject,predicate:ae.predicate,object:ae.object,justification:Y,...Ch(ae.provenance,Y,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 Kl(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=new Map;for(let[c,u]of s||[])!c||!u||c===u||(i.has(c)||i.set(c,new Set),i.get(c).add(u));let a=[];for(let[c,u]of n||[])c===e&&u&&a.push({node:u,path:[{subject:c,predicate:Lt,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Fe,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:Fe,object:p}]})}a=u}return null}var Fe,yh,$h,Lt,vh,xh,Ko,Fl,Dl,zl,In,Cn,Ul,Bl,Wl,aa,Le,Rs,oo,so,Yo,Vr,Yk,Gl,Qk,Zk,ql,Vl,Hl,tj,sj,qr,lj,Ht=O(()=>{nn();Fe="rdfs:subClassOf",yh="subClassOf",$h=`entailed:${yh}`,Lt="rdf:type",vh="type",xh=`entailed:${vh}`,Ko="owl:disjointWith",Fl="disjointWith",Dl=`entailed:${Fl}`,zl=.95,In="owl:onProperty",Cn="owl:someValuesFrom",Ul="someValuesFrom",Bl=`entailed:${Ul}`,Wl=.95,aa=4,Le="\u241F",Rs=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",oo=e=>String(e||"").trim().toLowerCase()==="rdf:type",so=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Yo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Vr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",Yk=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Gl=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);Qk="has",Zk={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};ql="someValuesFromSubsumption",Vl=`entailed:${ql}`,Hl=.95;tj=.95;sj=.95;qr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);lj=new Map([[Dl,zl],[Bl,Wl],[Vl,Hl]])});function Zo(e){let t=String(e||""),n=Oh.get(t);return n||(t.startsWith(Yl)?Xo+t.slice(Yl.length):t)}function Lh(e){let t=String(e||""),n=dj.get(t);return n||(t.startsWith(Xo)?Yl+t.slice(Xo.length):null)}function Mh(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Kl(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function ua(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Ph(i),c=i.filter(b=>(b.predicate===la||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=Mh(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:Jl(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),m=f.filter(b=>b.polarity==="negative").map(b=>b.fact),h=m.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==h)||null;return{verdict:p.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:p,negative:m,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function Jl(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===Lt),l=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(h=>h.object===c&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let g=i.find(b=>b.subject===h&&r.has(b.object)&&(b.predicate===la||b.predicate===Jo));return g?{name:h,polarity:g.predicate===Jo?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=Ph(i);return{klass:c,kinds:u.length,positive:f.filter(h=>h.polarity==="positive"),negative:f.filter(h=>h.polarity==="negative"),unknown:f.filter(h=>h.polarity==="unknown"),chain:Mh(o,c,p,m,s)}}function Ql(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!==la||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),ua(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(pj)}var Xo,Yl,ca,Oh,dj,Nh,la,Jo,Xl,pj,Qo,Ph,da=O(()=>{Ht();Xo="mgxneg:",Yl="mgx:",ca="mgxneg:subClassOf",Oh=new Map([[Fe,ca]]),dj=new Map([...Oh].map(([e,t])=>[t,e]));Nh=e=>String(e||"").startsWith(Xo),la="mgx:capableOf",Jo=Zo(la),Xl=6,pj=(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]),Ph=e=>({typeEdges:e.filter(t=>t.predicate===Lt).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function pa(e){let t=String(e||"");return tu.has(t)?Zl:mj.has(t)||hj.test(t)?Hr:gj.has(t)?Fh:eu}function bj(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(Up.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function wj(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(bj(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function nu(e,t){let n=t===Fh;if(!n&&t!==Hr)return null;let s=(e||[]).map(r=>({row:r,at:wj(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 Zl,Hr,Fh,eu,fj,tu,mj,hj,gj,Dh=O(()=>{da();Hn();Zl="merge",Hr="latest-observation-wins",Fh="first-claim-wins",eu="contradiction",fj=["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"],tu=new Set(fj.flatMap(e=>[e,Zo(e)])),mj=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"]),hj=/^mgx:has-exit-([a-z]+)$/,gj=new Set(["mgx:playedBy"])});function Xr(e){let t=String(e||""),n=t.indexOf(fa);return n<0?"":t.slice(n+fa.length)}function Ej(e){let t=1,n=0;for(let s of e)t*=1-vj(s),n+=1;return n?xj(Math.min(1,1-t)):0}function Gh(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 Hh(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 Kh(e,t="",n=""){let s=t,o=n;for(let r of e)s=qh(s,r.assertedAt),o=Vh(o,r.assertedAt);return{earliest:s,latest:o}}function iu({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?Ej(l.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:yj,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:Ln,key:"rollupEarliest",value:r},{prop:Nn,key:"rollupLatest",value:i},...c===void 0?[]:[{prop:tr,key:"rollupPrior",value:String(c)}]]}}function Yh({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(Hh).slice(8);if(!i.length)return null;let{earliest:a,latest:l}=Kh(i,Et(s,Ln),Et(s,Nn));return{rollup:iu({id:su(e,t),sourceKey:`rollup:${t}`,template:au(i[0].record||s),idsProp:er,ids:[...ga(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 Xh({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(Hh),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:l}=Kh(i,Et(s,Ln),Et(s,Nn));return{rollup:iu({id:ou(e,t),sourceKey:t,template:au(i[0].record||s),idsProp:Kr,ids:[...$j(s),...i.map(u=>u.id)],earliest:a,latest:l}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function cu(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Ts(s),r=o?er:Kr,i=a=>ru(Et(a,r));return iu({id:s,sourceKey:Et(e,"mgx:sourceId")||Et(t,"mgx:sourceId"),template:au(Et(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:qh(Et(e,Ln),Et(t,Ln)),latest:Vh(Et(e,Nn),Et(t,Nn)),priorFor:o?n:void 0})}function Jh(e,t){if(!t)return!1;for(let n of e||[])if(ga(n).includes(t))return!0;return!1}var yj,zh,Uh,ma,Bh,er,Kr,Yr,Ln,Nn,tr,fa,Wh,su,ou,Ts,nr,ha,Et,ru,ga,$j,vj,xj,qh,Vh,au,lu=O(()=>{yj="Fact",zh=64,Uh=8,ma=8,Bh=2,er="mgx:rollupSourceIds",Kr="mgx:rollupRecordIds",Yr="mgx:rollupCount",Ln="mgx:rollupEarliest",Nn="mgx:rollupLatest",tr="mgx:rollupPrior",fa="@rollup:",Wh="#rollup",su=(e,t)=>`${e}${fa}${t}`,ou=(e,t)=>`${e}@${t}${Wh}`,Ts=e=>String(e||"").includes(fa),nr=e=>String(e||"").endsWith(Wh),ha=e=>Ts(e)||nr(e);Et=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",ru=e=>String(e||"").split(" ").filter(Boolean),ga=e=>ru(Et(e,er)),$j=e=>ru(Et(e,Kr)),vj=e=>Math.max(0,Math.min(1,Number(e)||0)),xj=e=>Number(e.toFixed(6));qh=(e,t)=>Gh(e,t,Math.min),Vh=(e,t)=>Gh(e,t,Math.max);au=e=>({label:e?.label||"",subject:Et(e,"rdf:subject"),predicate:Et(e,"rdf:predicate"),object:Et(e,"rdf:object")})});function fu(e){let t=String(e||"");return pu(t)?t.slice(0,-$a.length):""}function Qh(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 mu({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:sn,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:wa,key:"retractedRecordIds",value:i.join(" ")},{prop:uu,key:"retractedCount",value:String(i.length)},{prop:ya,key:"retractedAt",value:o||""},...a.length?[{prop:Jr,key:"provenance",value:a.join(" | ")}]:[]]}}function eg({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...ro(o),...n].filter(Boolean);return a.length?mu({id:du(e,t),sourceId:t,template:r||Zh(o),ids:a,retractedAt:Qh(io(o),s),tags:[...Qr(dn(o,Jr)),...Qr(i)]}):null}function tg(e,t){let n=Zh(dn(e,"rdf:subject")?e:t);return mu({id:e?.id||t?.id,sourceId:dn(e,"mgx:sourceId")||dn(t,"mgx:sourceId"),template:n,ids:[...ro(e),...ro(t)],retractedAt:Qh(io(e),io(t)),tags:[...Qr(dn(e,Jr)),...Qr(dn(t,Jr))]})}function kj(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function jj(e,t,n=""){return!e||!t||!ro(e).includes(t)?!1:kj(n,io(e))}function va(e,t,n=""){for(let s of e||[])if(jj(s,t,n))return!0;return!1}function _j(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function Rj(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 xa(e){let t=fu(e?.id);return t?{id:e.id,subject:t,predicate:ba,object:_j(io(e),ro(e)),provenance:dn(e,Jr)}:null}function Ea(e){if(!e||e.predicate!==ba)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=Rj(e.object);return o.length?mu({id:`${t}${$a}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Qr(e.provenance)}):null}var sn,ba,wa,ya,uu,$a,Jr,du,pu,dn,Sj,Qr,ro,io,Zh,hu=O(()=>{sn="Retraction",ba="mgx:retracted",wa="mgx:retractedRecordIds",ya="mgx:retractedAt",uu="mgx:retractedCount",$a="#retracted",Jr="mgx:factProvenance",du=(e,t)=>`${e}@${t}${$a}`,pu=e=>String(e||"").endsWith($a);dn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Sj=e=>String(e||"").split(" ").filter(Boolean),Qr=e=>String(e||"").split(" | ").filter(Boolean),ro=e=>Sj(dn(e,wa)),io=e=>dn(e,ya);Zh=e=>({label:e?.label||"",subject:dn(e,"rdf:subject"),predicate:dn(e,"rdf:predicate"),object:dn(e,"rdf:object")})});var Tj,Aj,Ij,Cj,gu,n0,ng=O(()=>{Hn();Tj="mgx:worldName",Aj="mgx:nodeName",Ij="mgx:playedBy",Cj="mgx:waved",gu="mgx:invitedBy",n0=Object.freeze([Tj,Aj,Ij,Cj,gu])});function Sa(e){let t=new Set;for(let n of e||[])n?.predicate===gu&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function bu(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function ka({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=bu(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 wu=O(()=>{ng()});function as(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function Fj(e,t){(!e?.class||!Oj.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function Dj(e,t){for(let i of["rdf:subject","rdf:predicate","rdf:object"])Zr(as(e,i))||t.push(`a Fact needs a non-empty ${i}`);for(let i of["rdf:subject","rdf:object"]){let a=as(e,i);a!==void 0&&Nj.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=as(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:"";Pj(s)&&!og.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=as(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=as(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 Mj){let a=as(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)og.test(c)||t.push(`${i} must name Fact record ids (got ${JSON.stringify(c)})`)}}function zj(e,t){Zr(as(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=as(e,"mgx:ruleKind");if(!n||!sg.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...sg].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of Lj[n])Zr(as(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function Uj(e){let t=[];return Fj(e,t),e?.class==="Fact"&&Dj(e,t),e?.class==="Rule"&&zj(e,t),{ok:t.length===0,violations:t}}function yu(e){let t=Uj(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 Oj,sg,Lj,Nj,og,Pj,Mj,Zr,rg=O(()=>{Oj=new Set(["Utterance","Fact","Session","Source","Rule"]),sg=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),Lj={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"]},Nj=/[.!?]\s+\w/,og=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,Pj=e=>e.includes("@")||/#v\d/.test(e),Mj=["mgx:supersedes","mgx:supersededBy"];Zr=e=>typeof e=="string"&&e.trim().length>0});var ig={};Bn(ig,{access:()=>Gj,appendFile:()=>Hj,basename:()=>l_,copyFile:()=>e_,createInterface:()=>m_,createReadStream:()=>n_,createRequire:()=>Bj,createWriteStream:()=>s_,default:()=>g_,dirname:()=>i_,existsSync:()=>o_,fileURLToPath:()=>d_,isAbsolute:()=>c_,join:()=>r_,mkdir:()=>Kj,mkdtemp:()=>Yj,randomBytes:()=>p_,readFile:()=>qj,readFileSync:()=>Wj,readdir:()=>t_,rename:()=>Xj,resolve:()=>a_,rm:()=>Qj,sep:()=>u_,spawnSync:()=>f_,stat:()=>Zj,tmpdir:()=>h_,unlink:()=>Jj,writeFile:()=>Vj});var dt,Bj,Wj,Gj,qj,Vj,Hj,Kj,Yj,Xj,Jj,Qj,Zj,e_,t_,n_,s_,o_,r_,i_,a_,c_,l_,u_,d_,p_,f_,m_,h_,g_,ag=O(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Bj=dt("createRequire"),Wj=dt("readFileSync"),Gj=dt("access"),qj=dt("readFile"),Vj=dt("writeFile"),Hj=dt("appendFile"),Kj=dt("mkdir"),Yj=dt("mkdtemp"),Xj=dt("rename"),Jj=dt("unlink"),Qj=dt("rm"),Zj=dt("stat"),e_=dt("copyFile"),t_=dt("readdir"),n_=dt("createReadStream"),s_=dt("createWriteStream"),o_=()=>!1,r_=(...e)=>e.join("/"),i_=e=>String(e).replace(/\/[^/]*$/,""),a_=(...e)=>e.join("/"),c_=e=>String(e).startsWith("/"),l_=e=>String(e).split("/").pop(),u_="/",d_=e=>String(e),p_=dt("randomBytes"),f_=dt("spawnSync"),m_=dt("createInterface"),h_=()=>"/tmp",g_={}});var b_,ei,$u=O(()=>{b_=/^(\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(b_);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 w_(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function y_(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,ao=O(()=>{he=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=s_(n.toml,n.ptr),r=o_(n.toml,s,o);super(`Invalid TOML document: ${t}
87
+ `))}return o}var he,ao=O(()=>{he=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=w_(n.toml,n.ptr),r=y_(n.toml,s,o);super(`Invalid TOML document: ${t}
88
88
 
89
- ${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function Ea(e,t){let n=e[t++],s=n,o=n==="'",r=n===e[t]&&n===e[t+1];r&&(e[t+=2]===`
89
+ ${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function ja(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),m=p>=48&&p<=57?p-48:p>=65&&p<=70?p-65+10:p>=97&&p<=102?p-97+10:-1;if(m<0)throw new he("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});u=u<<4|m}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 ng(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=r_.test(e);if(o||i_.test(e)){if(a_.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 r_,i_,a_,gu=O(()=>{hu();ao();r_=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,i_=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,a_=/^[+-]?0[0-9_]/});function Sa(e,t=0,n=e.length){let s=e.indexOf(`
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 cg(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=$_.test(e);if(o||v_.test(e)){if(x_.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 $_,v_,x_,vu=O(()=>{$u();ao();$_=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,v_=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,x_=/^[+-]?0[0-9_]/});function _a(e,t=0,n=e.length){let s=e.indexOf(`
95
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===`
96
96
  `)return n;if(s==="\r"&&e[n+1]===`
97
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 Pn(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 sg(e,t,n,s,o=!1){if(!s)return t=Sa(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=Sa(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
99
+ `);)t++;if(s||o!=="#")break;t=sr(e,t)}return t}function lg(e,t,n,s,o=!1){if(!s)return t=_a(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=_a(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 ka=O(()=>{ao();});function c_(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==="["?rg(e,t,s,o):og(e,t,s,o);if(n){if(c=Pn(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]=Ea(e,t);if(n){if(c=Pn(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=sg(e,t,",",n),a=c_(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=Pn(e,t+a[1]),e[i]===","&&i++),[ng(a[0],e,t,o),i]}var bu=O(()=>{gu();wu();ka();ao();});function ja(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]=Ea(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=Sa(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(!l_.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,Pn(e,r+1,!0,!0)]}function og(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]=ja(e,t-1);for(let m=0;m<u.length;m++){if(m&&(l=c?l[a]:l[a]={}),a=u[m],(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 rg(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 l_,wu=O(()=>{gu();bu();ka();ao();l_=/^[a-zA-Z0-9-_]+[ \t]*$/});function ig(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=Pn(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=ja(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=ig(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=ja(e,a),c=ig(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=Pn(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=Pn(e,a)}return s}var ag=O(()=>{wu();bu();ka();ao();});var cg=O(()=>{});var _a=O(()=>{ag();cg();hu();ao();});var dg={};Un(dg,{CONFIG_FILE:()=>Ta,loadTomlConfig:()=>yu,mergeEffective:()=>ug,normalizeConfig:()=>lg});async function yu(e,{file:t}={}){let n=t||Q(e,Ta),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 ${Ta} at ${n}: ${o&&o.message?o.message:o}`)}}async function u_(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 lg(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await u_(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||{},m={};p.strategy!==void 0&&(m.strategy=p.strategy),p.nodes!==void 0&&(m.nodes=p.nodes),p.q!==void 0&&(m.q=p.q),p.depth!==void 0&&(m.depth=p.depth),Object.keys(m).length&&(f.expansion=m),Object.keys(f).length&&(o.tune=f);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.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 d_)n[w]&&n[w][v]!==void 0&&y.push(`${w}.${v}`);return o.unwired=y,o}function Ra(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:Ra(o,r,n)}return n}function ug({args:e={},toml:t=null,defaults:n={}}={}){let s=Ra(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Ra(o):{},i=Ra(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 Ta,d_,Aa=O(()=>{_t();Ue();_a();Ta="tmct.toml";d_=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Os={};Un(Os,{CANONICALISED_FROM_PROP:()=>Ou,CAPABLE_OF_PREDICATE:()=>yR,CHAIN_KEEP_DEPTH:()=>Mh,CHAIN_ROLLUP_THRESHOLD:()=>fa,CREATED_AT_PROP:()=>Je,DEFAULT_RETENTION:()=>ku,FACT_CLASS:()=>Et,GROUP_ROLLUP_THRESHOLD:()=>Nh,HAS_A_PREDICATE:()=>dr,IN_REPLY_TO_PROP:()=>Cu,MEMORY_DIR_REL:()=>ir,MEMORY_GRAPH_REL:()=>Ru,MEMORY_MANIFEST_REL:()=>Cg,MEMORY_SESSION_CLASS:()=>Au,MULTI_VALUED_PREDICATES:()=>$R,NODE_ID_REL:()=>Mu,OPERATOR_SOURCE_ID:()=>Ia,RETRACTED_AT_PROP:()=>wa,RETRACTED_COUNT_PROP:()=>cu,RETRACTED_RECORD_IDS_PROP:()=>ba,RETRACTION_CLASS:()=>xn,RETRACTION_PREDICATE:()=>ga,ROLLUP_COUNT_PROP:()=>Yr,ROLLUP_EARLIEST_PROP:()=>Ln,ROLLUP_KEEP_PER_TYPE:()=>Ph,ROLLUP_LATEST_PROP:()=>Nn,ROLLUP_PRIOR_PROP:()=>tr,ROLLUP_RECORD_IDS_PROP:()=>Kr,ROLLUP_SOURCE_IDS_PROP:()=>er,RULE_CLASS:()=>cr,RULE_KIND_ACTION_CONSTRAINT:()=>Gu,RULE_KIND_ACTION_EFFECT:()=>li,RULE_KIND_ACTION_PRECOND:()=>Fa,RULE_KIND_ACTION_SIGNATURE:()=>Wu,RULE_KIND_COMPOSE2:()=>ai,RULE_KIND_FILTER:()=>ci,RULE_KIND_PROP:()=>ur,RULE_KIND_RECURSIVE:()=>Bu,SAID_IN_SESSION_PROP:()=>Iu,SOURCE_CLASS:()=>ar,SOURCE_RELIABILITY_PROP:()=>hg,STATED_BY_PROP:()=>dn,SYLLOGISE_STATE_REL:()=>Pu,UPDATED_AT_PROP:()=>gs,UTTERANCE_CLASS:()=>Tu,appendCanonicalisedFromEdges:()=>oR,appendFact:()=>cR,appendFacts:()=>uo,appendRetractions:()=>bR,appendRule:()=>za,appendUtterance:()=>sR,appendUtterances:()=>Dg,applySeedPayload:()=>h_,attachFactHeads:()=>Sg,chainRollupIdFor:()=>nu,cloneMemoryPayload:()=>g_,closeSqliteMemoryStore:()=>Rg,createInMemoryStore:()=>La,createSqliteMemoryStore:()=>_g,emptyMemory:()=>ri,factGroupId:()=>Vt,factHeadsOf:()=>kg,factIdForTriple:()=>ge,factRecordIdForTag:()=>w_,factRecordIdsFor:()=>lo,findContradictions:()=>Hg,findRuleByName:()=>qu,findRulesByName:()=>fR,headRollupIdFor:()=>tu,isChainRollupId:()=>nr,isHeadRollupId:()=>Rs,isMemoryOrSqliteHandle:()=>Nu,isRetractionId:()=>uu,isRollupId:()=>ma,loadMemory:()=>Nt,loadNodeId:()=>q_,loadSyllogiseState:()=>W_,normFactPredicate:()=>ns,normFactTerm:()=>J,openConfiguredMemoryBackend:()=>Is,openMemoryBackend:()=>Tg,provSourceClassFor:()=>K_,provenanceTagToSource:()=>bs,readFactRows:()=>St,readObjectSupersessions:()=>j_,readRetractions:()=>gR,readRuleRows:()=>Vu,removeFacts:()=>hR,resolveMemoryGraphFile:()=>ni,resolveRelationChase:()=>Hu,resolveRelationChaseReverse:()=>Vg,retractedAtOf:()=>io,retractedRecordIds:()=>ro,retractionFromWire:()=>xa,retractionIdFor:()=>lu,retractionScopeOf:()=>du,retractionWireFact:()=>va,saveNodeId:()=>V_,saveSyllogiseState:()=>G_,snapshotMemory:()=>F_});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:m_.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function ni(e,t=null){if(As(e)||Fn(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Q(e,Ru):Q(e,ir,`graph.v${t}.json`)}function As(e){return!!e&&typeof e=="object"&&e.backend===Lu}function Fn(e){return!!e&&typeof e=="object"&&e.backend===bg}function Nu(e){return As(e)||Fn(e)}function La(){return{backend:Lu,payload:ri()}}function h_(e,t){t&&(e.payload={...e.payload,...t})}function g_(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function wg(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Du(bs(t));if(n)return n}return{id:rs,type:""}}function Vt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function w_(e,t){return`${e}@${yg(t).id}`}function yg(e){return Du(bs(e))||{id:rs,type:""}}function $g(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=yg(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(rs,{sourceId:rs,sourceType:"",tags:[]}),[...t.values()]}function Eu(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=bs(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 Eu(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 vg(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=wg(n("mgx:factProvenance")),o=n(ii).split(" ").filter(Boolean)[0]||null,r=Xr(e.id);return[e.id,Vt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(co)||s.id,r||s.type,Number(n(r?tr:Oo))||0,n(Je),n(si)||null,o,t]}function $_(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Et))return;let t=e.prepare(xg);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(Et))t.run(...vg(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function v_(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Sg(e,t){return e&&t&&(e[Eg]=t),e}function E_(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 jg(e,t,n,s){let o=e.prepare(x_),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=is();for(let a of n){let l=t.groups.get(a);if(!l?.length){r.run(a),s?.delete(a);continue}let c=v_(Yu(a,l,t).assertions),u=Up(c).score;o.run(a,u,JSON.stringify(c),i),s?.set(a,{trustBase:u,inputs:c})}}function S_(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(Et))return;let n=Ku(Ag(e));t.exec("BEGIN IMMEDIATE");try{jg(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function k_(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=is();for(let i of n){let[a,l]=i.split("\0");if(da(l)!==Hr)continue;let c=t.groupsByPair.get(i)||[];if(c.length<2)continue;let u=c.map(p=>{let m=Yu(p,t.groups.get(p),t);return m.trust=Ri(m.assertions).score,m});if(new Set(u.map(p=>p.object)).size<2)continue;let d=eu(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 j_(e,{subject:t,predicate:n}={}){if(!Fn(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 R_(){if(fg)return;fg=!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 _g(e){R_();let{DatabaseSync:t}=await Promise.resolve().then(()=>(tg(),eg)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(b_),$_(n);let s={backend:bg,db:n,dbPath:e};return S_(s),s}function Rg(e){Fn(e)&&e.db.close()}async function Tg(e,t){if(t===Lu)return{dir:La(),close:async()=>{}};let n=Q(e,".tmct","memory","graph.sqlite"),s=r=>lp(r).then(()=>!0,()=>!1);!await s(n)&&await s(Q(e,Ru))&&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 kn(ve(n),{recursive:!0});let o=await _g(n);return{dir:o,close:async()=>Rg(o)}}async function Is(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Aa(),dg));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Tg(e,n)}function T_(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=Ag(e),e.cachedFactHeads=E_(e.db),e.cachedDataVersion=t),Sg(En(e.cachedPayload),e.cachedFactHeads)}function Ag(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 A_(e,t){let n=En(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function I_(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function C_(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 O_(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,En(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function L_(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function N_(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function P_(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=En(t.generated_at??s.generated_at),o.memory=En(t.memory??s.memory),o.prefixes=En(t.prefixes??s.prefixes),o.vocabulary=En(t.vocabulary??s.vocabulary),o.classes=En(t.classes??s.classes),o.proseIndex=En(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(xg),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===Et&&(u.run(...vg(E,R)),f.add(Vt(E.id)),p.add(Su(oi(E,"subject"),oi(E,"predicate")))),o&&A_(o,E)}let m=n.prepare("DELETE FROM individuals WHERE id = ?"),h=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(Su(R.subject,R.predicate))),m.run(E.id),h.run(E.id)}o&&I_(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?C_(o,E.prop):null;for(let z of E.examples||[]){let Y=`${z.subject}\0${z.object}`;A.add(Y);let ae=Object.keys(z).filter(G=>!__.has(G)),Z=ae.length?JSON.stringify(Object.fromEntries(ae.map(G=>[G,z[G]]))):null,D=j.get(Y);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&&O_(F,z,ae))}for(let z of j.keys()){if(A.has(z))continue;let[Y,ae]=z.split("\0");x.run(E.prop,Y,ae)}F&&L_(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&&N_(o,S),f.size){let E=Ku(t);jg(n,E,f,e.cachedFactHeads),k_(n,E,p)}n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}async function Ig(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await $r(n,t),await vi(n,e)}async function Na(e,t){await Ig(e,JSON.stringify(t))}async function F_(e,{retentionVersions:t}={}){if(Nu(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=M_(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??ku}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??ku);let i=r.version,a=ni(e,i);await kn(ve(a),{recursive:!0}),await Ig(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await yc(ni(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await Na(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Nt(e){if(As(e))return $u(e.payload);if(Fn(e))return $u(T_(e));let t;try{t=await ze(xu(e),"utf8")}catch(n){if(n?.code==="ENOENT")return ri();throw n}return $u(JSON.parse(t))}function z_(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==Et||!D_.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 U_(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(l=>l?.prop===dn),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!==Et||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),m=c(Je),h=c("mgx:factProvenance"),g=n.get(l.id)||[],b=h?$g(h):[];for(let w of g)b.some(v=>v.sourceId===w.object)||b.push({sourceId:w.object,sourceType:"",tags:[]});b.length||b.push({sourceId:rs,sourceType:"",tags:[]});let y=[];for(let w of b){let v={id:`${p}@${w.sourceId}`,label:l.label,class:Et,derived_from:En(l.derived_from)||[],mentions:En(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,m,Math.min)||m||is()},{prop:co,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!==rs){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:dn,count:i.length,examples:i}));for(let l of e.objectProperties||[]){if(l?.prop===dn||!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 m of f)c.push({...u,subject:p,object:m})}l.examples=c,l.count=c.length}e.individuals=a,Ng(e);for(let l of r)rr(e,l);return cs(e),e}async function B_(e,t){if(As(e)){e.payload=t;return}if(Fn(e)){P_(e,t);return}await kn(ve(xu(e)),{recursive:!0}),await Na(xu(e),t)}async function W_(e){if(As(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Og);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(Q(e,Pu),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function G_(e,t){if(As(e)){e.syllogiseState=structuredClone(t);return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Og,JSON.stringify(t));return}let n=Q(e,Pu);await kn(ve(n),{recursive:!0}),await Na(n,t)}async function q_(e){if(As(e))return e.nodeId||null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Lg);return t?.v&&JSON.parse(t.v).nodeId||null}try{return JSON.parse(await ze(Q(e,Mu),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function V_(e,t){if(As(e)){e.nodeId=t;return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Lg,JSON.stringify({nodeId:t}));return}let n=Q(e,Mu);await kn(ve(n),{recursive:!0}),await Na(n,{nodeId:t})}function Ng(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===xn&&_u(r,a),a.class===Et)){let l=Vt(a.id),c=o.get(l);c?c.push(a.id):o.set(l,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===dn);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[ju]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[ju]}function _u(e,t){let n=Vt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function H_(e,t){let n=Ht(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===xn&&Vt(s.id)===t)}async function Cs(e,t){let n=await Nt(e);Ng(n);let s=await t(n)??n;return Q_(s),eR(s),s.proseIndex=Tp(s.individuals),await B_(e,s),s}function Fu(e,t){return e?.attributes?.find(n=>n?.prop===Je)?.value||t||is()}function pn(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Du(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Ia}:${e.sessionId}`:Ia,type:"operator"};case"teach":return{id:e.sessionId?`${vu}:${e.sessionId}`:vu,type:"teach"};case"teachNode":return{id:`${gg}:${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 K_(e){return Ac[e]||null}function Y_(e,t,n){let s=Du(t);if(!s)return null;let o=Ht(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=Fu(r,t?.createdAt||n),a={id:s.id,label:zu(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=as(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function Ma(e){let t=Ht(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 Pg(e,t){let n=Ht(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===dn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function X_(e,t,n=Date.now(),s={}){let o=Pg(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Je)?.value||"",{score:i,inputs:a}=zp({sourceIds:o,createdAt:r},Ma(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});pn(t,Oo,"trustScore",String(i)),pn(t,ji,"trustInputs",JSON.stringify(a)),pn(t,gs,"updatedAt",new Date(n).toISOString())}function J_(e,t,n=Date.now(),s={}){let[o]=Pg(e,t.id),r=o?Ma(e)[o]:null,i=(r?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||"",a=_i(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||"";pn(t,Oo,"trustScore",String(a)),pn(t,ji,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:l})),pn(t,gs,"updatedAt",new Date(n).toISOString())}function Mg(e,t,n,s){t?.class===Et?J_(e,t,n,s):X_(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=bs(i);if(!a)continue;let l=Y_(e,a,r);l&&Oa(e,{predicate:"statedBy",prop:dn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:zu(l)})}Mg(e,t,n,s)}function Q_(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===dn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==Et||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(rr(e,r,o),s=!0);s&&cs(e)}function eR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=St(e),n=new Set;for(let a of Hg(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(!Z_(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=Ht(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(pn(c,hg,"sourceReliability",String(Bp(l))),pn(c,gs,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===dn),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&&Mg(e,l)}}function tR(e,t,n){if(!ma(n?.id))return n;let s=Xr(n.id);if(!s)return iu(t,n);let o=Ma(e);return iu(t,n,{priorFor:r=>_i(s,o[r])})}function mg(e,t,n){return n?.class===xn?Xh(t,n):tR(e,t,n)}function as(e,t){let n=Ht(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,mg(e,o,t)),o.class===xn&&_u(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===xn&&_u(n.retractionsByGroup,t),t.class===Et){let r=Vt(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]=mg(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function Oa(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===dn?Ht(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||is()}),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||is();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 cs(e){let t=[Au,Tu,Et,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 nR(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:Au,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Je,key:"createdAt",value:n||is()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Fg(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!f_.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=ts(n),d=`utt:${o}#${c}#${t}`,f=Pa(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=ki({doc:u}),m=e.individuals.find(y=>y?.id===d),h=Fu(m,l||c),g={id:d,label:f,class:Tu,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:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};as(e,g);let b=nR(e,o,r);if(Oa(e,{predicate:"saidInSession",prop:Iu},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&Oa(e,{predicate:"inReplyTo",prop:Cu},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function sR(e,t){let n;return await Cs(e,s=>{n=Fg(s,t),cs(s)}),{id:n}}async function Dg(e,t){let n=[];return t?.length?(await Cs(e,s=>{for(let o of t)n.push(Fg(s,o));cs(s)}),{ids:n}):{ids:n}}async function oR(e,t){t?.length&&await Cs(e,n=>{for(let s of t)for(let o of lo(n,s.factId))Oa(n,{predicate:"canonicalisedFrom",prop:Ou},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function lo(e,t){let n=Ht(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===Et&&Vt(s.id)===t).map(s=>s.id)}function zg(e,t,n,s=""){let o=$g(n);if(o.length===1&&o[0].sourceId===rs&&lo(e,t).length)return[];let r=H_(e,t);if(r.length&&(o=o.filter(a=>!$a(r,`${t}@${a.sourceId}`,lr(a.tags,s))),!o.length))return o;let i=rR(e,t);return i.length?o.filter(a=>!Vh(i,a.sourceId)):o}function rR(e,t){let n=Ht(e),s=n?n.factRecordsByGroup.get(t):lo(e,t),o=[];for(let r of s||[]){if(!Rs(r))continue;let i=Ts(e,r);i&&o.push(i)}return o}function Ug(e,t,{quantifier:n,environments:s}){let o=lo(e,t).map(i=>Ts(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===ii)),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)pn(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")||(pn(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function iR(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Ca)?.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 Bg(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}`,m=Ht(e),h=m?m.individualsById.get(p):e.individuals.find(R=>R?.id===p),g=R=>(h?.attributes||[]).find(j=>j?.prop===R)?.value||"",b=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Eu(l.tags),observedAt:u},w=null,v=l.tags,_=y.assertedAt||c||is(),$=u,x=[],S=d;if(h){let R={assertedAt:Eu(b),observedAt:g(si)};y_(y,R)?(w={head:h,id:`${p}#v${iR(h)}`},x=[w.id]):(v=[...new Set([...b,...l.tags])],_=g(Je)||_,$=u||g(si),x=g(Ca).split(" ").filter(Boolean)),S=d||g("mgx:factQuantifier")}return{candidate:{id:p,label:i,class:Et,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:co,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:Ca,key:"supersedes",value:x.join(" ")}]:[]]},demote:w}}function aR(e,t){let n=`${t}@${rs}`,s=Ht(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 Wg(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${rs}`)||aR(e,Vt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};pn(o,ii,"supersededBy",t.id),as(e,o),s.push(o.id)}return as(e,t),s.push(t.id),s}function Ts(e,t){let n=Ht(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Uu(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=Ht(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Vt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function Gg(e,t){let n=Ht(e),s=(n?n.factRecordsByGroup.get(t):lo(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=Ts(e,u);if(!d)continue;let f=y=>(d.attributes||[]).find(w=>w?.prop===y)?.value||"";if(Rs(u)){i.set(Xr(u),d);continue}if(nr(u)){a.set(f(co),d);continue}let p=f("mgx:factProvenance"),m=wg(p),h=p.split(" | ").filter(Boolean),g={id:u,sourceId:f(co)||m.id,assertedAt:lr(h,f(Je)),record:d};if(f(ii)){let y=r.get(g.sourceId);y?y.push(g):r.set(g.sourceId,[g]);continue}if(!m.type)continue;let b=o.get(m.type);b?b.push(g):o.set(m.type,[g])}let l=Ma(e),c=[];for(let[u,d]of o){let f=Gh({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:p=>_i(u,l[p])});if(f){as(e,f.rollup),c.push(...f.absorbed);for(let p of f.absorbedSourceIds){for(let h of r.get(p)||[])c.push(h.id);r.delete(p);let m=a.get(p);m&&c.push(m.id),a.delete(p)}}}for(let[u,d]of r){let f=qh({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!f)continue;as(e,f.rollup),c.push(...f.absorbed);let p=Ts(e,f.rewire);p&&pn(p,Ca,"supersedes",f.rollup.id)}return c}async function cR(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",premiseTrusts:l,ruleConfidence:c}={}){let u=J(t),d=ns(n),f=J(s);if(!u||!d||!f)throw new Error("a fact needs subject, predicate and object");let p=Ho(u,d,f),m=`${u} ${d} ${f}`,h=ki({doc:m}),g=ts(a);return await Cs(e,async b=>{let y=zg(b,p,ts(o),r);for(let w of y.length?[]:Ug(b,p,{quantifier:g}))rr(b,Ts(b,w),void 0,{premiseTrusts:l,ruleConfidence:c});for(let w of y){let v=Bg(b,{groupId:p,s:u,p:d,o:f,label:Pa(m),tokens:h,group:w,createdAt:r,observedAt:i,quantifier:g});await mu(v.candidate);for(let _ of Wg(b,v))rr(b,Ts(b,_),void 0,_===v.candidate.id?{premiseTrusts:l,ruleConfidence:c}:void 0)}Uu(b,Gg(b,p)),cs(b)}),{id:p}}function lR(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 uo(e,t){let n=[],s=0;for(let r of t||[]){let i=J(r?.subject),a=ns(r?.predicate),l=J(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:ki({doc:c}),provenance:ts(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:ts(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:lR(r?.justification)})}let o=[];return n.length?(await Cs(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?[]:Ug(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=Bg(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:Pa(u.text),tokens:u.tokens,group:f,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments});for(let m of Wg(r,p))a.has(m)||(a.add(m),i.push(m));(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,Ts(r,u),void 0,l.get(u));let c=[];for(let u of new Set(o))c.push(...Gg(r,u));Uu(r,c),cs(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function za(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=qg[n];if(!i)throw new Error(`a rule kind must be one of ${uR.join(", ")}, got ${JSON.stringify(n)}`);let a=J(t);if(!a)throw new Error("a rule needs a name");let l=dR[n]||new Set,c=i.map(([p])=>J(s?.[p])),u=i.filter(([p],m)=>!l.has(p)&&!c[m]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([p])=>p).join(" + ")}`);if(n===li){let p=c[i.findIndex(([h])=>h==="objectRole")],m=c[i.findIndex(([h])=>h==="value")];if(!p&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=pR(n,a,c),f=Pa(`${a} = ${n}(${c.join(", ")})`);return await Cs(e,async p=>{let m=p.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...h.split(" | "),ts(o)].filter(Boolean))],b=Fu(m,r),y={id:d,label:f,class:cr,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Da,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 mu(y),as(p,y),rr(p,p.individuals.find(w=>w?.id===d)),cs(p)}),{id:d}}function qu(e,t){let n=J(t);return(e?.individuals||[]).find(s=>s?.class===cr&&(s.attributes||[]).find(o=>o?.prop===Da)?.value===n)}function fR(e,t){let n=J(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===Da)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Vu(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=qg[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Da)||"",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 Hu(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(),m=l(J,n),h=l(J,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.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=qu(e,p),y=b?.attributes?.find(w=>w.prop===ur)?.value;if(b&&y===ai){let w=b.attributes.find(F=>F.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(F=>F.prop==="mgx:ruleBase2")?.value,_=J(n),$=J(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===ci){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 Hu(e,w,n,s,o);if(!_)return null;let $=J(n),x=J(v),S=u.find(E=>E.predicate===d&&E.subject===$&&J(E.object)===x);return S?{citation:[..._.citation,i(S)]}:null}return null}async function Vg(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(J,n),m=o(f).filter(b=>p.has(b.fact.object));if(m.length){let b=new Map;for(let y of m)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 h=qu(e,f),g=h?.attributes?.find(b=>b.prop===ur)?.value;if(h&&g===ai){let b=h.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=J(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(h&&g===ci){let b=h.attributes.find($=>$.prop==="mgx:ruleBase1")?.value,y=h.attributes.find($=>$.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await Vg(e,b,n,s),v=J(y),_=[];for(let $ of w){let x=J($.subject),S=c.find(E=>E.predicate===u&&E.subject===x&&J(E.object)===v);S&&_.push({subject:$.subject,citation:[...$.citation,r(S)]})}return _}return[]}function St(e,t={}){let n=Ku(e),s=kg(e),o=[];for(let[r,i]of n.groups){let a=Yu(r,i,n),l=s?.get(r);a.trust=Ri(l?l.inputs:a.assertions,t).score,o.push(a)}return o}function Ku(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===dn),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===xn){let d=Vt(l.id),f=i.get(d);f?f.push(l):i.set(d,[l]);continue}if(l?.class!==Et||(l.attributes||[]).some(d=>d?.prop===ii)||nr(l.id))continue;let c=Vt(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=>!$a(c,f.id,lr(Mn(f,"mgx:factProvenance").split(" | ").filter(Boolean),Mn(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=Su(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 Yu(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=Mn,i=oi,a=[],l=[],c=[],u=new Set,d=[],f=new Set,p="";for(let g of t){if(Rs(g.id)){let x=Xr(g.id),S=ha(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,Ln),ownTrust:Number(r(g,tr))||0,assertedAt:r(g,Nn),rollup:{count:Number(r(g,Yr))||S.length,sourceIds:S,earliest:r(g,Ln),latest:r(g,Nn)}});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,co),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 m=[],h=new Set;for(let g of d)for(let b of g)h.has(b)||(h.add(b),m.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:m,assertions:a}}function mR(e){let t=Mn(e,co);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||is();return await Cs(e,l=>{let c=new Set,u=new Set,d=new Map;l.individuals=(l.individuals||[]).filter(f=>{if(f?.class!==Et)return!0;let p=Vt(f.id),m=o.has(f.id)?f.id:o.has(p)?p:"";if(!m)return!0;u.add(m),c.add(f.id);let h=mR(f),g=`${p}\0${h}`,b=Mn(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:h,ids:[f.id],tags:b?[b]:[],template:{label:f.label||"",subject:Mn(f,"rdf:subject"),predicate:Mn(f,"rdf:predicate"),object:Mn(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(m=>!c.has(m?.subject)&&!c.has(m?.object)),f.count=f.examples.length}for(let f of d.values()){let p=Yh({groupId:f.groupId,sourceId:f.sourceId,recordIds:f.ids,retractedAt:a,template:f.template,provenance:[...f.tags,n].filter(Boolean).join(" | ")});p&&as(l,p)}cs(l)}}),{removed:r,records:i}}function gR(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==xn)continue;let s=va(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function bR(e,t){let n=[];for(let o of t||[]){let r=xa(o);r&&n.push(r)}let s=[];return n.length?(await Cs(e,o=>{let r=new Map;for(let a of n){let l=as(o,a),c=Vt(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 lo(o,a)){let u=Ts(o,c);if(!u)continue;let d=Mn(u,"mgx:factProvenance").split(" | ").filter(Boolean);$a(l,c,lr(d,Mn(u,Je)))&&i.add(c)}if(i.size){Uu(o,i);for(let a of i)s.push(a)}cs(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function Hg(e,{floor:t=wR}={}){let n=St(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(da(r.predicate)===Jl)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=da(r[0].predicate);i!==Ql&&!eu(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,Ru,Tu,Et,Au,ar,cr,Iu,Cu,p_,dn,Ou,hg,Ia,vu,gg,f_,pg,m_,xu,Lu,bg,b_,rs,si,co,Ca,ii,xg,Mn,oi,Su,Eg,kg,x_,__,fg,En,Cg,ku,M_,$u,D_,Pu,Og,Mu,Lg,ju,Ht,Pa,is,zu,Z_,ai,ci,Bu,Wu,Fa,li,Gu,uR,Da,ur,qg,dR,pR,wR,dr,yR,$R,qe=O(()=>{_t();Ue();hs();nn();nn();ws();Lh();ws();ua();au();fu();Zh();au();fu();ir=Q(".tmct","memory"),Ru=Q(ir,"graph.json"),Tu="Utterance",Et="Fact",Au="Session",ar="Source",cr="Rule",Iu="mgx:saidInSession",Cu="mgx:inReplyTo",p_="mgx:derivedFrom",dn="mgx:statedBy",Ou="mgx:canonicalisedFrom",hg="mgx:sourceReliability",Ia="src:operator-chat",vu="src:teach-chat",gg="src:teach-node",f_=new Set(["visitor","tmct"]),pg=48,m_=[{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:Iu,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Cu,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:gs,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:p_,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:dn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Ou,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:ji,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)"}];xu=e=>ni(e),Lu="memory",bg="sqlite";b_=`
101
+ `))return r}}throw new he("cannot find end of structure",{toml:e,ptr:t})}var Ra=O(()=>{ao();});function E_(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==="["?dg(e,t,s,o):ug(e,t,s,o);if(n){if(c=Pn(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]=ja(e,t);if(n){if(c=Pn(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=lg(e,t,",",n),a=E_(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=Pn(e,t+a[1]),e[i]===","&&i++),[cg(a[0],e,t,o),i]}var xu=O(()=>{vu();Eu();Ra();ao();});function Ta(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]=ja(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=_a(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(!S_.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,Pn(e,r+1,!0,!0)]}function ug(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]=Ta(e,t-1);for(let m=0;m<u.length;m++){if(m&&(l=c?l[a]:l[a]={}),a=u[m],(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 dg(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 S_,Eu=O(()=>{vu();xu();Ra();ao();S_=/^[a-zA-Z0-9-_]+[ \t]*$/});function pg(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=Pn(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=Ta(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=pg(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=Ta(e,a),c=pg(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=Pn(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=Pn(e,a)}return s}var fg=O(()=>{Eu();xu();Ra();ao();});var mg=O(()=>{});var Aa=O(()=>{fg();mg();$u();ao();});var bg={};Bn(bg,{CONFIG_FILE:()=>Ca,loadTomlConfig:()=>Su,mergeEffective:()=>gg,normalizeConfig:()=>hg});async function Su(e,{file:t}={}){let n=t||Q(e,Ca),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 ${Ca} at ${n}: ${o&&o.message?o.message:o}`)}}async function k_(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 hg(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await k_(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||{},m={};p.strategy!==void 0&&(m.strategy=p.strategy),p.nodes!==void 0&&(m.nodes=p.nodes),p.q!==void 0&&(m.q=p.q),p.depth!==void 0&&(m.depth=p.depth),Object.keys(m).length&&(f.expansion=m),Object.keys(f).length&&(o.tune=f);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.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 j_)n[w]&&n[w][v]!==void 0&&y.push(`${w}.${v}`);return o.unwired=y,o}function Ia(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:Ia(o,r,n)}return n}function gg({args:e={},toml:t=null,defaults:n={}}={}){let s=Ia(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Ia(o):{},i=Ia(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 Ca,j_,Oa=O(()=>{_t();Ue();Aa();Ca="tmct.toml";j_=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Os={};Bn(Os,{CANONICALISED_FROM_PROP:()=>Fu,CAPABLE_OF_PREDICATE:()=>PR,CHAIN_KEEP_DEPTH:()=>Bh,CHAIN_ROLLUP_THRESHOLD:()=>ma,CREATED_AT_PROP:()=>Je,DEFAULT_RETENTION:()=>Au,FACT_CLASS:()=>St,GROUP_ROLLUP_THRESHOLD:()=>zh,HAS_A_PREDICATE:()=>dr,IN_REPLY_TO_PROP:()=>Mu,MEMORY_DIR_REL:()=>ir,MEMORY_GRAPH_REL:()=>Ou,MEMORY_MANIFEST_REL:()=>Fg,MEMORY_SESSION_CLASS:()=>Nu,MULTI_VALUED_PREDICATES:()=>MR,NODE_ID_REL:()=>Bu,OPERATOR_SOURCE_ID:()=>La,RETRACTED_AT_PROP:()=>ya,RETRACTED_COUNT_PROP:()=>uu,RETRACTED_RECORD_IDS_PROP:()=>wa,RETRACTION_CLASS:()=>sn,RETRACTION_PREDICATE:()=>ba,ROLLUP_COUNT_PROP:()=>Yr,ROLLUP_EARLIEST_PROP:()=>Ln,ROLLUP_KEEP_PER_TYPE:()=>Uh,ROLLUP_LATEST_PROP:()=>Nn,ROLLUP_PRIOR_PROP:()=>tr,ROLLUP_RECORD_IDS_PROP:()=>Kr,ROLLUP_SOURCE_IDS_PROP:()=>er,RULE_CLASS:()=>cr,RULE_KIND_ACTION_CONSTRAINT:()=>Yu,RULE_KIND_ACTION_EFFECT:()=>li,RULE_KIND_ACTION_PRECOND:()=>Ua,RULE_KIND_ACTION_SIGNATURE:()=>Ku,RULE_KIND_COMPOSE2:()=>ai,RULE_KIND_FILTER:()=>ci,RULE_KIND_PROP:()=>ur,RULE_KIND_RECURSIVE:()=>Hu,SAID_IN_SESSION_PROP:()=>Pu,SOURCE_CLASS:()=>ar,SOURCE_RELIABILITY_PROP:()=>vg,STATED_BY_PROP:()=>pn,SYLLOGISE_STATE_REL:()=>Uu,UPDATED_AT_PROP:()=>ys,UTTERANCE_CLASS:()=>Lu,admittedNodes:()=>Sa,appendCanonicalisedFromEdges:()=>yR,appendFact:()=>ER,appendFacts:()=>uo,appendRetractions:()=>CR,appendRule:()=>Wa,appendUtterance:()=>wR,appendUtterances:()=>qg,applySeedPayload:()=>A_,attachFactHeads:()=>Ag,chainRollupIdFor:()=>ou,cloneMemoryPayload:()=>I_,closeSqliteMemoryStore:()=>Lg,createInMemoryStore:()=>Ma,createSqliteMemoryStore:()=>Og,emptyMemory:()=>ri,factGroupId:()=>Nt,factHeadsOf:()=>Ig,factIdForTriple:()=>ge,factRecordIdForTag:()=>O_,factRecordIdsFor:()=>lo,findContradictions:()=>Zg,findRuleByName:()=>Xu,findRulesByName:()=>RR,headRollupIdFor:()=>su,isChainRollupId:()=>nr,isHeadRollupId:()=>Ts,isMemoryOrSqliteHandle:()=>zu,isRetractionId:()=>pu,isRollupId:()=>ha,loadMemory:()=>Pt,loadNodeId:()=>iR,loadSyllogiseState:()=>oR,normFactPredicate:()=>rs,normFactTerm:()=>J,openConfiguredMemoryBackend:()=>Cs,openMemoryBackend:()=>Ng,peersToConvince:()=>bu,provSourceClassFor:()=>lR,provenanceTagToSource:()=>Vn,readFactRows:()=>vt,readObjectSupersessions:()=>U_,readRetractions:()=>IR,readRuleRows:()=>Ju,removeFacts:()=>AR,resolveMemoryGraphFile:()=>ni,resolveRelationChase:()=>Qu,resolveRelationChaseReverse:()=>Qg,retirableRetractions:()=>OR,retireRetractions:()=>LR,retractedAtOf:()=>io,retractedRecordIds:()=>ro,retractionFromWire:()=>Ea,retractionIdFor:()=>du,retractionScopeOf:()=>fu,retractionWireFact:()=>xa,saveNodeId:()=>aR,saveSyllogiseState:()=>rR,snapshotMemory:()=>Z_,stableRecordIds:()=>ka});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:T_.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function ni(e,t=null){if(Is(e)||Fn(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Q(e,Ou):Q(e,ir,`graph.v${t}.json`)}function Is(e){return!!e&&typeof e=="object"&&e.backend===Du}function Fn(e){return!!e&&typeof e=="object"&&e.backend===Eg}function zu(e){return Is(e)||Fn(e)}function Ma(){return{backend:Du,payload:ri()}}function A_(e,t){t&&(e.payload={...e.payload,...t})}function I_(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function Sg(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Gu(Vn(t));if(n)return n}return{id:cs,type:""}}function Nt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function O_(e,t){return`${e}@${kg(t).id}`}function kg(e){return Gu(Vn(e))||{id:cs,type:""}}function jg(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=kg(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(cs,{sourceId:cs,sourceType:"",tags:[]}),[...t.values()]}function Ru(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=Vn(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 Ru(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function L_(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 _g(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=Sg(n("mgx:factProvenance")),o=n(ii).split(" ").filter(Boolean)[0]||null,r=Xr(e.id);return[e.id,Nt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(co)||s.id,r||s.type,Number(n(r?tr:Oo))||0,n(Je),n(si)||null,o,t]}function N_(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(Rg);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(St))t.run(..._g(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function P_(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Ag(e,t){return e&&t&&(e[Tg]=t),e}function F_(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 Cg(e,t,n,s){let o=e.prepare(M_),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=ls();for(let a of n){let l=t.groups.get(a);if(!l?.length){r.run(a),s?.delete(a);continue}let c=P_(ed(a,l,t).assertions),u=Vp(c).score;o.run(a,u,JSON.stringify(c),i),s?.set(a,{trustBase:u,inputs:c})}}function D_(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=Zu(Pg(e));t.exec("BEGIN IMMEDIATE");try{Cg(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function z_(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=ls();for(let i of n){let[a,l]=i.split("\0");if(pa(l)!==Hr)continue;let c=t.groupsByPair.get(i)||[];if(c.length<2)continue;let u=c.map(p=>{let m=ed(p,t.groups.get(p),t);return m.trust=Ti(m.assertions).score,m});if(new Set(u.map(p=>p.object)).size<2)continue;let d=nu(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 U_(e,{subject:t,predicate:n}={}){if(!Fn(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 W_(){if(yg)return;yg=!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 Og(e){W_();let{DatabaseSync:t}=await Promise.resolve().then(()=>(ag(),ig)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(C_),N_(n);let s={backend:Eg,db:n,dbPath:e};return D_(s),s}function Lg(e){Fn(e)&&e.db.close()}async function Ng(e,t){if(t===Du)return{dir:Ma(),close:async()=>{}};let n=Q(e,".tmct","memory","graph.sqlite"),s=r=>mp(r).then(()=>!0,()=>!1);!await s(n)&&await s(Q(e,Ou))&&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 jn(ve(n),{recursive:!0});let o=await Og(n);return{dir:o,close:async()=>Lg(o)}}async function Cs(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Oa(),bg));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Ng(e,n)}function G_(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=Pg(e),e.cachedFactHeads=F_(e.db),e.cachedDataVersion=t),Ag(Sn(e.cachedPayload),e.cachedFactHeads)}function Pg(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 q_(e,t){let n=Sn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function V_(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function H_(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 K_(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,Sn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function Y_(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function X_(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function J_(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=Sn(t.generated_at??s.generated_at),o.memory=Sn(t.memory??s.memory),o.prefixes=Sn(t.prefixes??s.prefixes),o.vocabulary=Sn(t.vocabulary??s.vocabulary),o.classes=Sn(t.classes??s.classes),o.proseIndex=Sn(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(Rg),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(..._g(E,R)),f.add(Nt(E.id)),p.add(Tu(oi(E,"subject"),oi(E,"predicate")))),o&&q_(o,E)}let m=n.prepare("DELETE FROM individuals WHERE id = ?"),h=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(Tu(R.subject,R.predicate))),m.run(E.id),h.run(E.id)}o&&V_(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?H_(o,E.prop):null;for(let z of E.examples||[]){let Y=`${z.subject}\0${z.object}`;A.add(Y);let ae=Object.keys(z).filter(G=>!B_.has(G)),Z=ae.length?JSON.stringify(Object.fromEntries(ae.map(G=>[G,z[G]]))):null,D=j.get(Y);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&&K_(F,z,ae))}for(let z of j.keys()){if(A.has(z))continue;let[Y,ae]=z.split("\0");x.run(E.prop,Y,ae)}F&&Y_(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&&X_(o,S),f.size){let E=Zu(t);Cg(n,E,f,e.cachedFactHeads),z_(n,E,p)}n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}async function Mg(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await $r(n,t),await xi(n,e)}async function Fa(e,t){await Mg(e,JSON.stringify(t))}async function Z_(e,{retentionVersions:t}={}){if(zu(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=Q_(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Au}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Au);let i=r.version,a=ni(e,i);await jn(ve(a),{recursive:!0}),await Mg(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await vc(ni(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await Fa(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Pt(e){if(Is(e))return ku(e.payload);if(Fn(e))return ku(G_(e));let t;try{t=await ze(_u(e),"utf8")}catch(n){if(n?.code==="ENOENT")return ri();throw n}return ku(JSON.parse(t))}function tR(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==St||!eR.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 nR(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(l=>l?.prop===pn),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),m=c(Je),h=c("mgx:factProvenance"),g=n.get(l.id)||[],b=h?jg(h):[];for(let w of g)b.some(v=>v.sourceId===w.object)||b.push({sourceId:w.object,sourceType:"",tags:[]});b.length||b.push({sourceId:cs,sourceType:"",tags:[]});let y=[];for(let w of b){let v={id:`${p}@${w.sourceId}`,label:l.label,class:St,derived_from:Sn(l.derived_from)||[],mentions:Sn(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,m,Math.min)||m||ls()},{prop:co,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!==cs){let _=g.find($=>$?.object===w.sourceId);i.push({..._||{},subject:v.id,object:w.sourceId,subjectLabel:v.label,objectLabel:qu(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:pn,count:i.length,examples:i}));for(let l of e.objectProperties||[]){if(l?.prop===pn||!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 m of f)c.push({...u,subject:p,object:m})}l.examples=c,l.count=c.length}e.individuals=a,Ug(e);for(let l of r)rr(e,l);return Dn(e),e}async function sR(e,t){if(Is(e)){e.payload=t;return}if(Fn(e)){J_(e,t);return}await jn(ve(_u(e)),{recursive:!0}),await Fa(_u(e),t)}async function oR(e){if(Is(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Dg);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(Q(e,Uu),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function rR(e,t){if(Is(e)){e.syllogiseState=structuredClone(t);return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Dg,JSON.stringify(t));return}let n=Q(e,Uu);await jn(ve(n),{recursive:!0}),await Fa(n,t)}async function iR(e){if(Is(e))return e.nodeId||null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(zg);return t?.v&&JSON.parse(t.v).nodeId||null}try{return JSON.parse(await ze(Q(e,Bu),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function aR(e,t){if(Is(e)){e.nodeId=t;return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(zg,JSON.stringify({nodeId:t}));return}let n=Q(e,Bu);await jn(ve(n),{recursive:!0}),await Fa(n,{nodeId:t})}function Ug(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===sn&&Cu(r,a),a.class===St)){let l=Nt(a.id),c=o.get(l);c?c.push(a.id):o.set(l,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===pn);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[Iu]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[Iu]}function Cu(e,t){let n=Nt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function cR(e,t){let n=Mt(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===sn&&Nt(s.id)===t)}async function ds(e,t){let n=await Pt(e);Ug(n);let s=await t(n)??n;return fR(s),hR(s),s.proseIndex=Lp(s.individuals),await sR(e,s),s}function Wu(e,t){return e?.attributes?.find(n=>n?.prop===Je)?.value||t||ls()}function fn(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Gu(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${La}:${e.sessionId}`:La,type:"operator"};case"teach":return{id:e.sessionId?`${ju}:${e.sessionId}`:ju,type:"teach"};case"teachNode":return{id:`${xg}:${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 lR(e){return Cc[e]||null}function uR(e,t,n){let s=Gu(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=Wu(r,t?.createdAt||n),a={id:s.id,label:qu(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=us(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function za(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 Bg(e,t){let n=Mt(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===pn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function dR(e,t,n=Date.now(),s={}){let o=Bg(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Je)?.value||"",{score:i,inputs:a}=qp({sourceIds:o,createdAt:r},za(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});fn(t,Oo,"trustScore",String(i)),fn(t,_i,"trustInputs",JSON.stringify(a)),fn(t,ys,"updatedAt",new Date(n).toISOString())}function pR(e,t,n=Date.now(),s={}){let[o]=Bg(e,t.id),r=o?za(e)[o]:null,i=(r?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||"",a=Ri(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||"";fn(t,Oo,"trustScore",String(a)),fn(t,_i,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:l})),fn(t,ys,"updatedAt",new Date(n).toISOString())}function Wg(e,t,n,s){t?.class===St?pR(e,t,n,s):dR(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=Vn(i);if(!a)continue;let l=uR(e,a,r);l&&Pa(e,{predicate:"statedBy",prop:pn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:qu(l)})}Wg(e,t,n,s)}function fR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===pn),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&&Dn(e)}function hR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=vt(e),n=new Set;for(let a of Zg(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(!mR(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&&(fn(c,vg,"sourceReliability",String(Hp(l))),fn(c,ys,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===pn),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&&Wg(e,l)}}function gR(e,t,n){if(!ha(n?.id))return n;let s=Xr(n.id);if(!s)return cu(t,n);let o=za(e);return cu(t,n,{priorFor:r=>Ri(s,o[r])})}function $g(e,t,n){return n?.class===sn?tg(t,n):gR(e,t,n)}function us(e,t){let n=Mt(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,$g(e,o,t)),o.class===sn&&Cu(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===sn&&Cu(n.retractionsByGroup,t),t.class===St){let r=Nt(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]=$g(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function Pa(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===pn?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||ls()}),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||ls();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 Dn(e){let t=[Nu,Lu,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 bR(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:Nu,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Je,key:"createdAt",value:n||ls()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Gg(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!R_.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=os(n),d=`utt:${o}#${c}#${t}`,f=Da(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=ji({doc:u}),m=e.individuals.find(y=>y?.id===d),h=Wu(m,l||c),g={id:d,label:f,class:Lu,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:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};us(e,g);let b=bR(e,o,r);if(Pa(e,{predicate:"saidInSession",prop:Pu},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&Pa(e,{predicate:"inReplyTo",prop:Mu},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function wR(e,t){let n;return await ds(e,s=>{n=Gg(s,t),Dn(s)}),{id:n}}async function qg(e,t){let n=[];return t?.length?(await ds(e,s=>{for(let o of t)n.push(Gg(s,o));Dn(s)}),{ids:n}):{ids:n}}async function yR(e,t){t?.length&&await ds(e,n=>{for(let s of t)for(let o of lo(n,s.factId))Pa(n,{predicate:"canonicalisedFrom",prop:Fu},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function lo(e,t){let n=Mt(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===St&&Nt(s.id)===t).map(s=>s.id)}function Vg(e,t,n,s=""){let o=jg(n);if(o.length===1&&o[0].sourceId===cs&&lo(e,t).length)return[];let r=cR(e,t);if(r.length&&(o=o.filter(a=>!va(r,`${t}@${a.sourceId}`,lr(a.tags,s))),!o.length))return o;let i=$R(e,t);return i.length?o.filter(a=>!Jh(i,a.sourceId)):o}function $R(e,t){let n=Mt(e),s=n?n.factRecordsByGroup.get(t):lo(e,t),o=[];for(let r of s||[]){if(!Ts(r))continue;let i=As(e,r);i&&o.push(i)}return o}function Hg(e,t,{quantifier:n,environments:s}){let o=lo(e,t).map(i=>As(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===ii)),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)fn(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")||(fn(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function vR(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Na)?.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 Kg(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}`,m=Mt(e),h=m?m.individualsById.get(p):e.individuals.find(R=>R?.id===p),g=R=>(h?.attributes||[]).find(j=>j?.prop===R)?.value||"",b=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Ru(l.tags),observedAt:u},w=null,v=l.tags,_=y.assertedAt||c||ls(),$=u,x=[],S=d;if(h){let R={assertedAt:Ru(b),observedAt:g(si)};L_(y,R)?(w={head:h,id:`${p}#v${vR(h)}`},x=[w.id]):(v=[...new Set([...b,...l.tags])],_=g(Je)||_,$=u||g(si),x=g(Na).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:co,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:Na,key:"supersedes",value:x.join(" ")}]:[]]},demote:w}}function xR(e,t){let n=`${t}@${cs}`,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 Yg(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${cs}`)||xR(e,Nt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};fn(o,ii,"supersededBy",t.id),us(e,o),s.push(o.id)}return us(e,t),s.push(t.id),s}function As(e,t){let n=Mt(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Vu(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=Nt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function Xg(e,t){let n=Mt(e),s=(n?n.factRecordsByGroup.get(t):lo(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=As(e,u);if(!d)continue;let f=y=>(d.attributes||[]).find(w=>w?.prop===y)?.value||"";if(Ts(u)){i.set(Xr(u),d);continue}if(nr(u)){a.set(f(co),d);continue}let p=f("mgx:factProvenance"),m=Sg(p),h=p.split(" | ").filter(Boolean),g={id:u,sourceId:f(co)||m.id,assertedAt:lr(h,f(Je)),record:d};if(f(ii)){let y=r.get(g.sourceId);y?y.push(g):r.set(g.sourceId,[g]);continue}if(!m.type)continue;let b=o.get(m.type);b?b.push(g):o.set(m.type,[g])}let l=za(e),c=[];for(let[u,d]of o){let f=Yh({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:p=>Ri(u,l[p])});if(f){us(e,f.rollup),c.push(...f.absorbed);for(let p of f.absorbedSourceIds){for(let h of r.get(p)||[])c.push(h.id);r.delete(p);let m=a.get(p);m&&c.push(m.id),a.delete(p)}}}for(let[u,d]of r){let f=Xh({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!f)continue;us(e,f.rollup),c.push(...f.absorbed);let p=As(e,f.rewire);p&&fn(p,Na,"supersedes",f.rollup.id)}return c}async function ER(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",premiseTrusts:l,ruleConfidence:c}={}){let u=J(t),d=rs(n),f=J(s);if(!u||!d||!f)throw new Error("a fact needs subject, predicate and object");let p=Ho(u,d,f),m=`${u} ${d} ${f}`,h=ji({doc:m}),g=os(a);return await ds(e,async b=>{let y=Vg(b,p,os(o),r);for(let w of y.length?[]:Hg(b,p,{quantifier:g}))rr(b,As(b,w),void 0,{premiseTrusts:l,ruleConfidence:c});for(let w of y){let v=Kg(b,{groupId:p,s:u,p:d,o:f,label:Da(m),tokens:h,group:w,createdAt:r,observedAt:i,quantifier:g});await yu(v.candidate);for(let _ of Yg(b,v))rr(b,As(b,_),void 0,_===v.candidate.id?{premiseTrusts:l,ruleConfidence:c}:void 0)}Vu(b,Xg(b,p)),Dn(b)}),{id:p}}function SR(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 uo(e,t){let n=[],s=0;for(let r of t||[]){let i=J(r?.subject),a=rs(r?.predicate),l=J(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:ji({doc:c}),provenance:os(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:os(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:SR(r?.justification)})}let o=[];return n.length?(await ds(e,r=>{let i=[],a=new Set,l=new Map;for(let u of n){let d=Vg(r,u.id,u.provenance,u.createdAt);for(let f of d.length?[]:Hg(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=Kg(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:Da(u.text),tokens:u.tokens,group:f,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments});for(let m of Yg(r,p))a.has(m)||(a.add(m),i.push(m));(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,As(r,u),void 0,l.get(u));let c=[];for(let u of new Set(o))c.push(...Xg(r,u));Vu(r,c),Dn(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function Wa(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=Jg[n];if(!i)throw new Error(`a rule kind must be one of ${kR.join(", ")}, got ${JSON.stringify(n)}`);let a=J(t);if(!a)throw new Error("a rule needs a name");let l=jR[n]||new Set,c=i.map(([p])=>J(s?.[p])),u=i.filter(([p],m)=>!l.has(p)&&!c[m]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([p])=>p).join(" + ")}`);if(n===li){let p=c[i.findIndex(([h])=>h==="objectRole")],m=c[i.findIndex(([h])=>h==="value")];if(!p&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=_R(n,a,c),f=Da(`${a} = ${n}(${c.join(", ")})`);return await ds(e,async p=>{let m=p.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...h.split(" | "),os(o)].filter(Boolean))],b=Wu(m,r),y={id:d,label:f,class:cr,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Ba,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 yu(y),us(p,y),rr(p,p.individuals.find(w=>w?.id===d)),Dn(p)}),{id:d}}function Xu(e,t){let n=J(t);return(e?.individuals||[]).find(s=>s?.class===cr&&(s.attributes||[]).find(o=>o?.prop===Ba)?.value===n)}function RR(e,t){let n=J(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===Ba)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Ju(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=Jg[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Ba)||"",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 Qu(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(),m=l(J,n),h=l(J,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.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=Xu(e,p),y=b?.attributes?.find(w=>w.prop===ur)?.value;if(b&&y===ai){let w=b.attributes.find(F=>F.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(F=>F.prop==="mgx:ruleBase2")?.value,_=J(n),$=J(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===ci){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 Qu(e,w,n,s,o);if(!_)return null;let $=J(n),x=J(v),S=u.find(E=>E.predicate===d&&E.subject===$&&J(E.object)===x);return S?{citation:[..._.citation,i(S)]}:null}return null}async function Qg(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(J,n),m=o(f).filter(b=>p.has(b.fact.object));if(m.length){let b=new Map;for(let y of m)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 h=Xu(e,f),g=h?.attributes?.find(b=>b.prop===ur)?.value;if(h&&g===ai){let b=h.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=J(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(h&&g===ci){let b=h.attributes.find($=>$.prop==="mgx:ruleBase1")?.value,y=h.attributes.find($=>$.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await Qg(e,b,n,s),v=J(y),_=[];for(let $ of w){let x=J($.subject),S=c.find(E=>E.predicate===u&&E.subject===x&&J(E.object)===v);S&&_.push({subject:$.subject,citation:[...$.citation,r(S)]})}return _}return[]}function vt(e,t={}){let n=Zu(e),s=Ig(e),o=[];for(let[r,i]of n.groups){let a=ed(r,i,n),l=s?.get(r);a.trust=Ti(l?l.inputs:a.assertions,t).score,o.push(a)}return o}function Zu(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===pn),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===sn){let d=Nt(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===ii)||nr(l.id))continue;let c=Nt(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=>!va(c,f.id,lr(Mn(f,"mgx:factProvenance").split(" | ").filter(Boolean),Mn(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=Tu(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 ed(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=Mn,i=oi,a=[],l=[],c=[],u=new Set,d=[],f=new Set,p="";for(let g of t){if(Ts(g.id)){let x=Xr(g.id),S=ga(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,Ln),ownTrust:Number(r(g,tr))||0,assertedAt:r(g,Nn),rollup:{count:Number(r(g,Yr))||S.length,sourceIds:S,earliest:r(g,Ln),latest:r(g,Nn)}});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,co),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 m=[],h=new Set;for(let g of d)for(let b of g)h.has(b)||(h.add(b),m.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:m,assertions:a}}function TR(e){let t=Mn(e,co);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 AR(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||ls();return await ds(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=Nt(f.id),m=o.has(f.id)?f.id:o.has(p)?p:"";if(!m)return!0;u.add(m),c.add(f.id);let h=TR(f),g=`${p}\0${h}`,b=Mn(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:h,ids:[f.id],tags:b?[b]:[],template:{label:f.label||"",subject:Mn(f,"rdf:subject"),predicate:Mn(f,"rdf:predicate"),object:Mn(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(m=>!c.has(m?.subject)&&!c.has(m?.object)),f.count=f.examples.length}for(let f of d.values()){let p=eg({groupId:f.groupId,sourceId:f.sourceId,recordIds:f.ids,retractedAt:a,template:f.template,provenance:[...f.tags,n].filter(Boolean).join(" | ")});p&&us(l,p)}Dn(l)}}),{removed:r,records:i}}function IR(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==sn)continue;let s=xa(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function CR(e,t){let n=[];for(let o of t||[]){let r=Ea(o);r&&n.push(r)}let s=[];return n.length?(await ds(e,o=>{let r=new Map;for(let a of n){let l=us(o,a),c=Nt(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 lo(o,a)){let u=As(o,c);if(!u)continue;let d=Mn(u,"mgx:factProvenance").split(" | ").filter(Boolean);va(l,c,lr(d,Mn(u,Je)))&&i.add(c)}if(i.size){Vu(o,i);for(let a of i)s.push(a)}Dn(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function OR(e,{self:t="",acknowledgedBy:n=null}={}){let s=Sa(vt(e)),o=[];for(let r of e?.individuals||[])r?.class===sn&&r.id&&o.push(r.id);return{roster:s,retirable:ka({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function LR(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await ds(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==sn||!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=Nt(a),c=(i.retractionsByGroup.get(l)||[]).filter(u=>!r.has(u.id));c.length?i.retractionsByGroup.set(l,c):i.retractionsByGroup.delete(l)}Dn(o)}),{retired:s}):{retired:s}}function Zg(e,{floor:t=NR}={}){let n=vt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(pa(r.predicate)===Zl)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=pa(r[0].predicate);i!==eu&&!nu(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,Ou,Lu,St,Nu,ar,cr,Pu,Mu,__,pn,Fu,vg,La,ju,xg,R_,wg,T_,_u,Du,Eg,C_,cs,si,co,Na,ii,Rg,Mn,oi,Tu,Tg,Ig,M_,B_,yg,Sn,Fg,Au,Q_,ku,eR,Uu,Dg,Bu,zg,Iu,Mt,Da,ls,qu,mR,ai,ci,Hu,Ku,Ua,li,Yu,kR,Ba,ur,Jg,jR,_R,NR,dr,PR,MR,qe=O(()=>{_t();Ue();ws();nn();nn();Hn();Dh();Hn();da();lu();hu();wu();rg();lu();hu();wu();ir=Q(".tmct","memory"),Ou=Q(ir,"graph.json"),Lu="Utterance",St="Fact",Nu="Session",ar="Source",cr="Rule",Pu="mgx:saidInSession",Mu="mgx:inReplyTo",__="mgx:derivedFrom",pn="mgx:statedBy",Fu="mgx:canonicalisedFrom",vg="mgx:sourceReliability",La="src:operator-chat",ju="src:teach-chat",xg="src:teach-node",R_=new Set(["visitor","tmct"]),wg=48,T_=[{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:Pu,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Mu,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:ys,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:__,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:pn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Fu,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:_i,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)"}];_u=e=>ni(e),Du="memory",Eg="sqlite";C_=`
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
- `,rs="src:none",si="mgx:observedAt",co="mgx:sourceId",Ca="mgx:supersedes",ii="mgx:supersededBy";xg="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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";Mn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",oi=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Su=(e,t)=>`${e}\0${t}`;Eg=Symbol("materialised fact_heads index");kg=e=>e?.[Eg]||null,x_="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";__=new Set(["subject","object","subjectLabel","objectLabel"]),fg=!1;En=e=>e===void 0?e:structuredClone(e);Cg=Q(ir,"manifest.json"),ku=5,M_=e=>Q(e,Cg);$u=e=>U_(z_(e)),D_=/^fact:[0-9a-f]{8}$/;Pu=Q(ir,"syllogise-state.json"),Og="syllogiseState";Mu=Q(ir,"node-id.json"),Lg="nodeId";ju=Symbol("mutateMemory lookup index");Ht=e=>e?.[ju]||null;Pa=e=>e.length>pg?e.slice(0,pg-1)+"\u2026":e,is=()=>new Date().toISOString();zu=e=>String(e).replace(/^src:/,"");Z_=e=>typeof e=="string"&&(e.startsWith(`${Ia}:`)||e.startsWith(`${vu}:`)||e.startsWith(`${gg}:`));ai="compose2",ci="filter",Bu="recursive",Wu="action-signature",Fa="action-precond",li="action-effect",Gu="action-constraint",uR=Object.freeze([ai,ci,Bu,Wu,Fa,li,Gu]),Da="mgx:ruleName",ur="mgx:ruleKind",qg={[ai]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[ci]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Bu]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[Wu]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Fa]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[li]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[Gu]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},dR={[Fa]:new Set(["value","negate"]),[li]:new Set(["objectRole","value"])},pR=(e,t,n)=>`rule:${Gr([e,t,...n].join("\0"))}`;wR=.5,dr="mgx:hasA",yR="mgx:capableOf",$R=Zl});async function fn(e,t=null){try{if(t)return St(await Nt(t));let{dir:n,close:s}=await Is(ve(ve(e.graphFile)));try{return St(await Nt(n))}finally{await s()}}catch{return[]}}function Yg(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 Ua(e,t){let n=J(t),s=e.filter(a=>Kg.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,po),i=o.length>po?`
146
+ `,cs="src:none",si="mgx:observedAt",co="mgx:sourceId",Na="mgx:supersedes",ii="mgx:supersededBy";Rg="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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";Mn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",oi=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Tu=(e,t)=>`${e}\0${t}`;Tg=Symbol("materialised fact_heads index");Ig=e=>e?.[Tg]||null,M_="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";B_=new Set(["subject","object","subjectLabel","objectLabel"]),yg=!1;Sn=e=>e===void 0?e:structuredClone(e);Fg=Q(ir,"manifest.json"),Au=5,Q_=e=>Q(e,Fg);ku=e=>nR(tR(e)),eR=/^fact:[0-9a-f]{8}$/;Uu=Q(ir,"syllogise-state.json"),Dg="syllogiseState";Bu=Q(ir,"node-id.json"),zg="nodeId";Iu=Symbol("mutateMemory lookup index");Mt=e=>e?.[Iu]||null;Da=e=>e.length>wg?e.slice(0,wg-1)+"\u2026":e,ls=()=>new Date().toISOString();qu=e=>String(e).replace(/^src:/,"");mR=e=>typeof e=="string"&&(e.startsWith(`${La}:`)||e.startsWith(`${ju}:`)||e.startsWith(`${xg}:`));ai="compose2",ci="filter",Hu="recursive",Ku="action-signature",Ua="action-precond",li="action-effect",Yu="action-constraint",kR=Object.freeze([ai,ci,Hu,Ku,Ua,li,Yu]),Ba="mgx:ruleName",ur="mgx:ruleKind",Jg={[ai]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[ci]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Hu]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[Ku]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Ua]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[li]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[Yu]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},jR={[Ua]:new Set(["value","negate"]),[li]:new Set(["objectRole","value"])},_R=(e,t,n)=>`rule:${Gr([e,t,...n].join("\0"))}`;NR=.5,dr="mgx:hasA",PR="mgx:capableOf",MR=tu});async function mn(e,t=null){try{if(t)return vt(await Pt(t));let{dir:n,close:s}=await Cs(ve(ve(e.graphFile)));try{return vt(await Pt(n))}finally{await s()}}catch{return[]}}function tb(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 Ga(e,t){let n=J(t),s=e.filter(a=>eb.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,po),i=o.length>po?`
147
147
  \u2026+${o.length-po} 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
- (${Yg(s)})`}function Ba(e,t){let n=J(t),s=e.filter(a=>Kg.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,po).join(", ")}`),r.length){let a=r.length>po?`, +${r.length-po} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,po).join(", ")}${a}`)}return i.push(`(${Yg(s)})`),i.join(`
151
- `)}var Kg,po,fo=O(()=>{Ue();qe();Kg=new Set(["rdfs:subClassOf","rdf:type"]),po=40});async function Xg(e,{graph:t,svc:n,config:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=tn(n.graph,o);if(r)return Uc(t,r,{candidates:i});let a=Ba(await fn(s),o);if(a)return a;vt(n,o,"symbol")}var Jg=O(()=>{Oe();fo();Ge()});async function Qg(e,{graph:t,svc:n,repoRoot:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=vt(n,o,"symbol"),a=Rt(r);if(!a)throw new Re(`"${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 es({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Wr})}catch(g){throw g instanceof Re?g:new Re(`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?`
150
+ (${tb(s)})`}function qa(e,t){let n=J(t),s=e.filter(a=>eb.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,po).join(", ")}`),r.length){let a=r.length>po?`, +${r.length-po} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,po).join(", ")}${a}`)}return i.push(`(${tb(s)})`),i.join(`
151
+ `)}var eb,po,fo=O(()=>{Ue();qe();eb=new Set(["rdfs:subClassOf","rdf:type"]),po=40});async function nb(e,{graph:t,svc:n,config:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=tn(n.graph,o);if(r)return Wc(t,r,{candidates:i});let a=qa(await mn(s),o);if(a)return a;xt(n,o,"symbol")}var sb=O(()=>{Oe();fo();Ge()});async function ob(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 Re(`"${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 ss({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Wr})}catch(g){throw g instanceof Re?g:new Re(`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
152
  \u2026 (truncated to ${Wr} lines; full span ${d})`:"",m=i.length?`
153
- (other matches: ${i.map(g=>g.label).join(", ")})`:"",h=Gc(t,r);return`${f}
153
+ (other matches: ${i.map(g=>g.label).join(", ")})`:"",h=Vc(t,r);return`${f}
154
154
  ${c}${p}${h?`
155
- ${h}`:""}${m}`}var Zg=O(()=>{_t();zt();ea();Oe();Ge()});var eb,tb=O(()=>{Oe();Ge();eb=rt(bf)});function nb(e,{graph:t,svc:n}){let{match:s}=vt(n,nt(e,"module"),"module");return rf(t,s)}var sb=O(()=>{Oe();Ge()});async function ob(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Re("query is required");let r=hf(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=Ba(await fn(n),s);if(i)return i}return r}var rb=O(()=>{zt();Oe();fo()});async function ib(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=tn(n.graph,o);if(r)return gf(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Ua(await fn(s),o);if(i)return i;vt(n,o,"class")}var ab=O(()=>{Oe();fo();Ge()});async function cb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=tn(n.graph,o);if(r)return wf(t,r);let i=Ua(await fn(s),o);if(i)return i;vt(n,o,"class")}var lb=O(()=>{Oe();fo();Ge()});function ER(e,{conceptBase:t="concept:",relationMap:n=xR}={}){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=J(g.subject),w=J(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,m=[];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),m.push({subject:y,object:w}))}return m.sort((g,b)=>`${g.subject}${g.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:m,conceptIdForTerm:g=>{let b=J(g);return r.has(b)?u(a(b)):null},namespace:vR}}function Xu(e,t,n={}){let s=ER(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=J(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 vR,xR,Ju=O(()=>{nn();vR="http://www.w3.org/2004/02/skos/core#",xR={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function Qu(e,{config:t,memoryBackend:n=null}){let s=nt(e,"term"),o=Xu(await fn(t,n),s);if(!o)throw new Re(`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)"),js({content:r.join(`
156
- `),data:o})}var ub=O(()=>{zt();Ju();fo();Ge();Qu.ownsGraphLoad=!0});function MR(e,t){let n=[];for(let s of t||[])s?.predicate===SR&&J(s.subject)===e&&n.push(J(s.object));return n}function Wa(e,t){let n=J(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 MR(i,t))s.has(a)||o.push(a)}}return r}var SR,kR,jR,_R,RR,TR,AR,IR,CR,OR,LR,NR,PR,db,Zu=O(()=>{nn();SR="rdfs:subClassOf",kR='<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>',jR='<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>',_R='<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>',RR='<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>',TR='<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>',AR='<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>',IR='<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>',CR='<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>',OR='<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>',LR='<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>',NR='<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>',PR='<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>',db=Object.freeze({spider:kR,fly:jR,egg:_R,poodle:RR,dog:TR,animal:AR,room:IR,furniture:CR,portable:OR,person:LR,adventurer:NR,container:PR})});function FR(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function pb(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 FR(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var fb=O(()=>{});function DR(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function zR(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function gb(e){return zR(e).filter(t=>t?.property&&t.value!==void 0)}function UR(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function BR(e,t){let n=null,s=0;for(let o of e){let r=gb(o);r.length<=s||UR(r,t)&&(n=o,s=r.length)}return n}function WR(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 mb(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=WR(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function GR(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 qR(e,t){let n=t;for(let s of GR(e))n=n.split(s).join("");return n}function hb(e,t,n){let s=DR(e,n),o=BR(s,t);if(o&&!o.parameters)return o.svg;if(o)return qR(o,mb(o,t)||o.svg);for(let i of s){if(i.match||!i.parameters)continue;let a=mb(i,t);if(a)return a}let r=s.find(i=>!i.match&&!i.parameters);return r?r.svg:null}function VR(e,t,n,s,o,r){for(let a of Wa(e,t)){let l=hb(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=hb(r,n,s);return i||o[r]}function bb(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=VR(e,t,n,s,o,r);return i?pb(a,i):a}var y1,$1,ed=O(()=>{Zu();fb();y1=Object.freeze(["left","half-left","half-right","right"]),$1=Object.freeze(["moving"])});function td(e){for(let t of e||[])if(t?.predicate===HR&&Object.prototype.hasOwnProperty.call(wb,t.object))return wb[t.object];return 1}var HR,wb,yb=O(()=>{HR="mgx:hasProperty",wb=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function $b(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,m=a.sizeScaleFor,h=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 m=="function"?m(g):1,sizeKnown:i&&typeof m=="function"?m([{predicate:s,object:i}])!==1:null,expressionKnown:r&&h?Object.prototype.hasOwnProperty.call(h,r):null,expressionApplied:r?S!==E:null,rootFallback:f,fellBackToRoot:x?!!x.root:null,chain:$,matched:x}}var vb=O(()=>{});var xb,Eb,KR,k1,Sb=O(()=>{ed();xb="icon tier",Eb="sprite tier",KR=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."})}),k1=Object.freeze(Object.values(KR).map(e=>e.predicate))});var kb,jb=O(()=>{kb=()=>[]});var _b,Rb=O(()=>{_b=()=>[]});function QR(){let e=_b();return e.length?{templates:e,tier:Eb}:{templates:kb(),tier:xb}}function Tb(e){return e.map(t=>t.term).join(" -> ")}async function nd(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 Re(`"${o}" is not a sprite expression. The palette holds: ${XR().join(", ")}.`);if(r&&!JR(r))throw new Re(`"${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}=QR(),l=await fn(t,n),c=$b({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:db,resolveSpriteAsset:bb,classAncestorChain:Wa,sizeScaleFor:td,expressionPalette:To});if(!c.svg||c.fellBackToRoot)throw new Re(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${Tb(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 Re(`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: ${Tb(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`),js({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 YR,XR,JR,Ab=O(()=>{zt();Zu();ed();kc();yb();vb();Sb();jb();Rb();fo();Ge();YR="mgx:hasProperty",XR=()=>Object.keys(To).sort(),JR=e=>!!e&&td([{predicate:YR,object:String(e)}])!==1;nd.ownsGraphLoad=!0});function Ib(e,{graph:t}){return yf(t,{pkg:String(e?.package||"").trim()})}var Cb=O(()=>{Oe()});function Ob(e,{graph:t,svc:n}){let{match:s}=vt(n,nt(e,"module"),"module");return zf(t,s)}var Lb=O(()=>{Oe();Ge()});function Nb(e,{graph:t}){return xf(t)}var Pb=O(()=>{Oe()});function Fb(e,{graph:t}){let{content:n,tmct_ask:s}=Es(t,nt(e,"query"));return js({content:n,data:s,text:`${n}${Mb}${JSON.stringify(s,null,2)}`})}var Mb,sd=O(()=>{Ss();Ge();Mb=`
155
+ ${h}`:""}${m}`}var rb=O(()=>{_t();Bt();ta();Oe();Ge()});var ib,ab=O(()=>{Oe();Ge();ib=rt(xf)});function cb(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return df(t,s)}var lb=O(()=>{Oe();Ge()});async function ub(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Re("query is required");let r=$f(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=qa(await mn(n),s);if(i)return i}return r}var db=O(()=>{Bt();Oe();fo()});async function pb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=tn(n.graph,o);if(r)return vf(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Ga(await mn(s),o);if(i)return i;xt(n,o,"class")}var fb=O(()=>{Oe();fo();Ge()});async function mb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=tn(n.graph,o);if(r)return Ef(t,r);let i=Ga(await mn(s),o);if(i)return i;xt(n,o,"class")}var hb=O(()=>{Oe();fo();Ge()});function zR(e,{conceptBase:t="concept:",relationMap:n=DR}={}){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=J(g.subject),w=J(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,m=[];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),m.push({subject:y,object:w}))}return m.sort((g,b)=>`${g.subject}${g.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:m,conceptIdForTerm:g=>{let b=J(g);return r.has(b)?u(a(b)):null},namespace:FR}}function td(e,t,n={}){let s=zR(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=J(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 FR,DR,nd=O(()=>{nn();FR="http://www.w3.org/2004/02/skos/core#",DR={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function sd(e,{config:t,memoryBackend:n=null}){let s=nt(e,"term"),o=td(await mn(t,n),s);if(!o)throw new Re(`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)"),_s({content:r.join(`
156
+ `),data:o})}var gb=O(()=>{Bt();nd();fo();Ge();sd.ownsGraphLoad=!0});function eT(e,t){let n=[];for(let s of t||[])s?.predicate===UR&&J(s.subject)===e&&n.push(J(s.object));return n}function Va(e,t){let n=J(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 eT(i,t))s.has(a)||o.push(a)}}return r}var UR,BR,WR,GR,qR,VR,HR,KR,YR,XR,JR,QR,ZR,bb,od=O(()=>{nn();UR="rdfs:subClassOf",BR='<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>',WR='<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>',GR='<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>',qR='<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>',VR='<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>',HR='<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>',KR='<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>',YR='<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>',XR='<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>',JR='<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>',QR='<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>',ZR='<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>',bb=Object.freeze({spider:BR,fly:WR,egg:GR,poodle:qR,dog:VR,animal:HR,room:KR,furniture:YR,portable:XR,person:JR,adventurer:QR,container:ZR})});function tT(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function wb(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 tT(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var yb=O(()=>{});function nT(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function sT(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function xb(e){return sT(e).filter(t=>t?.property&&t.value!==void 0)}function oT(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function rT(e,t){let n=null,s=0;for(let o of e){let r=xb(o);r.length<=s||oT(r,t)&&(n=o,s=r.length)}return n}function iT(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=iT(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function aT(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 cT(e,t){let n=t;for(let s of aT(e))n=n.split(s).join("");return n}function vb(e,t,n){let s=nT(e,n),o=rT(s,t);if(o&&!o.parameters)return o.svg;if(o)return cT(o,$b(o,t)||o.svg);for(let i of s){if(i.match||!i.parameters)continue;let a=$b(i,t);if(a)return a}let r=s.find(i=>!i.match&&!i.parameters);return r?r.svg:null}function lT(e,t,n,s,o,r){for(let a of Va(e,t)){let l=vb(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=vb(r,n,s);return i||o[r]}function Eb(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=lT(e,t,n,s,o,r);return i?wb(a,i):a}var V1,H1,rd=O(()=>{od();yb();V1=Object.freeze(["left","half-left","half-right","right"]),H1=Object.freeze(["moving"])});function id(e){for(let t of e||[])if(t?.predicate===uT&&Object.prototype.hasOwnProperty.call(Sb,t.object))return Sb[t.object];return 1}var uT,Sb,kb=O(()=>{uT="mgx:hasProperty",Sb=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function jb(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,m=a.sizeScaleFor,h=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 m=="function"?m(g):1,sizeKnown:i&&typeof m=="function"?m([{predicate:s,object:i}])!==1:null,expressionKnown:r&&h?Object.prototype.hasOwnProperty.call(h,r):null,expressionApplied:r?S!==E:null,rootFallback:f,fellBackToRoot:x?!!x.root:null,chain:$,matched:x}}var _b=O(()=>{});var Rb,Tb,dT,Q1,Ab=O(()=>{rd();Rb="icon tier",Tb="sprite tier",dT=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."})}),Q1=Object.freeze(Object.values(dT).map(e=>e.predicate))});var Ib,Cb=O(()=>{Ib=()=>[]});var Ob,Lb=O(()=>{Ob=()=>[]});function hT(){let e=Ob();return e.length?{templates:e,tier:Tb}:{templates:Ib(),tier:Rb}}function Nb(e){return e.map(t=>t.term).join(" -> ")}async function ad(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 Re(`"${o}" is not a sprite expression. The palette holds: ${fT().join(", ")}.`);if(r&&!mT(r))throw new Re(`"${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}=hT(),l=await mn(t,n),c=jb({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:bb,resolveSpriteAsset:Eb,classAncestorChain:Va,sizeScaleFor:id,expressionPalette:To});if(!c.svg||c.fellBackToRoot)throw new Re(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${Nb(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 Re(`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: ${Nb(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`),_s({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 pT,fT,mT,Pb=O(()=>{Bt();od();rd();_c();kb();_b();Ab();Cb();Lb();fo();Ge();pT="mgx:hasProperty",fT=()=>Object.keys(To).sort(),mT=e=>!!e&&id([{predicate:pT,object:String(e)}])!==1;ad.ownsGraphLoad=!0});function Mb(e,{graph:t}){return Sf(t,{pkg:String(e?.package||"").trim()})}var Fb=O(()=>{Oe()});function Db(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return qf(t,s)}var zb=O(()=>{Oe();Ge()});function Ub(e,{graph:t}){return _f(t)}var Bb=O(()=>{Oe()});function Gb(e,{graph:t}){let{content:n,tmct_ask:s}=Ss(t,nt(e,"query"));return _s({content:n,data:s,text:`${n}${Wb}${JSON.stringify(s,null,2)}`})}var Wb,cd=O(()=>{ks();Ge();Wb=`
158
158
 
159
159
  ---tmct_ask---
160
- `});var Db,zb=O(()=>{Oe();Ge();Db=rt(vf)});var Ub,Bb=O(()=>{Oe();Ge();Ub=rt(Ef)});var Wb,Gb=O(()=>{Oe();Ge();Wb=rt(Af)});var qb,Vb=O(()=>{Oe();Ge();qb=rt(Cf)});var Hb,Kb=O(()=>{Oe();Ge();Hb=rt(Of)});var Yb,Xb=O(()=>{Oe();Ge();Yb=rt(kf)});var Jb,Qb=O(()=>{Oe();Ge();Jb=rt(jf)});var Zb,ew=O(()=>{Oe();Ge();Zb=rt(Rf)});var tw,nw=O(()=>{Oe();Ge();tw=rt(Df)});function ZR(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function eT(e){let t=(e||[]).map(ZR);return t.map(n=>JSON.stringify(n)).join(`
160
+ `});var qb,Vb=O(()=>{Oe();Ge();qb=rt(jf)});var Hb,Kb=O(()=>{Oe();Ge();Hb=rt(Rf)});var Yb,Xb=O(()=>{Oe();Ge();Yb=rt(Nf)});var Jb,Qb=O(()=>{Oe();Ge();Jb=rt(Mf)});var Zb,ew=O(()=>{Oe();Ge();Zb=rt(Ff)});var tw,nw=O(()=>{Oe();Ge();tw=rt(Af)});var sw,ow=O(()=>{Oe();Ge();sw=rt(If)});var rw,iw=O(()=>{Oe();Ge();rw=rt(Of)});var aw,cw=O(()=>{Oe();Ge();aw=rt(Gf)});function gT(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function bT(e){let t=(e||[]).map(gT);return t.map(n=>JSON.stringify(n)).join(`
161
161
  `)+(t.length?`
162
- `:"")}function sw(e){return eT(St(e))}var ow=O(()=>{qe()});async function od(e,{config:t,memoryBackend:n=null}){let s=n?null:await Is(ve(ve(t.graphFile))),o=n||s.dir;try{return sw(await Nt(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var rw=O(()=>{ow();Ue();qe();od.ownsGraphLoad=!0});async function rd(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 Is(ve(ve(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 js({content:l?`${c}
162
+ `:"")}function lw(e){return bT(vt(e))}var uw=O(()=>{qe()});async function ld(e,{config:t,memoryBackend:n=null}){let s=n?null:await Cs(ve(ve(t.graphFile))),o=n||s.dir;try{return lw(await Pt(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var dw=O(()=>{uw();Ue();qe();ld.ownsGraphLoad=!0});async function ud(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 Cs(ve(ve(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 _s({content:l?`${c}
163
163
  ${a.canonical.join(`
164
- `)}`:c,data:{...a,grounded:l}})}finally{await i()}}var iw=O(()=>{Ue();qe();Ge();rd.ownsGraphLoad=!0});var tT,aw=O(()=>{Ll();ph();Jg();Zg();tb();sb();rb();ab();lb();ub();Ab();Cb();Lb();Pb();sd();zb();Bb();Gb();Vb();Kb();Xb();Qb();ew();nw();rw();iw();tT=Object.freeze({tmct_context:Ol,tmct_context_more:dh,tmct_describe:Xg,tmct_snippet:Qg,tmct_signature:eb,tmct_impact:nb,tmct_search:ob,tmct_members:ib,tmct_subclasses:cb,tmct_related:Qu,tmct_sprite:nd,tmct_architecture:Ib,tmct_exports:Ob,tmct_untested:Nb,tmct_ask:Fb,tmct_tests_for:Db,tmct_history:Ub,tmct_file_history:Wb,tmct_method_history:qb,tmct_class_history:Hb,tmct_callers:Yb,tmct_callees:Jb,tmct_calls:Zb,tmct_cochanges:tw,tmct_export:od,tmct_ingest:rd})});var id=O(()=>{});var Ga,ad=O(()=>{Ga=()=>({relations:[],constructions:[]})});var cw,lw=O(()=>{_t();Ue();Sp();zt();_r();Ss();sa();oa();aw();Ge();zo();Gi();id();ad();oa();Ll();sd();qi(void 0);Wi(Ga);cw=Ep.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var _M,RM,TM,qa=O(()=>{_M=Object.freeze(["entity","set","event","measure"]),RM=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),TM=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,IM,CM,OM,LM,NM,PM,MM,FM,DM,zM,UM,BM,WM,GM,qM,VM,nT,HM,KM,uw=O(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},IM=pt("createRequire"),CM=pt("readFileSync"),OM=pt("access"),LM=pt("readFile"),NM=pt("writeFile"),PM=pt("appendFile"),MM=pt("mkdir"),FM=pt("mkdtemp"),DM=pt("rename"),zM=pt("unlink"),UM=pt("rm"),BM=pt("stat"),WM=pt("copyFile"),GM=pt("readdir"),qM=pt("createReadStream"),VM=pt("createWriteStream"),nT=pt("randomBytes"),HM=pt("spawnSync"),KM=pt("createInterface")});var Va=O(()=>{uw()});var ft,QM,ZM,eF,tF,nF,sF,oF,rF,iF,aF,cF,lF,uF,dF,pF,fF,Kt,mF,hF,gF,Ls=O(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},QM=ft("createRequire"),ZM=ft("readFileSync"),eF=ft("access"),tF=ft("readFile"),nF=ft("writeFile"),sF=ft("appendFile"),oF=ft("mkdir"),rF=ft("mkdtemp"),iF=ft("rename"),aF=ft("unlink"),cF=ft("rm"),lF=ft("stat"),uF=ft("copyFile"),dF=ft("readdir"),pF=ft("createReadStream"),fF=ft("createWriteStream"),Kt=e=>String(e),mF=ft("randomBytes"),hF=ft("spawnSync"),gF=ft("createInterface")});var sT,dw,vF,xF,EF,ld=O(()=>{_t();Ls();Ue();sT={},dw=Q(ve(Kt(sT.url)),"..","..",".."),vF=Q(dw,"data","templates","responses.jsonl"),xF=Q(dw,"data","phrasebook","software-phrases.txt"),EF=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function rT(e,t={}){let n=oT.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function iT(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>rT(s,t))):1}function Ze(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:iT(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 oT,pw=O(()=>{oT=/^src:corpus:(.+)$/});var mt,jF,pr,_F,RF,TF,AF,IF,CF,OF,LF,NF,PF,MF,FF,aT,cT,DF,zF,UF,mo=O(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},jF=mt("createRequire"),pr=mt("readFileSync"),_F=mt("access"),RF=mt("readFile"),TF=mt("writeFile"),AF=mt("appendFile"),IF=mt("mkdir"),CF=mt("mkdtemp"),OF=mt("rename"),LF=mt("unlink"),NF=mt("rm"),PF=mt("stat"),MF=mt("copyFile"),FF=mt("readdir"),aT=mt("createReadStream"),cT=mt("createWriteStream"),DF=mt("randomBytes"),zF=mt("spawnSync"),UF=mt("createInterface")});function fw(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 pT(e=uT){let t=or(pr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function ud(){if(Ha===null)try{Ha=pT()}catch{Ha=[]}return Ha}var fT,lT,uT,dT,YF,Ha,dd=O(()=>{mo();Ls();Ue();_a();ld();fT={},lT=ve(Kt(fT.url)),uT=Q(lT,"..","..","data","templates","grammar-rules.toml"),dT=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),YF=Object.freeze(new Set(dT.filter(e=>e!=="prose")));Ha=null});function mT(){if(ui!==void 0)return ui;try{let e=mw?mw():hT();ui=e&&e.winkNLP&&e.model?e:null}catch{ui=null}return ui}function hT(){let e=process.getBuiltinModule("node:module").createRequire(gT.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function pd(){if(fr!==void 0)return fr;let e=mT();if(!e)return fr=null,null;try{fr=e.winkNLP(e.model)}catch{fr=null}return fr}var gT,mw,ui,fr,fd=O(()=>{gT={}});var hw=O(()=>{fd()});var bw,gw=O(()=>{bw={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 vT(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 ww(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!xT.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(!ET.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 Ns(e,t=wT){if(!e&&md.has(t))return md.get(t);let n=bw,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return ww(s,n),e?(ww(s,e),s):(md.set(t,s),s)}function di(e,t,n={}){return ST(e,t,n)[0]??null}function ST(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 vT(s))l(e.nouns.get(c));return i}var wT,nD,sD,yT,$T,oD,xT,ET,md,ho=O(()=>{gw();wT="tmct:",nD=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),sD=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"])),$T=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),oD=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});xT=new Set(["data","object"]),ET=new Set(["subclass","data"]);md=new Map});var cD,lD,uD,kT,dD,pD,fD,yw=O(()=>{Ss();Oe();cD=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),lD=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),uD=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`]}),kT=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"}),dD=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"]}),pD=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"}}),fD=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 Ka=O(()=>{nn();ho();yw()});var Ya,Xa=O(()=>{Ya=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var _T,jD,$w=O(()=>{mo();Xa();Ls();Ue();Ka();_T={},jD=Q(ve(Kt(_T.url)),"..","..","..")});var vw=O(()=>{nn();ho();Ka()});var RT,TT,FD,hd=O(()=>{nn();ho();zo();RT=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),TT=["this","is","about","the"],FD=TT.length});var xw=O(()=>{_t();Ue()});var gd=O(()=>{nn()});var AT,ZD,Ew=O(()=>{mo();Xa();Ls();Ue();gd();nn();AT={},ZD=Q(ve(Kt(AT.url)),"..","..","..")});var tz,nz,sz,Sw=O(()=>{tz=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),nz=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"})}),sz=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 pi(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 Ja(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 kw(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 bd(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,bd(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function IT(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 CT(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=kw(e,n),c=kw(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 h of l){let g=s.get(h);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(h=>c.has(h));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=h=>bd(h,n,o,new Set),f=u[0],p=d(f);for(let h of u){let g=d(h);(g>p||g===p&&h<f)&&(f=h,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let h=a.get(f);return typeof h=="number"&&h<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 Qa(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||pi(t),c=IT(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:_)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let v=CT(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...v}),v.distinct||p(a[y],a[w])}let h=new Map;for(let y of a){let w=f(y);h.has(w)||h.set(w,[]),h.get(w).push(y)}let g=y=>bd(y,l,u,new Set),b=[...h.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:m}}var Za=O(()=>{qt()});function wd(e){return typeof e=="string"&&OT.test(e)}function jw(e){return!!e&&typeof e=="object"&&go(e.s)}function yd(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&wd(e.world)&&go(e.subject)&&go(e.predicate)&&go(e.object)}function $d(e){if(!e||typeof e!="object"||e.kind!=="rule"||!wd(e.world)||!go(e.name)||!NT.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(go)}function vd(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&wd(e.world)&&go(e.opening)}function _w(e){return yd(e)||$d(e)||vd(e)}function Rw(e){let t=e||[],n=t.filter(c=>c.predicate===PT).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 OT,LT,NT,go,PT,bo=O(()=>{OT=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,LT=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),NT=new Set(LT),go=e=>typeof e=="string"&&e.trim()!=="";PT="mgx:default-contains"});var FT,DT,zT,UT,BT,WT,GT,qT,VT,hz,HT,Tw,gz,bz,Aw=O(()=>{ho();Mo();FT="subClassOf",DT="typeAssertion",zT="relation",UT="someValuesFrom",BT="cardinality",WT="disjointWith",GT="possessive",qT="adjective",VT="capability",hz=Object.freeze([FT,DT,zT,UT,BT,WT,GT,qT,VT]),HT=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Tw=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"]]),gz=Math.max(...[...Tw.keys()].map(e=>e.split(" ").length)),bz=[...new Set([...HT,...[...Tw.keys()].map(e=>e.split(" ")[0])])]});var wo=O(()=>{});var xd=O(()=>{Oe();Ss();wo()});function jt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:Ps.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 KT,Ps,Ee,Sz,mi,st,Pt,Yt,YT,Iw,kt,XT,JT,Cw,kz,jz,_z,Ow=O(()=>{KT=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),Ps=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Ee=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),Sz=Object.freeze([Ee.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:Ps.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Pt=()=>Object.freeze({type:Ps.Precondition,pred:mi.graphLoaded}),Yt=(e,t)=>Object.freeze({type:Ps.Precondition,pred:mi.resolves,param:e,as:t}),YT=e=>Object.freeze({type:Ps.Precondition,pred:mi.anyPresent,params:Object.freeze([...e])}),Iw=()=>Object.freeze({type:Ps.Precondition,pred:mi.memoryFacts}),kt=(e,t=null)=>Object.freeze({type:Ps.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});XT=Object.freeze([jt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[st("query",Ee.Query,{required:!1,note:"required unless a kind filter is given"}),st("kind",Ee.Kind,{required:!1}),st("name",Ee.Query,{required:!1}),st("decorator",Ee.Query,{required:!1})],preconditions:[Pt(),YT(["query","kind"])],add:[kt("matches","query")]}),jt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("description","symbol")]}),jt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.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",Ee.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Pt(),Yt("module",Ee.Symbol)],add:[kt("impact","module")]}),jt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Pt(),Yt("class",Ee.Class)],add:[kt("members","class")]}),jt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Pt(),Yt("class",Ee.Class)],add:[kt("subclasses","class")]}),jt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[st("module",Ee.Module)],preconditions:[Pt(),Yt("module",Ee.Module)],add:[kt("exports","module")]}),jt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("callers","symbol")]}),jt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("callees","symbol")]}),jt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("calls","symbol")]}),jt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("tests","symbol")]}),jt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Pt()],add:[kt("untested",null)]}),jt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("history","symbol")]}),jt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("cochanges","symbol")]}),jt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[st("package",Ee.Package,{required:!1})],preconditions:[Pt()],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",Ee.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[Iw(),Yt("term",Ee.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",Ee.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",Ee.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),st("size",Ee.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[Iw(),Yt("class",Ee.MemoryTerm)],add:[kt("sprite","class")]})]),JT=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Cw=XT,kz=JT(Cw),jz=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"}),_z=Object.freeze({prefixes:KT,vocab:Ps,kinds:Ee,precond:mi,get capabilities(){return Cw}})});var Lw=O(()=>{Ow()});var Nw=O(()=>{ws()});function ZT(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Q(QT,"corpus","worlds")}function Pw(e){try{return Ya(pr(e))}catch{return null}}function Mw(e){if(Ed.has(e))return Ed.get(e);let t=null,n=Pw(Q(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 Ed.set(e,t),t}function eA(e,t){let n=Mw(e);if(!n)return null;let s=n[String(t??"")];if(!jw(s))return null;let o=`${e}\0${t}`;if(Sd.has(o))return Sd.get(o);let r=null,i=Pw(Q(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(!_w(d)||d.world!==t)continue;yd(d)?a.push(d):$d(d)?l.push(d):vd(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:Rw(a),rules:l,meta:c})}return Sd.set(o,r),r}var nA,QT,Ed,Sd,tA,zz,ec=O(()=>{mo();Xa();Ls();Ue();bo();nA={},QT=Q(ve(Kt(nA.url)),"..","..","..");Ed=new Map,Sd=new Map;tA=e=>({list:async()=>{let t=Mw(e());return t?Object.keys(t).sort():null},load:async t=>eA(e(),t)}),zz=tA(()=>ZT())});var Yz,Fw=O(()=>{_t();Ue();hs();Rr();ws();qe();Yz=Q(".tmct","memory","blocks")});var Dw=O(()=>{wo()});var Uw=O(()=>{hs();Rr();wo()});var kd=O(()=>{hs();Rr();wo()});var Bw=O(()=>{kd();hs();Js();wo()});var Ww=O(()=>{});var Gw=O(()=>{Dw();Uw();kd();Bw();Ww();wo()});var qw=O(()=>{Fw();qe();sa();dd();Gw();xd()});var Vw=O(()=>{Tn();Mo()});function mr(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function nc(e){let t=n=>iA.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 tc,iA,q2,jd=O(()=>{Vw();tc=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)"})}),iA=[.35,.65,1];q2=`
166
- :root { color-scheme: light dark; ${nc(tc.light)} }
167
- @media (prefers-color-scheme: dark) { :root { ${nc(tc.dark)} } }
168
- :root[data-theme="dark"] { ${nc(tc.dark)} }
169
- :root[data-theme="light"] { ${nc(tc.light)} }
170
- `});var Hw=O(()=>{jd()});var Kw=O(()=>{jd()});var Yw=O(()=>{qe();bo();Tn();oc()});var _d,mA,hA,gA,bA,wA,yA,OU,LU,oc=O(()=>{bo();Aw();ho();qa();xd();Lw();Nw();ec();qe();qw();Hw();Kw();Yw();_d="mgx:world-epoch",mA=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),hA=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),gA="mgx:is-open",bA="mgx:hasMass",wA="mgx:knows-about",yA="mgx:display-name",OU=new Set([...mA,...hA,gA,bA,wA,yA,"rdf:type",_d]),LU=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 hr,PU,MU,FU,DU,zU,UU,Ms=O(()=>{hr=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}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),adventure:Object.freeze({teach:!1}),planning:Object.freeze({maxDepth:300})}),PU=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"}),MU=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"}),FU=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"}),DU=Object.freeze({teach:"teach"}),zU=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),UU=Object.freeze({max_depth:"maxDepth"})});var Jw,$A,rc,vA,xA,Qw,Zw,EA,SA,GU,kA,jA,ey=O(()=>{Ms();Jw="spider-fly",$A=10,rc=Object.freeze({x:2,y:2}),vA=1,xA=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly"}),food:null}),Qw=(e,t)=>`cell-${e}-${t}`,Zw=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),EA=(e,t)=>Zw(e,t,rc.x,rc.y)<=vA,SA=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})}),GU=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"])]),kA="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.",jA=Object.freeze({name:Jw,gridSize:$A,opening:kA,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:EA,webHomeCell:Qw(rc.x,rc.y)})});var ty,ry,HU,KU,Rd,ny,sy,oy,Td,YU,XU,ic=O(()=>{Ms();ty=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),ry=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})}),HU=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),KU=Object.freeze([ty.spawnedFood,ty.placedFood]),Rd=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),ny=Rd({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=Rd({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"}]}),oy=Rd({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"}]}),Td=Object.freeze({[ny.name]:ny,[sy.name]:sy,[oy.name]:oy}),YU=Object.freeze(Object.keys(Td)),XU=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 iy=O(()=>{});var ay=O(()=>{});var hi,OA,LA,NA,PA,MA,FA,DA,zA,UA,BA,WA,GA,qA,VA,HA,KA,yB,Ad=O(()=>{ic();iy();Js();qe();bo();ay();nn();Ms();oc();hi=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin"},food:{spawnedKind:"crumb",placedKind:"morsel"}}),OA="mgx:currently-in",LA="mgx:hasMass",NA="mgx:feels",PA="mgx:facing",MA="mgx:eaten-by",FA="mgx:starved",DA="mgx:placed-by",zA="mgx:model",UA="mgx:rotation",BA="mgx:carrying",WA="mgx:prey-eaten",GA="mgx:web-built-at-turn",qA="mgx:laid-at-turn",VA="mgx:hatched-into",HA="mgx:turn-played",KA=new Set([OA,LA,NA,PA,MA,FA,DA,zA,UA,HA,BA,WA,GA,qA,VA,"rdf:type",_d]),yB=Object.freeze([...KA].sort())});var MB,FB,ly=O(()=>{ey();ic();Ad();bo();ec();qe();Ms();MB=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"),FB=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var ZB,eW,tW,nW,sW,oW,uy=O(()=>{ic();Ad();bo();ec();qe();Ms();ZB=hi.predator.kind,eW=hi.prey.kind,tW=hi.food.spawnedKind,nW=hi.food.placedKind,sW=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"),oW=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")});var ht,iW,aW,cW,lW,uW,dW,pW,fW,mW,hW,gW,bW,wW,yW,$W,vW,xW,EW,SW,dy=O(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},iW=ht("createRequire"),aW=ht("readFileSync"),cW=ht("access"),lW=ht("readFile"),uW=ht("writeFile"),dW=ht("appendFile"),pW=ht("mkdir"),fW=ht("mkdtemp"),mW=ht("rename"),hW=ht("unlink"),gW=ht("rm"),bW=ht("stat"),wW=ht("copyFile"),yW=ht("readdir"),$W=ht("createReadStream"),vW=ht("createWriteStream"),xW=ht("randomBytes"),EW=ht("spawnSync"),SW=ht("createInterface")});var gt,jW,_W,RW,TW,AW,IW,CW,OW,LW,NW,PW,MW,FW,DW,zW,UW,BW,WW,QA,py=O(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},jW=gt("createRequire"),_W=gt("readFileSync"),RW=gt("access"),TW=gt("readFile"),AW=gt("writeFile"),IW=gt("appendFile"),CW=gt("mkdir"),OW=gt("mkdtemp"),LW=gt("rename"),NW=gt("unlink"),PW=gt("rm"),MW=gt("stat"),FW=gt("copyFile"),DW=gt("readdir"),zW=gt("createReadStream"),UW=gt("createWriteStream"),BW=gt("randomBytes"),WW=gt("spawnSync"),QA=gt("createInterface")});var bt,qW,VW,HW,KW,YW,XW,JW,QW,ZW,eG,tG,nG,sG,oG,rG,iG,aG,fy,cG,Id=O(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},qW=bt("createRequire"),VW=bt("readFileSync"),HW=bt("access"),KW=bt("readFile"),YW=bt("writeFile"),XW=bt("appendFile"),JW=bt("mkdir"),QW=bt("mkdtemp"),ZW=bt("rename"),eG=bt("unlink"),tG=bt("rm"),nG=bt("stat"),sG=bt("copyFile"),oG=bt("readdir"),rG=bt("createReadStream"),iG=bt("createWriteStream"),aG=bt("randomBytes"),fy=bt("spawnSync"),cG=bt("createInterface")});var my=O(()=>{Id();Ue();_t();Ue();Aa();zt()});var hy=O(()=>{});var ZA,gy=O(()=>{_t();Ue();qe();hy();ZA=Q(".tmct","sessions")});var wy=O(()=>{_t();Ue();Va()});var wt,TG,AG,IG,CG,OG,LG,NG,PG,MG,FG,DG,zG,UG,BG,WG,GG,qG,VG,eI,yy=O(()=>{wt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},TG=wt("createRequire"),AG=wt("readFileSync"),IG=wt("access"),CG=wt("readFile"),OG=wt("writeFile"),LG=wt("appendFile"),NG=wt("mkdir"),PG=wt("mkdtemp"),MG=wt("rename"),FG=wt("unlink"),DG=wt("rm"),zG=wt("stat"),UG=wt("copyFile"),BG=wt("readdir"),WG=wt("createReadStream"),GG=wt("createWriteStream"),qG=wt("randomBytes"),VG=wt("spawnSync"),eI=wt("createInterface")});var nI,gr,$y,tI,vy,tq,ls,nq,ac,sq,xy=O(()=>{mo();_t();yy();Ls();Ue();_a();qe();nI={},gr=Q(ve(Kt(nI.url)),"..","..",".."),$y=Q(gr,"corpus","conceptnet","slice.jsonl"),tI=Q(gr,"src","adapters","corpus","conceptnet-map.toml"),vy=Q(gr,"corpus","seon","concepts.jsonl"),tq=Q(gr,"corpus","seon","definitions.jsonl"),ls=Q(gr,"corpus","tier2"),nq=Q(ls,"manifest.json"),ac=Q(gr,"corpus","wordnet"),sq=Q(ac,"manifest.json")});function rI(){return{seon:{kind:"corpus",active:!1,corpusPath:vy,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:$y,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:oI},human:{kind:"corpus",active:!0,corpusPath:Q(ls,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Q(ls,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Q(ls,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Q(ls,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Q(ls,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Q(ls,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Q(ls,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Q(ac,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Q(ac,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Q(sI,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var iI,sI,mq,oI,hq,Ey=O(()=>{Ue();_t();Ls();Aa();xy();iI={},sI=Q(ve(Kt(iI.url)),"..","..","corpus","namenet"),mq=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),oI=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];hq=Object.freeze(rI())});var Sy=O(()=>{});var ky=O(()=>{Ue();mo();_t();dy();py();Id();zt();my();Oe();gy();Va();wy();_r();Ey();cc();Ms();qa();hd();Sy()});var jy={};Un(jy,{proseLemma:()=>cI});function cI(){if(yo!==void 0)return yo;try{let e=pd();if(!e)return yo=null,yo;let t=e.its,n=new Map;yo=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{yo=null}return yo}var yo,_y=O(()=>{fd()});var Ry={};Un(Ry,{digestTermFromRows:()=>dI,loadDigestStructureTable:()=>uI,readDigestStructures:()=>lI});var lI,uI,dI,Ty=O(()=>{lI=()=>null,uI=()=>null,dI=()=>null});function Gd(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 ${lc(e.entityType)}`;if(t==="list")return`list/enumerate ${lc(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${lc(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 Gd(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&&hn[o]?hn[o]:`filter/traverse ${lc(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&&hn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?hn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function Jd(e){let t=new Map;for(let n of e)t.has(Cy(n))||t.set(Cy(n),n);return t}function Ld(e,t=bi){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),$o(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function Nd(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function bI(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function wI(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(_y(),jy)),s=n();return s?bI(t,s(t)):t}catch{return t}}function Zd(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)||yI.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 Fd(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return dr;if(t==="can")return"mgx:capableOf";try{let n=await wI(t);return n==="have"?dr:ns(`mgx:${n}`)}catch{return ns(`mgx:${t}`)}}function kI(e,t){let n=String(t||"").match(SI);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function gi(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(Ss(),ih)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function TI(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 s$(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 o$(e){if(vo[e])return vo[e];let t=String(e||""),n=Th(t);if(n){let a=o$(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",s$(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:(${ep})-([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?`${TI(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 II(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of AI)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 Dn(e){return e.replace(/#node:[0-9a-f]+/g,"")}function oe(e){let t=e.provenance?` (source: ${Dn(e.provenance)})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Mt(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Mt(e)}${t}`:e.provenance.includes("corpus:")?`${Mt(e)}${t}`:e.provenance.includes("reference:")?`${Mt(e)}${t}`:`i learned: ${Mt(e)}${t}`}function Ny(e,t,n){let s=oe(e);if(!ds.has(e.predicate)||!n.has(e.subject))return s;let o=Ja(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(CI);return i?s.slice(0,i.index)+r+i[0]:s+r}function Py(e,t,n,{indent:s=""}={}){let o=t.filter(_=>_.predicate===bi).map(_=>[_.subject,_.object]),r=pi(o),i=e.map(_=>`${s}${Ny(_,r,n)}`),a=e.filter(_=>ds.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}=Qa(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 m=e.filter(_=>!(ds.has(_.predicate)&&n.has(_.subject))),h=[],g=[],b=0,y=_=>{let $=Ny(_,r,n);return b<je?(b+=1,`${s}${$}`):(g.push($),null)};for(let _ of d){let $=a.filter(x=>p.get(x.object)===_).map(y).filter(Boolean);$.length&&h.push(`${s}${f}, the ${_.label}:
164
+ `)}`:c,data:{...a,grounded:l}})}finally{await i()}}var pw=O(()=>{Ue();qe();Ge();ud.ownsGraphLoad=!0});var wT,fw=O(()=>{Pl();bh();sb();rb();ab();lb();db();fb();hb();gb();Pb();Fb();zb();Bb();cd();Vb();Kb();Xb();Qb();ew();nw();ow();iw();cw();dw();pw();wT=Object.freeze({tmct_context:Nl,tmct_context_more:gh,tmct_describe:nb,tmct_snippet:ob,tmct_signature:ib,tmct_impact:cb,tmct_search:ub,tmct_members:pb,tmct_subclasses:mb,tmct_related:sd,tmct_sprite:ad,tmct_architecture:Mb,tmct_exports:Db,tmct_untested:Ub,tmct_ask:Gb,tmct_tests_for:qb,tmct_history:Hb,tmct_file_history:Yb,tmct_method_history:Jb,tmct_class_history:Zb,tmct_callers:tw,tmct_callees:sw,tmct_calls:rw,tmct_cochanges:aw,tmct_export:ld,tmct_ingest:ud})});var dd=O(()=>{});var Ha,pd=O(()=>{Ha=()=>({relations:[],constructions:[]})});var mw,hw=O(()=>{_t();Ue();Tp();Bt();_r();ks();oa();ra();fw();Ge();zo();qi();dd();pd();ra();Pl();cd();Vi(void 0);Gi(Ha);mw=Rp.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var eF,tF,nF,Ka=O(()=>{eF=Object.freeze(["entity","set","event","measure"]),tF=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),nF=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,oF,rF,iF,aF,cF,lF,uF,dF,pF,fF,mF,hF,gF,bF,wF,yF,yT,$F,vF,gw=O(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},oF=pt("createRequire"),rF=pt("readFileSync"),iF=pt("access"),aF=pt("readFile"),cF=pt("writeFile"),lF=pt("appendFile"),uF=pt("mkdir"),dF=pt("mkdtemp"),pF=pt("rename"),fF=pt("unlink"),mF=pt("rm"),hF=pt("stat"),gF=pt("copyFile"),bF=pt("readdir"),wF=pt("createReadStream"),yF=pt("createWriteStream"),yT=pt("randomBytes"),$F=pt("spawnSync"),vF=pt("createInterface")});var Ya=O(()=>{gw()});var ft,kF,jF,_F,RF,TF,AF,IF,CF,OF,LF,NF,PF,MF,FF,DF,zF,Kt,UF,BF,WF,Ls=O(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},kF=ft("createRequire"),jF=ft("readFileSync"),_F=ft("access"),RF=ft("readFile"),TF=ft("writeFile"),AF=ft("appendFile"),IF=ft("mkdir"),CF=ft("mkdtemp"),OF=ft("rename"),LF=ft("unlink"),NF=ft("rm"),PF=ft("stat"),MF=ft("copyFile"),FF=ft("readdir"),DF=ft("createReadStream"),zF=ft("createWriteStream"),Kt=e=>String(e),UF=ft("randomBytes"),BF=ft("spawnSync"),WF=ft("createInterface")});var $T,bw,KF,YF,XF,md=O(()=>{_t();Ls();Ue();$T={},bw=Q(ve(Kt($T.url)),"..","..",".."),KF=Q(bw,"data","templates","responses.jsonl"),YF=Q(bw,"data","phrasebook","software-phrases.txt"),XF=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function xT(e,t={}){let n=vT.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function ET(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>xT(s,t))):1}function Ze(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:ET(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 vT,ww=O(()=>{vT=/^src:corpus:(.+)$/});var mt,ZF,pr,eD,tD,nD,sD,oD,rD,iD,aD,cD,lD,uD,dD,ST,kT,pD,fD,mD,mo=O(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},ZF=mt("createRequire"),pr=mt("readFileSync"),eD=mt("access"),tD=mt("readFile"),nD=mt("writeFile"),sD=mt("appendFile"),oD=mt("mkdir"),rD=mt("mkdtemp"),iD=mt("rename"),aD=mt("unlink"),cD=mt("rm"),lD=mt("stat"),uD=mt("copyFile"),dD=mt("readdir"),ST=mt("createReadStream"),kT=mt("createWriteStream"),pD=mt("randomBytes"),fD=mt("spawnSync"),mD=mt("createInterface")});function yw(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 TT(e=_T){let t=or(pr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function hd(){if(Xa===null)try{Xa=TT()}catch{Xa=[]}return Xa}var AT,jT,_T,RT,xD,Xa,gd=O(()=>{mo();Ls();Ue();Aa();md();AT={},jT=ve(Kt(AT.url)),_T=Q(jT,"..","..","data","templates","grammar-rules.toml"),RT=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),xD=Object.freeze(new Set(RT.filter(e=>e!=="prose")));Xa=null});function IT(){if(ui!==void 0)return ui;try{let e=$w?$w():CT();ui=e&&e.winkNLP&&e.model?e:null}catch{ui=null}return ui}function CT(){let e=process.getBuiltinModule("node:module").createRequire(OT.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function bd(){if(fr!==void 0)return fr;let e=IT();if(!e)return fr=null,null;try{fr=e.winkNLP(e.model)}catch{fr=null}return fr}var OT,$w,ui,fr,wd=O(()=>{OT={}});var vw=O(()=>{wd()});var Ew,xw=O(()=>{Ew={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 FT(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 Sw(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!DT.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 Ns(e,t=NT){if(!e&&yd.has(t))return yd.get(t);let n=Ew,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Sw(s,n),e?(Sw(s,e),s):(yd.set(t,s),s)}function di(e,t,n={}){return UT(e,t,n)[0]??null}function UT(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 FT(s))l(e.nouns.get(c));return i}var NT,TD,AD,PT,MT,ID,DT,zT,yd,ho=O(()=>{xw();NT="tmct:",TD=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),AD=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),PT=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),MT=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),ID=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});DT=new Set(["data","object"]),zT=new Set(["subclass","data"]);yd=new Map});var ND,PD,MD,BT,FD,DD,zD,kw=O(()=>{ks();Oe();ND=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),PD=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),MD=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`]}),BT=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"}),FD=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"]}),DD=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"}}),zD=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 Ja=O(()=>{nn();ho();kw()});var Qa,Za=O(()=>{Qa=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var GT,ZD,jw=O(()=>{mo();Za();Ls();Ue();Ja();GT={},ZD=Q(ve(Kt(GT.url)),"..","..","..")});var _w=O(()=>{nn();ho();Ja()});var qT,VT,dz,$d=O(()=>{nn();ho();zo();qT=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),VT=["this","is","about","the"],dz=VT.length});var Rw=O(()=>{_t();Ue()});var vd=O(()=>{nn()});var HT,jz,Tw=O(()=>{mo();Za();Ls();Ue();vd();nn();HT={},jz=Q(ve(Kt(HT.url)),"..","..","..")});var Rz,Tz,Az,Aw=O(()=>{Rz=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),Tz=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"})}),Az=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 pi(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 ec(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 Iw(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 xd(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,xd(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function KT(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 YT(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=Iw(e,n),c=Iw(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 h of l){let g=s.get(h);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(h=>c.has(h));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=h=>xd(h,n,o,new Set),f=u[0],p=d(f);for(let h of u){let g=d(h);(g>p||g===p&&h<f)&&(f=h,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let h=a.get(f);return typeof h=="number"&&h<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 tc(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||pi(t),c=KT(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:_)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let v=YT(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...v}),v.distinct||p(a[y],a[w])}let h=new Map;for(let y of a){let w=f(y);h.has(w)||h.set(w,[]),h.get(w).push(y)}let g=y=>xd(y,l,u,new Set),b=[...h.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:m}}var nc=O(()=>{Ht()});function Ed(e){return typeof e=="string"&&XT.test(e)}function Cw(e){return!!e&&typeof e=="object"&&go(e.s)}function Sd(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Ed(e.world)&&go(e.subject)&&go(e.predicate)&&go(e.object)}function kd(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Ed(e.world)||!go(e.name)||!QT.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(go)}function jd(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Ed(e.world)&&go(e.opening)}function Ow(e){return Sd(e)||kd(e)||jd(e)}function Lw(e){let t=e||[],n=t.filter(c=>c.predicate===ZT).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 XT,JT,QT,go,ZT,bo=O(()=>{XT=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,JT=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),QT=new Set(JT),go=e=>typeof e=="string"&&e.trim()!=="";ZT="mgx:default-contains"});var tA,nA,sA,oA,rA,iA,aA,cA,lA,Bz,uA,Nw,Wz,Gz,Pw=O(()=>{ho();Mo();tA="subClassOf",nA="typeAssertion",sA="relation",oA="someValuesFrom",rA="cardinality",iA="disjointWith",aA="possessive",cA="adjective",lA="capability",Bz=Object.freeze([tA,nA,sA,oA,rA,iA,aA,cA,lA]),uA=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Nw=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"]]),Wz=Math.max(...[...Nw.keys()].map(e=>e.split(" ").length)),Gz=[...new Set([...uA,...[...Nw.keys()].map(e=>e.split(" ")[0])])]});var wo=O(()=>{});var _d=O(()=>{Oe();ks();wo()});function jt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:Ps.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 dA,Ps,Ee,Jz,mi,st,Ft,Yt,pA,Mw,kt,fA,mA,Fw,Qz,Zz,e2,Dw=O(()=>{dA=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),Ps=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Ee=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),Jz=Object.freeze([Ee.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:Ps.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Ft=()=>Object.freeze({type:Ps.Precondition,pred:mi.graphLoaded}),Yt=(e,t)=>Object.freeze({type:Ps.Precondition,pred:mi.resolves,param:e,as:t}),pA=e=>Object.freeze({type:Ps.Precondition,pred:mi.anyPresent,params:Object.freeze([...e])}),Mw=()=>Object.freeze({type:Ps.Precondition,pred:mi.memoryFacts}),kt=(e,t=null)=>Object.freeze({type:Ps.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});fA=Object.freeze([jt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[st("query",Ee.Query,{required:!1,note:"required unless a kind filter is given"}),st("kind",Ee.Kind,{required:!1}),st("name",Ee.Query,{required:!1}),st("decorator",Ee.Query,{required:!1})],preconditions:[Ft(),pA(["query","kind"])],add:[kt("matches","query")]}),jt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("description","symbol")]}),jt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.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",Ee.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Ft(),Yt("module",Ee.Symbol)],add:[kt("impact","module")]}),jt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Ft(),Yt("class",Ee.Class)],add:[kt("members","class")]}),jt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Ft(),Yt("class",Ee.Class)],add:[kt("subclasses","class")]}),jt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[st("module",Ee.Module)],preconditions:[Ft(),Yt("module",Ee.Module)],add:[kt("exports","module")]}),jt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("callers","symbol")]}),jt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("callees","symbol")]}),jt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("calls","symbol")]}),jt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.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",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("history","symbol")]}),jt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("cochanges","symbol")]}),jt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[st("package",Ee.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",Ee.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[Mw(),Yt("term",Ee.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",Ee.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",Ee.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),st("size",Ee.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[Mw(),Yt("class",Ee.MemoryTerm)],add:[kt("sprite","class")]})]),mA=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Fw=fA,Qz=mA(Fw),Zz=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"}),e2=Object.freeze({prefixes:dA,vocab:Ps,kinds:Ee,precond:mi,get capabilities(){return Fw}})});var zw=O(()=>{Dw()});var Uw=O(()=>{Hn()});function gA(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Q(hA,"corpus","worlds")}function Bw(e){try{return Qa(pr(e))}catch{return null}}function Ww(e){if(Rd.has(e))return Rd.get(e);let t=null,n=Bw(Q(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 Rd.set(e,t),t}function bA(e,t){let n=Ww(e);if(!n)return null;let s=n[String(t??"")];if(!Cw(s))return null;let o=`${e}\0${t}`;if(Td.has(o))return Td.get(o);let r=null,i=Bw(Q(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(!Ow(d)||d.world!==t)continue;Sd(d)?a.push(d):kd(d)?l.push(d):jd(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:Lw(a),rules:l,meta:c})}return Td.set(o,r),r}var yA,hA,Rd,Td,wA,f2,sc=O(()=>{mo();Za();Ls();Ue();bo();yA={},hA=Q(ve(Kt(yA.url)),"..","..","..");Rd=new Map,Td=new Map;wA=e=>({list:async()=>{let t=Ww(e());return t?Object.keys(t).sort():null},load:async t=>bA(e(),t)}),f2=wA(()=>gA())});var x2,Gw=O(()=>{_t();Ue();ws();Rr();Hn();qe();x2=Q(".tmct","memory","blocks")});var qw=O(()=>{wo()});var Hw=O(()=>{ws();Rr();wo()});var Ad=O(()=>{ws();Rr();wo()});var Kw=O(()=>{Ad();ws();Js();wo()});var Yw=O(()=>{});var Xw=O(()=>{qw();Hw();Ad();Kw();Yw();wo()});var Jw=O(()=>{Gw();qe();oa();gd();Xw();_d()});var Qw=O(()=>{yn();Mo()});function mr(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function rc(e){let t=n=>EA.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 oc,EA,wU,Id=O(()=>{Qw();oc=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)"})}),EA=[.35,.65,1];wU=`
166
+ :root { color-scheme: light dark; ${rc(oc.light)} }
167
+ @media (prefers-color-scheme: dark) { :root { ${rc(oc.dark)} } }
168
+ :root[data-theme="dark"] { ${rc(oc.dark)} }
169
+ :root[data-theme="light"] { ${rc(oc.light)} }
170
+ `});var Zw=O(()=>{Id()});var ey=O(()=>{Id()});var sy=O(()=>{qe();bo();yn();hi()});var Cd,RA,TA,AA,IA,CA,OA,iB,aB,hi=O(()=>{bo();Pw();ho();Ka();_d();zw();Uw();sc();qe();Jw();Zw();ey();sy();Cd="mgx:world-epoch",RA=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),TA=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),AA="mgx:is-open",IA="mgx:hasMass",CA="mgx:knows-about",OA="mgx:display-name",iB=new Set([...RA,...TA,AA,IA,CA,OA,"rdf:type",Cd]),aB=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 hr,lB,uB,dB,pB,fB,mB,Ms=O(()=>{hr=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,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"}),uB=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"}),dB=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",teach:"teach"}),pB=Object.freeze({teach:"teach"}),fB=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),mB=Object.freeze({max_depth:"maxDepth"})});var iy,LA,ac,NA,PA,ay,cy,MA,FA,bB,DA,zA,ly=O(()=>{Ms();iy="spider-fly",LA=10,ac=Object.freeze({x:2,y:2}),NA=1,PA=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly"}),food:null}),ay=(e,t)=>`cell-${e}-${t}`,cy=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),MA=(e,t)=>cy(e,t,ac.x,ac.y)<=NA,FA=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"])]),DA="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:iy,gridSize:LA,opening:DA,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:MA,webHomeCell:ay(ac.x,ac.y)})});var uy,my,$B,vB,xB,Od,dy,py,fy,Ld,EB,SB,cc=O(()=>{Ms();uy=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),my=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})}),$B=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),vB=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),xB=Object.freeze([uy.spawnedFood,uy.placedFood]),Od=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),dy=Od({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"}]}),py=Od({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"}]}),fy=Od({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"}]}),Ld=Object.freeze({[dy.name]:dy,[py.name]:py,[fy.name]:fy}),EB=Object.freeze(Object.keys(Ld)),SB=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 hy=O(()=>{});var gy=O(()=>{});var gi,HA,KA,YA,XA,JA,QA,ZA,eI,tI,nI,sI,oI,rI,iI,aI,cI,lI,HB,Nd=O(()=>{cc();hy();Js();qe();bo();gy();nn();Ms();hi();gi=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin"},food:{spawnedKind:"crumb",placedKind:"morsel"}}),HA="mgx:currently-in",KA="mgx:hasMass",YA="mgx:feels",XA="mgx:facing",JA="mgx:driven-facing",QA="mgx:eaten-by",ZA="mgx:starved",eI="mgx:placed-by",tI="mgx:model",nI="mgx:rotation",sI="mgx:carrying",oI="mgx:prey-eaten",rI="mgx:web-built-at-turn",iI="mgx:laid-at-turn",aI="mgx:hatched-into",cI="mgx:turn-played",lI=new Set([HA,KA,YA,XA,JA,QA,ZA,eI,tI,nI,cI,sI,oI,rI,iI,aI,"rdf:type",Cd]),HB=Object.freeze([...lI].sort())});var dW,pW,wy=O(()=>{ly();cc();Nd();bo();sc();qe();Ms();dW=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"),pW=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var AW,IW,CW,OW,LW,NW,fI,mI,hI,gI,yy,$y,bI,PW,MW,vy=O(()=>{cc();Nd();hi();yn();bo();sc();qe();Ms();AW=gi.predator.kind,IW=gi.prey.kind,CW=gi.food.spawnedKind,OW=gi.food.placedKind,LW=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"),NW=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"),fI="mgx:currently-in",mI="mgx:hasMass",hI="mgx:feels",gI="mgx:facing",yy="(fox|goblin|crumb|morsel)(?:-(\\d+))?",$y="(fox|goblin)(?:-(\\d+))?",bI="(crumb|morsel)(?:-(\\d+))?",PW=[{kind:"placement",predicate:fI,re:new RegExp(`^(?:the\\s+)?${yy}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:mI,re:new RegExp(`^(?:the\\s+)?${yy}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:hI,re:new RegExp(`^(?:the\\s+)?${$y}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:gI,re:new RegExp(`^(?:the\\s+)?${$y}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],MW=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${bI}\\s+there[.!\\s]*$`,"i")});var ht,DW,zW,UW,BW,WW,GW,qW,VW,HW,KW,YW,XW,JW,QW,ZW,eG,tG,nG,sG,xy=O(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},DW=ht("createRequire"),zW=ht("readFileSync"),UW=ht("access"),BW=ht("readFile"),WW=ht("writeFile"),GW=ht("appendFile"),qW=ht("mkdir"),VW=ht("mkdtemp"),HW=ht("rename"),KW=ht("unlink"),YW=ht("rm"),XW=ht("stat"),JW=ht("copyFile"),QW=ht("readdir"),ZW=ht("createReadStream"),eG=ht("createWriteStream"),tG=ht("randomBytes"),nG=ht("spawnSync"),sG=ht("createInterface")});var gt,rG,iG,aG,cG,lG,uG,dG,pG,fG,mG,hG,gG,bG,wG,yG,$G,vG,xG,wI,Ey=O(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},rG=gt("createRequire"),iG=gt("readFileSync"),aG=gt("access"),cG=gt("readFile"),lG=gt("writeFile"),uG=gt("appendFile"),dG=gt("mkdir"),pG=gt("mkdtemp"),fG=gt("rename"),mG=gt("unlink"),hG=gt("rm"),gG=gt("stat"),bG=gt("copyFile"),wG=gt("readdir"),yG=gt("createReadStream"),$G=gt("createWriteStream"),vG=gt("randomBytes"),xG=gt("spawnSync"),wI=gt("createInterface")});var bt,SG,kG,jG,_G,RG,TG,AG,IG,CG,OG,LG,NG,PG,MG,FG,DG,zG,Sy,UG,Pd=O(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SG=bt("createRequire"),kG=bt("readFileSync"),jG=bt("access"),_G=bt("readFile"),RG=bt("writeFile"),TG=bt("appendFile"),AG=bt("mkdir"),IG=bt("mkdtemp"),CG=bt("rename"),OG=bt("unlink"),LG=bt("rm"),NG=bt("stat"),PG=bt("copyFile"),MG=bt("readdir"),FG=bt("createReadStream"),DG=bt("createWriteStream"),zG=bt("randomBytes"),Sy=bt("spawnSync"),UG=bt("createInterface")});var ky=O(()=>{Pd();Ue();_t();Ue();Oa();Bt()});var jy=O(()=>{});var yI,_y=O(()=>{_t();Ue();qe();jy();yI=Q(".tmct","sessions")});var Ty=O(()=>{_t();Ue();Ya()});var wt,cq,lq,uq,dq,pq,fq,mq,hq,gq,bq,wq,yq,$q,vq,xq,Eq,Sq,kq,$I,Ay=O(()=>{wt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},cq=wt("createRequire"),lq=wt("readFileSync"),uq=wt("access"),dq=wt("readFile"),pq=wt("writeFile"),fq=wt("appendFile"),mq=wt("mkdir"),hq=wt("mkdtemp"),gq=wt("rename"),bq=wt("unlink"),wq=wt("rm"),yq=wt("stat"),$q=wt("copyFile"),vq=wt("readdir"),xq=wt("createReadStream"),Eq=wt("createWriteStream"),Sq=wt("randomBytes"),kq=wt("spawnSync"),$I=wt("createInterface")});var xI,gr,Iy,vI,Cy,Lq,ps,Nq,lc,Pq,Oy=O(()=>{mo();_t();Ay();Ls();Ue();Aa();qe();xI={},gr=Q(ve(Kt(xI.url)),"..","..",".."),Iy=Q(gr,"corpus","conceptnet","slice.jsonl"),vI=Q(gr,"src","adapters","corpus","conceptnet-map.toml"),Cy=Q(gr,"corpus","seon","concepts.jsonl"),Lq=Q(gr,"corpus","seon","definitions.jsonl"),ps=Q(gr,"corpus","tier2"),Nq=Q(ps,"manifest.json"),lc=Q(gr,"corpus","wordnet"),Pq=Q(lc,"manifest.json")});function kI(){return{seon:{kind:"corpus",active:!1,corpusPath:Cy,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:Iy,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:SI},human:{kind:"corpus",active:!0,corpusPath:Q(ps,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Q(ps,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Q(ps,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Q(ps,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Q(ps,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Q(ps,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Q(ps,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Q(lc,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Q(lc,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Q(EI,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var jI,EI,Hq,SI,Kq,Ly=O(()=>{Ue();_t();Ls();Oa();Oy();jI={},EI=Q(ve(Kt(jI.url)),"..","..","corpus","namenet"),Hq=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),SI=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];Kq=Object.freeze(kI())});var Ny=O(()=>{});var Py=O(()=>{Ue();mo();_t();xy();Ey();Pd();Bt();ky();Oe();_y();Ya();Ty();_r();Ly();uc();Ms();Ka();$d();Ny()});var My={};Bn(My,{proseLemma:()=>RI});function RI(){if(yo!==void 0)return yo;try{let e=bd();if(!e)return yo=null,yo;let t=e.its,n=new Map;yo=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{yo=null}return yo}var yo,Fy=O(()=>{wd()});var Dy={};Bn(Dy,{digestTermFromRows:()=>II,loadDigestStructureTable:()=>AI,readDigestStructures:()=>TI});var TI,AI,II,zy=O(()=>{TI=()=>null,AI=()=>null,II=()=>null});function Yd(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 ${dc(e.entityType)}`;if(t==="list")return`list/enumerate ${dc(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${dc(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 Yd(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&&gn[o]?gn[o]:`filter/traverse ${dc(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&&gn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?gn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function np(e){let t=new Map;for(let n of e)t.has(Wy(n))||t.set(Wy(n),n);return t}function Dd(e,t=wi){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),$o(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function zd(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function MI(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function FI(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(Fy(),My)),s=n();return s?MI(t,s(t)):t}catch{return t}}function op(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)||DI.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 Wd(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return dr;if(t==="can")return"mgx:capableOf";try{let n=await FI(t);return n==="have"?dr:rs(`mgx:${n}`)}catch{return rs(`mgx:${t}`)}}function qI(e,t){let n=String(t||"").match(GI);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function bi(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(ks(),dh)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function YI(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 m$(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 h$(e){if(vo[e])return vo[e];let t=String(e||""),n=Lh(t);if(n){let a=h$(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",m$(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:(${rp})-([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?`${YI(i[1])}${i[2]?` ${i[2]}`:""}`:e}function qd(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function JI(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of XI)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 zn(e){return e.replace(/#node:[0-9a-f]+/g,"")}function oe(e){let t=e.provenance?` (source: ${zn(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 Vy(e,t,n){let s=oe(e);if(!ms.has(e.predicate)||!n.has(e.subject))return s;let o=ec(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(QI);return i?s.slice(0,i.index)+r+i[0]:s+r}function Hy(e,t,n,{indent:s=""}={}){let o=t.filter(_=>_.predicate===wi).map(_=>[_.subject,_.object]),r=pi(o),i=e.map(_=>`${s}${Vy(_,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}=tc(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 m=e.filter(_=>!(ms.has(_.predicate)&&n.has(_.subject))),h=[],g=[],b=0,y=_=>{let $=Vy(_,r,n);return b<je?(b+=1,`${s}${$}`):(g.push($),null)};for(let _ of d){let $=a.filter(x=>p.get(x.object)===_).map(y).filter(Boolean);$.length&&h.push(`${s}${f}, the ${_.label}:
171
171
  ${$.join(`
172
172
  `)}`)}if(m.length){let _=m.map(y).filter(Boolean);_.length&&h.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:h.join(`
176
- `)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:v}}async function LI(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(Ty(),Ry)))}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 eC(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(zy(),Dy)))}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=ud().find(n=>n.kind==="article");return t&&fw(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 ${oe(e)}; ${oe(t)}. To settle it, say "forget that ${e.subject} is ${br(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${oe(t)}`,replace:!0}:e?{text:`yes \u2014 ${oe(e)}`,replace:!0}:null}function NI(e,t){let n=s=>`${Mt(s)}${s.provenance?` (source: ${Dn(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 uc(e){let t=o=>`${Mt(o)}${o.provenance?` (source: ${Dn(o.provenance)})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function Ud(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(qe(),Os)),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(()=>(qe(),Os)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function PI(e){if(!dc)try{dc=Ns().nounPlurals}catch{dc=new Map}return dc.get(e)??null}function fc(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return di(Ns(),t)?.lemma||t}catch{return t}}function MI(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return fc(e);let n=fc(Zd(t[1]));return`${br(n)} ${n}`}function X(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(FI,"").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=PI(i);a&&s.add(e(a))}return s}function My(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 c$(e,t=null){let n=mc(e),s=n.match(DI);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(UI);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function Vd(e){let t=String(e||"").replace(GI,"");if(t!==e){let s=t.match(Fs);if(s)return s}let n=String(e||"").match(qI);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Fs):null}function Kd(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 Dy(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function iC(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=>`${Mt(s)}${s.provenance?` (source: ${Dn(s.provenance)})`:""}`).join("; ")}function Uy(e,t,n,{maxHops:s=3}={}){let o=X(J,e),r=X(J,t),i=la(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?iC(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 br(e){let t=hd().find(n=>n.kind==="article");return t&&yw(String(e||""),t)?"an":"a"}function g$(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${oe(e)}; ${oe(t)}. To settle it, say "forget that ${e.subject} is ${br(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${oe(t)}`,replace:!0}:e?{text:`yes \u2014 ${oe(e)}`,replace:!0}:null}function tC(e,t){let n=s=>`${Dt(s)}${s.provenance?` (source: ${zn(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 pc(e){let t=o=>`${Dt(o)}${o.provenance?` (source: ${zn(o.provenance)})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function Vd(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(qe(),Os)),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(()=>(qe(),Os)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function nC(e){if(!fc)try{fc=Ns().nounPlurals}catch{fc=new Map}return fc.get(e)??null}function hc(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return di(Ns(),t)?.lemma||t}catch{return t}}function sC(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return hc(e);let n=hc(op(t[1]));return`${br(n)} ${n}`}function X(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(oC,"").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=nC(i);a&&s.add(e(a))}return s}function Ky(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 y$(e,t=null){let n=gc(e),s=n.match(rC);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(aC);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function Jd(e){let t=String(e||"").replace(uC,"");if(t!==e){let s=t.match(Fs);if(s)return s}let n=String(e||"").match(dC);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Fs):null}function Zd(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 Xy(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function jC(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: ${zn(s.provenance)})`:""}`).join("; ")}function Qy(e,t,n,{maxHops:s=3}={}){let o=X(J,e),r=X(J,t),i=ua(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?jC(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(oe).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 ${oe(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${oe(i.overrides.fact)}`),{text:c,replace:!0}}return null}function By(e,t,n,{maxHops:s=3}={}){let o=X(J,e),r=X(J,t),i=Yl(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,Kl).map(f=>oe(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 ${oe(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${oe(i.overrides.fact)}`),{text:c,replace:!0}}return null}function Zy(e,t,n,{maxHops:s=3}={}){let o=X(J,e),r=X(J,t),i=Jl(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,Xl).map(f=>oe(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=Xl(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,Kl),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=Ql(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,Xl),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(oe).join(`
187
- `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(oe),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function lC(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 mn(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 u$(e,t,n,s,o={},r=null,i=null){return d$(await hC(e,t,n,s,o,r,i),n,t)}function d$(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=Gd(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Ay),!o){let r=s.match(qd),i=r?null:mc(s).match(a$)||c$(s),a=r?r[2]:i?i[1]:null;a&&!Hd.has(a.toLowerCase())&&(o=Ay)}if(!o){let r=s.match(f$);r&&(o=Gd({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function hC(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(qe(),Os)))}catch{return null}let c=String(t).trim(),u=c.match(JI);if(u){let D=X(a,u[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgx:usedFor"&&D.has(G.object));if(U.length){let I=Ze(mn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
187
+ `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(oe),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function TC(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 hn(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 v$(e,t,n,s,o={},r=null,i=null){return x$(await NC(e,t,n,s,o,r,i),n,t)}function x$(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=Yd(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Uy),!o){let r=s.match(Xd),i=r?null:gc(s).match(w$)||y$(s),a=r?r[2]:i?i[1]:null;a&&!Qd.has(a.toLowerCase())&&(o=Uy)}if(!o){let r=s.match(S$);r&&(o=Yd({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function NC(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(qe(),Os)))}catch{return null}let c=String(t).trim(),u=c.match(bC);if(u){let D=X(a,u[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgx:usedFor"&&D.has(G.object));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=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 dC){let G=c.match(U);if(!G)continue;let I=X(a,G[1]),L=(await it(e,r)).filter(ie=>ie.predicate===D&&I.has(ie.object));if(!L.length)continue;let P=Ze(mn(L),o).map(oe),N=P.slice(0,je),W=P.slice(je),V=W.length?`
189
+ `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}for(let{predicate:D,re:U}of IC){let G=c.match(U);if(!G)continue;let I=X(a,G[1]),L=(await it(e,r)).filter(ie=>ie.predicate===D&&I.has(ie.object));if(!L.length)continue;let P=Ze(hn(L),o).map(oe),N=P.slice(0,je),W=P.slice(je),V=W.length?`
190
190
  \u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
191
- `)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}let d=c.match(aC),f=d?null:c.match(cC),p=d?d[1]:f?.[2],m=d?d[2]:f?.[1],h=p&&m?lC(m):null;if(h){let D=`mgx:${h.replace(/\s+/g,"-")}-than`,U=await it(e,r),G=X(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=>ds.has(N.predicate)&&N.subject===P&&G.has(N.object)),C=mn(U.filter(P=>P.predicate===D&&$o(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 K of C)P.add(K.subject),P.add(K.object),N.set(K.object,(N.get(K.object)||0)+1),N.has(K.subject)||N.set(K.subject,N.get(K.subject)||0);let W=new Map(N),V=[],ie=null;for(;W.size;){let K=[...W.keys()].filter(q=>W.get(q)===0);if(K.length!==1){ie=K.length===0?{text:`I can't order the ${I}s \u2014 the "${h} than" facts I have loop back on themselves, so no ${m} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${m} ${I} from what I know \u2014 nothing compares ${K[0]} and ${K[1]}. Teach me, e.g. "${K[0]} is ${h} than ${K[1]}".`,replace:!0,miss:!0};break}let ee=K[0];V.push(ee),W.delete(ee);for(let q of C)q.subject===ee&&W.has(q.object)&&W.set(q.object,W.get(q.object)-1)}if(ie)return ie;let ce=V.slice(0,-1).map((K,ee)=>C.find(q=>q.subject===K&&q.object===V[ee+1]));if(ce.every(Boolean)){let K=ce.map(ee=>`${Mt(ee)}${ee.provenance?` (source: ${Dn(ee.provenance)})`:""}`).join("; ");return{text:`${V[0]} \u2014 ${K}; so ${V[0]} is the ${m} ${I}`,replace:!0}}}}let g=s?c.match(QI)||c.match(ZI):null;if(g){let D=X(a,g[1]),U=(await it(e,r)).filter(G=>ko(G.predicate)!==null&&D.has(G.subject));if(U.length){let I=Ze(mn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
191
+ `)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}let d=c.match(_C),f=d?null:c.match(RC),p=d?d[1]:f?.[2],m=d?d[2]:f?.[1],h=p&&m?TC(m):null;if(h){let D=`mgx:${h.replace(/\s+/g,"-")}-than`,U=await it(e,r),G=X(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=hn(U.filter(P=>P.predicate===D&&$o(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 K of C)P.add(K.subject),P.add(K.object),N.set(K.object,(N.get(K.object)||0)+1),N.has(K.subject)||N.set(K.subject,N.get(K.subject)||0);let W=new Map(N),V=[],ie=null;for(;W.size;){let K=[...W.keys()].filter(q=>W.get(q)===0);if(K.length!==1){ie=K.length===0?{text:`I can't order the ${I}s \u2014 the "${h} than" facts I have loop back on themselves, so no ${m} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${m} ${I} from what I know \u2014 nothing compares ${K[0]} and ${K[1]}. Teach me, e.g. "${K[0]} is ${h} than ${K[1]}".`,replace:!0,miss:!0};break}let ee=K[0];V.push(ee),W.delete(ee);for(let q of C)q.subject===ee&&W.has(q.object)&&W.set(q.object,W.get(q.object)-1)}if(ie)return ie;let ce=V.slice(0,-1).map((K,ee)=>C.find(q=>q.subject===K&&q.object===V[ee+1]));if(ce.every(Boolean)){let K=ce.map(ee=>`${Dt(ee)}${ee.provenance?` (source: ${zn(ee.provenance)})`:""}`).join("; ");return{text:`${V[0]} \u2014 ${K}; so ${V[0]} is the ${m} ${I}`,replace:!0}}}}let g=s?c.match(wC)||c.match(yC):null;if(g){let D=X(a,g[1]),U=(await it(e,r)).filter(G=>ko(G.predicate)!==null&&D.has(G.subject));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=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(eC);if(b){let D=b[1].toLowerCase(),U=X(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(mn(G),o).map(oe),C=L.slice(0,je),P=L.slice(je),N=P.length?`
193
+ `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let b=c.match($C);if(b){let D=b[1].toLowerCase(),U=X(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(hn(G),o).map(oe),C=L.slice(0,je),P=L.slice(je),N=P.length?`
194
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(tC);if(y){let D=y[3].toLowerCase(),U=X(a,y[2]),G=new Set([...X(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(mn(I),o).map(oe),P=C.slice(0,je),N=C.slice(je),W=N.length?`
195
+ `)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}}}let y=c.match(vC);if(y){let D=y[3].toLowerCase(),U=X(a,y[2]),G=new Set([...X(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(hn(I),o).map(oe),P=C.slice(0,je),N=C.slice(je),W=N.length?`
196
196
  \u2026and ${N.length} more \u2014 say 'more' to see them.`:"";return{text:P.join(`
197
- `)+W,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&&!Wy.test(c)){let D=c.match(f$)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);D&&(w=Ws(D[1]))}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=II(w),{predicate:U}=D,G=D.subject.replace(/^(?:the|an?)\s+/i,"").trim()||D.subject,I=!1;if(U&&us.test(G)){if(!i){let q=String(vo[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>${q?` ${q}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}G=i,I=!0}let L=X(a,G),C=(await it(e,r)).filter(q=>L.has(q.subject)&&!Ly.has(q.predicate)),P=U?C.filter(q=>l(q.predicate)===U):C;if(!U&&P.length&&!P.some(Bd)&&(P=[]),!P.length){if(U&&(C.length||I))return{text:`I don't have any "${vo[U]}" facts about ${G}.`,replace:s,...C.length?{}:{miss:!0}};if(!U){let q=Ze((await it(e,r)).filter(ne=>L.has(ne.object)),o);if(q.length&&!q.some(Bd)&&(q=[]),q.length){let ne=q.map(oe),te=ne.slice(0,je),xe=ne.slice(je),Ae=xe.length?`
197
+ `)+W,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&&!e$.test(c)){let D=c.match(S$)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);D&&(w=Ws(D[1]))}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=JI(w),{predicate:U}=D,G=D.subject.replace(/^(?:the|an?)\s+/i,"").trim()||D.subject,I=!1;if(U&&fs.test(G)){if(!i){let q=String(vo[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>${q?` ${q}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}G=i,I=!0}let L=X(a,G),C=(await it(e,r)).filter(q=>L.has(q.subject)&&!qy.has(q.predicate)),P=U?C.filter(q=>l(q.predicate)===U):C;if(!U&&P.length&&!P.some(Hd)&&(P=[]),!P.length){if(U&&(C.length||I))return{text:`I don't have any "${vo[U]}" facts about ${G}.`,replace:s,...C.length?{}:{miss:!0}};if(!U){let q=Ze((await it(e,r)).filter(ne=>L.has(ne.object)),o);if(q.length&&!q.some(Hd)&&(q=[]),q.length){let ne=q.map(oe),te=ne.slice(0,je),xe=ne.slice(je),Ae=xe.length?`
198
198
  \u2026and ${xe.length} more \u2014 say 'more' to see them.`:"";return{text:te.join(`
199
- `)+Ae,replace:s,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}return null}P=Ze(P,o);let N=await it(e,r),{lines:W,grouped:V}=Py(P,N,L),ie=!U&&W.length>OI?await LI(G,P,N,W):null;if(ie)return{...ie,replace:s};if(V)return{...V,replace:s};let ce=W.slice(0,je),K=W.slice(je),ee=K.length?`
199
+ `)+Ae,replace:s,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}return null}P=Ze(P,o);let N=await it(e,r),{lines:W,grouped:V}=Hy(P,N,L),ie=!U&&W.length>ZI?await eC(G,P,N,W):null;if(ie)return{...ie,replace:s};if(V)return{...V,replace:s};let ce=W.slice(0,je),K=W.slice(je),ee=K.length?`
200
200
  \u2026and ${K.length} more \u2014 say 'more' to see them.`:"";return{text:ce.join(`
201
- `)+ee,replace:s,...K.length?{pending:{items:K,noun:"facts"}}:{}}}if(!s)return null;let _=c.match(hI);if(_){let U=`mgx:${_[2].toLowerCase().replace(/\s+/g,"-")}-than`,G=await Ud(e),I=ce=>{let K=ce.replace(/^(?:an?|the)\s+/i,"").trim();return i&&us.test(K)?i:K},L=I(_[1]),C=I(_[3]),P=X(a,L),N=X(a,C),W=G.find(ce=>ce.predicate===U&&P.has(ce.subject)&&N.has(ce.object));if(W){let ce=G.find(ee=>ee.predicate===U&&P.has(ee.object)&&N.has(ee.subject)),K=ce?` \u2014 though you also told me the opposite: ${oe(ce)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${oe(W)}${K}`,replace:!0}}let V=G.filter(ce=>ce.predicate===U&&(P.has(ce.subject)||P.has(ce.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${V.length?` I do know: ${V.slice(0,3).map(oe).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 fC){let I=c.match(G);if(!I)continue;let L=await Ud(e),C=X(a,I[1]),P=X(a,I[2]),N=L.find(V=>V.predicate===D&&C.has(V.subject)&&P.has(V.object));if(N)return{text:`yes \u2014 ${oe(N)}`,replace:!0};let W=L.filter(V=>V.predicate===D&&C.has(V.subject));if(W.length){let V=W.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}. I do know: ${V}.`,replace:!0,miss:!0}}if(!n?.parsed&&L.some(V=>C.has(V.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(Fs)||Vd(c);if($){let D=X(a,$[1]),U=X(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(),ln)),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&&$o(N)&&C(N))?null:r$(G.find(N=>ds.has(N.predicate)&&I(N)),G.find(N=>N.predicate===aa&&I(N)))}let x=Kd(c),S=x.match(HI);if(S){let D=await it(e,r),U=S[1],G=Uy(S[2],S[3],D);if(G&&x!==zy(c)&&(G=Dy(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=X(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(oe).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 By(S[2],S[3],D)}let E=c.match(KI);if(E){let D=X(a,E[1]),U=X(a,E[2]),G=new Set(["mgx:hasA","tmct:has"]),I=await Ud(e),L=W=>I.find(V=>G.has(V.predicate)&&W.has(V.subject)&&U.has(V.object)),C=L(D);if(C)return{text:`yes \u2014 ${oe(C)}`,replace:!0};let P=[{terms:D,chain:[]}],N=new Set;for(let W=0;W<4;W+=1){let V=[];for(let{terms:ie,chain:ce}of P){let K=I.filter(ee=>ds.has(ee.predicate)&&ie.has(ee.subject)&&!N.has(ee.object));for(let ee of K){if(N.has(ee.object))continue;N.add(ee.object);let q=[...ce,ee],ne=L(X(a,ee.object));if(ne)return{text:`yes \u2014 ${[...q.map(oe),oe(ne)].join("; ")}`,replace:!0};V.push({terms:X(a,ee.object),chain:q})}}if(!V.length)break;P=V}return null}let R=Kd(c),j=R.match(nC);if(j){let D=await it(e,r),U=!!j[1],G=X(a,j[2]),I=X(a,j[3]),L=Uy(j[2],j[3],D);if(L&&R!==zy(c)&&(L=Dy(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(oe).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=By(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=Zd(fc(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(YI);if(A){let D=X(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(mn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
201
+ `)+ee,replace:s,...K.length?{pending:{items:K,noun:"facts"}}:{}}}if(!s)return null;let _=c.match(NI);if(_){let U=`mgx:${_[2].toLowerCase().replace(/\s+/g,"-")}-than`,G=await Vd(e),I=ce=>{let K=ce.replace(/^(?:an?|the)\s+/i,"").trim();return i&&fs.test(K)?i:K},L=I(_[1]),C=I(_[3]),P=X(a,L),N=X(a,C),W=G.find(ce=>ce.predicate===U&&P.has(ce.subject)&&N.has(ce.object));if(W){let ce=G.find(ee=>ee.predicate===U&&P.has(ee.object)&&N.has(ee.subject)),K=ce?` \u2014 though you also told me the opposite: ${oe(ce)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${oe(W)}${K}`,replace:!0}}let V=G.filter(ce=>ce.predicate===U&&(P.has(ce.subject)||P.has(ce.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${V.length?` I do know: ${V.slice(0,3).map(oe).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 OC){let I=c.match(G);if(!I)continue;let L=await Vd(e),C=X(a,I[1]),P=X(a,I[2]),N=L.find(V=>V.predicate===D&&C.has(V.subject)&&P.has(V.object));if(N)return{text:`yes \u2014 ${oe(N)}`,replace:!0};let W=L.filter(V=>V.predicate===D&&C.has(V.subject));if(W.length){let V=W.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}. I do know: ${V}.`,replace:!0,miss:!0}}if(!n?.parsed&&L.some(V=>C.has(V.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(Fs)||Jd(c);if($){let D=X(a,$[1]),U=X(a,$[2]),G=await it(e,r),I=N=>D.has(N.subject)&&U.has(N.object),{DISJOINT_PREDICATE:L}=await Promise.resolve().then(()=>(Ht(),un)),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&&$o(N)&&C(N))?null:g$(G.find(N=>ms.has(N.predicate)&&I(N)),G.find(N=>N.predicate===ca&&I(N)))}let x=Zd(c),S=x.match(fC);if(S){let D=await it(e,r),U=S[1],G=Qy(S[2],S[3],D);if(G&&x!==Jy(c)&&(G=Xy(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=X(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(oe).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 Zy(S[2],S[3],D)}let E=c.match(mC);if(E){let D=X(a,E[1]),U=X(a,E[2]),G=new Set(["mgx:hasA","tmct:has"]),I=await Vd(e),L=W=>I.find(V=>G.has(V.predicate)&&W.has(V.subject)&&U.has(V.object)),C=L(D);if(C)return{text:`yes \u2014 ${oe(C)}`,replace:!0};let P=[{terms:D,chain:[]}],N=new Set;for(let W=0;W<4;W+=1){let V=[];for(let{terms:ie,chain:ce}of P){let K=I.filter(ee=>ms.has(ee.predicate)&&ie.has(ee.subject)&&!N.has(ee.object));for(let ee of K){if(N.has(ee.object))continue;N.add(ee.object);let q=[...ce,ee],ne=L(X(a,ee.object));if(ne)return{text:`yes \u2014 ${[...q.map(oe),oe(ne)].join("; ")}`,replace:!0};V.push({terms:X(a,ee.object),chain:q})}}if(!V.length)break;P=V}return null}let R=Zd(c),j=R.match(xC);if(j){let D=await it(e,r),U=!!j[1],G=X(a,j[2]),I=X(a,j[3]),L=Qy(j[2],j[3],D);if(L&&R!==Jy(c)&&(L=Xy(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(oe).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=Zy(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=op(hc(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(hC);if(A){let D=X(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(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=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(rC);if(F){let D=X(a,F[1]),U=X(a,F[2]),G=await it(e,r),I=mn(G.filter(L=>L.predicate==="mgx:capableOf"&&U.has(L.object))).filter(L=>la(new Set([L.subject]),U,G).verdict==="yes");if(I.length){let{findIsaChain:L,SUBCLASS_PREDICATE:C,TYPE_PREDICATE:P}=await Promise.resolve().then(()=>(qt(),ln)),N=G.filter(re=>re.predicate===C),W=G.filter(re=>re.predicate===P),V=N.map(re=>[re.subject,re.object]),ie=W.map(re=>[re.subject,re.object]),ce=re=>(re.predicate===C?N:W).find(fe=>fe.subject===re.subject&&fe.object===re.object),K=new Map,ee=I.filter(re=>D.has(re.subject)?!0:(K.has(re.subject)||K.set(re.subject,L(re.subject,D,ie,V,{maxHops:3})),!!K.get(re.subject))),ne=Ze(ee.length?ee:I,o).map(re=>{let fe=ee.length?K.get(re.subject):null;if(!fe||fe.length<2)return oe(re);let be=fe.map(ce);if(!be.every(Boolean))return oe(re);let Ie=be.map(ue=>`${Mt(ue)}${ue.provenance?` (source: ${Dn(ue.provenance)})`:""}`).join("; ");return`${oe(re)} \u2014 via: ${Ie}`}),te=ne.slice(0,je),xe=ne.slice(je),Ae=xe.length?`
203
+ `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let F=c.match(kC);if(F){let D=X(a,F[1]),U=X(a,F[2]),G=await it(e,r),I=hn(G.filter(L=>L.predicate==="mgx:capableOf"&&U.has(L.object))).filter(L=>ua(new Set([L.subject]),U,G).verdict==="yes");if(I.length){let{findIsaChain:L,SUBCLASS_PREDICATE:C,TYPE_PREDICATE:P}=await Promise.resolve().then(()=>(Ht(),un)),N=G.filter(re=>re.predicate===C),W=G.filter(re=>re.predicate===P),V=N.map(re=>[re.subject,re.object]),ie=W.map(re=>[re.subject,re.object]),ce=re=>(re.predicate===C?N:W).find(fe=>fe.subject===re.subject&&fe.object===re.object),K=new Map,ee=I.filter(re=>D.has(re.subject)?!0:(K.has(re.subject)||K.set(re.subject,L(re.subject,D,ie,V,{maxHops:3})),!!K.get(re.subject))),ne=Ze(ee.length?ee:I,o).map(re=>{let fe=ee.length?K.get(re.subject):null;if(!fe||fe.length<2)return oe(re);let be=fe.map(ce);if(!be.every(Boolean))return oe(re);let Ie=be.map(ue=>`${Dt(ue)}${ue.provenance?` (source: ${zn(ue.provenance)})`:""}`).join("; ");return`${oe(re)} \u2014 via: ${Ie}`}),te=ne.slice(0,je),xe=ne.slice(je),Ae=xe.length?`
204
204
  \u2026and ${xe.length} more \u2014 say 'more' to see them.`:"";return{text:(ee.length?"":`nothing I remember ties these to "${F[1]}", but:
205
205
  `)+te.join(`
206
- `)+Ae,replace:!0,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}let T=c.match(oC);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=X(a,T[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgxneg:capableOf"&&D.has(G.object));if(U.length){let I=Ze(mn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
206
+ `)+Ae,replace:!0,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}let T=c.match(SC);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=X(a,T[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgxneg:capableOf"&&D.has(G.object));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=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(sC);if(M&&M[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=X(a,M[1]),U=Xl(D,await it(e,r));if(U.length){let I=Ze(mn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
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(EC);if(M&&M[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=X(a,M[1]),U=Ql(D,await it(e,r));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=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(XI);if(z&&!mC.has(z[1].trim().split(/\s+/)[0]?.toLowerCase())){let D=X(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(mn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
210
+ `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let z=c.match(gC);if(z&&!LC.has(z[1].trim().split(/\s+/)[0]?.toLowerCase())){let D=X(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(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=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 Y=c.match(Wy),ae=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:Y?.[1];if(ae){let D=X(a,ae),U=(await it(e,r)).filter(N=>ds.has(N.predicate)&&D.has(N.object));if(!U.length)return null;let I=Ze(mn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
212
+ `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let Y=c.match(e$),ae=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:Y?.[1];if(ae){let D=X(a,ae),U=(await it(e,r)).filter(N=>ms.has(N.predicate)&&D.has(N.object));if(!U.length)return null;let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=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(VI);if(Z){let D=X(a,Z[1]),U=await it(e,r),G=H=>!String(H.provenance||"").includes("corpus:")&&!String(H.provenance||"").includes("web:"),I=U.filter(H=>ds.has(H.predicate)&&G(H)),L=new Set,C=D;for(let H=0;H<8&&C.size;H+=1){let se=new Set;for(let De of I)C.has(De.object)&&!L.has(De.subject)&&se.add(De.subject);if(!se.size)break;for(let De of se)L.add(De);let et=new Set;for(let De of se)for(let Ve of X(a,De))et.add(Ve);C=et}let P=U.filter(H=>D.has(H.subject)||D.has(H.object)||L.has(H.subject));if(!P.length){let H=a(Z[1]).split(/\s+/).filter(se=>se.length>=4&&!i$.has(se));if(H.length){let se=De=>new Set(String(De||"").split(/\s+/)),et=De=>{let Ve=se(De);return H.some(sn=>Ve.has(sn))};P=U.filter(De=>et(De.subject)||et(De.object))}}P=P.filter(H=>!Ly.has(H.predicate));let N=P.length>0&&!P.some(Bd);if(!P.length)return null;let{findConsistencyViolations:W,TYPE_PREDICATE:V,SUBCLASS_PREDICATE:ie,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(qt(),ln)),K=H=>!H.provenance?.includes("corpus:")&&!H.provenance?.includes("web:"),ee=U.filter(H=>H.predicate===V&&K(H)).map(H=>[H.subject,H.object]),q=U.filter(H=>H.predicate===ie&&K(H)).map(H=>[H.subject,H.object]),ne=U.filter(H=>H.predicate===ce&&K(H)).map(H=>[H.subject,H.object]);if(ne.length){let se=W(ee,q,ne,{focus:D,budget:5}).find(et=>D.has(et.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 te=P.find(H=>D.has(H.subject)||D.has(H.object)),xe=te?D.has(te.subject)?te.subject:te.object:Z[1].trim(),Ae=P.some(H=>L.has(H.subject)&&!D.has(H.subject)&&!D.has(H.object));P=Ze(P,o);let pe=`${P.length} remembered fact${P.length===1?"":"s"} about ${xe}${Ae?" (including its known subtypes)":""}:`,{lines:re,grouped:fe}=Py(P,U,D,{indent:" "});if(fe)return{...fe,text:`${pe}
214
+ `)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let Z=c.match(pC);if(Z){let D=X(a,Z[1]),U=await it(e,r),G=H=>!String(H.provenance||"").includes("corpus:")&&!String(H.provenance||"").includes("web:"),I=U.filter(H=>ms.has(H.predicate)&&G(H)),L=new Set,C=D;for(let H=0;H<8&&C.size;H+=1){let se=new Set;for(let De of I)C.has(De.object)&&!L.has(De.subject)&&se.add(De.subject);if(!se.size)break;for(let De of se)L.add(De);let et=new Set;for(let De of se)for(let Ve of X(a,De))et.add(Ve);C=et}let P=U.filter(H=>D.has(H.subject)||D.has(H.object)||L.has(H.subject));if(!P.length){let H=a(Z[1]).split(/\s+/).filter(se=>se.length>=4&&!b$.has(se));if(H.length){let se=De=>new Set(String(De||"").split(/\s+/)),et=De=>{let Ve=se(De);return H.some(on=>Ve.has(on))};P=U.filter(De=>et(De.subject)||et(De.object))}}P=P.filter(H=>!qy.has(H.predicate));let N=P.length>0&&!P.some(Hd);if(!P.length)return null;let{findConsistencyViolations:W,TYPE_PREDICATE:V,SUBCLASS_PREDICATE:ie,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Ht(),un)),K=H=>!H.provenance?.includes("corpus:")&&!H.provenance?.includes("web:"),ee=U.filter(H=>H.predicate===V&&K(H)).map(H=>[H.subject,H.object]),q=U.filter(H=>H.predicate===ie&&K(H)).map(H=>[H.subject,H.object]),ne=U.filter(H=>H.predicate===ce&&K(H)).map(H=>[H.subject,H.object]);if(ne.length){let se=W(ee,q,ne,{focus:D,budget:5}).find(et=>D.has(et.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 te=P.find(H=>D.has(H.subject)||D.has(H.object)),xe=te?D.has(te.subject)?te.subject:te.object:Z[1].trim(),Ae=P.some(H=>L.has(H.subject)&&!D.has(H.subject)&&!D.has(H.object));P=Ze(P,o);let pe=`${P.length} remembered fact${P.length===1?"":"s"} about ${xe}${Ae?" (including its known subtypes)":""}:`,{lines:re,grouped:fe}=Hy(P,U,D,{indent:" "});if(fe)return{...fe,text:`${pe}
215
215
  ${fe.text}`,...N?{weakOnly:!0}:{}};let be=re.slice(0,je),Ie=re.slice(je),ue=Ie.length?`
216
216
  \u2026and ${Ie.length} more \u2014 say 'more' to see them.`:"";return{text:`${pe}
217
217
  ${be.join(`
218
- `)}${ue}`,replace:!0,...Ie.length?{pending:{items:Ie.map(H=>H.trim()),noun:"facts"}}:{},...N?{weakOnly:!0}:{}}}return null}async function jC(e,t){let n=await gi(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&Iy[s]?Iy[s][0]:null}function pc(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<RC;r+=1){let i=null;for(let a of e.relations||[])if(_C.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 p$(e,t,n,s,o=null,r=null,i={},a=null){return d$(await TC(e,t,n,s,o,r,i,a),n,t)}async function TC(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(qe(),Os)))}catch{return null}let c=String(t).trim();if(o){let I=c.match(Fs);if(I){let L=await gi(o,I[1]);if(L){let C=X(l,rn(I[2])),P=pc(o,L.id).find(W=>[...X(l,W.label)].some(V=>C.has(V)));if(P)return{text:`yes \u2014 the code graph says ${L.label} inherits ${P.label}.`,replace:!0};let N=await gi(o,rn(I[2]));if(N&&pc(o,N.id).some(W=>W.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(!Fs.test(u)&&!qd.test(u)){let L=u.match(qy);if(L){let C=L[1].trim(),P=us.test(C)?r||null:C;if(P&&!/^there\b/i.test(P)&&!n?.parsed&&!Hy.test(C)&&!Vy.test(C)&&!Oy.test(L[2].trim()))return Ky(P,L[2].trim().toLowerCase())}}let I=u.match(Fs)||Vd(c);if(!(I&&!/^there\b/i.test(I[1].trim())||Fy.test(c)))return null}let f=d.filter(I=>ds.has(I.predicate)),p=(I,L)=>L.trust-I.trust,m=I=>{let L=I.map(oe),C=L.slice(0,je),P=L.slice(je),N=P.length?`
218
+ `)}${ue}`,replace:!0,...Ie.length?{pending:{items:Ie.map(H=>H.trim()),noun:"facts"}}:{},...N?{weakOnly:!0}:{}}}return null}async function VC(e,t){let n=await bi(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&By[s]?By[s][0]:null}function mc(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<KC;r+=1){let i=null;for(let a of e.relations||[])if(HC.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 E$(e,t,n,s,o=null,r=null,i={},a=null){return x$(await YC(e,t,n,s,o,r,i,a),n,t)}async function YC(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(qe(),Os)))}catch{return null}let c=String(t).trim();if(o){let I=c.match(Fs);if(I){let L=await bi(o,I[1]);if(L){let C=X(l,an(I[2])),P=mc(o,L.id).find(W=>[...X(l,W.label)].some(V=>C.has(V)));if(P)return{text:`yes \u2014 the code graph says ${L.label} inherits ${P.label}.`,replace:!0};let N=await bi(o,an(I[2]));if(N&&mc(o,N.id).some(W=>W.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(!Fs.test(u)&&!Xd.test(u)){let L=u.match(n$);if(L){let C=L[1].trim(),P=fs.test(C)?r||null:C;if(P&&!/^there\b/i.test(P)&&!n?.parsed&&!o$.test(C)&&!s$.test(C)&&!Gy.test(L[2].trim()))return r$(P,L[2].trim().toLowerCase())}}let I=u.match(Fs)||Jd(c);if(!(I&&!/^there\b/i.test(I[1].trim())||Yy.test(c)))return null}let f=d.filter(I=>ms.has(I.predicate)),p=(I,L)=>L.trust-I.trust,m=I=>{let L=I.map(oe),C=L.slice(0,je),P=L.slice(je),N=P.length?`
219
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(kC.test(c)){let I=Ze(f.length?f:d,i);return I.length?m(I):null}let h=u.match(qd);if(h){let I=h[1].trim(),L=us.test(I)?r||null:I,C=h[2].trim().toLowerCase(),P=h[3].trim();if(L&&!Hd.has(C)){let N=Ld(d),{findIsaChain:W}=await Promise.resolve().then(()=>(qt(),ln)),V=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),re=[];for(let fe of d){let be=zd(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ie=Nd(W,be,new Set([pe]),N,{maxHops:2});if(!Ie)continue;let ue=Ie.map(H=>d.find(se=>se.predicate===bi&&se.subject===H.subject&&se.object===H.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:ie,findRuleByName:ce,resolveRelationChase:K}=await Promise.resolve().then(()=>(qe(),Os)),{findActionPath:ee}=await Promise.resolve().then(()=>(Js(),Ai)),q=await ie(e),te=await K(q,C,L,P,{relationFactsFor:V,renderFactLine:oe,factPhrase:Mt,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Od,findActionPath:ee});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:V(C).length>0||!!ce(q,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=mc(u).match(a$)||c$(u,I=>{let L=X(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=us.test(L)?r||null:L;if(C&&!Hd.has(I)){let P=Ld(d),{findIsaChain:N}=await Promise.resolve().then(()=>(qt(),ln)),W=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),re=[];for(let fe of d){let be=zd(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ie=Nd(N,be,new Set([pe]),P,{maxHops:2});if(!Ie)continue;let ue=Ie.map(H=>d.find(se=>se.predicate===bi&&se.subject===H.subject&&se.object===H.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:V,findRuleByName:ie,resolveRelationChaseReverse:ce}=await Promise.resolve().then(()=>(qe(),Os)),K=await V(e),{findReachableSet:ee}=await Promise.resolve().then(()=>(Js(),Ai)),ne=await ce(K,I,C,{relationFactsFor:W,renderFactLine:oe,factPhrase:Mt,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Od,findReachableSet:ee});return ne.length?{text:ne.map(pe=>`${pe.subject} \u2014 ${pe.citation.join("; ")}`).join(`
221
- `),replace:!0}:W(I).length>0||!!ie(K,I)?{text:/^what\b/i.test(mc(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(AC);if(I){let L=X(l,I[1]),C=Ze(d.filter(P=>L.has(P.subject)||L.has(P.object)),i);if(C.length){let P=C.map(oe),N=P.slice(0,je),W=P.slice(je),V=W.length?`
220
+ `)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}};if(qC.test(c)){let I=Ze(f.length?f:d,i);return I.length?m(I):null}let h=u.match(Xd);if(h){let I=h[1].trim(),L=fs.test(I)?r||null:I,C=h[2].trim().toLowerCase(),P=h[3].trim();if(L&&!Qd.has(C)){let N=Dd(d),{findIsaChain:W}=await Promise.resolve().then(()=>(Ht(),un)),V=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),re=[];for(let fe of d){let be=qd(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ie=zd(W,be,new Set([pe]),N,{maxHops:2});if(!Ie)continue;let ue=Ie.map(H=>d.find(se=>se.predicate===wi&&se.subject===H.subject&&se.object===H.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:ie,findRuleByName:ce,resolveRelationChase:K}=await Promise.resolve().then(()=>(qe(),Os)),{findActionPath:ee}=await Promise.resolve().then(()=>(Js(),Ii)),q=await ie(e),te=await K(q,C,L,P,{relationFactsFor:V,renderFactLine:oe,factPhrase:Dt,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Fd,findActionPath:ee});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:V(C).length>0||!!ce(q,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=gc(u).match(w$)||y$(u,I=>{let L=X(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=fs.test(L)?r||null:L;if(C&&!Qd.has(I)){let P=Dd(d),{findIsaChain:N}=await Promise.resolve().then(()=>(Ht(),un)),W=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),re=[];for(let fe of d){let be=qd(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ie=zd(N,be,new Set([pe]),P,{maxHops:2});if(!Ie)continue;let ue=Ie.map(H=>d.find(se=>se.predicate===wi&&se.subject===H.subject&&se.object===H.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:V,findRuleByName:ie,resolveRelationChaseReverse:ce}=await Promise.resolve().then(()=>(qe(),Os)),K=await V(e),{findReachableSet:ee}=await Promise.resolve().then(()=>(Js(),Ii)),ne=await ce(K,I,C,{relationFactsFor:W,renderFactLine:oe,factPhrase:Dt,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Fd,findReachableSet:ee});return ne.length?{text:ne.map(pe=>`${pe.subject} \u2014 ${pe.citation.join("; ")}`).join(`
221
+ `),replace:!0}:W(I).length>0||!!ie(K,I)?{text:/^what\b/i.test(gc(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(XC);if(I){let L=X(l,I[1]),C=Ze(d.filter(P=>L.has(P.subject)||L.has(P.object)),i);if(C.length){let P=C.map(oe),N=P.slice(0,je),W=P.slice(je),V=W.length?`
222
222
  \u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
223
- `)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}}}let b=u.match(BI);if(b){let I=Zd(b[1].trim().toLowerCase()),L=b[2].trim(),C=us.test(L)?r||null:L;if(C){let{loadMemory:P,findRuleByName:N,RULE_KIND_PROP:W,RULE_KIND_RECURSIVE:V}=await Promise.resolve().then(()=>(qe(),Os)),ie=await P(e),ce=N(ie,I),K=ce?.attributes?.find(ee=>ee.prop===W)?.value;if(ce&&K===V){let ee=ce.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,q=ce.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,ne=l(C);if(ee&&q&&ne){let te=Ld(d),{findIsaChain:xe}=await Promise.resolve().then(()=>(qt(),ln)),Ae=Ie=>{let ue=String(Ie||"").trim().toLowerCase(),H=[];for(let se of d){let et=zd(se.predicate);if(!et)continue;if(et===ue){H.push({fact:se,aliasFacts:[]});continue}let De=Nd(xe,et,new Set([ue]),te,{maxHops:2});if(!De)continue;let Ve=De.map(sn=>d.find(on=>on.predicate===bi&&on.subject===sn.subject&&on.object===sn.object));Ve.every(Boolean)&&H.push({fact:se,aliasFacts:Ve})}return H},{findReachableSet:pe}=await Promise.resolve().then(()=>(Js(),Ai)),be=pe({entity:ne,hop:0},Ie=>{let ue=Ie.hop===0?ee:q;return Ae(ue).filter(H=>H.fact.subject===Ie.entity).map(H=>({action:H,nextState:{entity:H.fact.object,hop:Ie.hop+1}}))},{maxDepth:20,stateKey:Ie=>Ie.entity});if(be.length)return{text:be.map(({node:ue,path:H})=>{let se=new Set,et=[];for(let De of H.actions){et.push(oe(De.fact));for(let Ve of De.aliasFacts){let sn=Ve.id||`${Ve.subject}|${Ve.predicate}|${Ve.object}`;se.has(sn)||(se.add(sn),et.push(`${Mt(Ve)}${Ve.provenance?` (source: ${Dn(Ve.provenance)})`:""}`))}}return`${ue.entity} \u2014 ${et.join("; ")}`}).join(`
224
- `),replace:!0}}}return null}}let y=c.match(Fy),w=c.match(Fs)||Vd(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Fs);if(w){let I=X(l,rn(w[2])),L=r&&us.test(w[1].trim())?r:w[1],C=new Set(X(l,L));if([...C].some(B=>I.has(B))){let B=rn(w[2]).trim();return{text:`yes \u2014 ${br(B)} ${B} is ${br(B)} ${B}, trivially: every kind is a kind of itself.`,replace:!0}}let P=await jC(o,L);if(P)for(let B of X(l,P))C.add(B);let{findIsaChain:N,deriveDisjointViolations:W,SUBCLASS_PREDICATE:V,TYPE_PREDICATE:ie,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(qt(),ln)),K=$o,ee=f.filter(B=>B.predicate===V&&K(B)),q=f.filter(B=>B.predicate===ie&&K(B)),ne=ee.map(B=>[B.subject,B.object]),te=q.map(B=>[B.subject,B.object]),xe=f.filter(B=>B.predicate===V),Ae=f.filter(B=>B.predicate===ie),pe=Ae.map(B=>[B.subject,B.object]),re=xe.map(B=>[B.subject,B.object]),fe=d.filter(B=>B.predicate===ce&&K(B)),be=fe.map(B=>[B.subject,B.object]),Ie=fe.length?W(pe.concat(re),re,be,{budget:20,focus:new Set([...C,...I])}):[],ue=B=>{let we=Ie.find(Ne=>Ne.subject===B&&I.has(Ne.object));if(!we)return null;let ye=f.filter(Ne=>I.has(Ne.object)&&(Ne.subject===we.viaClass||Ne.subject===we.subject)).sort(p)[0],_e=fe.find(Ne=>Ne.subject===we.viaClass&&Ne.object===we.object||Ne.subject===we.object&&Ne.object===we.viaClass);return!ye||!_e?null:NI(ye,_e)},H=f.filter(B=>C.has(B.subject)&&I.has(B.object)).sort(p)[0],se=d.filter(B=>B.predicate===aa&&C.has(B.subject)&&I.has(B.object)).sort(p)[0],et=fe.find(B=>C.has(B.subject)&&I.has(B.object)||C.has(B.object)&&I.has(B.subject));if(H&&!se){let B=ue(H.subject);if(B)return B}let De=r$(H,se||et);if(De)return De;if(fe.length){let B=_e=>{let Ne=new Set(_e),Ct=new Set(_e);for(let Ce=0;Ce<8&&Ct.size;Ce+=1){let $e=new Set;for(let[at,zs]of re)Ct.has(at)&&!Ne.has(zs)&&$e.add(zs);if(!$e.size)break;for(let at of $e)Ne.add(at);Ct=$e}return Ne},we=B(I),ye=Ie.find(_e=>C.has(_e.subject)&&we.has(_e.object)&&!B([_e.viaClass]).has(_e.object)&&!B([_e.object]).has(_e.viaClass));if(ye){let _e=f.filter($e=>C.has($e.subject)&&$e.object===ye.viaClass).sort(p)[0],Ne=fe.find($e=>$e.subject===ye.viaClass&&$e.object===ye.object||$e.subject===ye.object&&$e.object===ye.viaClass),Ct=!I.has(ye.object),Ce=Ct?f.filter($e=>I.has($e.subject)&&$e.object===ye.object).sort(p)[0]:null;if(_e&&Ne&&(!Ct||Ce)){let $e=rn(w[2]).trim();return{text:`no \u2014 ${[_e,...Ce?[Ce]:[]].map(oe).join("; ")}; and ${Mt(Ne)}${Ne.provenance?` (source: ${Dn(Ne.provenance)})`:""} \u2014 so ${L} can never be ${br($e)} ${$e}.`,replace:!0}}}}let Ve=await gi(o,L);if(Ve){let B=new Map;for(let ye of pc(o,Ve.id))for(let _e of X(l,ye.label))!C.has(_e)&&!B.has(_e)&&B.set(_e,ye.label);let we=f.filter(ye=>B.has(ye.subject)&&I.has(ye.object)).sort(p)[0];if(we)return{text:`yes \u2014 the code graph says ${Ve.label} inherits ${B.get(we.subject)}, and ${oe(we)}`,replace:!0}}let sn=B=>(B.predicate===V?ee:q).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,te,ne,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(sn);if(_e.every(Boolean))return{text:`yes \u2014 ${uc(_e)}`,replace:!0}}let on=B=>(B.predicate===V?xe:Ae).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,pe,re,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(on);if(_e.every(Boolean)&&_e.some(K))return{text:`yes \u2014 ${uc(_e)}`,replace:!0}}let Xt=L.match(/^(.*\S)\s+not$/i),Ft=Xt&&[Xt[0],r&&us.test(Xt[1].trim())?r:Xt[1]];if(Ft){let B=X(l,Ft[1]),we=I,ye=f.filter(Ce=>B.has(Ce.subject)&&we.has(Ce.object)).sort(p)[0];if(ye)return{text:`no \u2014 ${oe(ye)}`,replace:!0};let _e=fe.find(Ce=>B.has(Ce.subject)&&we.has(Ce.object)||B.has(Ce.object)&&we.has(Ce.subject));if(_e)return{text:`yes \u2014 ${oe(_e)}`,replace:!0};let Ne=Ft[1].trim(),Ct=rn(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Ct}. If no ${Ne} is a ${Ct}, teach me: "no ${Ne} is a ${Ct}".`,replace:!0,miss:!0}}if(fe.length){let B=W(te.concat(ne),ne,be,{budget:10});for(let we of C){let ye=B.find(Ce=>Ce.subject===we&&I.has(Ce.object));if(!ye)continue;let _e=q.concat(ee).find(Ce=>Ce.subject===ye.subject&&Ce.object===ye.viaType),Ne=fe.find(Ce=>Ce.subject===ye.viaClass&&Ce.object===ye.object||Ce.subject===ye.object&&Ce.object===ye.viaClass),Ct=[_e,Ne].filter(Boolean).map(oe);return{text:`no \u2014 ${Ct.length?Ct.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:wi,ON_PROPERTY_PREDICATE:k,SOME_VALUES_FROM_PREDICATE:le,deriveSomeValuesFromSubsumption:Te,ENTAILED_SCM_SVF_PROVENANCE:zn,SCM_SVF_RULE_CONFIDENCE:So,entailedTrustFrom:sp}=await Promise.resolve().then(()=>(qt(),ln)),op=d.filter(B=>B.predicate===k&&K(B)),rp=d.filter(B=>B.predicate===le&&K(B));if(op.length&&rp.length){let B=new Map(rp.map($e=>[$e.subject,$e.object])),we=op.map($e=>({restriction:$e.subject,property:$e.object,target:B.get($e.subject)})).filter($e=>$e.target),ye=new Set([V,ie,ce,k,le,"owl:intersectionOf"]),_e=d.filter($e=>K($e)&&!ye.has($e.predicate)),Ne=_e.map($e=>[$e.subject,$e.predicate,$e.object]),Ct=wi(Ne,te,ne,we,{budget:10});for(let $e of C){let at=Ct.find(gn=>gn.subject===$e&&I.has(gn.object));if(!at)continue;let zs=_e.find(gn=>gn.subject===at.subject&&gn.predicate===at.viaProperty&&gn.object===at.viaValue),Us=q.find(gn=>gn.subject===at.viaValue&&gn.object===at.viaType),yr=[zs,Us].filter(Boolean).map(oe);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=we.length>1?Te(we,ne,{budget:10}):[];if(Ce.length){let $e=ne.concat(Ce.map(Se=>[Se.subject,Se.object])),at=new Map(we.map(Se=>[Se.restriction,Se])),zs=new Map;for(let Se of d)zs.set(`${Se.subject}\0${Se.predicate}\0${Se.object}`,Se.trust);let Us=(Se,Sn,Dt)=>zs.get(`${Se}\0${Sn}\0${Dt}`),yr=new Map;for(let Se of Ce){let Sn=at.get(Se.subject),Dt=at.get(Se.object),Jt=[Sn&&Us(Se.subject,k,Sn.property),Us(Se.subject,le,Se.viaY1),Dt&&Us(Se.object,k,Dt.property),Us(Se.object,le,Se.viaY2),Us(Se.viaY1,V,Se.viaY2)].filter(O$=>typeof O$=="number"),$i=sp(Jt,So);$i!==null&&yr.set(`${Se.subject}\0${Se.object}`,$i)}let gn=Se=>{if(Se.predicate!==V)return q.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);let Sn=ee.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);if(Sn)return Sn;let Dt=Ce.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);return Dt?{subject:Dt.subject,predicate:V,object:Dt.object,provenance:zn,trust:yr.get(`${Dt.subject}\0${Dt.object}`)}:void 0};for(let Se of C){let Sn=N(Se,I,te,$e,{maxHops:3});if(!Sn)continue;let Dt=Sn.map(gn);if(Dt.every(Boolean)){let Jt=sp(Dt.map($i=>$i.trust),1);return{text:`yes \u2014 ${uc(Dt)}`,replace:!0,...Jt!==null?{trust:Jt}:{}}}}}}let I$=X(l,L),ip=f.filter(B=>I$.has(B.subject)).sort(p),Ds=L.trim(),yi=rn(w[2]).trim(),C$=[...C].some(B=>N(B,I,te,ne,{maxHops:WI}));if(ip.length){let B=ip.slice(0,3).map(oe).join("; "),we=C$?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${Ds}", then ask me again.`:`If it's true, teach me: "${Ds} is a kind of ${yi}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${Ds} is a ${yi}. I do know: ${B}. ${we}`,replace:!0,miss:!0}}let ap=f.filter(B=>C.has(B.object)&&I.has(B.subject)).sort(p)[0];return ap?{text:`I can't confirm that \u2014 what I know runs the other way: ${oe(ap)}. A kind doesn't reverse. If it's true, teach me: "every ${Ds} is a ${yi}".`,replace:!0,miss:!0}:!Ve&&!P&&!pI(Ds)&&!d.some(B=>C.has(B.subject)||C.has(B.object))?{text:`I can't confirm that \u2014 I don't know "${Ds}" at all yet. If it's true, teach me: "${Ds} is a kind of ${yi}".`,replace:!0,miss:!0}:null}let v=c.match(wC);if(v){let[,I,L,C]=v,{SUBCLASS_PREDICATE:P,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:W,proveCardinalityAtLeast:V,CARDINALITY_RULE_CONFIDENCE:ie,entailedTrustFrom:ce}=await Promise.resolve().then(()=>(qt(),ln)),K=$o,ee=f.filter(te=>te.predicate===P&&K(te)).map(te=>[te.subject,te.object]),q=d.filter(te=>(te.predicate===N||Gy.has(te.predicate))&&K(te)),ne=W(q);if(ne.length){let te=X(l,I.trim()),xe=X(l,C.trim()),Ae=Number(L),pe=My(te,xe,(re,fe)=>V(ee,ne,re,fe,Ae,{}));if(pe){let re=d.find(se=>se.predicate===P&&se.subject===pe.viaClass&&se.object===pe.viaRestriction),fe=re?.provenance?` (source: ${Dn(re.provenance)})`:"",be=pe.kind==="exactly"?"exactly":"at least",Ie=(se,et)=>`${se}${et===1?"":"s"}`,ue=[re?.trust,...q.filter(se=>se.subject===pe.viaRestriction).map(se=>se.trust),...pe.viaClass!==pe.subject?[f.find(se=>se.predicate===P&&se.subject===pe.subject&&se.object===pe.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),H=ce(ue,ie);return{text:`yes \u2014 every ${pe.viaClass} has ${be} ${pe.n} ${Ie(pe.object,pe.n)}${fe}, so at least ${Ae} follows.`,replace:!0,...H!==null?{trust:H}:{}}}}}let _=c.match(yC);if(_){let[,I,L]=_,{SUBCLASS_PREDICATE:C,ON_PROPERTY_PREDICATE:P,buildCardinalityRestrictions:N,proveMaxCardinalityZeroDenial:W,CAX_MAXC0_RULE_CONFIDENCE:V,entailedTrustFrom:ie}=await Promise.resolve().then(()=>(qt(),ln)),ce=$o,K=f.filter(ne=>ne.predicate===C&&ce(ne)).map(ne=>[ne.subject,ne.object]),ee=d.filter(ne=>(ne.predicate===P||Gy.has(ne.predicate))&&ce(ne)),q=N(ee);if(q.length){let ne=X(l,I.trim()),te=X(l,L.trim()),xe=My(ne,te,(Ae,pe)=>W(K,q,Ae,pe,{}));if(xe){let Ae=d.find(be=>be.predicate===C&&be.subject===xe.viaClass&&be.object===xe.viaRestriction),pe=Ae?.provenance?` (source: ${Dn(Ae.provenance)})`:"",re=[Ae?.trust,...ee.filter(be=>be.subject===xe.viaRestriction).map(be=>be.trust),...xe.viaClass!==xe.subject?[f.find(be=>be.predicate===C&&be.subject===xe.subject&&be.object===xe.viaClass)?.trust]:[]].filter(be=>typeof be=="number"),fe=ie(re,V);return{text:`no \u2014 every ${xe.viaClass} has at most 0 ${xe.object}${pe}.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let $=c.match($C);if($){let I=X(l,$[1]),L=d.filter(C=>C.predicate===Cd&&I.has(C.subject)).sort(p);return L.length?m(L):null}let x=u.match(vC);if(x){let[,I,L]=x,C=X(l,I.trim()),P=X(l,L.replace(/^an?\s+/i,"").trim()),N=d.filter(W=>W.predicate===Cd&&P.has(W.subject)&&C.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${L.trim()}.`,replace:!0}}let S=u.match(xC);if(S){let[,I,L]=S,C=X(l,I.replace(/^an?\s+/i,"").trim()),P=X(l,L.trim()),N=d.filter(W=>W.predicate===Cd&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${L.trim()}.`,replace:!0}}let E=u.match(EC);if(E){let[,I,L]=E,C=X(l,I.trim()),P=X(l,`${L.trim()} method`),N=d.filter(W=>W.predicate===dr&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:null}let R=u.match(SC);if(R){let I=X(l,R[1].trim()),L=d.filter(C=>C.predicate===dr&&I.has(C.subject)&&/ method$/.test(C.object)).sort(p);return L.length?m(L):null}let j=u.match(qy);if(j){let I=j[1].trim(),L=Hy.test(I)||Vy.test(I)?null:us.test(I)?r||null:I,C=j[2].trim().toLowerCase();if(L){let P=X(l,L),N=new Map,W=null;if(o){let q=await gi(o,L);if(W=q,q)for(let ne of pc(o,q.id))for(let te of X(l,ne.label))!P.has(te)&&!N.has(te)&&N.set(te,ne.label),P.add(te)}let V=q=>q.predicate===Od&&l(q.object)===C||q.predicate===`tmct:${C}`&&q.object==="true",ie=l(L).split(/\s+/).filter(q=>q.length>=4&&!i$.has(q)),ce=q=>ie.some(ne=>new Set(String(q.subject||"").split(/\s+/)).has(ne)),K=q=>P.has(q.subject)||ie.length&&ce(q),ee=d.filter(q=>K(q)&&V(q)).sort(p)[0];if(ee){let q=N.get(ee.subject);return{text:q?`yes \u2014 the code graph says ${W.label} inherits ${q}, and ${oe(ee)}`:`yes \u2014 ${oe(ee)}`,replace:!0}}{let{findIsaChain:q,SUBCLASS_PREDICATE:ne,TYPE_PREDICATE:te}=await Promise.resolve().then(()=>(qt(),ln)),xe=$o,Ae=d.filter(ue=>ue.predicate===ne&&xe(ue)),pe=d.filter(ue=>ue.predicate===te&&xe(ue)),re=Ae.map(ue=>[ue.subject,ue.object]),fe=pe.map(ue=>[ue.subject,ue.object]),be=ue=>(ue.predicate===ne?Ae:pe).find(H=>H.subject===ue.subject&&H.object===ue.object),Ie=X(l,C);for(let ue of P){let H=q(ue,Ie,fe,re,{maxHops:2});if(!H)continue;let se=H.map(be);if(se.every(Boolean))return{text:`yes \u2014 ${uc(se)}`,replace:!0}}}if(d.some(K)&&!n?.parsed)return{text:`I don't have a fact saying ${MI(L)} is ${C}.`,replace:!0};if(!n?.parsed&&!Oy.test(C))return Ky(L,C)}}let A=Kd(c).match(xI);if(A&&!Md.test(c)){let[,I,L,C]=A,P=L.toLowerCase();if(!Pd.test(P)&&!Dd.test(P)){let N=I.trim(),W=kI(await Fd(P),C),V=W.object.replace(/^an?\s+/i,"").trim();if(N&&V){let ie=W.predicate,ce=X(l,N),K=X(l,V),ee=[ie,Zo(ie)],q=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject)&&K.has(te.object)).sort(p)[0];if(q)return{text:`${Ah(q.predicate)?"no":"yes"} \u2014 ${oe(q)}`,replace:!0,generalVerbQuery:!0};let ne=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject));if(ne.length){let te=ne.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Mt({subject:N,predicate:ie,object:V})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let F=c.match(EI);if(F&&!Md.test(c)){let[,I,L]=F,[C,P]=L.toLowerCase().split(/\s+/);if(!Pd.test(C)&&!Dd.test(C)){let N=I.trim();if(N){let W=await Fd(C);P&&/^mgx:[a-z]+$/.test(W)&&(W=`${W}-${P}`);let V=X(l,N),ie=[W,Zo(W)],ce=Ze(d.filter(K=>ie.includes(K.predicate)&&V.has(K.subject)),i);if(ce.length)return{...m(ce),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&&!Md.test(c)){let[,I,L,C]=T,P=I.toLowerCase();if(!Pd.test(P)&&!Dd.test(P)&&!vI.test(P)){let N=await Fd(P);/^mgx:[a-z]+$/.test(N)&&(N=`${N}-${L.toLowerCase()}`);let W=X(l,C.replace(/^(?:an?|the)\s+/i,"").trim()),V=Ze(d.filter(ie=>ie.predicate===N&&W.has(ie.object)),i);if(V.length)return{...m(V),generalVerbQuery:!0}}}let M=c.match(gC);if(M){let I=X(l,M[1]),L=Ze(d.filter(ie=>I.has(ie.subject)||I.has(ie.object)),i);if(!L.length)return null;let C=I.has(L[0].subject)?L[0].subject:L[0].object,P=L.map(ie=>` ${oe(ie)}`),N=P.slice(0,je),W=P.slice(je),V=W.length?`
223
+ `)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}}}let b=u.match(cC);if(b){let I=op(b[1].trim().toLowerCase()),L=b[2].trim(),C=fs.test(L)?r||null:L;if(C){let{loadMemory:P,findRuleByName:N,RULE_KIND_PROP:W,RULE_KIND_RECURSIVE:V}=await Promise.resolve().then(()=>(qe(),Os)),ie=await P(e),ce=N(ie,I),K=ce?.attributes?.find(ee=>ee.prop===W)?.value;if(ce&&K===V){let ee=ce.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,q=ce.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,ne=l(C);if(ee&&q&&ne){let te=Dd(d),{findIsaChain:xe}=await Promise.resolve().then(()=>(Ht(),un)),Ae=Ie=>{let ue=String(Ie||"").trim().toLowerCase(),H=[];for(let se of d){let et=qd(se.predicate);if(!et)continue;if(et===ue){H.push({fact:se,aliasFacts:[]});continue}let De=zd(xe,et,new Set([ue]),te,{maxHops:2});if(!De)continue;let Ve=De.map(on=>d.find(rn=>rn.predicate===wi&&rn.subject===on.subject&&rn.object===on.object));Ve.every(Boolean)&&H.push({fact:se,aliasFacts:Ve})}return H},{findReachableSet:pe}=await Promise.resolve().then(()=>(Js(),Ii)),be=pe({entity:ne,hop:0},Ie=>{let ue=Ie.hop===0?ee:q;return Ae(ue).filter(H=>H.fact.subject===Ie.entity).map(H=>({action:H,nextState:{entity:H.fact.object,hop:Ie.hop+1}}))},{maxDepth:20,stateKey:Ie=>Ie.entity});if(be.length)return{text:be.map(({node:ue,path:H})=>{let se=new Set,et=[];for(let De of H.actions){et.push(oe(De.fact));for(let Ve of De.aliasFacts){let on=Ve.id||`${Ve.subject}|${Ve.predicate}|${Ve.object}`;se.has(on)||(se.add(on),et.push(`${Dt(Ve)}${Ve.provenance?` (source: ${zn(Ve.provenance)})`:""}`))}}return`${ue.entity} \u2014 ${et.join("; ")}`}).join(`
224
+ `),replace:!0}}}return null}}let y=c.match(Yy),w=c.match(Fs)||Jd(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Fs);if(w){let I=X(l,an(w[2])),L=r&&fs.test(w[1].trim())?r:w[1],C=new Set(X(l,L));if([...C].some(B=>I.has(B))){let B=an(w[2]).trim();return{text:`yes \u2014 ${br(B)} ${B} is ${br(B)} ${B}, trivially: every kind is a kind of itself.`,replace:!0}}let P=await VC(o,L);if(P)for(let B of X(l,P))C.add(B);let{findIsaChain:N,deriveDisjointViolations:W,SUBCLASS_PREDICATE:V,TYPE_PREDICATE:ie,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Ht(),un)),K=$o,ee=f.filter(B=>B.predicate===V&&K(B)),q=f.filter(B=>B.predicate===ie&&K(B)),ne=ee.map(B=>[B.subject,B.object]),te=q.map(B=>[B.subject,B.object]),xe=f.filter(B=>B.predicate===V),Ae=f.filter(B=>B.predicate===ie),pe=Ae.map(B=>[B.subject,B.object]),re=xe.map(B=>[B.subject,B.object]),fe=d.filter(B=>B.predicate===ce&&K(B)),be=fe.map(B=>[B.subject,B.object]),Ie=fe.length?W(pe.concat(re),re,be,{budget:20,focus:new Set([...C,...I])}):[],ue=B=>{let we=Ie.find(Ne=>Ne.subject===B&&I.has(Ne.object));if(!we)return null;let ye=f.filter(Ne=>I.has(Ne.object)&&(Ne.subject===we.viaClass||Ne.subject===we.subject)).sort(p)[0],_e=fe.find(Ne=>Ne.subject===we.viaClass&&Ne.object===we.object||Ne.subject===we.object&&Ne.object===we.viaClass);return!ye||!_e?null:tC(ye,_e)},H=f.filter(B=>C.has(B.subject)&&I.has(B.object)).sort(p)[0],se=d.filter(B=>B.predicate===ca&&C.has(B.subject)&&I.has(B.object)).sort(p)[0],et=fe.find(B=>C.has(B.subject)&&I.has(B.object)||C.has(B.object)&&I.has(B.subject));if(H&&!se){let B=ue(H.subject);if(B)return B}let De=g$(H,se||et);if(De)return De;if(fe.length){let B=_e=>{let Ne=new Set(_e),Ct=new Set(_e);for(let Ce=0;Ce<8&&Ct.size;Ce+=1){let $e=new Set;for(let[at,zs]of re)Ct.has(at)&&!Ne.has(zs)&&$e.add(zs);if(!$e.size)break;for(let at of $e)Ne.add(at);Ct=$e}return Ne},we=B(I),ye=Ie.find(_e=>C.has(_e.subject)&&we.has(_e.object)&&!B([_e.viaClass]).has(_e.object)&&!B([_e.object]).has(_e.viaClass));if(ye){let _e=f.filter($e=>C.has($e.subject)&&$e.object===ye.viaClass).sort(p)[0],Ne=fe.find($e=>$e.subject===ye.viaClass&&$e.object===ye.object||$e.subject===ye.object&&$e.object===ye.viaClass),Ct=!I.has(ye.object),Ce=Ct?f.filter($e=>I.has($e.subject)&&$e.object===ye.object).sort(p)[0]:null;if(_e&&Ne&&(!Ct||Ce)){let $e=an(w[2]).trim();return{text:`no \u2014 ${[_e,...Ce?[Ce]:[]].map(oe).join("; ")}; and ${Dt(Ne)}${Ne.provenance?` (source: ${zn(Ne.provenance)})`:""} \u2014 so ${L} can never be ${br($e)} ${$e}.`,replace:!0}}}}let Ve=await bi(o,L);if(Ve){let B=new Map;for(let ye of mc(o,Ve.id))for(let _e of X(l,ye.label))!C.has(_e)&&!B.has(_e)&&B.set(_e,ye.label);let we=f.filter(ye=>B.has(ye.subject)&&I.has(ye.object)).sort(p)[0];if(we)return{text:`yes \u2014 the code graph says ${Ve.label} inherits ${B.get(we.subject)}, and ${oe(we)}`,replace:!0}}let on=B=>(B.predicate===V?ee:q).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,te,ne,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(on);if(_e.every(Boolean))return{text:`yes \u2014 ${pc(_e)}`,replace:!0}}let rn=B=>(B.predicate===V?xe:Ae).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,pe,re,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(rn);if(_e.every(Boolean)&&_e.some(K))return{text:`yes \u2014 ${pc(_e)}`,replace:!0}}let Xt=L.match(/^(.*\S)\s+not$/i),zt=Xt&&[Xt[0],r&&fs.test(Xt[1].trim())?r:Xt[1]];if(zt){let B=X(l,zt[1]),we=I,ye=f.filter(Ce=>B.has(Ce.subject)&&we.has(Ce.object)).sort(p)[0];if(ye)return{text:`no \u2014 ${oe(ye)}`,replace:!0};let _e=fe.find(Ce=>B.has(Ce.subject)&&we.has(Ce.object)||B.has(Ce.object)&&we.has(Ce.subject));if(_e)return{text:`yes \u2014 ${oe(_e)}`,replace:!0};let Ne=zt[1].trim(),Ct=an(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Ct}. If no ${Ne} is a ${Ct}, teach me: "no ${Ne} is a ${Ct}".`,replace:!0,miss:!0}}if(fe.length){let B=W(te.concat(ne),ne,be,{budget:10});for(let we of C){let ye=B.find(Ce=>Ce.subject===we&&I.has(Ce.object));if(!ye)continue;let _e=q.concat(ee).find(Ce=>Ce.subject===ye.subject&&Ce.object===ye.viaType),Ne=fe.find(Ce=>Ce.subject===ye.viaClass&&Ce.object===ye.object||Ce.subject===ye.object&&Ce.object===ye.viaClass),Ct=[_e,Ne].filter(Boolean).map(oe);return{text:`no \u2014 ${Ct.length?Ct.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:yi,ON_PROPERTY_PREDICATE:k,SOME_VALUES_FROM_PREDICATE:le,deriveSomeValuesFromSubsumption:Te,ENTAILED_SCM_SVF_PROVENANCE:Un,SCM_SVF_RULE_CONFIDENCE:So,entailedTrustFrom:cp}=await Promise.resolve().then(()=>(Ht(),un)),lp=d.filter(B=>B.predicate===k&&K(B)),up=d.filter(B=>B.predicate===le&&K(B));if(lp.length&&up.length){let B=new Map(up.map($e=>[$e.subject,$e.object])),we=lp.map($e=>({restriction:$e.subject,property:$e.object,target:B.get($e.subject)})).filter($e=>$e.target),ye=new Set([V,ie,ce,k,le,"owl:intersectionOf"]),_e=d.filter($e=>K($e)&&!ye.has($e.predicate)),Ne=_e.map($e=>[$e.subject,$e.predicate,$e.object]),Ct=yi(Ne,te,ne,we,{budget:10});for(let $e of C){let at=Ct.find(bn=>bn.subject===$e&&I.has(bn.object));if(!at)continue;let zs=_e.find(bn=>bn.subject===at.subject&&bn.predicate===at.viaProperty&&bn.object===at.viaValue),Us=q.find(bn=>bn.subject===at.viaValue&&bn.object===at.viaType),yr=[zs,Us].filter(Boolean).map(oe);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=we.length>1?Te(we,ne,{budget:10}):[];if(Ce.length){let $e=ne.concat(Ce.map(Se=>[Se.subject,Se.object])),at=new Map(we.map(Se=>[Se.restriction,Se])),zs=new Map;for(let Se of d)zs.set(`${Se.subject}\0${Se.predicate}\0${Se.object}`,Se.trust);let Us=(Se,kn,Ut)=>zs.get(`${Se}\0${kn}\0${Ut}`),yr=new Map;for(let Se of Ce){let kn=at.get(Se.subject),Ut=at.get(Se.object),Jt=[kn&&Us(Se.subject,k,kn.property),Us(Se.subject,le,Se.viaY1),Ut&&Us(Se.object,k,Ut.property),Us(Se.object,le,Se.viaY2),Us(Se.viaY1,V,Se.viaY2)].filter(G$=>typeof G$=="number"),vi=cp(Jt,So);vi!==null&&yr.set(`${Se.subject}\0${Se.object}`,vi)}let bn=Se=>{if(Se.predicate!==V)return q.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);let kn=ee.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);if(kn)return kn;let Ut=Ce.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);return Ut?{subject:Ut.subject,predicate:V,object:Ut.object,provenance:Un,trust:yr.get(`${Ut.subject}\0${Ut.object}`)}:void 0};for(let Se of C){let kn=N(Se,I,te,$e,{maxHops:3});if(!kn)continue;let Ut=kn.map(bn);if(Ut.every(Boolean)){let Jt=cp(Ut.map(vi=>vi.trust),1);return{text:`yes \u2014 ${pc(Ut)}`,replace:!0,...Jt!==null?{trust:Jt}:{}}}}}}let B$=X(l,L),dp=f.filter(B=>B$.has(B.subject)).sort(p),Ds=L.trim(),$i=an(w[2]).trim(),W$=[...C].some(B=>N(B,I,te,ne,{maxHops:lC}));if(dp.length){let B=dp.slice(0,3).map(oe).join("; "),we=W$?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${Ds}", then ask me again.`:`If it's true, teach me: "${Ds} is a kind of ${$i}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${Ds} is a ${$i}. I do know: ${B}. ${we}`,replace:!0,miss:!0}}let pp=f.filter(B=>C.has(B.object)&&I.has(B.subject)).sort(p)[0];return pp?{text:`I can't confirm that \u2014 what I know runs the other way: ${oe(pp)}. A kind doesn't reverse. If it's true, teach me: "every ${Ds} is a ${$i}".`,replace:!0,miss:!0}:!Ve&&!P&&!CI(Ds)&&!d.some(B=>C.has(B.subject)||C.has(B.object))?{text:`I can't confirm that \u2014 I don't know "${Ds}" at all yet. If it's true, teach me: "${Ds} is a kind of ${$i}".`,replace:!0,miss:!0}:null}let v=c.match(FC);if(v){let[,I,L,C]=v,{SUBCLASS_PREDICATE:P,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:W,proveCardinalityAtLeast:V,CARDINALITY_RULE_CONFIDENCE:ie,entailedTrustFrom:ce}=await Promise.resolve().then(()=>(Ht(),un)),K=$o,ee=f.filter(te=>te.predicate===P&&K(te)).map(te=>[te.subject,te.object]),q=d.filter(te=>(te.predicate===N||t$.has(te.predicate))&&K(te)),ne=W(q);if(ne.length){let te=X(l,I.trim()),xe=X(l,C.trim()),Ae=Number(L),pe=Ky(te,xe,(re,fe)=>V(ee,ne,re,fe,Ae,{}));if(pe){let re=d.find(se=>se.predicate===P&&se.subject===pe.viaClass&&se.object===pe.viaRestriction),fe=re?.provenance?` (source: ${zn(re.provenance)})`:"",be=pe.kind==="exactly"?"exactly":"at least",Ie=(se,et)=>`${se}${et===1?"":"s"}`,ue=[re?.trust,...q.filter(se=>se.subject===pe.viaRestriction).map(se=>se.trust),...pe.viaClass!==pe.subject?[f.find(se=>se.predicate===P&&se.subject===pe.subject&&se.object===pe.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),H=ce(ue,ie);return{text:`yes \u2014 every ${pe.viaClass} has ${be} ${pe.n} ${Ie(pe.object,pe.n)}${fe}, so at least ${Ae} follows.`,replace:!0,...H!==null?{trust:H}:{}}}}}let _=c.match(DC);if(_){let[,I,L]=_,{SUBCLASS_PREDICATE:C,ON_PROPERTY_PREDICATE:P,buildCardinalityRestrictions:N,proveMaxCardinalityZeroDenial:W,CAX_MAXC0_RULE_CONFIDENCE:V,entailedTrustFrom:ie}=await Promise.resolve().then(()=>(Ht(),un)),ce=$o,K=f.filter(ne=>ne.predicate===C&&ce(ne)).map(ne=>[ne.subject,ne.object]),ee=d.filter(ne=>(ne.predicate===P||t$.has(ne.predicate))&&ce(ne)),q=N(ee);if(q.length){let ne=X(l,I.trim()),te=X(l,L.trim()),xe=Ky(ne,te,(Ae,pe)=>W(K,q,Ae,pe,{}));if(xe){let Ae=d.find(be=>be.predicate===C&&be.subject===xe.viaClass&&be.object===xe.viaRestriction),pe=Ae?.provenance?` (source: ${zn(Ae.provenance)})`:"",re=[Ae?.trust,...ee.filter(be=>be.subject===xe.viaRestriction).map(be=>be.trust),...xe.viaClass!==xe.subject?[f.find(be=>be.predicate===C&&be.subject===xe.subject&&be.object===xe.viaClass)?.trust]:[]].filter(be=>typeof be=="number"),fe=ie(re,V);return{text:`no \u2014 every ${xe.viaClass} has at most 0 ${xe.object}${pe}.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let $=c.match(zC);if($){let I=X(l,$[1]),L=d.filter(C=>C.predicate===Md&&I.has(C.subject)).sort(p);return L.length?m(L):null}let x=u.match(UC);if(x){let[,I,L]=x,C=X(l,I.trim()),P=X(l,L.replace(/^an?\s+/i,"").trim()),N=d.filter(W=>W.predicate===Md&&P.has(W.subject)&&C.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${L.trim()}.`,replace:!0}}let S=u.match(BC);if(S){let[,I,L]=S,C=X(l,I.replace(/^an?\s+/i,"").trim()),P=X(l,L.trim()),N=d.filter(W=>W.predicate===Md&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${L.trim()}.`,replace:!0}}let E=u.match(WC);if(E){let[,I,L]=E,C=X(l,I.trim()),P=X(l,`${L.trim()} method`),N=d.filter(W=>W.predicate===dr&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:null}let R=u.match(GC);if(R){let I=X(l,R[1].trim()),L=d.filter(C=>C.predicate===dr&&I.has(C.subject)&&/ method$/.test(C.object)).sort(p);return L.length?m(L):null}let j=u.match(n$);if(j){let I=j[1].trim(),L=o$.test(I)||s$.test(I)?null:fs.test(I)?r||null:I,C=j[2].trim().toLowerCase();if(L){let P=X(l,L),N=new Map,W=null;if(o){let q=await bi(o,L);if(W=q,q)for(let ne of mc(o,q.id))for(let te of X(l,ne.label))!P.has(te)&&!N.has(te)&&N.set(te,ne.label),P.add(te)}let V=q=>q.predicate===Fd&&l(q.object)===C||q.predicate===`tmct:${C}`&&q.object==="true",ie=l(L).split(/\s+/).filter(q=>q.length>=4&&!b$.has(q)),ce=q=>ie.some(ne=>new Set(String(q.subject||"").split(/\s+/)).has(ne)),K=q=>P.has(q.subject)||ie.length&&ce(q),ee=d.filter(q=>K(q)&&V(q)).sort(p)[0];if(ee){let q=N.get(ee.subject);return{text:q?`yes \u2014 the code graph says ${W.label} inherits ${q}, and ${oe(ee)}`:`yes \u2014 ${oe(ee)}`,replace:!0}}{let{findIsaChain:q,SUBCLASS_PREDICATE:ne,TYPE_PREDICATE:te}=await Promise.resolve().then(()=>(Ht(),un)),xe=$o,Ae=d.filter(ue=>ue.predicate===ne&&xe(ue)),pe=d.filter(ue=>ue.predicate===te&&xe(ue)),re=Ae.map(ue=>[ue.subject,ue.object]),fe=pe.map(ue=>[ue.subject,ue.object]),be=ue=>(ue.predicate===ne?Ae:pe).find(H=>H.subject===ue.subject&&H.object===ue.object),Ie=X(l,C);for(let ue of P){let H=q(ue,Ie,fe,re,{maxHops:2});if(!H)continue;let se=H.map(be);if(se.every(Boolean))return{text:`yes \u2014 ${pc(se)}`,replace:!0}}}if(d.some(K)&&!n?.parsed)return{text:`I don't have a fact saying ${sC(L)} is ${C}.`,replace:!0};if(!n?.parsed&&!Gy.test(C))return r$(L,C)}}let A=Zd(c).match(BI);if(A&&!Bd.test(c)){let[,I,L,C]=A,P=L.toLowerCase();if(!Ud.test(P)&&!Gd.test(P)){let N=I.trim(),W=qI(await Wd(P),C),V=W.object.replace(/^an?\s+/i,"").trim();if(N&&V){let ie=W.predicate,ce=X(l,N),K=X(l,V),ee=[ie,Zo(ie)],q=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject)&&K.has(te.object)).sort(p)[0];if(q)return{text:`${Nh(q.predicate)?"no":"yes"} \u2014 ${oe(q)}`,replace:!0,generalVerbQuery:!0};let ne=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject));if(ne.length){let te=ne.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Dt({subject:N,predicate:ie,object:V})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let F=c.match(WI);if(F&&!Bd.test(c)){let[,I,L]=F,[C,P]=L.toLowerCase().split(/\s+/);if(!Ud.test(C)&&!Gd.test(C)){let N=I.trim();if(N){let W=await Wd(C);P&&/^mgx:[a-z]+$/.test(W)&&(W=`${W}-${P}`);let V=X(l,N),ie=[W,Zo(W)],ce=Ze(d.filter(K=>ie.includes(K.predicate)&&V.has(K.subject)),i);if(ce.length)return{...m(ce),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&&!Bd.test(c)){let[,I,L,C]=T,P=I.toLowerCase();if(!Ud.test(P)&&!Gd.test(P)&&!UI.test(P)){let N=await Wd(P);/^mgx:[a-z]+$/.test(N)&&(N=`${N}-${L.toLowerCase()}`);let W=X(l,C.replace(/^(?:an?|the)\s+/i,"").trim()),V=Ze(d.filter(ie=>ie.predicate===N&&W.has(ie.object)),i);if(V.length)return{...m(V),generalVerbQuery:!0}}}let M=c.match(PC);if(M){let I=X(l,M[1]),L=Ze(d.filter(ie=>I.has(ie.subject)||I.has(ie.object)),i);if(!L.length)return null;let C=I.has(L[0].subject)?L[0].subject:L[0].object,P=L.map(ie=>` ${oe(ie)}`),N=P.slice(0,je),W=P.slice(je),V=W.length?`
225
225
  \u2026and ${W.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
- `)}${V}`,replace:!0,...W.length?{pending:{items:W.map(ie=>ie.trim()),noun:"facts"}}:{}}}let z=n?.parsed?.shape==="meta"?n.parsed.object:null,Y=!1,ae=c.match(bC);if(ae)z=ae[1],Y=!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=X(l,z),D=Ze(f.filter(I=>Z.has(I.subject)),i),U=Ze(f.filter(I=>Z.has(I.object)),i),G=Y?D.length?D:U:U.length?U:D;return G.length?m(G):null}function Bd(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var Xd,pI,hn,lc,Ay,Yy,SH,Iy,fI,kH,jH,Xy,Jy,Qy,mI,Cy,_H,RH,TH,AH,IH,Qd,CH,hI,Ye,Cd,Od,bi,gI,$o,OH,LH,NH,PH,MH,FH,DH,zH,UH,BH,WH,GH,qH,VH,HH,Oy,yI,hc,$I,KH,YH,ep,Zy,XH,JH,QH,Pd,Md,vI,ZH,xI,EI,Dd,SI,jI,eK,e$,t$,_I,tK,nK,sK,oK,wr,rK,iK,aK,n$,cK,lK,RI,uK,dK,pK,vo,Ly,tp,Mt,AI,CI,OI,dc,FI,i$,fK,qd,a$,DI,zI,mc,UI,BI,Fs,ds,WI,GI,qI,Hd,Fy,VI,je,HI,KI,YI,XI,JI,QI,ZI,eC,tC,nC,sC,oC,rC,zy,l$,aC,cC,uC,dC,pC,fC,Wy,mC,gC,bC,wC,yC,Gy,$C,vC,xC,EC,SC,qy,us,Vy,Hy,Ky,kC,_C,RC,mK,f$,AC,hK,Wd,Yd,IC,gK,bK,m$,wK,yK,$K,vK,xK,gc,EK,SK,kK,jK,CC,_K,RK,cc=O(()=>{Ue();lw();zt();Oe();Ss();qa();Va();_r();ld();pw();qe();ua();dd();hw();Gn();Tn();zo();Gi();id();ad();Mo();ho();Zc();Ka();$w();vw();hd();xw();gd();Ew();Sw();Za();Ju();oc();ly();uy();Ms();ky();qi(void 0);Wi(Ga);Xd=new Set(["it","this","that","here"]),pI=e=>Xd.has(String(e||"").trim().toLowerCase()),hn={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"},lc=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Ay="look up a taught fact about a subject/verb/object";Yy={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}},SH=new Set(["stats","memory","focus",...Object.keys(Yy)]),Iy={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"]},fI=new Set(["have","has","holds","hold"]),kH=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(fs)].filter(e=>!fI.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),jH=new Set([...cw.map(e=>e.name),...Object.values(Yy).map(e=>e.tool)]),Xy=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"]),Jy=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"]),Qy=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"]),mI=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Cy=e=>e.replace(/(.)\1+/g,"$1");_H=Jd(Xy),RH=Jd(Jy),TH=Jd(Qy),AH=new RegExp(`^(?:${[...mI].map(Qe).join("|")})\\s+(.+)$`,"i"),IH=[...Xy,...Jy,...Qy,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],Qd="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",CH=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${Qd})\\s+than\\s+(.+)$`,"i"),hI=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${Qd})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Cd="mgx:ownedBy",Od="mgx:hasProperty",bi="rdfs:subClassOf",gI=new Set(["operator","teach","entailed"]),$o=e=>!!e.sourceTypes?.some(t=>gI.has(t));OH=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),LH=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),NH=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"),PH=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+(${Qd})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),MH=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"),FH=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");DH=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),zH=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"),UH=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),BH=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),WH=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),GH=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),qH=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),VH=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),HH=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),Oy=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,yI=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"]);hc="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",$I="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",KH=new RegExp(`^(.+?)\\s+(${$I})\\s+(.+)$`,"i"),YH=new RegExp(`^([\\w'-]+)\\s+${hc}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),ep="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",Zy="with|to|from|by|of|in|on|for|as|about|into",XH=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${hc}(${ep})\\s+(${Zy})\\s+(.+)$`,"i"),JH=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${ep})\\s+(${Zy})\\s+(.+)$`,"i"),QH=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Pd=/^(?:is|are|am|owns|maintains)$/i,Md=/\b(?:is|are|am|owns|maintains)\b/i,vI=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"),ZH=new RegExp(`^(?:${Hs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");xI=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${hc}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),EI=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${hc}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Dd=/^(?:be|own|maintain)$/i,SI=new RegExp(`^(${Ye})\\s+(.+)$`,"i");jI=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],eK=new RegExp(`^(?:${jI.join("|")})\\b\\s*,?\\s+`,"i"),e$=Object.freeze(["you","i","it","they","he","she","we"]),t$=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),_I=Object.freeze([...t$,...e$]),tK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${_I.join("|")})\\s+\\S+`,"i"),nK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${e$.join("|")})\\s+(?:is|are|am|was|were)|(${t$.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),sK=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),oK=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),wr="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",rK=new RegExp(`^what\\s+does\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),iK=new RegExp(`^what\\s+(.+?)${wr}\\s+does${wr}\\??$`,"i"),aK=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),n$="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",cK=new RegExp(`^who\\s+(?:is|was)\\s+${n$}$`,"i"),lK=new RegExp(`^what\\s+(?:did|has)\\s+${n$}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),RI="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",uK=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${RI}\\b`,"i"),dK=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");pK=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Zt,...bn,"owns","maintains"].filter(e=>e.length>=3)),vo={"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"},Ly=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"]),tp=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Mt=e=>`${e.subject} ${o$(e.predicate)} ${e.object}`;AI=Object.entries(vo).filter(([e])=>!tp.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);CI=/ \(source: [^)]*\)$/;OI=8;dc=null;FI=/^(?:every|each|all|any)\s+/i;i$=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"]),fK=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("|"))),qd=/^(?: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,DI=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,zI=/^(who|what)'?s\s+/i,mc=e=>String(e).replace(zI,(t,n)=>`${n} is `),UI=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;BI=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Fs=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,ds=new Set(["rdfs:subClassOf","rdf:type"]),WI=6,GI=/^why\s+(?=(?:is|are)\b)/i,qI=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Hd=new Set(["kind","sort","type","subclass","superclass"]),Fy=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,VI=/^(?: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,je=32,HI=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,KI=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,YI=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,XI=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,JI=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,QI=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,ZI=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,eC=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),tC=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,nC=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,sC=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,oC=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,rC=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;zy=e=>String(e||"").replace(/\s+/g," ").trim();l$="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",aC=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${l$})[?.!\\s]*$`,"i"),cC=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${l$})\\s+([\\w'-]+)[?.!\\s]*$`,"i");uC=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),dC=Object.entries(vo).filter(([e])=>!uC.has(e)&&!tp.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),pC=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),fC=Object.entries(vo).filter(([e])=>!pC.has(e)&&!tp.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=[s$(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),Wy=/^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,mC=new Set(["changed","change","changes","updated","modified","happened","occurred"]);gC=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,bC=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,wC=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,yC=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,Gy=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),$C=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,vC=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,xC=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,EC=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,SC=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,qy=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,us=/^(?:it|this|that)$/i,Vy=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,Hy=/^(?:you|i|they|he|she|we)\b/i,Ky=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${fc(e)} is ${t}".`,replace:!0}),kC=/^(?: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;_C=/inherit|supertype|subclass|extend|specializ/i,RC=8;mK=new RegExp(`\\b(?:${[...Xd].join("|")})\\b`,"i"),f$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,AC=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i;hK=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),Wd="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",Yd="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",IC=`(?:\\s+${Yd})?`,gK=[new RegExp(`^${Wd}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${IC}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Wd}architecture\\s+(?:${Yd}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Wd}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${Yd}(?:\\s+here)?\\??$`,"i")],bK={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:hn.contains,subclasses:hn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:hn.calls,callees:hn.calls,tests:hn.tests,untested:hn.tests,history:hn.touches,exports:hn.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)",wK=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"),yK=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"),$K=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"),vK=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"),xK=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"),gc="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",EK=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${gc}\\s*\\??$`,"i"),SK=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${gc}\\s*\\??$`,"i"),kK=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${gc}\\s*\\??$`,"i"),jK=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${gc}\\s*[.!]*$`,"i"),CC=Object.freeze([...Xd].filter(e=>e!=="here").concat("they")),_K=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${CC.join("|")})\\b(\\s+\\S.*)?$`,"i"),RK=Q(".tmct","memory","corpus-seed.json")});cc();qe();ws();Za();var bc={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 b$=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),xo=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),wc=e=>b$[e]||"other",LC=e=>Math.max(0,Math.min(1,e));function h$(e){let t=(e.sourceTypes||[]).map(n=>Ys[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Ys.entailed}function NC(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function g$(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function w$(e,t,n={},s={}){let o={...bc,...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(wc($.predicate)==="isa"){let x=g$($.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:$,family:"isa",reason:"uninformative-class",share:x});continue}}c.push($)}let u=c.filter($=>wc($.predicate)==="isa").map($=>$.object),d=Qa(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&&wc(R.predicate)==="isa");x+=E?h$(E):0}f.set($.label,x)}let m=null,h=-1;for(let[$,x]of[...f].sort((S,E)=>S[0].localeCompare(E[0])))x>h&&(h=x,m=$);let g=[];for(let $ of c){let x=wc($.predicate),S=h$($),E={provenance:S};if(NC($)&&(S-=o.entailedDepthPenalty,E.entailed=!0),x==="isa"){let j=.6+.4*(1-g$($.object,n));S*=j,E.informativeness=j;let A=p.get($.object);m&&A&&A!==m&&(S-=o.minoritySensePenalty,E.minoritySense=A)}S=LC(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=xo.filter($=>y.has($)).concat([...y.keys()].filter($=>!xo.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=xo.indexOf($.family),E=xo.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:m}}}Ki();nn();var PC=new Set(["isa","location","partOf","capableOf","usedFor"]),MC=new Set(["single","several","chained","group","closer"]),y$=(e,t)=>`${e}:${t}`;function np(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!PC.has(n.family)||typeof n.form!="string"||!MC.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=y$(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 Eo=e=>`${Uo(e)} ${e}`;function FC(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Eo(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Or(s.map(Eo))}`:n}function DC(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:Eo(o),A_TERM_CAP:Bo(Eo(o)),TERMS:Hi(o),TERMS_CAP:Bo(Hi(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Eo(a):"",OBJECT:i,A_OBJECT:i?Eo(i):"",OBJECTS_A:Or(r.map(Eo)),OBJECTS_PLURAL:Or(r.map(Hi)),OBJECTS_RAW:Or(r),CHAIN:FC(n&&n.length?n:r.slice(0,1))}}function zC(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 ps(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(y$(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=ra(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=zC(l[u],DC(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}Ki();var UC=xo.filter(e=>e!=="isa"&&e!=="other");function BC(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 $$(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 WC(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 GC(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 qC(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",m=ps(s,"isa",e,{term:n,form:p,chain:f});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=ps(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=ps(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 WC(a,t))for(let p of $$(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 m of c.slice(o.maxBodySentences))p.rows=p.rows.concat(m.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?ps(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):ps(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=GC(t,e,o.closerRootCount);if(u.length){let f=ps(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 VC(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 HC(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 v$(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...bc,...n.config||{}},a=BC(e?.selected||[]),l=[];for(let u of qC(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of UC){let d=a.get(u);if(!(!d||!d.length))for(let f of $$(d,i.maxObjectsPerBodySentence)){let p=ps(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}VC(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:HC(l,o),provenanceRows:[...c.values()]}}var KC=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function YC(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 XC=Object.freeze({facts:"show the facts",chains:"show the chains"});function JC(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:XC,facts:n.map(KC),factCount:n.length,chains:s}}function x$(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:YC(t?.provenanceRows||[]),detail:JC(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function E$(e,t,n={},s=new Map,o={}){let r=w$(e,t,n,o),i=v$(r,s,o);return x$(r,i,o)}Za();var S$=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||(S$.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 j$(e,t,n=6){let s=pi(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Ja(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function _$(e){let t=[],n=new Set;for(let s of e||[])!s||!S$.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}qe();cc();function QC(e,t,n,s,o={}){let r=np(s||[]);if(!r||r.size===0)return null;let i=t||[],a=k$(n||i),l=j$(a.subClassEdges,_$(i));return E$(e,i,a,r,{...o,chains:l})}function R$(e,t,n,s={}){let o=St(e||{individuals:[],objectProperties:[]}),r=X(J,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=QC(t,i,o,n,s);return ZC(a)}function ZC(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 eO="no session is open on this page yet \u2014 await tmct.open() first",T$=Symbol.for("tmct.surface.fallback");function A$({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[T$])return a;let l=null,c=()=>{if(!l)throw new Error(eO);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[T$]=r,i.tmct=u,u}function tO({payload:e=null}={}){let t=La();return e&&(t.payload=e),{memoryDir:t}}async function nO(e,t,n){let s=null;try{s=await u$(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await p$(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}}A$({open:tO,ask:nO,page:{normFactTerm:J,digestTermFromPayloadBrowser:R$},fallback:!0});})();
227
+ `)}${V}`,replace:!0,...W.length?{pending:{items:W.map(ie=>ie.trim()),noun:"facts"}}:{}}}let z=n?.parsed?.shape==="meta"?n.parsed.object:null,Y=!1,ae=c.match(MC);if(ae)z=ae[1],Y=!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=X(l,z),D=Ze(f.filter(I=>Z.has(I.subject)),i),U=Ze(f.filter(I=>Z.has(I.object)),i),G=Y?D.length?D:U:U.length?U:D;return G.length?m(G):null}function Hd(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var tp,CI,gn,dc,Uy,i$,sK,By,OI,oK,rK,a$,c$,l$,LI,Wy,iK,aK,cK,lK,uK,sp,dK,NI,Ye,Md,Fd,wi,PI,$o,pK,fK,mK,hK,gK,bK,wK,yK,$K,vK,xK,EK,SK,kK,jK,Gy,DI,bc,zI,_K,RK,rp,u$,TK,AK,IK,Ud,Bd,UI,CK,BI,WI,Gd,GI,VI,OK,d$,p$,HI,LK,NK,PK,MK,wr,FK,DK,zK,f$,UK,BK,KI,WK,GK,qK,vo,qy,ip,Dt,XI,QI,ZI,fc,oC,b$,VK,Xd,w$,rC,iC,gc,aC,cC,Fs,ms,lC,uC,dC,Qd,Yy,pC,je,fC,mC,hC,gC,bC,wC,yC,$C,vC,xC,EC,SC,kC,Jy,$$,_C,RC,AC,IC,CC,OC,e$,LC,PC,MC,FC,DC,t$,zC,UC,BC,WC,GC,n$,fs,s$,o$,r$,qC,HC,KC,HK,S$,XC,KK,Kd,ep,JC,YK,XK,k$,JK,QK,ZK,eY,tY,wc,nY,sY,oY,rY,QC,iY,aY,uc=O(()=>{Ue();hw();Bt();Oe();ks();Ka();Ya();_r();md();ww();qe();da();gd();vw();qn();yn();zo();qi();dd();pd();Mo();ho();tl();Ja();jw();_w();$d();Rw();vd();Tw();Aw();nc();nd();hi();wy();vy();Ms();Py();Vi(void 0);Gi(Ha);tp=new Set(["it","this","that","here"]),CI=e=>tp.has(String(e||"").trim().toLowerCase()),gn={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"},dc=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Uy="look up a taught fact about a subject/verb/object";i$={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}},sK=new Set(["stats","memory","focus",...Object.keys(i$)]),By={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"]},OI=new Set(["have","has","holds","hold"]),oK=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(gs)].filter(e=>!OI.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),rK=new Set([...mw.map(e=>e.name),...Object.values(i$).map(e=>e.tool)]),a$=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"]),c$=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"]),l$=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"]),LI=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Wy=e=>e.replace(/(.)\1+/g,"$1");iK=np(a$),aK=np(c$),cK=np(l$),lK=new RegExp(`^(?:${[...LI].map(Qe).join("|")})\\s+(.+)$`,"i"),uK=[...a$,...c$,...l$,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],sp="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",dK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${sp})\\s+than\\s+(.+)$`,"i"),NI=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${sp})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Md="mgx:ownedBy",Fd="mgx:hasProperty",wi="rdfs:subClassOf",PI=new Set(["operator","teach","entailed"]),$o=e=>!!e.sourceTypes?.some(t=>PI.has(t));pK=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),fK=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),mK=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"),hK=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+(${sp})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),gK=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"),bK=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");wK=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\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+to\\s+([a-z]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),$K=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),vK=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),xK=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),EK=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),SK=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),kK=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),jK=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),Gy=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,DI=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"]);bc="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",zI="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",_K=new RegExp(`^(.+?)\\s+(${zI})\\s+(.+)$`,"i"),RK=new RegExp(`^([\\w'-]+)\\s+${bc}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),rp="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",u$="with|to|from|by|of|in|on|for|as|about|into",TK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${bc}(${rp})\\s+(${u$})\\s+(.+)$`,"i"),AK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${rp})\\s+(${u$})\\s+(.+)$`,"i"),IK=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Ud=/^(?:is|are|am|owns|maintains)$/i,Bd=/\b(?:is|are|am|owns|maintains)\b/i,UI=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"),CK=new RegExp(`^(?:${Hs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");BI=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${bc}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),WI=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${bc}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Gd=/^(?:be|own|maintain)$/i,GI=new RegExp(`^(${Ye})\\s+(.+)$`,"i");VI=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],OK=new RegExp(`^(?:${VI.join("|")})\\b\\s*,?\\s+`,"i"),d$=Object.freeze(["you","i","it","they","he","she","we"]),p$=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),HI=Object.freeze([...p$,...d$]),LK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${HI.join("|")})\\s+\\S+`,"i"),NK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${d$.join("|")})\\s+(?:is|are|am|was|were)|(${p$.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),PK=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),MK=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),wr="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",FK=new RegExp(`^what\\s+does\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),DK=new RegExp(`^what\\s+(.+?)${wr}\\s+does${wr}\\??$`,"i"),zK=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),f$="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",UK=new RegExp(`^who\\s+(?:is|was)\\s+${f$}$`,"i"),BK=new RegExp(`^what\\s+(?:did|has)\\s+${f$}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),KI="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",WK=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${KI}\\b`,"i"),GK=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");qK=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Zt,...wn,"owns","maintains"].filter(e=>e.length>=3)),vo={"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"},qy=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"]),ip=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Dt=e=>`${e.subject} ${h$(e.predicate)} ${e.object}`;XI=Object.entries(vo).filter(([e])=>!ip.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);QI=/ \(source: [^)]*\)$/;ZI=8;fc=null;oC=/^(?:every|each|all|any)\s+/i;b$=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"]),VK=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("|"))),Xd=/^(?: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,w$=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,rC=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,iC=/^(who|what)'?s\s+/i,gc=e=>String(e).replace(iC,(t,n)=>`${n} is `),aC=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;cC=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Fs=/^(?: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"]),lC=6,uC=/^why\s+(?=(?:is|are)\b)/i,dC=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Qd=new Set(["kind","sort","type","subclass","superclass"]),Yy=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,pC=/^(?: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,je=32,fC=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,mC=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,hC=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,gC=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,bC=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,wC=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,yC=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,$C=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),vC=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,xC=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,EC=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,SC=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,kC=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;Jy=e=>String(e||"").replace(/\s+/g," ").trim();$$="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",_C=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${$$})[?.!\\s]*$`,"i"),RC=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${$$})\\s+([\\w'-]+)[?.!\\s]*$`,"i");AC=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),IC=Object.entries(vo).filter(([e])=>!AC.has(e)&&!ip.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),CC=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),OC=Object.entries(vo).filter(([e])=>!CC.has(e)&&!ip.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=[m$(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),e$=/^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,LC=new Set(["changed","change","changes","updated","modified","happened","occurred"]);PC=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,MC=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,FC=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,DC=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,t$=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),zC=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,UC=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,BC=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,WC=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,GC=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,n$=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,fs=/^(?:it|this|that)$/i,s$=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,o$=/^(?:you|i|they|he|she|we)\b/i,r$=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${hc(e)} is ${t}".`,replace:!0}),qC=/^(?: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;HC=/inherit|supertype|subclass|extend|specializ/i,KC=8;HK=new RegExp(`\\b(?:${[...tp].join("|")})\\b`,"i"),S$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,XC=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i;KK=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),Kd="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",ep="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",JC=`(?:\\s+${ep})?`,YK=[new RegExp(`^${Kd}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${JC}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Kd}architecture\\s+(?:${ep}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Kd}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${ep}(?:\\s+here)?\\??$`,"i")],XK={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:gn.contains,subclasses:gn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:gn.calls,callees:gn.calls,tests:gn.tests,untested:gn.tests,history:gn.touches,exports:gn.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"},k$="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",JK=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+${k$}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),QK=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${k$}\\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"),ZK=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"),eY=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"),tY=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"),wc="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",nY=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${wc}\\s*\\??$`,"i"),sY=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${wc}\\s*\\??$`,"i"),oY=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${wc}\\s*\\??$`,"i"),rY=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${wc}\\s*[.!]*$`,"i"),QC=Object.freeze([...tp].filter(e=>e!=="here").concat("they")),iY=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${QC.join("|")})\\b(\\s+\\S.*)?$`,"i"),aY=Q(".tmct","memory","corpus-seed.json")});uc();qe();Hn();nc();var yc={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 R$=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),xo=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),$c=e=>R$[e]||"other",eO=e=>Math.max(0,Math.min(1,e));function j$(e){let t=(e.sourceTypes||[]).map(n=>Ys[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Ys.entailed}function tO(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function _$(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function T$(e,t,n={},s={}){let o={...yc,...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($c($.predicate)==="isa"){let x=_$($.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:$,family:"isa",reason:"uninformative-class",share:x});continue}}c.push($)}let u=c.filter($=>$c($.predicate)==="isa").map($=>$.object),d=tc(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&&$c(R.predicate)==="isa");x+=E?j$(E):0}f.set($.label,x)}let m=null,h=-1;for(let[$,x]of[...f].sort((S,E)=>S[0].localeCompare(E[0])))x>h&&(h=x,m=$);let g=[];for(let $ of c){let x=$c($.predicate),S=j$($),E={provenance:S};if(tO($)&&(S-=o.entailedDepthPenalty,E.entailed=!0),x==="isa"){let j=.6+.4*(1-_$($.object,n));S*=j,E.informativeness=j;let A=p.get($.object);m&&A&&A!==m&&(S-=o.minoritySensePenalty,E.minoritySense=A)}S=eO(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=xo.filter($=>y.has($)).concat([...y.keys()].filter($=>!xo.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=xo.indexOf($.family),E=xo.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:m}}}Yi();nn();var nO=new Set(["isa","location","partOf","capableOf","usedFor"]),sO=new Set(["single","several","chained","group","closer"]),A$=(e,t)=>`${e}:${t}`;function ap(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!nO.has(n.family)||typeof n.form!="string"||!sO.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=A$(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 Eo=e=>`${Uo(e)} ${e}`;function oO(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Eo(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Or(s.map(Eo))}`:n}function rO(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:Eo(o),A_TERM_CAP:Bo(Eo(o)),TERMS:Ki(o),TERMS_CAP:Bo(Ki(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Eo(a):"",OBJECT:i,A_OBJECT:i?Eo(i):"",OBJECTS_A:Or(r.map(Eo)),OBJECTS_PLURAL:Or(r.map(Ki)),OBJECTS_RAW:Or(r),CHAIN:oO(n&&n.length?n:r.slice(0,1))}}function iO(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 hs(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(A$(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=ia(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=iO(l[u],rO(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}Yi();var aO=xo.filter(e=>e!=="isa"&&e!=="other");function cO(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 I$(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 lO(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 uO(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 dO(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",m=hs(s,"isa",e,{term:n,form:p,chain:f});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=hs(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=hs(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 lO(a,t))for(let p of I$(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 m of c.slice(o.maxBodySentences))p.rows=p.rows.concat(m.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?hs(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):hs(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=uO(t,e,o.closerRootCount);if(u.length){let f=hs(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 pO(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 fO(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 C$(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...yc,...n.config||{}},a=cO(e?.selected||[]),l=[];for(let u of dO(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of aO){let d=a.get(u);if(!(!d||!d.length))for(let f of I$(d,i.maxObjectsPerBodySentence)){let p=hs(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}pO(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:fO(l,o),provenanceRows:[...c.values()]}}var mO=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function hO(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 gO=Object.freeze({facts:"show the facts",chains:"show the chains"});function bO(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:gO,facts:n.map(mO),factCount:n.length,chains:s}}function O$(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:hO(t?.provenanceRows||[]),detail:bO(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function L$(e,t,n={},s=new Map,o={}){let r=T$(e,t,n,o),i=C$(r,s,o);return O$(r,i,o)}nc();var N$=new Set(["rdfs:subClassOf","rdf:type"]);function P$(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(N$.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 M$(e,t,n=6){let s=pi(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=ec(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function F$(e){let t=[],n=new Set;for(let s of e||[])!s||!N$.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}qe();uc();function wO(e,t,n,s,o={}){let r=ap(s||[]);if(!r||r.size===0)return null;let i=t||[],a=P$(n||i),l=M$(a.subClassEdges,F$(i));return L$(e,i,a,r,{...o,chains:l})}function D$(e,t,n,s={}){let o=vt(e||{individuals:[],objectProperties:[]}),r=X(J,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=wO(t,i,o,n,s);return yO(a)}function yO(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 $O="no session is open on this page yet \u2014 await tmct.open() first",z$=Symbol.for("tmct.surface.fallback");function U$({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[z$])return a;let l=null,c=()=>{if(!l)throw new Error($O);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[z$]=r,i.tmct=u,u}function vO({payload:e=null}={}){let t=Ma();return e&&(t.payload=e),{memoryDir:t}}async function xO(e,t,n){let s=null;try{s=await v$(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await E$(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}}U$({open:vO,ask:xO,page:{normFactTerm:J,digestTermFromPayloadBrowser:D$},fallback:!0});})();